GNU MIX Development Kit (mdk): mixvm
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
6. mixvm, эмулятор компьютера MIX
В этой главе описывается mixvm, эмулятор компьютера MIX.
mixvm -- программа с интерфейсом командной строки, эмулирующая
компьютер MIX (see section 2.1 Компьютер MIX). Она может выполнять программы
на MIXAL (see section 2.2 MIXAL), предварительно скомпилированные ассемблером
MIX (see section 5. mixasm, ассемблер MIXAL). Эмулятор позволяет просматривать компоненты
компьютера MIX (регистры, ячейки памяти, флаг сравнения и триггер
переполнения), выполнять программы MIX по шагам и устанавливать точки
останова чтобы облегчить отладку кода. Учебное описание использования
mixvm см. в 3.3 Запуск программы.
6.1 Вызов mixvm6.2 Интерактивные команды 6.3 Блочные устройства MIX
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
6.1 Вызов mixvm
mixvm может вызываться со следующими параметрами командной
строки (заметьте, что в соответствии с соглашениями GNU, у каждого
однобуквенного параметра есть соответствующее длинное имя):
mixvm [-vhurdtq] [--version] [--help] [--usage] [--run] [--dump]
[--time] [--noinit] [ФАЙЛ[.mix]]
|
Значение этих параметров таково:
- User Option: -v
- User Option: --version
- Вывести версию и информацию об авторских левах и завершить работу.
- User Option: -h
- User Option: --help
- User Option: -u
- User Option: --usage
- Вывести краткий перечень доступных параметров и завершить работу.
- User Option: -r
- User Option: --run
- Загрузить указанный ФАЙЛ и выполнить его. После выполнения
программы
mixvmзавершит работу. ФАЙЛ должен быть именем двоичной программы `.mix', скомпилированнойmixasm. Если ваша программа ничего не выводит, используйте флаг-d(см. ниже) чтобы просмотреть состояние виртуальной машины после завершения работы программы.
- User Option: -d
- User Option: --dump
- Этот параметр должен использоваться в сочетании с
-r. Он указываетmixvmвывести значение регистров виртуальной машины, флага сравнения и триггера переполнения после выполнения программы ФАЙЛ. См. пример использования в 3.3.1 Неинтерактивный режим.
- User Option: -t
- User Option: --time
- Этот параметр должен использоваться в сочетании с
-rи указываетmixvmвывести статистику виртуального времени выполнения программы.
При запуске без флага -r mixvm входит в интерактивный
режим, выводя приглашение:
MIX > |
и ожидая команд (see section 6.2 Интерактивные команды). Если задан необязательный аргумент ФАЙЛ, перед переходом в интерактивный режим файл `ФАЙЛ.mix' будет загружен в память виртуальной машины.
При первом запуске mixvm в вашем домашнем каталоге создаётся
каталог `.mdk'. Она содержит файл конфигурации mixvm, файл
истории команд и (по умолчанию) файл блочных устройств (see section 6.3 Блочные устройства MIX).
Перед тем, как вывести командное приглашение, mixvm проверяет
наличие в каталоге `~/.mdk' файла mixguile.scm, и если он
существует, передаёт для чтения и выполнения встроенному интерпретатору
Guile (see section 3.4.3 Определение новых функций). Чтобы пропустить загрузку
этого файла, вы можете использовать параметр командной строки -q:
- User Option: -q
- User Option: --noinit
- Не загружать при запуске файл инициализации Guile
~/.mdk/mixguile.scm.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
6.2 Интерактивные команды
Вы можете войти в интерактивный режим виртуальной машины MIX, просто
вызвав mixvm без аргументов. Тогда вы окажетесь в приглашении
оболочки(17)
MIX > |
которое показывает, что новая виртуальная машина была проинициализирована
и готова выполнять команды. Как мы уже упоминали, это командное
приглашение даёт вам все возможности редактирования командной строки,
описанные в руководстве пользователя Readline (скорее всего, вы уже
хорошо знакомы с этими возможностями, поскольку они присутствуют во
многих утилитах GNU, например, оболочке bash)(18). В двух словах, readline
даёт возможности дополнения команд клавишей TAB и работы с историей
команд клавишами курсора. Файл истории команд, содержащий последние команды,
введённые в предыдущих сеансах, находится в каталоге конфигурации MDK
(`~/.mdk').
Пока вы новичок, вашим лучшим помощником будет команда help,
выводящая обзор всех доступных команд MIX и способов их использования.
Её синтаксис таков:
- команда
mixvm: help [команда] - Вывести краткое описание заданной команды и её использования. Если
команда не указана,
helpвыведет краткое описание всех доступных команд.
6.2.1 Файловые команды 6.2.2 Команды отладки 6.2.3 Команды состояния 6.2.4 Команды конфигурирования Изменение и сохранение настроек mixvm. 6.2.5 Команды Scheme
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
6.2.1 Файловые команды
В вашем распоряжении находится набор команд, позволяющий загружать и выполнять исполняемые файлы MIX, а также работать с исходными файлами на MIXAL:
- файловая команда: load file[.mix]
- Эта команда загружает двоичный файл file.mix в память виртуальной
машины, и устанавливает счётчик программы на начало загруженной
программы. Этот адрес задаётся операндом псевдоинструкции
ENDв исходном файле на MIXAL. Так, если исходный файл `sample.mixal' содержит строку:END 3000
и вы, скомпилировав её
mixasmполучили двоичный файл `sample.mix', загрузка его в виртуальную машину будет выглядеть так:MIX > load sample Program loaded. Start address: 3000 MIX >
- файловая команда: run [file[.mix]]
- При выполнении без аргумента эта команда начинает или возобновляет
выполнение инструкций начиная с адреса, соответствующего текущему значению
счётчика программы. Поэтому применение этой команды после успешного
выполнения
loadвыполнит загруженную программу до обнаружения инструкцииHLTили до точки останова. Если вы зададите в качестве аргумента имя файла MIX, этот файл будет загружен (как в случаеloadfile) и выполнен. Еслиrunвызывается вновь после завершения выполнения программы (т.е., после того, как при прошлом запуске обнаружена инструкцияHLT), счётчик программы переустанавливается и выполнение начинается с начала (собственно говоря, командаloadперед продолжением выполнения программы сохраняет текущий набор установленных точек останова).
- файловая команда: edit [file[.mixal]]
- Вызывается определённый в переменной среды MDK_EDITOR редактор
для редактирования исходного файла file.mixal. Если значение этой
переменной не установлено, проверяются другие в следующем порядке:
X_EDITOR, EDITOR и VISUAL. При вызове без аргумента
редактирует исходный файл загруженного в данный момент файла MIX. Команда,
используемая для редактирования исходных файлов, может также быть определена
командой
sedit(see section 6.2.4 Команды конфигурирования).
- файловая команда: compile file[.mixal]
- Исходный файл file.mixal компилируется (с отладочной информацией)
mixasm. При вызове без аргументов перекомпилируется исходный файл загруженного в данный момент файла MIX. Команда компиляции может быть определена командойsasm(see section 6.2.4 Команды конфигурирования).
- файловая команда: pprog
- файловая команда: psrc
- Вывести путь к загруженной в данный момент программе MIX и её исходному
файлу:
MIX > load ../samples/primes Program loaded. Start address: 3000 MIX > pprog ../samples/primes.mix MIX > psrc /home/jao/projects/mdk/gnu/samples/primes.mixal MIx>
Наконец, для выхода их mixvm можно использовать команду quit:
- файловая команда: quit
- Выход из
mixvm, текущие параметры конфигурации сохраняются в `~/.mdk/mixvm.config'.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
6.2.2 Команды отладки
Последовательное выполнение загруженных программ может быть нарушено следующими командами отладки:
- команда отладки: next [ins_number]
- Эта команда указывает виртуальной машине разобрать и выполнить до
ins_number инструкций, начиная с текущего положения счётчика
программы. Выполнение прерывается либо при разборе указанного числа
инструкций, либо при обнаружении точки останова. При запуске без
аргументов выполняется одна инструкция. Если
nextвызывается после завершения выполнения программы (т.е. после обнаружения инструкцииHLTпри предыдущем запуске), счётчик программы переустанавливается и выполнение начинается с начала (собственно говоря, командаloadперед продолжением выполнения программы сохраняет текущий набор установленных точек останова).
- команда отладки: sbp line_number
- команда отладки: cbp line_no
- Установить точку останова на указанной строке исходного файла. Если
заданная строка соответсвует команде или псевдоинструкции MIXAL,
не создающей инструкции MIX в двоичном файле (такие как
ORIGилиEQU), точка останова устанавливается на первой строке исходного файла, создающей инструкцию MIX, после заданной. Так, для нашего примера `hello.mixal':* (1) * hello.mixal: сказать 'hello world' на MIXAL (2) * (3) * label ins operand comment (4) TERM EQU 19 номер устройства консоли MIX (5) ORIG 1000 начальный адрес (6) START OUT MSG(TERM) вывести данные с адреса MSG (7) ...попытка установить точку останова на строке 5 даст следующий результат:
MIX > sbp 5 Breakpoint set at line 7 MIX >
поскольку строка 7 -- первая, компилируемая в инструкцию MIX (по адресу 3000). Для того, чтобы команда
sbpработала, исходный файл должен быть скомпилирован с флагом-g, указывающимmixasmвключить отладочную информацию в двоичный файл `.mix'.Команда
cbpснимает ранее установленную точку останова на указанной строке исходного файла.
- команда отладки: spba address
- команда отладки: cbpa address
- Устанавливает точку останова по адресу address. Аргумент должен
быть правильным адресом памяти MIX, т.е. находиться в диапазоне
[0-3999]. Имейте в виду, что не проверяется, доступен ли указанный
адрес во время выполнения программы. Для установки точки останова по
адресу командой
sbpaотладочная информация не нужна. Командаcbpaснимает ранее установленную точку останова по указанному адресу.
- команда отладки: sbpr A | X | J | Ii
- команда отладки: cbpr A | X | J | Ii
- Устанавливает условную точку останова на изменение указанного
регистра. Например,
sbpr I1
вызовет прерывание выполнения программы при изменении содержимого регистра
I1. Ранее установленная точка останова снимается командойcbpr.
- команда отладки: sbpm address
- команда отладки: cbpm address
- Устанавливает условную точку останова на изменение содержимого
указанной ячейки памяти. Аргумент должен быть правильным адресом MIX,
т.е. находиться в диапазоне [0-3999]. Например,
sbpm 1000
вызовет прерывание выполнения программы при изменении содержимого ячейки памяти 1000. Ранее установленная точка останова снимается командой
cbpm.
- команда отладки: sbpo
- команда отладки: cbpo
- Устанавливает/снимает условную точку останова на изменение значения триггера переполнения.
- команда отладки: sbpc
- команда отладки: cbpc
- Устанавливает/снимает условную точку останова на изменение значения флага сравнений.
- команда отладки: cabp
- Снять все установленные точки останова.
- команда отладки: psym [symbol_name]
- Программы на MIXAL могут определять символические константы, либо
псевдоинструкцией
EQU, либо как метку в начале строки. Так, в отрывке программы:VAR EQU 2168 ORIG 4000 START LDA VARсимвол
VARсоответствует значению 2168, аSTART-- 4000. При компиляции программ на MIXAL с флагом-g(указывающийmixasmвключить отладочную информацию в двоичный файл `.mix') из командной строкиmixvmможно просматривать таблицу символов командойpsym, за которой следует имя искомого символа. При запуске без аргументовpsymвыводит все определённые символы и их значения.
Виртуальная машина может также показывать вам выполняемые инструкции при помощи следующих команд:
- команда отладки: strace [on|off]
strace onвключает отслеживание инструкций. Если отслеживание включено, при выполнении виртуальной машиной каждой инструкции (после применения командrunиnext), она выводится в её канонической форме (т.е. все выражение вычисляются и выводятся их числовые значения) и, если программы скомпилирована с отладочной информацией, также в виде, в котором они присутствовали в исходном файле на MIXAL. Отслеживание инструкцию отключается командойstrace off. Типичный сеанс отслеживания выглядит так:
После адреса памяти в квадратных скобках показывается выполненная инструкция так, как она оттранслирована, а за ней вы можете увидеть реальный код MIXAL, который скомпилирован в эту инструкцию. Поведение в части отслеживания сохраняется как параметр конфигурации в `~/.mdk'.MIX > strace on MIX > next 3000: [OUT 3002,0(2:3)] START OUT MSG(TERM) MIXAL HELLO WORLD Elapsed time: 1 /Total program time: 1 (Total uptime: 1) MIX > next 3001: [HLT 0,0] HLT End of program reached at address 3002 Elapsed time: 10 /Total program time: 11 (Total uptime: 11) MIX > strace off MIX >
- команда отладки: pline [LINE_NUMBER]
- Выводит запрошенную строку исходного текста (или текущую, если
line_number опущен):
MIX > load ../samples/hello Program loaded. Start address: 3000 MIX > pline Line 5: START OUT MSG(TERM) MIX > pline 6 Line 6: HLT MIX >
- команда отладки: pbt [INS_NUMBER]
- Эта команда выводит след выполненных инструкций. Необязательный аргумент
ins_number -- количество выводимых инструкций. Если он опущен или
равен нулю, выводятся все выполненные инструкции. Например, если вы
скомпилировали и загрузили следующую программу (`bt.mixal'):
ORIG 0 BEG JMP *+1 JMP *+1 FOO JMP BAR BAR HLT END BEGвы получите такие следы:
MIX > load bt Program loaded. Start address: 0 MIX > next MIX > pbt #0 BEG in bt.mixal:2 MIX > next MIX > pbt #0 1 in bt.mixal:3 #1 BEG in bt.mixal:2 MIX > run Running ... ... done MIX > pbt 3 #0 BAR in bt.mixal:5 #1 FOO in bt.mixal:4 #2 1 in bt.mixal:3 MIX > pbt #0 BAR in bt.mixal:5 #1 FOO in bt.mixal:4 #2 1 in bt.mixal:3 #3 BEG in bt.mixal:2 MIX >
Заметьте, что след выполненных инструкций даёт вам метку выполненной строки, или, если у неё нет метки, её адрес.
Как вы, вероятно, заметили, mixvm выводит при выполнении программы
статистику времени. Это поведение может управляться командой stime
(see section 6.2.4 Команды конфигурирования).
mixvm может также вычислять w-выражения (see section 2.2.4 W-выражения)
с помощью следующей команды:
- команда отладки: weval WEXP
- Вычисляет заданное w-выражение WEXP. W-выражение может содержать
любые определённые в данный момент символы. Например,
MIX > psym START + 00 00 00 46 56 (0000003000) MIX > weval START(0:1),START(3:4) + 56 00 46 56 00 (0939716096) MIX >
Новые символы можно определять командой ssym:
- команда отладки: ssym SYM WEXP
- Определяет символ SYM, значение которого получается вычислением
w-выражения WEXP. Вновь определённый символ может использоваться
в последующих командах
wevalв вычисляемых выражениях. Например,MIX > ssym S 2+23*START + 00 00 18 19 56 (0000075000) MIX > psym S + 00 00 18 19 56 (0000075000) MIX > weval S(3:4) + 00 00 19 56 00 (0000081408) MIX >
Наконец, если вы хотите узнать, каково десятичное значение выраженного пятью байтами и знаком слова MIX, вы можете использовать:
- команда отладки: w2d WORD
- Вычисляет десятичное значение заданного слова. WORD должно быть
задано в виде: знак (+/-), затем пять разделённых пробелами двузначных
десятичных значений, представляющих пять байтов, составляющих слово.
Обратная операция (представление десятичного значения словом) может
быть выполнена командой
weval. Например,MIX > w2d - 01 00 00 02 02 -16777346 MIX > weval -16777346 - 01 00 00 02 02 (0016777346) MIX >
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
6.2.3 Команды состояния
Просмотр и изменение состояния виртуальной машины (содержимое памяти, регистров, триггера переполнения и флага сравнения) осуществляются следующими командами:
- команда состояния: pstat
- Эта команда выводит текущее состояние машины, одно из следующих:
- No program loaded
- Program successfully loaded
-
Execution stopped (
nextexecuted) - Execution stopped: breakpoint encountered
- Execution stopped: conditional breakpoint encountered
- Program successfully terminated
- команда состояния: pc
- Выводит текущее значение счётчика программы, который в программе, не завершившей работу, хранит адрес следующей выполняемой инструкции.
- команда состояния: sreg A | X | J | I[1-6] value
- команда состояния: preg [A | X | J | I[1-6]]
- команда состояния: pall
pregвыводит содержимое указанного регистра MIX. Например,pregA выведет содержимое регистра A. При вызове без аргументов будут выведены все регистры:MIX > preg rA: - 00 00 00 00 35 (0000000035) rX: + 00 00 00 15 40 (0000001000) rJ: + 00 00 (0000) rI1: + 00 00 (0000) rI2: + 00 00 (0000) rI3: + 00 00 (0000) rI4: + 00 00 (0000) rI5: + 00 00 (0000) rI6: + 00 00 (0000) MIX >
Как можно видеть из этого примера, содержимое регистра выводится в виде: знак, значения байтов регистра и, в скобках, десятичное представление его абсолютной величины.
pallвыводит содержимое всех регистров, флага сравнения и триггера переполнения.Наконец,
sregустанавливает содержимое указанного регистра равным value, заданному десятичной константой. Если value больше максимального хранимаого в заданном регистре значения, туда помещаетсяVALUE mod MAXIMUM_VALUE:MIX > sreg I1 1000 MIX > preg I1 rI1: + 15 40 (1000) MIX > sreg I1 1000000 MIX > preg I1 rI1: + 09 00 (0576) MIX >
- команда состояния: pflags
- команда состояния: scmp E | G | L
- команда состояния: sover F | T
pflagsвыводит значение флага сравнения и триггера переполнения виртуальной машины:MIX > pflags Overflow: F Cmp: E MIX >
Значение триггера переполнения составляет или F n(false/ложь) или T (true/истина), а флага сравнения E, G или L (equal/равно, greater/больше, lesser/меньше).
scmpиsoverустанавливают значения флага сравнения и триггера переполнения.
- команда состояния: pmem from[-to]
- команда состояния: smem address value
pmemвыводит содержимое ячеек памяти в диапазоне [FROM-TO]. Если верхняя граница to опущена, выводится только содержимое ячейки с адресом FROM:MIX > pmem 3000 3000: + 46 58 00 19 37 (0786957541) MIX >
Содержимое памяти выводится и как пять байтов MIX со знаком, составляющие слово MIX, и, в скобках, как десятичное значение абсолютной величины хранимого числа.
smemустанавливает содержимое ячейки памяти с адресом address равным value, выраженному десятичной константой.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
6.2.4 Команды конфигурирования
Этот раздел описывает команды, позволяющие изменять поведение виртуальной машины. Эта конфигурация хранится в каталоге MDK `~/.mdk'.
Как можно видеть из описания, некоторые команды в качестве побочного
эффекта выводят на стандартный вывод информационные сообщения
(например, load выводит сообщение, информирующее о начальном
адресе загруженной программы). Эти сообщения могут быть включены и
отключены командой slog:
- команда конфигурирования: slog on|off
- Включает/выключает ведение лога информационных сообщений. Имейте в виду,
что сообщения об ошибках, а также сообщения о состоянии, требующие
использования команд, предварённых
p(preg,pmemи т.п.) выводятся всегда.
- команда конфигурирования: stime on|off
- команда конфигурирования: ptime
- Команда
stimeвключает/выключает вывод статистики времени выполнения, аptimeвыводит текущую статистику:MIX > ptime Elapsed time: 10 /Total program time: 11 (Total uptime: 11) MIX >
- команда конфигурирования: sedit TEMPLATE
- команда конфигурирования: pedit
seditуказывает команду, используемую для редактирования исходных файлов на MIXAL командойedit. TEMPLATE должен содержать управляющие литеры%s, отмечающие место, куда вставляется имя исходного файла. Например, если вы введёте:MIX > sedit emacsclient %s MIX >
при выполнении в
mixvmкомандыedit foo.mixalбудет вызываться команда операционной системыemacsclient foo.mixal.peditвыводит текущее значение шаблона команды редактирования.
- команда конфигурирования: sasm TEMPLATE
- команда конфигурирования: pasm
sasmуказывает команду, используемую для компиляции исходных файлов на MIXAL командойcompile. template должен содержать управляющие литеры%s, отмечающие место, куда вставляется имя исходного файла. Например, если вы введёте:MIX > sasm mixasm -g -l %s MIX >
при выполнении в
mixvmкомандыcompile foo.mixalбудет вызываться команда операционной системыmixasm -g -l foo.mixal.pasmвыводит текущее значение шаблона команды компиляции.
- команда конфигурирования: sddir DIRNAME
- команда конфигурирования: pddir
- Устройства MIX (see section 6.3 Блочные устройства MIX) реализованы в виде обычных файлов,
находящися по умолчанию в каталоге `~/.mdk'. Команда
sddirпозволяет указать иное расположение этих файлов, аpddirвыводит текущий каталог устройств.
Наконец, вы можете изменить командное приглашение по умолчанию
(`MIX > ') командой prompt:
- команда конфигурирования: prompt PROMPT
- Изменяет командное приглашение на prompt. Если вы хотите поместить
в конце приглашения пробел(ы), заключите prompt в двойные кавычки
(например,
prompt ">> ").
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
6.2.5 Команды Scheme
Если вы скомпилировали MDK с поддержкой libguile
(see section 1.5 Специальные флаги конфигурации), mixvm при вызове
запустит и проинициализирует встроенный интерпретатор Scheme Guile.
Это означает, что в вашем распоряжении (в командной строке mixvm)
имеются все примитивы Scheme, описанные в 3.4 Использование mixguile
и 8. mixguile, виртуальная машина на основе Scheme, а равно все остальные функции или ловушки, которые
вы определили в файле инициализации `~/.mdk/mixguile.scm'. Чтобы
вычислить функцию Scheme, просто введите её в командном приглашении
mixvm (см. примеры в 3.5 Использование Scheme в mixvm и gmixvm).
По сравнению с программой mixguile есть только одно ограничение:
вычисляемые в mixvm выражения не могут занимать более одной
строки. Вы можете преодолеть это неудобство, записав многострочное
выражение Scheme в файл и загружая его командой scmf:
- команда scheme: scmf FILE_NAME
- Загружает указанный файл Scheme и выполняет его, используя встроенный интерпретатор Guile.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
6.3 Блочные устройства MIX
Компьютер MIX оборудован набором блочных устройств для операций
ввода/вывода (see section 2.1.2.8 Команды ввода/вывода). mixvm реализует
эти блочные устройства как дисковые файлы, за исключением блочного
устройства 19 (текстовый терминал), которое перенаправлено на
стандартный вывод. При выполнении операции вывода на любом другом
устройстве (устройстве вывода), создаётся файл, название которого
соответствует нижеприведённой таблице, и в него записываются указанные
слова MIX в двоичном (для двоичных устройств) или ASCII (для символьных
устройств) виде. Файлы, соответствующие устройствам ввода, должны быть
созданы и заполнены до запуска виртуальной машины MIX (для устройств
ввода/вывода файлы могут быть созданы при записи программой на MIXAL
требуемых данных на это устройство, или же, если вам так больше нравится,
записаны вашим любимым текстовым редактором). Файлы устройств по
умолчанию находятся в каталоге `~/.mdk', это расположение может
быть изменено командой mixvm devdir (see section 6.2.4 Команды конфигурирования).
| Устройство | номер | имя_файла | тип |
| Лента | 0-7 | `tape[0-7].dev' | bin i/o |
| Диски | 8-15 | `disk[0-7].dev' | bin i/o |
| Чтение перфокарт | 16 | `cardrd.dev' | char in |
| Запись перфокарт | 17 | `cardwr.dev' | char out |
| Строчный принтер | 18 | `printer.dev' | char out |
| Терминал | 19 | stdout | char out |
| Перфолента | 20 | `paper.dev' | char out |
| [ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated on June, 9 2003 using texi2html
