Закрыть окно         Список других документов библиотеки Серкова

.цв
.шп72
ФОРМАТ ТРЕКА.
.лв
.шп0

---------------------------------------------------------------
!*****!  С Е К Т О Р  #0  !*****!  С Е К Т О Р  #1  !*****!
---------------------------------------------------------------
!Зазор!Адрес-!Зазор! Поле !Зазор!Адрес-!Зазор! Поле !Зазор!
!  1  !  ное !  2  !данных!  3  !  ное !  2  !данных!  3  !
!     ! поле !     !      !     ! поле !     !      !     !
!     !  #0  !     !  #0  !     !  #1  !     !  #1  !     !
---------------------------------------------------------------
!    /       !*************************!    /        \    !****
!   /         \***********************/    /          \    \***
!  /           \__________________***/    /            \___ \**
! /                               \*!    /                 \ \*
!!1-3   4-5   6-7    8-9   A-B C-E \!   /                   \!*
!!----------------------------------!  /                347-!!*
!!про-!номер!адрес! адрес !К.С!эпи-!! /1-3   4-345  346  349!!*
!!лог ! тома!трека!сектора!   !лог !!!----------------------!!*
!!----------------------------------!!про-!342байта!К.С!эпи-!!*
! \********************************/ !лог ! данных !   !лог !!*
!  \******************************/  !----------------------!!*
!   \****************************/   !**********************!!*
!    \**************************/    !******************___/ !*
!     \************************/     !*****************/     !*
!      \**********************/      !****************/      !*
!--------********************---------***************---------*
!синхро-!********************!синхро-!***************!синхро-!*
! байты !********************! байты !***************! байты !*
!  ¤FF  !********************!  ¤FF  !***************!  ¤FF  !*
! 40-95 !********************!  5-10 !***************! 14-24 !*
---------********************---------***************---------*

<------------------------------ (197-203) мс -----------....-->

         Номера секторов в диапазоне от #0 до #F.

Пролог адресного поля: ¤D5 AA 96  
Эпилог адресного поля: ¤DE AA EB  
Пролог поля данных   : ¤D5 AA AD  
Эпилог поля данных   : ¤DE AA EB  

               СТРУКТУРА БАЙТА НА ДИСКЕ.

  _   ___    _       _   ___   _       _
_!C!_!D=1!__!C!_D=0_!C!_!D=1!_!C!_D=0_!C!_!D=1!_!C!_D=0_!C!_!D=1!_!C!_D=0_!C!_

 <  4 мкс   >
 <   бит 7  Х бит 6 Х  бит 5  Х бит 4 Х  бит 3  Х бит 2 Х бит 1   Х бит 0 >
 <---------------------------- Б А Й Т  ¤AA ------------------------------>

 !     1    !   0   !    1    !   0   !    1    !   0   !   1     !   0   !
 <________________________________ 32 мкс ________________________________>
                C - бит синхронизации.
                D - бит данных.

.цв
.шп8
ЧЕРЕДОВАНИЕ СЕКТОРОВ.
.шп0

.лв
   Физический        Сектор        Сектор        Сектор
     сектор          DOS3.3        Паскаля        CP/M
-------------------------------------------------------
        0               0             0             0
        1               D             2             3
        2               B             4             6
        3               9             6             9
        4               7             8             C
        5               5             A             F
        6               3             C             2
        7               1             E             5
        8               E             1             8
        9               C             3             B
        A               A             5             E
        B               8             7             1
        C               6             9             4
        D               4             B             7
        E               2             D             A
        F               F             F             D

.цв
.шп8

КОДИРОВАНИЕ ПОЛЯ ДАННЫХ.
.шп0

.лв
-----------    /-------\    -----------    /-------\    --------
!страница !   /программа\   !первичный!   /программа\   !сектор!
! данных  !-><кодирования>->!  буфер  !-><  записи   >->!  на  !
!пользова-!   \         /   ! данных  !   \ сектора /   !диске !
!  теля   !    \-------/    !---------!    \-------/    --------
-----------                 !вторичный!      !   ^
                            !  буфер  !      Y   !
                            ! данных  !   ------------
                            -----------   ! таблица  !
                                          !трансляции!
                                          !  записи  !
                                          ------------

