Faultless
#01
11 февраля 1996 |
|
Пользовталеям - структура памяти Спектрума и Работа с Magic файлами.
В ЭТОМ РАЗДЕЛЕ ПОСЛЕДОВАТЕЛЬНО ДАНА ИНФОРМАЦИЯ О ТВОЕМ КОМПЬЮ- ТЕРЕ,НЕОБХОДИМАЯ ПРИ ТАКОГО РОДА РАБОТЕ,ТАКАЯ,КАК КАРТА ПАМЯТИ, СПОСОБ ЗАПИСИ В ПАМЯТЬ ОТДЕЛЬНЫХ СТРОК В basic,ОТДЕЛЬНЫЕ СИС- ТЕМНЫЕ ПЕРЕМЕННЫЕ И Т.Д. ЗАТЕМ МЫ РАССМОТРИМ СЧИТЫВАНИЕ ПРОГ- РАММ И БЛОКОВ ДАННЫХ 'БЕЗОПАСНЫМ СПОСОБОМ',Т.Е. ТАК,ЧТОБЫ ОНИ НЕ СТАРТОВАЛИ АВТОМАТИЧЕСКИ И МОЖНО БЫЛО БЫ ПРОСМОТРЕТЬ ИХ СО- ДЕРЖИМОЕ;В КОНЦЕ МЫ ЗАЙМЕМСЯ ОБЕЗВРЕЖИВАНИЕМ ПРЕДОХРАНИТЕЛЕЙ, НАПИСАННЫХ НА ВНУТРЕННЕМ ЯЗЫКЕ.ПОСТАРАЕМСЯ ТАКЖЕ ПРОИЛЛЮCТРИ- РОВАТЬ ВСЕ ЭТО КОНКРЕТНЫМИ ПРИМЕРАМИ НА ИЗВЕСТНЫХ ПРОГРАММАХ. НАДЕЮСЬ,ЧТО ВАШИ УСИЛИЯ НЕ ПРОПАДУТ ЗРЯ И ВЫ ТОЖЕ НАУЧИТЕСЬ ДОБИРАТЬСЯ БЕЗ ПРЕПЯТСТВИЙ К ЛЮБОЙ ПРОГРАММЕ. ДОРОГУ ОСИЛИТ ИДУЩИЙ !!! 1.РАСПРЕДЕЛЕНИЕ ПАМЯТИ: rom...................0 display file..........16384 attr..................22528 БУФЕР ПРИНТЕРА........23296 СИСТЕМНЫЕ ПЕРЕМЕННЫЕ..23552 КАРТА МИКРОДРАЙВЕРА...23734 ИНФОРМАЦИЯ О КАНАЛАХ..chans (23631);(23734) {80...................prog (23635);(23755) ОБЛАСТЬ basic.........ramtop (23730);(65368) {3Е...................udg (23675);(63368) ГРАФИКА ОПРЕДЕЛЯЕМАЯ ПОЛЬЗОВАТЕЛЕМ..p-ramp (23732);(65535) 2.ЗАГРУЗКА ПРОГРАММЫ НА assembler'Е. ЭТА ПРОГРАМКА ПРЕДНАЗНАЧЕНА ДЛЯ ТЕХ,У КОГО К speccy,КРОМЕ МАГ- НИТОФОНА,ay-3-8910(12) И 128k НИЧЕГО НЕ ПОДКЛЮЧЕНО.А У КОГО ПОДКЛЮЧЕН ДИСКОВЫЙ ИНТЕРФЕЙС,ТОТ МОЖЕТ СЮДА НЕ ЗАГЛЯДЫВАТЬ.НО ЕСЛИ И ЗАГЛЯНЕШЬ,ТО НИЧЕГО СТРАШНОГО НЕ ПРОИЗОЙДЕТ,КРОМЕ,КАК У ТЕБЯ СГОРИТ cpu z-80 (ШУТКА!).ХОТЯ ЗАГЛЯНУТЬ СЮДА ЖЕЛАТЕЛЬНО ВСЕМ (УЗНАТЬ БОЛЬШЕ ОБ speccy НИКОГДА НЕ ПОЗДНО-ЭТО ЖЕ ДЛЯ ТВОЕГО БЛАГА,ЗНАТЬ БУДЕШЬ БОЛЬШЕ).ЧТО-ТО МЫ ЗАГОВОРИЛИСЬ,ИТАК: load/merge org 60000 ld bc,34 rst 48 push de pop ix ld (iy+58),1 ld (ix+1),255 call 1821 ld hl,(23618) ld (23621),hl rst 8 defb 255 ЭТА ПРОЦЕДУРКА ПОЗВОЛЯЕТ СЧИТЫВАТЬ БЕЙСИКОВСКУЮ ПРОГРАММУ C ЗА- HECEHUEM ДАННЫХ В de И ix ЯВЛЯЕТСЯ БОЛЕЕ БЫСТРОДЕЙСТВУЮЩЕЙ! А ВОТ ЭТА ПРОГРАММА ПОЗВОЛЯЕТ ЗАГРУЖАТЬ БЛОКИ КОДОВ C ИСПОЛЬЗО- ВАНИЕМ ДОПОЛНИТЕЛЬНОЙ ПАМЯТИ.ПРИ ВЫПОЛНЕНИЕ ОНА САМА СЕБЯ ПЕРЕ- НОСИТ ИЗ АДРЕСА УКАЗОННОГО В org'Е ПОД ПОДХОДЯЩИЙ АДРЕС;ДОСТИ- ГАЕТСЯ ЭТОТ ЭФФЕКТ БЛАГОДОРЯ НАЛИЧИЮ jp 4633 И ПОТОМ ОНА ЗАПИ- CЫВАЕТ БЛОК КОДОВ НЕ ВЫХОДЯ В basic (ЕСЛИ basic ЗАПОРОЛСЯ ПРИ ИСПОЛЬЗОВАНИЕ СИСТЕМНЫХ ПЕРЕМЕННЫХ). org 65400 ld ix,0 ld de,dl ld a,255 scf inc d ex af,af' dec d di ld a,15 out ({fe),a ld a,0 jr c,ok ld a,7 ok out ({fe),a error ld a,{bf in a,({fe) rra jr c,error ld ix,0 ld de,dl-16384 ld a,255 call 1218 ld hl,65399 jp 4633 РАБОТОСПОСОБНОСТЬ ЭТОЙ ПРОГРАММЫ ПРОВЕРЕНА НА ЛИЧНОМ ОПЫТЕ. МОЖЕТЕ УБЕДИТЬСЯ САМИ. ---------------------------------------------------------------- ЧТОБЫ ПОНЯТЬ ПРОЦЕСС СОЗДАНИЯ ФАЙЛА ТИПА magic,НЕОБХОДИМО ЗНАТЬ АССЕМБЛЕР И РАБОТУ z-80 СО СТЕКОМ.ПОСМОТРИМ,КАК tr-dos РЕАГИРУЕТ НА НАЖАТИЕ magic.В ТОТ МОМЕНТ,КОГДА ПРОЦЕССОР ПЫТАЕТСЯ СЧИТАТЬ ИЗ ОЗУ КОД ОЧЕРЕДНОЙ КОМАНДЫ,ПРОИСХОДИТ АППАРАТНОЕ ВКЛЮЧЕНИЕ ПОДСТАВНОГО ПЗУ tr-dos И ОДНОВРЕМЕННО ВОЗНИКАЕТ ЗАПРОС HEMACKU- РУЕМОГО ПРЕРЫВАНИЯ nmi.ПРИ ТАКОМ ЗАПРОСЕ z-80 СНАЧАЛА ЗАПИСЫВАЕТ В СТЕК ТЕКУЩЕЕ ЗНАЧЕНИЕ СЧЕТЧИКА КОМАНД (УКАЗАТЕЛЬ НА КОД КОМАН- ДЫ,КОТОРАЯ ВЫПОЛНЯЛАСЬ БЫ ПРИ ОТСУТСТВИИ ПРЕРЫВАНИЙ) И ПЕРЕХОДИ- ЛА К ВЫПОЛНЕНИЮ ПРОЦЕССА ОБСЛУЖИВАНИЯ НЕМАСКИРУЕМОГО ПРЕРЫВАНИЯ, НАЧАЛЬНАЯ ЧАСТЬ КОТОРОЙ ИМЕЕТ СЛЕДУЮЩИЙ ВИД: {0066 jp {2a56 {2a56 push af push bc push de push ix push iy exx push bc push de push hl ex af,af' push af ld a,i push af ld a,r push af ld hl,0 add hl,sp push hl ........ К ЭТОМУ МОМЕНТУ ЗНАЧЕНИЯ ВСЕХ РЕГИСТРОВ НА МОМЕНТ ПРЕРЫВАНИЯ СОХРАНЯЮТСЯ В СТЕКЕ,ЧТО ПОЗВОЛЯЕТ В ДАЛЬНЕЙШЕМ ВОССТАНАВЛИВАТЬ ИХ ДЛЯ ВОЗОБНОВЛЕНИЯ РАБОТЫ C МЕСТА ПРЕРЫВАНИЯ.ИНТЕРЕСТНО,ЧТО ДАЖЕ ЗНАЧЕНИЕ УКАЗАТЕЛЯ СТЕКА ПОМЕЩАЕТСЯ В sp,НО САМОЕ ВАЖНОЕ- ЧТО ЭТО ЖЕ ЧИСЛО БУДЕТ ЗАПИСАНО В ЗАГОЛОВКЕ magic (В ПОЛЕ 'НА- ЧАЛЬНЫЙ АДРЕС').ЭТОЙ ИНФОРМАЦИИ ДОСТАТОЧНО ДЛЯ ОПРЕДЕЛЕНИЯ СОС- ТОЯНИЯ z-80 НА МОМЕНТ НАЖАТИЯ magic.ПРИ ЭТОМ НЕЛЬЗЯ НЕ ОТМЕТИТЬ, ЧТО ОБЛАСТЬ,'ЗАТИРАЕМАЯ' СТЕКОМ ПРИ РАБОТЕ СИСТЕМЫ ДОВОЛЬНО ВЕ- ЛИКА И ПРИ МАЛОМ ЗАПАСЕ,ОТВЕДЕННЫМ ПРОГРАММОЙ ПОД СТЕК,ЭТО ПРИ- ВОДИТ К НЕВОЗМОЖНОСТИ СКОПИРОВАТЬ ЕЕ ТАКИМ ОБРАЗОМ.КРОМЕ ТОГО tr-dos ПРИ СОЗДАНИИ magic ПОРТИТ НЕСКОЛЬКО БАЙТОВ СИСТЕМНЫХ ПЕ- РЕМЕННЫХ basic'А.МАЛО КТО ЗНАЕТ ОПИСЫВАЕМЫЙ В ФИРМЕННЫХ РУКО- ВОДCТВАХ МЕТОД ВЫЗОВА КОМАНД tr-dos ИЗ ПРОГРАММЫ В КОДАХ.НЕС- МОТРЯ НА ЕГО ОГРАНИЧЕНИЯ,СТОИТ РАССМОТРЕТЬ ЕГО ПОПОДРОБНЕЕ.В ПАМЯТИ СОЗДАЕТСЯ ТЕКСТОВАЯ СТРОКА,ЭКВ.КОМАНДЕ tr-dos,НАПРИМЕР ТАКАЯ: string defb 234 ;rem defb ':' defb 248 ;save defm '...' ;ИМЯ ФАЙЛА defb 13 ;enter ЧТОБЫ ЗАСТАВИТЬ tr-dos ВЫПОЛНИТЬ ЭТУ КОМАНДУ,НЕОБХОДИМО МО- ДИФИЦИРОВАТЬ СИСТЕМНУЮ ПЕРЕМЕННУЮ ch-add (2 БАЙТА,РАЗМЕЩЕН- НЫХ ПО АДРЕСУ 23645,СОДЕРЖАТ АДРЕСС СЛЕДУЮЩЕГО ИНТЕРПРЕТИ- РУЕМОГО СИМВОЛА) ВЫЗВАТЬ ПРОЦЕДУРУ ОБРАБОТКИ КОМАНД И ЗАТЕМ ВОССТАНОВИТЬ ИСХОДНОЕ ЗНАЧЕНИЕ ch-add.АДРЕСС ПРОЦЕДУРЫ tr-dos МЫ ОБОЗНАЧИМ КАК addrtrdos,ПОСКОЛЬКУ ЕГО ЗНАЧЕНИЕ,ПРИВЕДЕННОЕ В ОПИСАНИИ tr-dos НУЖДАЕТСЯ В ОТДЕЛЬНОМ КОММЕНТАРИИ. ld hl,(chadd) ld (temp),hl ld hl,string ld (chadd),hl call addtrdos ld hl,(temp) ld (chadd),hl ret temp defw 0 chadd equ 23645 addtrdos equ 15619 ЕСЛИ ВАМ ДОСТАЛОСЬ ФИРМЕННОЕ ОПИСАНИЕ tr-dos,В НЕМ МОЖНО НАЙТИ ДРУГОЕ ЗНАЧЕНИЕ addtrdos-15363 ({3c03),ТО ЕСТЬ АДРЕСС,НЕ ВХОДЯ- ЩИЙ В ОБЛАСТЬ ВКЛЮЧЕНИЯ ПОДCТАНОГО ПЗУ tr-dos !!! ВИДИМО,В ФИР- МЕННОМ КОНТРОЛЛЕРЕ ОБЛАСТЬ ЗАПИСИ НАЧИНАЕТСЯ C АДРЕСА {3c00. ВО ВСЕХ РАСПРОСТРАНЕННЫХ ВЕРСИЯХ tr-dos АНАЛОГИЧНАЯ ОБЛАСТЬ ПОД- CТАВНОГО ПЗУ ВЫГЛЯДИТ СЛЕДУЮЩИМ ОБРАЗОМ: {3c00 rst 56 jr {3c06 {3c03 rst 56 jr {3c09 {3c08 jp {3d00 {3c09 jp {3d03 ТАКИМ ОБРАЗОМ СНАЧАЛА ИСПОЛЬЗУЕТСЯ ПРОЦЕДУРА ПО АДРЕСУ 56 {0038 ei ret ВО ВСЕХ БОЛЕЕ ЛИ ИМЕНИЕ СТАНДАРТНЫХ ПРОЩИВКАХ ПЗУ tr-dos МОЖ- НО НАЙТИ СЛЕДУЮЩУЮ ГРУППУ КОДОВ. {3d2e nop {3d2f nop {3d30 ret ОНА ПОЗВОЛЯЕТ ОСУЩЕСТВИТЬ ВХОД В tr-dos ПО ЛЮБОМУ АДРЕСУ,ПРЕД- ВАРИТЕЛЬНО ПОМЕЩЕННЫМ В sp.КАК ВИДНО,АДРЕСС ЭТОЙ ГРУППЫ КОДОВ ГАРАНТИРУЕТ ВКЛЮЧЕНИЕ ПОДСТАВНОГО ПЗУ.КРОМЕ ТОГО,СУЩЕСТВЕННА ЕЩЕ ОДНА ТОЧКА ВХОДА В tr-dos ДЛЯ ВЫЗОВА ШИРОКОГО НАБОРА ПОЛЬЗОВА- ТЕЛЬCКИХ ФУНКЦИЙ,О КОТОРЫХ БУДЕТ РАССКАЗАНО В СЛЕДУЮЩИХ НОМЕРАХ! $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ p.p.s ВОРОЖКИН АЛЕКСАНДР,БАЖЕНОВ СТАС
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября