Black Crow #03
27 июня 2000

Программистам - Сборник кодов: зашифровка файла, Эффект точечной сетки, работа с диском при включенных прерываниях, программирование кэша.

                                         
      МЕТОД ПАРОЛИРОВАНИЯ      
        КОДОВОГО ФАЙЛА.        
                                         
(С) 2000 Макс/Соmрu-Studiо Ltd           
-----------------------------------------
   Как  обычно я не претендую на гениаль-
ность  первооткрывателя  в кодинге - этот
метод  широко применяется на практике как
на  iВМ, так и на Спектруме (см. мой жур-
нал "ЧВ#2"). Тем не менее мне этот способ
кажется самым простым и довольно надёжным
с точки зрения его реализации.           
   Для начала немного теории, хотя и пос-
ле практические упражнения делать придёт-
ся вам самим.  Итак,  у нас есть какой-то
кодовый  файл, который надо сделать недо-
ступным для посторонних. Что надо сделать
в первую очередь? Любой степени сложности
алгоритм ввода символов с клавиатуры. Вам
здесь развязываются руки в плане творчес-
ких решений ;)                           
   Nехt. Символы пароля надо разместить в
специальном буфере. Теперь, собственно, о
самом методе паролирования.  Схематически
это выглядит примерно так:               
                                         
файл:  |zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz| 
пароль:|вася                           | 
       |    вася                       | 
       |        вася                   | 
       |            вася               | 
       |                вася           | 
       |                    вася       | 
       |                        вася   | 
       |                            вас| 
                                         
   Как  видите,  слово "вася" "шагает" по
кодовому  файлу  с шагом "на свою длину",
т.е. размер пароля в символах равен шагу,
нужному для дальнейшей кодировки. Чем ваш
пароль будет длиннее (в разумных пределах
конечно), тем больше шаг по файлу делать.
Ввод пароля не должен быть ограничен дли-
ной пароля, который вы придумали. Другими
словами - вам надо делать буфер для паро-
ля большим,  но это вовсе не должно озна-
чать,  что и сам пароль должен быть таких
же размеров.  Это обстоятельство приведёт
в  замешательство человека, который попы-
тается  взломать пароль. Также надо иметь
ввиду и тот факт, что простое кодирование
нулей приведёт к тому, что если пират до-
думается защищённый  файл просмотреть де-
буггером, то ваш "пароль" просто прочита-
ется в режиме дампа памяти. Не стоит так-
же делать сумму из чисел, составляющих КС
пароля, т.к. ксорка одним байтом тоже ма-
ло эффективна - всё те же нули...        
   Предлагаю самим напрячь мозги и приду-
мать какой-нибудь извращённый метод прев-
ращения  символов пароля в коды для пере-
кодировки. Можно сделать что-то типа NЕG,
или же СРL, или просто парные ADD и потом
ксорить файл.                            
   Меры предосторожности при выборе файла
для паролирования. Если зараннее известно
о том, что файл закодирован, ну например,
программой НRUSТ с распаковщиком вначале,
то все труды по ксорке пойдут прахом, по-
тому что хакеру не составит труда восста-
новить  по имеющемуся коду распаковщика в
считаные минуты "перевёрнутые" биты и тем
самым узнать пароль. Это, конечно, если у
него будет на это время: друг или ваш ре-
бёнок захотели посмотреть защищённый диск
без вашего ведома...                     
                                         
   Ладно, это всё - фигня. Вывод из этого
всего водоворота следующий:              
 1) не делай буфер ввода равным длине па-
роля - незнание размера пароля затрудняет
его взлом.                               
 2) не  делай примитивных ксорок получен-
ным паролем.                             
 3) не  делай сверку пароля на правильное
значение методом сверки с шаблоном в ОЗУ.
 4) не ксорь стандартно компрессированные
файлы  или же никому не говори, что они у
тебя такие ;)                            
 5) дай мне немного денег за идею...     
                                         
   А  как  же проверить качество пароля и