--------    /-------\    -----------    /-------\    -----------
!сектор!   /программа\   !первичный!   /программа\   !страница !
!  на  !-><  чтения   >->!  буфер  !-><  декоди-  >->! данных  !
!диске !   \ сектора /   ! данных  !   \ рования /   !пользова-!
--------    \-------/    !---------!    \-------/    !  теля   !
              !   ^      !вторичный!                 -----------
              Y   !      !  буфер  !
           ------------  ! данных  !
           ! таблица  !  -----------
           !трансляции!
           !  чтения  !
           ------------

.цв
.шп72
Обращение к DOS на языке Ассемблера.

.шп8
АППАРАТНЫЕ АДРЕСА DOS.
.шп0
.лв

Адрес   Метка            О П И С А Н И Е
¤C080   PHASEOFF         Выключение фазы 0 шагового двигателя;
¤C081   PHASEON          Включение  фазы 0 шагового двигателя;
¤C082   PHASE1OFF        Выкл. ----"---- 1 ----"----"----"---;
¤C083   PHASE1ON         Вкл.  ----"---- 1 ----"----"----"---;
¤C084   PHASE2OFF        Выкл. ----"---- 2 ----"----"----"---;
¤C085   PHASE2ON         Вкл.  ----"---- 2 ----"----"----"---;
¤C086   PHASE3OFF        Выкл. ----"---- 3 ----"----"----"---;
¤C087   PHASE3ON         Вкл.  ----"---- 3 ----"----"----"---;
¤C088   MOTOROFF         Выключение двигателя вращения;
¤C089   MOTORON          Включение  двигателя вращения;
¤C08A   DRV0EN           Выбор НГМД1;
¤C08B   DRV1EN           Выбор НГМД2;
¤C08C   Q6L              Стробирование регистра данных для 
                         ввода/вывода;
¤C08D   Q6H              Загрузка регистра данных;
¤C08E   Q7L              Подготовка регистра данных для ввода;
¤C08F   Q7H              Подготовка регистра данных для вывода.

ПРИМЕЧАНИЕ: 1. Действительный адрес зависит от номера разъема, 
            на котором установлен требуемый контроллер НГМД, и
            вычисляется путем увеличения адреса, указанного в
            таблице, на величину X=номер разъема * 16.

            2. Q7L вместе с Q6L = Режим ЧТЕНИЕ;
               Q7L вместе с Q6H = Проверка защиты от записи;
               Q7H вместе с Q6L = Режим ЗАПИСЬ;
               Q7H вместе с Q6H = Загрузка регистра записи.


.цв
ВКЛ/ВЫКЛ ДВИГАТЕЛЯ ВРАЩЕНИЯ.
.шп0

.лв
     LDA ¤C089,X   Включить двигатель. После этого рекомендуется
                   выдержать паузу в 1 секунду, однако можно
                   сократить эту задержку до минимально 
                   необходимой, наблюдая за содержимым регистра
                   данных в режиме ЧТЕНИЕ до тех пор, пока
                   данные в нем не начнут изменяться.

     LDA ¤C088,X   Выключить двигатель.

.цв
ВЫБОР НГМД1/НГМД2.

.лв
     LDA ¤C08A,X   Выбрать НГМД1.

     LDA ¤C08B,X   Выбрать НГМД2.

   Одновременно может быть выбран только один из двух НГМД, 
а именно тот, который был выбран последним.

.цв
ВКЛ/ВЫКЛ ФАЗ ШАГОВОГО ДВИГАТЕЛЯ.

.лв
   Вообще говоря, каждую из четырех фаз нужно включить, а затем
выключить вновь. Если делать это в порядке возростания номеров
фаз, привод будет перемещаться к центру диска, а если в порядке
убывания номеров фаз, то - к внешнему краю диска.
   Величина временной задержки от включения до выключения фазы
критична, так что это упражнение не является тривиальным. Для
управления перемещением привода головки рекомендуется использо-
вать программу SEEK из RWTS.

