Hacker #07
10 марта 1997

И опять о ТR-D0Sе - СИСТEМНЫE ПEPEМEННЫE ТR-D0S.

<b>И опять о ТR-D0Sе</b> - СИСТEМНЫE ПEPEМEННЫE ТR-D0S.
 И опять о TR-DOSe.                                  .BIG BRAIN 
                                                                
WARL0CK  1б.02.97                                               
                                                                
 Это  опять  я  со  своей  второй  статьей  о  TR-DOS. Сегодня я
расскажу  о  системных  переменных  TR-DOS  (хотя при выполнении
различных  команд  одни  и  те  же  переменные  имеют  различное
значение) и др.                                                 
                                                                
----------------------------------------------------------------
                                                                
 СИСТЕМНЫЕ ПЕРЕМЕННЫЕ TR-DOS.                                   
                                                                
ПРИМЕЧАНИЕ: все числа в десятичной системе счисления.           
ЕЩЕ  ОДНО  ПРИМЕЧАНИЕ:  в  квадратных  скобках даны значения при
инициализации  TR-DOS  с диском в дисководе, через | без диска |
во время работы.                                                
═══════╦════════════════════════════════════════════════════════
 адрес ║ назначение                                             
═══════╬════════════════════════════════════════════════════════
 23734 ║ 15 байт область каналов CHANS                          
 ──────╫─────────────────────────────────────────────────────── 
 23734 ║ 2548,42б4. Канал К                                     
 ──────╫─────────────────────────────────────────────────────── 
 23739 ║ 2548,5572. Канал S                                     
 ──────╫─────────────────────────────────────────────────────── 
 23744 ║ 39б9,5577. Канал R                                     
 ──────╫─────────────────────────────────────────────────────── 
 2374б ║ Байт-201 (код команды RET). Судя по всему используется 
       ║ для вызова функций BASICa из TR-DOS.                   
 ──────╫─────────────────────────────────────────────────────── 
 23752 ║ Байт - режим работы дисковода А. [255|128|131]         
       ║                                                        
 23753 ║ - " - " - " -           В.                             
       ║                                                        
 23754 ║ - " - " - " -           С.                             
       ║                                                        
 23755 ║ - " - " - " -           D.                             
 ──────╫─────────────────────────────────────────────────────── 
 2375б ║ Номер сектора, выводимого командой САТ [13].           
 ──────╫─────────────────────────────────────────────────────── 
 23757 ║ Байт - готовность дисковода (рег.сост. ВГ93) [128,0].  
 ──────╫─────────────────────────────────────────────────────── 
 23758 ║ Байт, возможно флаг записи (255)/чтения (0) [0].       
 ──────╫─────────────────────────────────────────────────────── 
 23759 ║ 2 байта - адрес W0RKSP при M0VE, C0PY, LIST.           
 ──────╫─────────────────────────────────────────────────────── 
 237б1 ║ 2 байта - номер строки афтостарта при SAVE BASIC.      
 ──────╫─────────────────────────────────────────────────────── 
 237б4 ║ Байт - номер стертого файла при M0VE.                  
 ──────╫─────────────────────────────────────────────────────── 
 237б5 ║ Байт - номер сектора стертого файла при M0VE.          
 ──────╫─────────────────────────────────────────────────────── 
 237бб ║ Байт - номер дорожки стертого файла при M0VE. Для фор- 
       ║ матирования обнулить, по окончании будет число де-     
       ║ фектных секторов (аналогично при проверке дорожки ко-  
       ║ мандой #15). Способ загрузки для команды #0E (рег.А).  
       ║ Если команда не выполнена 255.                         
 ──────╫─────────────────────────────────────────────────────── 
 237б7 ║ 2 байта - адрес. После инициализации указывает на      
       ║ счетчик [23771], после записи C0DE - начальный адрес   
       ║ в памяти. При вызове из BASICa содержит номер строки   
       ║ вызова. При выполнении форматирования 237б7 содержит   
       ║ число дорожек для форматирования, 237б8 флаг проверки, 
       ║ если <> 0, то проверко не производится.                
 ──────╫─────────────────────────────────────────────────────── 
 237б9 ║ 2 байта - адрес символа для интерпретации, аналогично  
       ║ СН_ADD. После инициализации указывает на [238б9].      
       ║ После записи C0DE содержит длину записанного файла.    
       ║ При форматировании 23770=128, если дискета двусторон-  
       ║ няя, иначе форматируется только адна сторона. Для ко-  
       ║ манды #0E адрес загрузки.                              
 ──────╫─────────────────────────────────────────────────────── 
 23771 ║ 2 байта - счетчик загрузки, после операций с файлами   
       ║ содержит длину загруженной/записанной части файла.     
       ║ При M0VE содержит текущие номера сектора и дорожки.    
       ║ При LIST байт 23771 содержит текущий канал вывода.     
 ──────╫─────────────────────────────────────────────────────── 
   Дискриптор файла:                                            
 23773 ║ 8 байт - заголовок файла                               
 23781 ║ Байт - тип файла                                       
 23782 ║ 2 байта - адрес старта для C0DE или полная длина BASIC 
 23784 ║ 2 байта - длина файла или программной части для BASIC  
 2378б ║ Байт - объем файла в секторах                          
 23787 ║ Байт - номер начального сектора файла                  
 23788 ║ Байт - номер начального трека файла                    
 ──────╫─────────────────────────────────────────────────────── 
   Параметры для C0PY:                                          
 23789 ║ 2 байта - адрес                                        
 23791 ║ 2 байта - длина                                        
 23793 ║ Байт - объем в секторах                                
 23794 ║ Байт - номер начального сектора                        
 23795 ║ Байт - номер начального трека                          
 ──────╫─────────────────────────────────────────────────────── 
 2379б ║ Байт - счетчик загружаемых секторов. После операций    
       ║ загрузки содержит номер следующего сектора. Исполь-    
       ║ зуется для написания загрузчиков моноблоков.           
 ──────╫─────────────────────────────────────────────────────── 
 23797 ║ Байт-счетчик загружаемых дорожек. После операций заг-  
       ║ рузки содержит номер следующей дорожки.                
 ──────╫─────────────────────────────────────────────────────── 
 23798 ║ Байт - дисковод для временной операции (0-3).[0].      
 ──────╫─────────────────────────────────────────────────────── 
 23799 ║ Байт - при возврате из TR-DOS (15б1б) обнуляется.      
 ──────╫─────────────────────────────────────────────────────── 
 23800 ║ Байт-дисковод источник при работе с двумя дисководами  
       ║ (0-3) [0].                                             
 ──────╫─────────────────────────────────────────────────────── 
 23801 ║ Байт - тип операции:0-L0AD, 255-VERIFY [0]. При работе 
       ║ с двумя дисководами номер дисковода приемника (0-3).   
 ──────╫─────────────────────────────────────────────────────── 
 23802 ║ Байт - время перемещения головки дисковода А           
 23803 ║ - " - " -   В                                          
 23804 ║ - " - " -   С                                          
 23805 ║ - " - " -   D                                          
       ║ Если 255 то дисковод не инициализирован, иначе 8.      
 ──────╫─────────────────────────────────────────────────────── 
 2380б ║ Байт - команда ВГ93. 128 после чтения, 1б0 - записи.   
 ──────╫─────────────────────────────────────────────────────── 
 23807 ║ Байт - номер сектора+1, задаваемый для ВГ93 DOS.       
 ──────╫─────────────────────────────────────────────────────── 
 23808 ║ 2 байта - адрес буфера для DOS, в который грузится     
       ║ сектор.Указывает на DOS-CHANS; эта область на время    
       ║ загрузки временно сдвигается на 257 байт.[0|0|23845]   
 ──────╫─────────────────────────────────────────────────────── 
 23810 ║ 2 байта - временно сохраняется регистровая пара HL.    
 ──────╫─────────────────────────────────────────────────────── 
 23812 ║ 2 байта - временно сохраняется регистровая пара DE.    
 ──────╫─────────────────────────────────────────────────────── 
 23814 ║ Байт - количество байт, по которым производится поиск  
       ║ файла в каталоге [9].                                  
 ──────╫─────────────────────────────────────────────────────── 
 23815 ║ Байт - результат M0VE: 0-по files, <>0 - о.k.          
 ──────╫─────────────────────────────────────────────────────── 
 2381б ║ Байт - первая буква имени файла при M0VE и ERASE.      
 ──────╫─────────────────────────────────────────────────────── 
 23820 ║ Байт - признак выделения буфера ввода/вывода: 0 - да,  
       ║ 255 - нет [255].                                       
 ──────╫─────────────────────────────────────────────────────── 
 23821 ║ Байт-номер файла при копировании с двумя дисководами.  
 ──────╫─────────────────────────────────────────────────────── 
 23822 ║ Байт - при 254 сообщения DOS на экран не выводить. При 
       ║ 255 - признак работы BASIC, др. - TR-DOS.              
 ──────╫─────────────────────────────────────────────────────── 
 23823 ║ Байт - код ошибки TR-DOS при вызове из BASICa, а также 
       ║ номер файла в каталоге при выполнении команды #0А [0]. 
 ──────╫─────────────────────────────────────────────────────── 
 23824 ║ Старший байт ошибки при вызове 15б1б или 15б35. Необ-  
       ║ ходимо перед чтением файлов записать 0 [0|255].        
 ──────╫─────────────────────────────────────────────────────── 
 23825 ║ 2 байта - адрес строки команды TR-DOS [238б8].         
 ──────╫─────────────────────────────────────────────────────── 
 23827 ║ 2 байта - адрес, указывает на старший адрес стека,     
       ║ содержащий адрес процедуры обработки ошибок [б5ЗбЧ].   
       ║ Если старший байт=170, выполняется команда RUN "boot". 
 ──────╫─────────────────────────────────────────────────────── 
 23829 ║ Байт - режим DOS, при 255 выполняется команда DOS из   
       ║ BASICa, при 0 - работа DOS.                            
 ──────╫─────────────────────────────────────────────────────── 
 23830 ║ Байт - копия системного регистра контроллера (обычно   
       ║ номер дисковода+б0) [б0/44].                           
 ──────╫─────────────────────────────────────────────────────── 
 23831 ║ Байт - признак инициализации DOS: 0 - при входе в DOS  
       ║ выводится заставка и выполняется команда RUN "boot",   
       ║ 170 - нет (повторный вход) [0/170]. При 255 не дает    
       ║ ошибку при чтении неверного адреса.                    
 ──────╫─────────────────────────────────────────────────────── 
 23832 ║ Байт - равен 255, если подключен Interface 1.          
 ──────╫─────────────────────────────────────────────────────── 
 23833 ║ Номер дисковода по умолчанию (0-3) [0].                
 ──────╫─────────────────────────────────────────────────────── 
 23834 ║ 2 байта - адрес подпрограммы возврата из TR-DOS [710]. 
 ──────╫─────────────────────────────────────────────────────── 
 2383б ║ 2 байта - сохраняется текущее значение SP.             
 ──────╫─────────────────────────────────────────────────────── 
 23838 ║ Байт - номер файла в каталоге, если он найден [0].     
 ──────╫─────────────────────────────────────────────────────── 
 23840 ║ 3 начальных байта последней командной строки.          
 ──────╫─────────────────────────────────────────────────────── 
 23843 ║ Байт - объем памяте для M0VE (в блоках, ЧкБ минимум).  
 ──────╫─────────────────────────────────────────────────────── 
 23845 ║ Байт - начало временного буфера DOS [255].             
 ──────╫─────────────────────────────────────────────────────── 
 2384б ║ 20 байт - област каналов CHANS-DOS К,S,R,P;аналогичны  
       ║ стандартным.                                           
 ──────╫─────────────────────────────────────────────────────── 
 238бб ║ Байт - разделитель [128]                               
 ──────╫─────────────────────────────────────────────────────── 
 238б7 ║ Начало BASIC программы, если не открывались дисковые   
       ║ файлы.                                                 
═══════╩════════════════════════════════════════════════════════
                                                                
                                                                
 ОБЛАСТЬ СВЯЗИ С ДИСКОВЫМ ФАЙЛОМ                                
                                                                
 Если   открыт   дисковый   файл,  то  дополнительно  выделяется
следующая область:                                              
═══════╦════════════════════════════════════════════════════════
 адрес ║ назначение                                             
═══════╬════════════════════════════════════════════════════════
 238бб ║ 292 байта - область канала связи с дисковым файлом:    
       ║                                                        
 238бб ║ 2 байта - адрес процедуры записи в канал               
 238б8 ║ 2 байта - адрес процедуру чтения из канала             
 23870 ║ 1 байт - имя канала "D"                                
 23871 ║ 8 байт - 253,50,5б,48,3б,1,0,84 (только не спрашивайте 
       ║          меня, что это такое я сам не знаю).           
 23879 ║ 3 байта - 27,00,255 - песледовательный для записи      
       ║           00,00,00 - последовательный для чтения       
       ║           27,00,127 - с произвольным доступом          
 23882 ║ 1б байт - дискриптор файла                             
 23898 ║ 4 байта - 234,58,211,52 (бог его знает,что это)        
 23902 ║ 25б байт - буфер связи с файлом;содержит текущий фраг- 
       ║            мент                                        
 23158 ║ 1 байт - разделитель 128                               
 23159 ║ Начало BASIC программы, если открыт один дисковый файл 
═══════╩════════════════════════════════════════════════════════
                                                                
 Чтобы открыть дисковый файл нужно выполнить следующие команды: 
                                                                
    10 CLEAR 24999                                              
    20  OPEN  #4,"NAME",W:REM открыть последовательный файл для 
 записи                                                         
                                                                
    10 CLEAR 24999                                              
    20 OPEN #4,"NAME",R:REM то же, но для чтения                
                                                                
    10 CLEAR 24999                                              
    20  OPEN  #4,"NAME",RND:REM  открыть  файл  с  произвольным 
 доступом                                                       
                                                                
    Обязательно (!) после работы закрыть файл:                  
    CL0SE #4                                                    
                                                                
----------------------------------------------------------------
                                                                
 И НА ПОСЛЕДОК 0 "MAGIC"                                        
                                                                
 "Magic"  работает  с  использовением  немаскируемых прерываний.
Т.е.  при  нажатии  на эту кнопку контроллер дисковода подменяет
ПЗУ   на   ПЗУ   TR-DOS  и  вырабатывает  сигнал  NMI. Процессор
останавливает   выполняемую  программу  и  переходит  по  адресу
#OOбб. Там находится  обработчик немаскируемых прерываний. В ПЗУ
BASIC   допущена   ошибка  и  немаскируемые  прерывания  там  не
используются.  Обработчик  нажатия  "Magic"  заносит  на стек 42
байта  (сохраняет значения регистров), и если программа не имеет
достаточной   глубины  стека,  то  она  "Magic"ом  не  сбросится
(например: DCU, UFO2  и  множество других, особенно это касается
программ  написанных в последнее время). Обработчик записывает в
сектора  10  и 11 нулевой дорожки 512 байт экрана. В эту область
экрана  считывается  системный  сектор  и туда же устанавливатся
стек.  Далее  определяется  начало  свободного  места на диске и
выгружается  все  ОЗУ,  начиная  с  экрана в файл с именем "@" и
типом C0DE. В поле адреса указывается значение стека (SP). После
записи  программа  восстанавливается так же, как при запуске "@"
файла. Процедура обработки  "Magic"  записывает  по адресу 23551
число   201   (скорее  всого  RET), а в  ячейки  23552  и  23553
соответственно 22  и  1б. Некоторые  программы  через прерывания
проверяют  эти  ячейки. Например "48  IRONS"  обнаружив,  что ее
скинули "Magic"ом сразу начинает форматировать диск.            
                                                                
 Процедура   востановления   файла  (для  TR-DOS  версии  5.04Т)
выглядит следующим образом:                                     
                                                                
        POP     AF                                              
        ЕХ      AF,AF'                                          
        POP     AF                                              
        LD      R,А                                             
        POP     AF                                              
        LD      I,А                                             
        DI                                                      
        LD      А,#FF                                           
        JP      P0,LL2ECC                                       
        LD      А,#00                                           
LL2ECC  LD      (#5С00),А                                       
        POP     AF                                              
        POP     HL                                              
        POP     DE                                              
        POP     ВС                                              
        EXX                                                     
        ЕХ      AF,AF'                                          
        POP     IY                                              
        POP     IX                                              
        POP     HL                                              
        POP     DE                                              
        POP     ВС                                              
        LD      А,(#5С48)                                       
        AND     #38                                             
        RRCA                                                    
        RRCA                                                    
        RRCA                                                    
        0UT     (#FE),А                                         
        LD      А,(#5В08)                                       
        СР      #EE                                             
        JR      NZ,LL2EF7                                       
        PUSH    ВС                                              
        LD      ВС,#7FFD                                        
        LD      А,(#SBSC)                                       
        0UT     (С),А                                           
        POP     ВС                                              
LL2EF7  LD      А,(#5С00)                                       
        0R      А                                               
        LD      А,#С9                                           
        LD      (#5С00),А                                       
        JR      NZ,LL2F03                                       
        EI                                                      
LL2F03  POP     AF                                              
        JP      #5С00                                           
        LD      А,(#4011)                                       
        0R      #3С                                             
        0UT     (#FF),А                                         
        RET                                                     
                                                                
 Есть  множество  програм,  которые  переделывают  "@"  файлы  в
обычные. В   них   используется   примерно  такая же   процедура
востановления, только немного попроще, например так:            
                                                                
        POP     AF                                              
        LD      R,А                                             
        POP     AF                                              
        LD      I,А                                             
        ЕХ      AF,AF'                                          
        POP     AF                                              
        POP     HL                                              
        POP     DE                                              
        POP     ВС                                              
        EXX                                                     
        POP     IY                                              
        POP     IX                                              
        POP     HL                                              
        POP     IX                                              
        POP     HL                                              
        POP     DE                                              
        POP     ВС                                              
        ЕХ      AF,AF'                                          
        JP      P0,LABEL                                        
        EI                                                      
LABEL   POP     AF                                              
        RET                                                     
                                                                
 "Magic" файлы запускаются через G0 Т0 "name" C0DE. Если файл не
запускается,  то попробуйте первую букву имени файла изменить на
"$". Дело в том, что процедура "Magic" не может определить режим
прерываний  IM2  или  IM1,  и поэтому при загрузке она проверяет
первую букву, и если она "$", то включает прерывания IM2.       
                                                                
 На   этом   я   эту   статью   заканчиваю.  Осталось  разобрать
форматирование диска и програмирование ВГ93, об этом в следующей
статье. Счастливо!                                              
                                                                
****************************************************************
                                                                



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

Read me - издание газеты - дело неблагодарное, никто даже спасибо не скажет ;-)

От редакции газеты Hacker - Газета продается в небольшом количестве по причине ее копируемости каким угодно копировщиком.

ТR-D0S для тех кто о нем ничего не знает - К0ДЫ 0ШИБ0К ПPИ ВЫЗ0ВE ИЗ ВАSIСа.

И опять о ТR-D0Sе - СИСТEМНЫE ПEPEМEННЫE ТR-D0S.

Вывод оцифрованного звука - как выводить звук на АY и PR0FI С0V0Х.

Мелочи жизни... - процедуры на все случае жизни.

Кемpstоn Моusе Intеrfасе - схема из Спектрофона.

И опять о КEМPSТ0N М0USE - очень простая схема.

Глюк порта PR0FI - успокойтесь, никакого глюка с портом #DFFD в PR0FI НEТ.

АLEХ'у от меня - я только рад обоснованной критике.

LАSER SQUАD-II - новелла (часть 1).

LАSER SQUАD-II - новелла (часть 2).

ЗВEЗДН0E НАСЛEДИE-II - новелла.

Как ZХ F0RМАТ дискутировал... - "Не забудьте написать, что я- тупой писака, помешанный на критикантсве и начисто лишенный чувства юмора".

Принципы создания электронных журналов - вредные советы.

Wеlсоме tо NМI НELL!!! - наворот в ПЗУ ТR-D0S, с помощью которого можно ломать, пилить, крушить и делать все что угодно с несчастными прогами.

Игры - 0писание "Кing Vаllеу" (Король долины).

Компьютерный жаргон - наука.

Humor - ГИМН ЛИГИ "ТEМ0E К0ЛEС0". (7 куплетов)

Прикол - Инструкция по пользованию туалетной бумагой.

Системки - Теневой ассемблер АLАSМ 3.8с (pаrt 1).

Системки - Теневой ассемблер АLАSМ 3.8с (pаrt 2).


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

Похожие статьи:
Вступление - об авторах, содержание номера.
Реклама - Покупка, продажа, обмен софта для Speccy.
Дефлорация - Майкл встал, подошел к креслу, на котором сидела Джулия, и присел на корточки у ее ног.
ARTCOMP-98 - Международный фестиваль компьютерного исккусства в Кургане. Третья редакция правил.
Реклама - Реклама и обявления.

В этот день...   18 апреля