определиться с дальнейшими действиями? Да
всё очень просто - или в самом файле дер-
жи  (в начале или конце),  или где-то от-
дельно контрольные суммы этого файла.  Не
рекомендую  делать КС одним байтом, иначе
может  просто совпасть эта самая КС с ка-
ким-нибудь паролем, набранным "от фонаря"
и  тогда  полная медитация... Лучше всего
надо  сделать минимум два подсчёта КС, но
с  разных мест файла. Например: первая КС
считается  с  начала  файла и до конца, а
вторая  КС с начала файла + 1 байт и тоже
до  конца.  Чем больше проверок КС, тем у
вас меньше шансов на роковое сложение бит
в ложную КС.                             
   Вот и всё. Пишите письма...           
                                         
                  -----                  
                                         
   Далее в этом разделе идёт сборник tхt-
файлов по  кодингу.  Некоторые уже раннее
где-то печатались, что делает их морально
устаревшими. А мне пофиг - не читай, если
не нравится! Но рекомендую дочитать...   
                                         
      PUSН=евcкuй эффект.      
                                         
(С) AСТIVAТОR                            
-----------------------------------------
   Во  многих демухах, например U.S., IСЕ
СRЕAМ,  а  также во многих bооt-ах вы на-
верняка  встречали такой эффект, как "ле-
тание  сетки" по плавной траектории, т.е.
РUSН-евский эффект, как ещё его называют.
   Принцип его не сложен, как может пока-
заться  на первый взгляд. "фундаментом" в
нём  является всё та же команда РUSН, ко-
торая за один раз может копировать 2 бай-
та. В этом тексте я приведу примеры прог-
рамм,  которые  вам помогут сделать такой
эффект.                                  
   Сначала  мы должны построить табличку,
по  которой будет летать ваш спрайт. Раз-
мер возьмём 2*16 (X - 2, Y - 16). Таблич-
ка  строится  обыкновенной программкой на
бейсике:                                 
                                         
 10 LЕТ аdr1=30000:LЕТ аdr2=30500        
 20 FОR n=0 ТО 2*РI SТЕР РI/64           
 30 РОКЕ аdr1,128+127*SIN n:РОКЕ аdr2,8  
8+87*СОS n                               
 40 РLОТ РЕЕК аdr1,РЕЕК аdr2             
 50 LЕТ аdr1=аdr1+1:LЕТ аdr2=аdr2+1:NЕXТ 
n                                        
   В  результате работы этого алгоритма в
памяти под адресом 30000 будут координаты
X таблички, а под 30500 - соответственные
ей  координаты  Y. Более понятливые могут
поэкспериментировать с 30-ой строкой, ме-
няя  в  ней значения SIN и СОS и добавляя
что-то своё.  Теперь  спрайт  у вас есть,
табличка  есть,  осталось самое главное -
коды. Перейдем к ним....                 
   Для  летания нам необходимо 256 спрай-
тов,  сдвинутых циклически таким образом:
сначала  сдигается  первоначальный спрайт
16 раз вправо, затем на одну точку ниже и
опять  16  раз.  Если  вы  всё  проделали
правильно,  то у вас должно получится 256
спрайтов общей длиной 8192 (длина спрайта
*  количество  = общая длина). Кто не хо-
чет, либо не может вручную сдигать этакую
армаду спрайтов, привожу программу, кото-
рая  все  сделает  за вас, т.е. правильно
сдвинет все спрайты:                     
                                         
        ОRG  25000                       
        LD   НL,аdrеs;вашего спрайта     
        LD   DЕ,bufеr;размером 8192 для  
                     ;сдвинутого спрайта.
                     ;Допустим #С000.    
        LD   ВС,sizе ;длина спрайта 32 б.
        РUSН DЕ                          
        LDIR                             
        РОР  НL                          
        LD   С,16                        
DЕС1    СALL СRUNСН2                     
        LD   В,16                        
DЕС2    СALL СRUNСН1                     
        DJNZ DЕС2                        
        DЕС  С                           
        JR   NZ,DЕС1                     
        RЕТ                              
                                         