.цв
ЧТЕНИЕ БАЙТА С ДИСКА.

.лв
     LDA ¤C08E,X   Включение режима чтения.
     ... ...
READ LDA ¤C08C,X   Чтение регистра данных.
     BPL READ      Если старший бит =0, то повторить чтение
                   регистра данных, так байт с диска еще 
                   не действителен.
     ... ...       В аккумуляторе действительный байт с диска.

.цв
ПРОВЕРКА ЗАЩИТЫ ОТ ЗАПИСИ.

.лв
      LDA ¤C08D,X
      LDA ¤C08E,X   Проверить защиту от записи.
      BMI ERRDR     Если старший бит =1, то запись невозможна.
WRITE ... ...       Запись.
      ... ...
ERRDR ... ...       Ошибка WRITE PROTECTED.

.цв
ЗАПИСЬ БАЙТА НА ДИСК.

.лв
      LDA ¤C08F,X   Вкл. режима ЗАПИСЬ.
      JSR WAIT100   Задержка на 100 мкс.
      ... ...
      LDA DATA      Загрузка байта в аккумулятор.
      LDA ¤C08D,X   Загрузка регистра данных.
      LDA ¤C08C,X   Запись байта на диск.

   Из-за аппаратных ограничений запись байтов на диск должна
производится в циклах длительностью 32 такта.

.цв
.шп72
Простые алгоритмы.

.шп8
ПОИСК СВОБОДНОГО БУФЕРА DOS.

.шп0
.лв
FBUFF  LDA ¤3D2      Определить точку загрузки DOS.
       STA ¤01
       LDY #¤00
       STY ¤00

GBUF0  LDA (¤00),Y   Найти следующий буфер DOS.
       PHA
       INY
       LDA (¤00),Y
       STA ¤01
       PLA
       STA ¤00
       BNE GBUF      Один найден.
       LDA ¤01
       BEQ NBUF      Нет свободных буферов.

GBUF   LDY #¤00      Получить имя файла.
       LDA (¤00),Y
       BEQ GOTBUF    Буфер свободен.
       LDY #36       Буфер занят.
       BNE GBUF0     Перейти к поиску следующего буфера.

GOTBUF CLC           Индикация - найден свободный буфер.
       RTS           Возврат в вызывающую программу.

NBUF   SEC           Индикация - нет свободных буферов.
       RTS

.цв
ЕСТЬ ЛИ DOS В ОЗУ ?

.лв
       LDA ¤3D0      Получить "векторную" команду JMP.
       CMP #¤4C      Это безусловный переход ?
       BNE NODOS     Нет, DOS не загружена.
       ... ...       Да,  DOS загружена.

.цв
КАКАЯ ВЕРСИЯ DOS АКТИВНА ?

.лв
       CLC
       LDA #0        Прибавить ¤16BE к адресу загрузки DOS.
       ADC #¤BE
       STA ¤00
       LDA ¤3D2
       ADC #¤16
       STA ¤01
       LDY #0
       LDA (¤00),Y   Получить номер версии DOS (2 или 3).

.цв
КАКОЙ ИЗ БЕЙСИКОВ ВЫБРАН ?

.лв
Чтобы определить, какое из ПЗУ (INTEGER BASIC ROM или APPLESOFT
BASIC ROM)активно, и подключить нужное, можно вызвать следующую
далее подпрограмму. Сначала в регистр A загружается код, указы-
вающий, какой Бейсик требуется. Для INTEGER BASIC используется
код ¤20, а для APPLESOFT BASIC - ¤4C. 

       LDA #¤4C      Код для APPLESOFT BASIC.
       JSR SETBSC    Вызвать подпрограмму.
       BNE ERROR     LANGUAGE NOT AVAILABLE (Язык недоступен).
       ... ...
SETBSC CMP ¤E000     Есть требуемый Бейсик ?
       BEQ RTSS      Да.
       STA ¤C080     Нет. Выбрать плату ПЗУ.
       CMP ¤E000     Есть ли теперь ?
       BEQ RTSS      Да.
       STA ¤C081     Нет. Проверить еще одно ПЗУ.
       CMP ¤E000     Получен Бейсик ?
RTSS   RTS           В любом случае возврат в вызывающую 
                     программу.

.цв
ВЫПОЛНЯЕТСЯ ЛИ БЕЙСИК-ПРОГРАММА ?

.лв
Для целочисленного Бейсика:
        LDA ¤D9
        BMI EXEC     Программа выполняется.
        BPL NOEXEC   Бейсик находится в диалоговом командном
                     режиме.

Для APPLESOFT BASIC:
        LDX ¤76      Получить номер строки.
        INX
        BEQ NOEXEC   Программа не выполняется.
        LDX ¤33      Получить символ-подсказку.
        CPX #¤DD     Подсказка - "]" ?
        BEQ NOEXEC   Да. Программа не выполняется.
        BNE EXEC     Нет. Программа выполняется.

.цв
.шп72
Доработка DOS.

.шп8
НАЛОЖЕНИЕ "ЗАПЛАТ".

.шп0
.ов

Изменения в DOS можно вводить на трех уровнях:

1 - "Заплата" может быть наложена на DOS в ОЗУ. Последующая перезагрузка исходной DOS приведет к потере "заплаты".

2 - "Заплату" первого типа можно "зафиксировать" на новой дискете путем ее инициализации во время работы измененной DOS.

3 - "Заплата" накладывается прямо на дискете, содержащей копию исходной DOS. Для этого можно использовать программу ZAP.

Можно использовать программу MASTER CREATE для записи измененной DOS на новую дискету. Для этого нужно использовать следующую процедуру:

   ]BLOAD MASTER KREATE    Загрузить программу.
   ]CALL-151               Выйти в Монитор.
   *80D:4C                 Записать ¤4C в яч. ¤80D.
   *800G                   Запустить MASTER CREATE.

По окончании загрузки копии исходной DOS выполняется выход из MASTER CREATE. Копия DOS загружена с адреса ¤1200, причем Загрузчик 2 (RWTS) загружен первым, а основная часть DOS размещена вслед за ним, начиная с адреса ¤1C00. Используя команды Монитора, наложите "заплаты" и запустите MASTER CREATE вновь:

   *82DG

По завершении работы программы выходная дискета будет содержать измененную DOS. Данная процедура будет работать с версиями DOS 3.2, 3.2.1 и 3.3.


.цв
ВСТАВКА ПРОГРАММ МЕЖДУ DOS И ЕЕ БУФЕРАМИ.

.ов

Иногда бывает полезным найти "безопасное" место для загрузки программы на машинном языке(например, драйвера принтера), где ни Бейсик, ни DOS не смогли бы испортить ее, даже при "холодном" старте DOS. Если длина программы меньше 200 байтов, то удачным будет адрес ¤0300. Для загрузки программы большей длины лучше разместить ее между DOS и ее буферами (предполагается, что программа является переместимой и будет работать на этом месте). Для этого загрузите программу в область ОЗУ, непосредственно примыкающую снизу к ячейке ¤9D00 (для 48 Кбайтной машины), измените адрес первого буфера DOS в ячейке ¤9D00 так, чтобы он указывал на точку "ниже" вашей программы (не забудьте оставить 38 дополнительных байтов для имени файла и цепочечных указателей), и выполните безусловный переход по адресу ¤3D3 (DOS COLDSTART - "холодный" старт DOS). Это заставит DOS построить вновь свои буфера "ниже" вашей программы и "забыть" о существовании памяти, которую занимает эта программа. Бейсик, конечно, также не сможет "добраться" до этой памяти, поскольку DOS установит HIMEM "ниже" буферов DOS.


.цв
ЗАПУСК ФАЙЛА HELLO КОМАНДАМИ BRUN ИЛИ EXEC.

.ов

В общем случае, когда DOS заканчивает начальную загрузку в память, она выполняет команду RUN HELLO. Чтобы заменить команду RUN на BRUN или EXEC, наложите "заплату" (для 48 К APPLE):

    *9E42:34         для BRUN;
    *9E42:14         для EXEC.

Закрыть окно         Список других документов библиотеки Серкова