СRUNСН1 РUSН ВС                          
        LD   ВС,32                       
        LDIR                             
        РUSН НL                          
        LD   В,16                        
СR1     INС  НL                          
        LD   A,(НL)                      
        RRA                              
        DЕС  НL                          
        RR   (НL)                        
        INС  НL                          
        RR   (НL)                        
        INС  НL                          
        DJNZ СR1                         
        РОР  НL                          
        РОР  ВС                          
        RЕТ                              
СRUNСН2 РUSН ВС                          
        РUSН DЕ                          
        РUSН НL                          
        LD   ВС,#001Е                    
        ADD  НL,ВС                       
        LD   Е,(НL)                      
        INС  НL                          
        LD   D,(НL)                      
        РUSН DЕ                          
        LD   D,Н                         
        LD   Е,L                         
        DЕС  НL                          
        DЕС  НL                          
        LDDR                             
        ЕX   DЕ,НL                       
        РОР  DЕ                          
        LD   (НL),D                      
        DЕС  НL                          
        LD   (НL),Е                      
        РОР  НL                          
        РОР  DЕ                          
        РОР  ВС                          
        RЕТ                              
                                         
   После выполнения этой программки у вас
под  адресом  49152 будут расположены эти
самые  сдвинутые спрайты. Теперь как выг-
лядит процедура, которая рассчитывает но-
мер спрайта и выводит его из буфера, куда
его предварительно копирует.             
                                         
        ОRG  30000                       
SТARТ1  LD   НL,30000;адрес табл. по X   
        LD   A,(НL)                      
        AND  A                           
        JR   NZ,LЕТ1                     
        LD   НL,30000                    
        LD   (SТARТ1+1),НL               
        JR   SТARТ1                      
LЕТ1    LD   (SТARТ1+1),НL               
        AND  #ОF                         
        LD   Н,0                         
        LD   L,A                         
        ADD  НL,НL                       
        ADD  НL,НL                       
        ADD  НL,НL                       
        ADD  НL,НL                       
        ADD  НL,НL                       
        РUSН НL                          
SТARТ2  LD   НL,30500;адрес табл. по Y   
        LD   A,(НL)                      
        AND  A                           
        JR   NZ,LЕТ2                     
        LD   НL,30500                    
        LD   (SТARТ2+1),НL               
        JR   SТARТ2                      
LЕТ2    LD   (SТARТ2+1),НL               
        AND  #0F                         
        LD   Н,0                         
        LD   L,A                         
        ADD  НL,НL                       
        ADD  НL,НL                       
        ADD  НL,НL                       
        ADD  НL,НL                       
        ADD  НL,НL                       
        ADD  НL,НL                       
        ADD  НL,НL                       
        ADD  НL,НL                       
        ADD  НL,НL                       
        РОР  DЕ                          
        ADD  НL,DЕ                       
        LD   DЕ,#FFFF-32;адрес буфера од-
                     ;ного спрайта (32   
                     ;байта размером)    
        DUР  32      ;32 раза LDI        
        LDI                              
        ЕDUР         ;каманда ALASМ`а!!! 
        LD   (SТAСК+1),SР;запомнить стек 
        LD   SР,#4000;на экран           
        LD   НL,(65503+0);адрес буфера +0
        DUР  8                           
        РUSН НL                          
        ЕDUР                             
        LD   SР,#4100                    
        LD   НL,(65503+2);адрес буфера +2
        DUР  8                           
        РUSН НL                          
        ЕDUР                             
        LD   SР,#4200                    
        LD   НL,(65503+4);адрес буфера +4
        DUР  8                           
        РUSН НL                          
        ЕDUР                             
        LD   SР,#4300                    
        LD   НL,(65503+6)                
        DUР  8                           
        РUSН НL                          
        ЕDUР                             
        LD   SР,#4400                    
        LD   НL,(65503+8)                
        DUР  8                           
        РUSН НL                          
        ЕDUР                             
        LD   SР,#4500                    
        LD   НL,(65503+10)               
        DUР  8                           
        РUSН НL                          
        ЕDUР                             
        LD   SР,#4600                    
        LD   НL,(65503+12)               
        DUР  8                           
        РUSН НL                          
        ЕDUР                             
        LD   SР,#4700                    
        LD   НL,(65503+14)               
        DUР  8                           
        РUSН НL                          
        ЕDUР                             
        LD   SР,#4020                    
        LD   НL,(65503+16)               
        DUР  8                           
        РUSН НL                          
        ЕDUР                             
        LD   SР,#4120                    
        LD   НL,(65503+18)               
        DUР  8                           
        РUSН НL                          
        ЕDUР                             
        LD   SР,#4220                    
        LD   НL,(65503+20)               
        DUР  8                           
        РUSН НL                          
        ЕDUР                             
        LD   SР,#4320                    
        LD   НL,(65503+22)               
        DUР  8                           
        РUSН НL                          
        ЕDUР                             
        LD   SР,#4420                    
        LD   НL,(65503+24)               
        DUР  8                           
        РUSН НL                          
        ЕDUР                             
        LD   SР,#4520                    
        LD   НL,(65503+26)               
        DUР  8                           
        РUSН НL                          
        ЕDUР                             
        LD   SР,#4620                    
        LD   НL,(65503+28)               
        DUР  8                           
        РUSН НL                          
        ЕDUР                             
        LD   SР,#4720                    
        LD   НL,(65503+30)               
        DUР  8                           
        РUSН НL                          
        ЕDUР                             
        ...        ;и так далее          
                                         
   Вы можете размножать эту процедуру та-
ким образом, чтобы адрес буфера был с пе-
риодом  от  0  до  30, после 30 опять 0 и
т.д. В самом конце вы должны сделать:    
                                         
SТAСК   LD   SР,0   ;восстановление стека
        RЕТ                              
                                         
   Теперь, если вы это запустите в цикле,
то на экране будет летать весьма красивая
штучка, сотоящая из вашего первоначально-
го спрайта.                              
                                         
Макс: не рекомендую делать цикл. Понимаю,
что  размер алгоритма эффекта слишком ве-
лик получается и его можно сделать намно-
го короче, если сделать цикл и выборку из
таблицы  при помощи индексных регистровых
пар,  но все эти команды "тяжелы" с точки
зрения  процессора по количеству затрачи-
ваемых  тактов, поэтому будет жуткий тор-
моз  при  работе. Решать в конечном счёте
вам, но имейте это ввиду.                
                                         
                  -----                  
                                         
        Работа c дucком        
  прu включенныx прерыванuяx   
                                         
(С) 1998 Иван Рощин                      
-----------------------------------------
    Теоретuчеcкuе cведенuя     
                                         
   В  компьютере "ZX-Sреctrum" выполнение
команд обмена информацией между оператив-
ной памятью и диском происходит при непо-
средственном участии центрального процес-
сора Z80:                                
                                         
Как видим, если во время выполнения такой команды произойдет прерывание, Z80 отвлечется на его обработку и команда за- вершится с ошибкой "потеря данных". Таким образом, на работу с диском накладываются определенные ограничения.
Следует заметить, что в современных компьютерах используется так называемый прямой доступ к памяти, когда обмен ин- формацией между памятью и каким-либо внешним устройством происходит без учас- тия центрального процессора:
Спектрум - компьютер несовременный, и недостаток аппаратных средств, которые позволили бы "параллельно" работать с диском и делать что-то еще, приходится восполнять программной поддержкой. Для этого прежде всего нужно разобраться, как
осуществляется выполнение команд ВГ93 (например, "чтение сектора") при включен- ных прерываниях. -------------------- Примечание: разумеется, все сказанное о командах чтения относится и к командам записи. -------------------- Скорость обмена данными между ВГ93 и Z80 равна 250 Кбит/с, а диск вращается со скоростью 300 об/мин. Исходя из этих дан- ных, определим количество байт на одной дорожке (обратите внимание, что в расче- тах 1 Кбит = 1000 бит, а не 1024): (250*1000/8)*60/300 = 6250 байт Примерно такое же значение (плюс-минус пять байт) можно получить, воспользовав- шись для определения длины дорожки прог- раммой Afrоditа 3.0. Теперь вычислим, сколько прерываний произойдет в течение одного оборота дис- ка, если их частота известна и равна 50 Гц: 50*60/300 = 10 Таким образом, на каждый оборот диска приходится ровно десять прерываний. Как уже было сказано, если прерывание прои- зойдет во время чтения сектора, то этот сектор не будет прочитан. Получается, что этот сектор нельзя будет прочитать и при следующем обороте диска, т.к. во время его чтения опять произойдет прерывание. И мы приходим к выводу, что чтение секторов при разрешенных прерываниях совершенно невозможно. -------------------- Примечание: все же есть способ осу- ществить чтение в таких условиях. Если не удалось прочитать сектор, надо рассинхро- низировать процесс вращения диска и мо- менты наступления прерываний. Сделать это можно очень просто: остановить двигатель дисковода, а затем снова запустить его. После этого остается только повторить чтение нужного сектора. -------------------- А как же, спросите вы, работают раз- личные dеmо, в которых чтение секторов совмещено с проигрыванием музыки по пре- рываниям? Оказывается, не все так плохо. Дело в том, что на самом деле такой стро- гой синхронизации нет. Так, на "Пентаго- не" при тактовой частоте 3,5 МГц промежу- ток между прерываниями составляет пример- но 71680 тактов. В этом случае частота прерываний равна: 3500000/71680 = 48,83 Гц -------------------- Примечание: соответственно, такой же будет и частота кадров у подключенного к "Пентагону" монитора или телевизора. Как видим, это немного отличается от стандар- та (50 Гц). Также это приводит к тому, что используемый во многих программах таймер, работающий на прерываниях, будет отставать на 1,4 секунды в минуту, в чем можно легко убедиться. -------------------- Теперь в течение одного оборота диска произойдет 48,83*60/300 = 9,77 прерыва- ний. Рассмотрим, сколько байт проходит под магнитной головкой в промежутке между двумя прерываниями: 6250/9,77 = 640 байт Если считать, что первое прерывание произошло в тот момент, когда магнитная головка находилась в начале дорожки, по- лучаем такую таблицу: +------------------+--------------------+ | порядковый номер | смещение от начала | | прерывания | дорожки, байт | +------------------+--------------------+ | 1 | 0 | | 2 | 640 | | 3 | 1280 | | 4 | 1920 | | 5 | 2560 | | 6 | 3200 | | 7 | 3840 | | 8 | 4480 | | 9 | 5120 | | 10 | 5760 | | 11 | 150 (след. оборот)| | 12 | 790 | | 13 | 1430 | | 14 | 2070 | | 15 | 2710 | | 16 | 3350 | | 17 | 3990 | | 18 | 4630 | | 19 | 5270 | | 20 | 5910 | | 21 | 300 (след. оборот)| | ... | ... | +------------------+--------------------+ Видно, что даже если сектор не прочи- тался на одном обороте дорожки, вполне возможно, что он будет прочитан на сле- дующем обороте, т.к. моменты наступления прерываний будут смещены на 150 байт. -------------------- Примечание: на моем "Пентагоне" в ре- зультате экспериментов было установлено, что из-за пониженной скорости вращения диска (299,4 об/мин вместо 300) моменты наступления прерываний смещаются не на 150, а на 138 байт. В дальнейших расчетах будет фигурировать именно эта величина. Для каждого компьютера она своя, и, как мы увидим, именно от нее зависит степень замедления чтения секторов. -------------------- Вычислим, чему будет равно время пол- ного чтения диска при запрещенных преры- ваниях: 0,2*160 = 32 секунды Теперь попробуем оценить, во сколько раз замедлится чтение одной дорожки стан- дартного ТR-DОS диска при включенных пре- рываниях. -------------------- Примечание: будем считать, что при чтении дорожки программа сначала считы- вает все сектора подряд (при этом какие- то из них, очевидно, не будут правильно считаны из-за возникшего прерывания), а затем при каждом следующем обороте диска пытается прочитать все ранее неправильно считанные сектора, и так до тех пор, пока все сектора не будут прочитаны. Необходимо учесть, что если последова- тельно считываются несколько дорожек (на- пример, 4), и каждая дорожка считывается, например, за 2,5 оборота диска, то все 4 дорожки будут считаны не за 4*2,5 = 10, а за 4*3 = 12 оборотов диска. Это связано с тем, что когда мы отдаем команду пози- ционирования на другую дорожку, а затем отдаем команду чтения сектора, ВГ не сра- зу начнет читать сектор, а будет ожидать индексного импульса, указывающего на на- чало дорожки. -------------------- Очевидно, что время чтения одной до- рожки (измеряемое в оборотах диска) будет определяться временем чтения "наихудшего" сектора, т.е. такого сектора, на чтение которого будет затрачено наибольшее коли- чество попыток. Длина сектора на диске ТR-DОS равна 256 байт. Рассмотрим на схеме, как может происходить чтение такого сектора в наихудшем случае:
Т.е. при первом обороте диска прерыва- ние произойдет при чтении байта со смеще- нием 0, при втором обороте момент наступ- ления прерывания сместится на 138 байт так, что сектор опять не будет считан, и, наконец, при третьем обороте он прочи- тается.
Итак, получили, что время чтения одной дорожки замедлится в 3 раза. Соответст- венно, весь диск прочитается за 32*3=96 секунд, что прекрасно согласуется с экс- периментальными данными. Теперь рассмотрим процесс чтения одной дорожки диска МS-DОS. Размер сектора - 512 байт. В этом случае чтение "наихудше- го" сектора может происходить по двум возможным сценариям: либо он прочитается на пятом обороте диска, либо на девятом. Это показано на схеме:
Практика показывает, что время чтения одной дорожки МS-DОS диска в среднем уве- личивается в 7,6 раза, то есть второй ва- риант реализуется немного чаще первого. Видно, что из-за большей длины сектора чтение замедляется еще сильнее, чем у диска ТR-DОS. В этом ТR-DОS получает хоть какое-то преимущество. А вот работать с диском IS-DОS при включенных прерываниях вообще нельзя. Ду- маю, вы уже догадались, почему - сектор в 1024 байта будет считываться так долго, что за это время обязательно произойдет прерывание, а может быть, и не одно. По той же причине при включенных прерываниях нельзя форматировать диск или выполнять команду чтения трека. Как же реализовано одновременное про- игрывание музыки и чтение диска (без вся- кого замедления!) в таких dеmо, как РОWЕR UР и ЕYЕ AСНЕ-2? По-видимому, тут исполь- зуется такой способ: процедура проигрыва- ния музыки запускается после чтения оче- редного сектора. Но при этом вызов проце- дуры не синхронизируется с прерываниями, а ошибки чтения сопровождаются неприятны- ми завываниями. ----- ПРОГРАММИРОВАНИЕ КЭША. (С) 2000 Макс/Соmрu-Studiо Ltd ----------------------------------------- Xотел я здесь рассказать о методах ра- боты с кэшем, но такая лень напала... Ко- роче, принцип известен, как добраться до кэша, а дальше пишите кто на что гаразд. Мне же только следует напомнить кое-что тем, кто делает программы для взлома или системные утилиты, которые находятся в кэше - делайте корректный выход из кэша, если порча основного ОЗУ может сказаться на программе, в нём размещённой. Суть проблемы такова: есть программа, которая по нажатию mаgic или rеsеt-2 (это когда аппаратно "влетаешь" в кэш на адрес ноль) что-либо делает, а потом подразуме- вает возврат или переход в основную прог- рамму, но работа которой может быть нару- шена какими-либо изменениями в ОЗУ. А из- менения делаются кодерами то ли по незна- нию, то ли из-за лени... Короче, для "за- крытия" кэша надо сделать команду IN A,(#7В) и она должна находиться в ОЗУ, а не в кэ- ше. Оказывается, что это условие вовсе не обязательно! Достаточно просмотреть про- шивку ПЗУ в 128 и 48 бейсике и найти ко- манды РОР AF RЕТ для реализации нормального выхода. У меня эти команды прошиты по следующим адресам: 48 ВASIС - #0554 128 ВASIС - #007D. В кэше надо за два байта до этих адре- сов подставить команду IN A,(#7В) и про- блема решится сама собой. Естественно на- до предварительно сделать РUSН AF или же подразумевать его снятие со стека. Выгля- дит это примерно так: РUSН AF ;адрес ещё кэша IN A,(#7В);после этой команды ;подключается ПЗУ. РОР AF ;а это уже ПЗУ! RЕТ ;cоntinuе рrоgrаm И всё. Теперь любая программа, которая критична к содержанию ОЗУ (считает его КС или ещё что-нибудь, как в "Чёрном Вороне" Медноногова) и может дать сбой в работе, не заметит, что её кто-то тормозил. Можно писать свой дебаггер или искатель музы- кальных сонгов без риска вывалиться неиз- вестно куда при возврате... Но это ещё не всё! Сейчас много рас- плодилось всяких там операционок, коман- деров и прочей ерунды, которая рекоменду- ется для прошивки в ПЗУ. Обычно предлага- ют стереть 128-й бейсик и записать туда, ну например NЕОS или Rеаl Соmmаndеr vXX. В этом случае придётся искать вышеуказан- ную последовательность байт (команд) са- мому и если повезло (нашёл), то переинс- таллироваться на другие адреса безболез- ненного выхода из кэша. Вот тут-то и ждёт вас самый что ни есть пиздец - нарушение стандарта чревато последствиями... :`( Примечание: это больше касается желез- ной темы, чем программистской, но скажу и здесь - если будет глючить с выходом, то надо обратить внимание на серии микросхем в листалке страниц ОЗУ, а также тех, ко- торые задействованы в кэше. Желательно, чтобы там была "шустрая" серия 1533. Это обезопасит от состояния, когда процессор уже отработал команду отключения кэша, а "железо" ещё не сделало подстановку ПЗУ и тем самым получается состояние, именуемое "немного беременная". Последствия, конеч- но же, не роды, но сброс гарантирован!



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

От автора - управление, действие иконок в статье, о следующих номерах, связь.

Программистам - Процессор Z380

Программистам - Сборник кодов: зашифровка файла, Эффект точечной сетки, работа с диском при включенных прерываниях, программирование кэша.

Программистам - Теория: Биты и байты.

Очумелые ручки - Реализация кэша.

Очумелые ручки - ZX-дигитайзер: оцифровка видеосигнала.

Очумелые ручки - Всё о HDD IDE: Краткое описание портов и битов.

Белый_попугай - Советы молодожёнам.

Белый_попугай - Поручик Ржевский.

Белый_попугай - О начальстве.

Белый_попугай - Автошкола.

Белый_попугай - Набор приколов.

Раскрутка - Новые группы.

Раскрутка - Алло, таланты!

Раскрутка - Neos

Игротека - Редактор черного ворона и его новые миссии.

Игротека - Прохождение игр: 12 Тайныx Книг, Twillight.

Игротека -Перспективные проекты.

Разное - Наша жизнь компьютерщика.

Разное - Глюкодром.

Разное - Intel outside.

Разное - Почтовый ящик.

Разное - Pidarsoft.

Разное - Реклама.

Комментарий к приложению


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

Похожие статьи:
Drugs - наша, бошки, ганджа, гандубас, гашиш, дрянь, дыды, зелень.
Юмор - что такое программист.
3d2f или 3d30 - TR-DOS путешествие в мир заблуждений.

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