Text
                    


©1 g® ЖАТ 80 /oHlight@hotmoil.com
ZX-SPECTRUM Программирование в машинных кодах. Москва, 1994
© ISLAND Подписано к печати 12.04.94 Формат 60X84/16 Печать офсетная Печ. л. 10,0 Тираж 3000 Зак. 305 Отпечатано на фабрике офсетной печати, г. Обнинск
1.1. Описание системы. Предисловие^^:: Почти невозможно поверить, что всего лишь за ^йКЖфирма SIN- CLAIR RESEARCH OF CAMBRIDGE изготовила и ц^дш«абкоЙ0:$СЮ.ТЬ1сяч микрокомпьютеров. Весной 1980 года был разработан микрокомпьютер ZX-80. разработка этой машины явилась большим успехом, посколькуйр был первыйёравни- тельно дешевый микрокомпьютер для любителей. 6дн^,..Юш..(%йклер и его лаборатория изготовила машину ZX-81 всего за 1Гб^^ЭЙНйбйёль была более совершенна по сравнению с ZX-80 и явилась развизйёййого компь- ютера с низким разрешением и черно-белымэ£раном. Но теперь мы имеем ZX-SPECTRUM. Эгамайшнабыла разработана по принципу ZX-80, ZX-81. Сделав это фирма-разработала^микрокомпьютер с высоким разрешением и цветным экраном. Однако с сожалением надо отме- тить, что ZX-80, ZX-81 были вьпеснень£Гхдтя обе являются прекрасными машинами. Они просты в работе, что прйЙйб:дйя.программиста, но это не означает, что SPECTRUM это трудная машина:;йЖжсп№льзования, но для того, чтобы от нее получить все, потребуется написаййфболее совершенных программ. Эта книга написана для: белее глубокого понимания работы с компьютером ZX-SPECTRUM в цеяом^Пнн;::::.. 1. Принцип работы миКрокбмпьУртерной системы. Всегда очень любопыттю'погрузиться в чтение, открывая кншу то здесь, то там; но компьютер являетё&ёамрй. логической машиной и каждый, кто попытается совершенствовать свои й^Ждниядолжен начать с самого начала. 1017 Описание ёистемы. Сам по себе SPEG^RUMifl^i^WpieT собой пластмассовый корпус. На верхней части располбженш:40клавип^ которые образуют клавиатуру. Сзади расположен выходной разъём для под ключения антенного входа телевизора, входпойфазъем, который соединяется с выходом магнитофона, разъем для подкз1ючё11ия:УВВ, принтера, микроприводов и так далее; разъем для под- ключения бйдЙ;йитавмя. На основнойгййёФйодитый микропроцессор Z-80 и другие элементы. Плата находиться в одном:корпусе, что и клавиатура. Клавиатура и основная плата соединены между собой^Ленточным кабелем. Система разработана таким образом, что она может отображать инфор- мацию на экране TV приемника или выводить ее на принтер или другое периферийное устройство. 3
1. Принцип работы микрокомпьютерной системы. 1.2. Логика работы. Рассмотрим связь между различными элементами микрокомпьютерной системы. Z-80 микропроцессор (МП) может обращаться к отдельным 65536 бай- там памяти (64к). Ограничением на непосредственную адресацию МП Z-80 является 64к. В версии 1бк SPECTRUM можно адресоваться только по ад- ресам от 0 до 32767, а в версии 48к SPECTRUM - доступны адреса 065535. Адрес задается в виде 16-битного числа. О представляется как 0000 0000 0000 0000, а 65535 как 1111 1111 1111 1111. адреса, выданные Z-80 поступают на адресную шину, состоящую из 16 линий, находящихся в высоком или низком напряжении (1 или 0) . Адрес можно описать в двухъ байтах по 8 бит. В отличие от адресной шины, шина данных имеет 8 бит, поэтому любые данные могут представляться как 0-255 в десятичном виде или 0000 0000- 1111 1111 в двоичном. Как часть логической концепции ZX-SPECTRUM, также важно рассмо- треть нормальный режим работы системы и обсудить. использование памяти компьютера. SINCLAIR RESEARCH выпускает SPECTRUM с 16к монито- рной программой и обеспечивает пользователя операционной системой (ОС) и интерпретатором БЕЙСИК (ИБ). По существу возможно вместо програм- мы монитор использовать МП Z-80 с программой в машинных кодах. При обычном использовании, ОС не требует со стороны пользователя каких либо сложных действий. Поэтому при работе SPECTRUM уже рабо- тает ИБ, как часть мониторной программы. Пользователь может сразу вво- дить или выполнять БЕЙСИК программу. Таким образом ИБ является подпрограммой ОС, а БЕЙСИК программа подпрограммой ИБ. Заметьте, что Z-80 сам по себе не может выполнять БЕЙСИК програм- мы, а только программу составленную в машинных кодах. Карга памяти стандартного 16к SPECTRUM представлена ниже и далее кратко описана. 32767 32600 7FFF 7F58 графическая область пользователя P-RAMT UDG 32599 7F57 стек GOSUB RAMTOP машинный стек указатель стека резервная память STKEND стек калькулятора STKBOT рабочая область WORKS область редактора E-LINE область переменных VARS 4
1.2. Логика работы. область БЕЙСИК программ PROG область информационных каналов CHANS 23734 5СВ6 карты микроприводов 23552 5С00 системные переменные 23296 5В00 буфер принтера 22528 5800 область атрибутов 16384 4000 область экрана 0 0000 ROM область ROM область. 16к ROM содержащие ОС, ИБ и генератор знаков (ГЗ) располагаются в адресах 0-16383 (16-ное O-3FH5) . Карта памяти экранной области. бк памяти с 16384 до 22527 ( 4000-57FF ) обеспечивают высокое разре- шение на TV. Важно, что расположение экранной области зафиксировано в аппаратуре SPECTRUM и не может меняться программно. Имеется однозна- чное соответствие всех битов области и точек экрана TV, и следующие вы- числения показывают, что число битов в бк памяти равно числу точек экрана. В бк - 1024*8*6=49152 битов. Количество символов в 24 строках экрана (каждый символ представлен в виде матрицы 8*8 точек) равно 32*24=768, следовательно всего будет 768*64=49152 точки. Экран TV разбит на 3 части. Строкам с номерами 0-7 соответствуют байты памяти 16384-18431 (4000-477F), строкам 8-15 - байты 18432-20479 (4800-4FFF), строкам 16-23 - байты 20480-22527 (5000-57FF). Из этого следует, что каждым 8-ми строкам экрана соответствуют 2к экран- ной области. Рассмотрим эти 2к памяти для верхней части экрана (строки 1-8). Пер- вые 32 байта экранной области соответствуют первой линии первой строки. Следующие 32 байта соответствуют первой линии второй строки и так далее до восьмой строки. После этого очередные 32 байта соответствуют второй линии первой строки. Следующие 32 байта соответствуют второй линии вто- рой строки и так далее. После первых восьми строк аналогичным образом устанавливается соответствие для следующих восьми строк и так далее. 5
1. Принцип работы микрокомпьютерной системы. Следующий пример все наглядно показывает: 10 FOR А=16384 ТО 22527 STEP 1 20 РОКЕ А, 255: PAUSE 1 30 NEXT А 40 PAUSE 0 Область атрибутов. Экран имеет 768 символов, каждый из которых имеет 8 цветов "бумаги", 8 цветов "чернил", признак мигания, признаки повышенной или пониженной яркости. Каждому символу экрана соответствует один байт из области атри- бутов. Область расположена по адресу 22528-23295 ( 58OO-5AFF). Зависимость между символами и байтами атрибутов несложная, так как байты просматриваются подряд для каждой строки экрана слева направо. Байт из области атрибутов имеет следующий формат: 7 6 5 4 3 2 1 0 мерцание яркость цвет бумаги (3 бита) цвет чернил (3 бита) следующий пример демонстрирует вышесказанное: 10 FOR А=16384 ТО 22527 STEP 1 20 РОКЕ А, 15 30 NEXT А 40 FOR А=22528 ТО 23295 STEP 1 50 РОКЕ А, 161 60 NEXT А 70 PAUSE 0 Буфер принтера. Буфер принтера расположен по адресу 23296-23551. Системные переменные. 182 байта по адресу 23552-23733 (5С00-5СВ5) отводятся под системные переменные, которые используются для организации работы компьютера. Карты микроприводов. Эта область памяти начинается с 23734 (5СВ6) и в стандартном SPEC- TRUM представлена теоретически, то есть область не используется до тех пор, пока микропривод не будет подключен. 6
1.2. Логика работы. Область информации о каналах. . Специальная область памяти, расположенйаяскдрёеа^указашюго в пе- ременной CHANS. CHANS находится по адресу 2363iii-23632:(5C4F-5C50). Область переменной длины. Концом области служит маркёр^Ео;значением 128 (80 16-ричное). В системе SPECTRUM обмен данными с периферийными устройствами (дисплей, клавиатура, принтер и так далее) осуществляется посредством си- стемы ввода-вывода, которая включает в себя каналй;Й;ЙОТОКИ,..::^р; Канал - совокупность программных и аппаратных ёрёдёй^ббёспечива- ющих обмен данными с периферийным устройством. В стандартном SPEC- TRUM без подсоединенных микроприводов и^ййСя^. основньгх канала: ф канал К - обеспечивает ввод от клавййТурыййВШ^нанижпюю часть экрана; ii: ф канал S - только вывод на верхнвноЁчасть экрана; ip' ф канал R - только вывод в рабочуюробпасть памяти, которая по тре- бованию может быть увеличена; .. ф канал Р - только вывод на принтер. Кроме перечисленных каналов, могут быть дополнительные каналы ("М" - канал микродрайва, "N" - канал локалыаой. сети, "Т" и "В" дополнительные каналы для принтера) и программист мбжёт;создаткканал самостоятельно. Информация о каналах находится в облЖй£)йфёс которой содержится в системной переменной CHANSJ;:::.. Стандартные каналы описываются блоками .пр пять байт, структура ка- ждого блока Следующая!^::::::.. байты 0,1 - адрес процедуры вывода (PRINT #); байты 2,3 - адрес процедуры ввода. (INPUT #); байт 4 - ИМЯ канала Канал создаваемый пользователем (Программистом) описывается блоком произвольной длины, црйё менее чем 11 байт: байты 0,1 - адрес йроцедурывывода (PRINT #); байты 2,3 - адрес:йроцедурйВйОД£:(ШРиТ #); байть» 4 - имя канащИШШ^” Ш бай^ 5,6 - признак пользовательского канала (число "1234"); 6afi^Ei7j8 - адрес закрьшающейироцедуры (CLOSE #); б^йтъ1;9:;1Й^: Дшща данного блока (не менее 0В 1б-ричное); байты 1Т.:лн:й^бая:Дополнительная информация. В стандартн6й $РЁСТВиМ, с учетом 4 каналов и маркера конца, область занимает память 23734:*23754\(21 байт). Обращение к каналу проводится через поток. К одному потоку может был» подключен только одиц:канал, хотя к одному каналу может быть под- ключено несколько потоков. В БЕЙСИКе это осуществляется с помощью команд "OPEN #" и "CLOSE #". 7
1. Принцип работы микрокомпьютерной системы. Например: OPEN #6, "К" .-::«»йД»ё«йчит1э к потоку б канал "К": CLOSE #2;$ ледвж: Шомить от потока 2 канал, который был к нему В^йстеме SPECTRUM к потокам 0, 1, 2, 3 подключены стандартные каналы; фупоток 0 - к каналу "К"; ф:;йрг(Ж:1:^жжмалу "К"; ф гййй&ЗНЖйаналу "S"; ф поток 3 - к каналу,"?". При вводе или выво^дащтых с помощью команд БЕЙСИКа INPUT и PRINT обычно потокнёзадается (умалчивается), это соответствует (по умо- лчанию) тому^чтокоманда PRINT работает с потоком 2, а команда INPUT - с потоком 0,:йо номер потокзможно задать следующим образам: PRINT #3;"PROG" - это приведет.кщёчати слова "PROG" на принтере, то есть аналогично команде LPRENT;"PROG". Информация бйоДюйЬчении потоков к каналам находится в системной переменной STRM&- Всего в системе 16 потоков с номерами от 0 до 15. Область Бейсик-программ (БП). Область содержит посЖдоваУельные строки цро^Мм. Ее размер опре- деляется количеством crpdKj;i;ii;:: Начало профаммы задается в переменной РРОО (адрес 23635- 23636 (5С53-5С54)). Заметьте, что в стандартном: SPECTRUM переменная PROG указывает на адреса 23755 (5ССВ1й:ТаК до тех пор, пока не будет подключен микропривод или использован дополнительный„канал. Формат строк БП: Первые 2 байта любой строки содержат Номер строки и прич^ННачале храниться старший байт, а затем - младший. В 3 и 4 байтах хранвпъсяг дтшна строки, причем сначала младший байт, а потом старййй^Вайты с 5-ib до символа ENTER (0D 16-ричное) являются вдформаяивиной частью строки в кодах SINCLAIR и ASCII, внутри строки;ййбрат6ры разделены символом 58(ЗА). Заметьте, что десятичные числа накапливаются в строках БП, т.к. представляют из себя последовательности ASCII символов, за которыми идет NUMBER (код 14, (ОЕ)). 8
1.2. Логика работы. Следующая демонстрационная программа подробно показывает: 10 FOR А=23755 ТО 23817: PRINT A; TAB $ТЖ&:А;.:ТАВ 15; CHR$ PEEK A: NEXT А Область переменных. Начало области, описывающей все переменнысЬзадается в переменной VARS - адреса 23627-23628 (5С4В-5С4С). Начало Ьэтой области; Остается постоянным во время работы БП, однако в связи с нбявлст!ИСМП<й>1х пере- менных ее длина будет меняться. Граница области задается маркером конца (код 128). Следующая программа содержит тольконперёменные оператора FOR NEXT: 10 FOR А=23804 ТО 23823: PRINT A; TAB 9; РЕЕК А?:ЙеУт А Область редактора. В области отражается строка, которую ввщщгшщ редактируют. Начало области задается в переменной E-LINE - байты 23641-23642 (5С59-5С5А). Так как область редактирования представляет собой динамическую об- ласть, то есть она меняется при использовании, то не целесообразно давать пример на БЕЙСИКе. Рабочая область. Эта область используется для вьшолйениябрльшого числа различных задач, например ввод данных, соединение в;ц^прчку строк и так далее. На- чальный адрес области задается величиной, содержащейся в системной пе- ременной WORKS , которая сама находится по адресу 23649 и 23650 (5С61.5С62). Когда же требуется доподпшодьное место в рабочей области, то эта область памяти расширяется. Пб&гёгйспользования рабочая область освобождается. Это зндчЭТ,;;Что она сводиться к 0, чтобы избежать большего количества байтов, чем это необходимо. Еще раз отметим;; чтогюск6льк.у;;эта область является динамической, невозможно привести пррстбй примерща БЕЙСИКе. Стекикалькулятора. Э£о бчвндважная область памяти. Она начинается с байта, определен- ного систеьшод;тв^цашой STKBOT , которая сама находится по адресу 23651-23652. область раёпрострайяется до байта, заданного в системной пе- ременной STKEND (23653-23654). Стек калькулятора используется подпрограммой ос (находящейся в ROM-области), называемой ’калькулятор". Эта подпрограмма выполняет различные арифметические операции. Использование стека калькулятора и самого калькулятора будет описано далее. 9
1. Принцип работы микрокомпьютерной системы. Резервная память.:;:^. Область памяти: между стеком калькулятора и машинным стеком пред- ставляет собой: количество па1мяти, которым располагает пользователь. Машинный стёк. МП Z-80 должен иметь рабочую область для своего использования и это называется машинный, стек. Указатель стека Z-80 всегда показывает на пос- ледний байт, которыйдолжен заполняться. Машинный стек будет подробно рассматриваться дальше. GOSUB - стек. Стек расширяется в памяти вниз и каждая команда GOSUB требует па- мяти в GOSUB-CTeKe.iCaMbri старший байт содержит номер операнда в пре- делах строкш.Ъейсик-программы, к которой должен быть осуществлен возврат. Второй байт содержит младшую часть номера строки и третий байт содержит ее старшую частьу::;ф;:;Ь: Демонстрацид.следующёй Программы показывает стек GOSUB, который используется для сохранения данных возврата при организации вызова под- программ. Демонстрационная программа GOSUB-стека для SPECTRUM 48к: 10 GOSUB ..J: 20: STOP 20 GOSUB'^.i-piJ^" I 30: RETURN 30 GOSUB J 40: RETURN 40 FOR А=653бИЬ 65557 STEP A, PEEK A: NEXT A: RETURN Два байта выше GOSUB-стека всегда содержат величины 0 и 62 (00 и ЗЕ) и они представляют собой’неправильный номер строки. Программа БЕЙСИК при выполнении лишней команды RETURN пе- рейдет к неправильному номеру строки и выдаст;ёообшение "RETURN без GOSUB". Примечание: фирма SINCLAIR насовсем уверенав написании GOSUB. Системная переменная RAMTQP ,: которая занимает байты с. адресом 23730 и 23731 (5СВ2.5СВЗ) содержит адрес ячейки, в которой храниться код 62. Эта ячейка рассматривается как последняя ячейка системной области БЕЙСИК. "Т*.. ..иншВЬЗЬ. Графическая область, определенная пользователем. До тех пор, пока системная область БЁЙСИКавгёлзменяется вследствие использования команды CLEAR , последнйсН168 Ячеек памяти содержат представления 21 графического символа, определенного пользователем. Адрес самого старшего байта памяти всегда находится в системной пе- ременной P-RAMT , расположенной по адресу 23732,23733 (5СВ4.5СВ5). 10
2.1. Введение В стандартном 16к SPECTRUM величина,:срдержащаяся в P-RAMT до- лжна быть равна 32767 , поскольку это показьтвайг что все 16к памяти находятся в рабочем состоянии. Результатом выполнения следующей строки: PRINT РЕЕК 23732+256*РЕЕК 23733 ""==РрШр является величина 32767 (в 48к SPECTRUM - 65535). 2. Функции И команды 2.1. Введение Ожидается, что читатели этой книги уже^будут'йме'гь некоторые знания о БЕЙСИКе SPECTRUM. Эта глава обсуждает команды БЕЙСИК» и функций/« постарается про- яснить моменты, не освещенные детально: к других пособиях по БЕЙСИКу. Интерпретатор БЕЙСИК для SPECTRUM распознает 50 различных ко- манд и 33 функции. Каждая из них здесь будст/й&уждена подробно. Они будут рассмотрены в алфавитном порядке, так чтббЫ/ёсылки на них были проще. Управляющие символы обсуждены в пункте 2А;' 2.2. КомандьУWRCMKa. ВЕЕР X,Y. По этой команде подается сигнал в дйнамик^Х-длительность в сек., Y- высота звукового тона, от среднего йДо”, в десяпйчном диапазоне чисел -60 +69,8. X или Y, или оба могут быть выражениями. Интересно отметитъ.чтаВЕЕР не может бьпъ прерван, поскольку про- грамма, содержащая команду ВЕЕР не прерывается по клавише BREAK. BREAK возможен только в конце оператора; содержащего команду ВЕЕР. BORDER М. Имеется 8 возможных цветов,, которые могут бьпъ переданы на фанич- ную область (бордюр ТУ-экрана.^И;иф1ьзуются целые числа от 0 до 7, одна- ко допускается значення. 0Т:9;5 дЬ 7.5:^как результат выражения, поскольку М округляется до целбЖНР-^" р П°;:>Команде BORDER выходной^Сигнал поступает на порт 254 и это може? $^Ж;ВЫрджено операторОМ!Н-:: 0UT2iMOhpp::::.. (гае М=2 дай КрасйЫй бордйр). И°,Рит и 8ОЕОЕВразййны. Цвет получаемый бордюром по команде OUT - "временный", в то время как BORDER дает постоянный цвет, храня- щийся в системной переменной BORDER (5С48 16-ное). BORDER 2 и EN- TER делают бордюр красным' OUT 254, 1 и ENTER - бордюр будет голубой временно, а потом опять вернется красный цвет. 11
2. Функции и команды БЕЙСИК. Отметим что BORDER хранит цвет бумаги нижней части TV экрана. BRIGHT Это первак из команд элемента цвета, все эти команды могут быть ис- мгальзовапы,;лйбо только как команды в операторе БЕЙСИК (в этом случае действие'постоянно), либо включены в оператор печати и тогда их действие временно. М - может быть выражением, но результат должен быть целым числом :0,1 или 8. при М=0 экран имеет нормальную яркость, при М=1 любая последующая наддись будет сделана на подсвеченной бумаге. Использование BRIGHT!:И GLS-простой путь сделать всю область экрана яркой. При М=8 будет использовано постоянное значение из соответствующих системных переменнвдХ;;:::;;;:.;::. Бели BRIGHT :исйрльзуетёя. самостоятельно, то ее действие постоянно, а если в другом, операторе, то ее действие временно. Например =£'' 10 BRIGHT 0 : 20 PRINT "BRIGHT::«::H0RMAil:" 30 PRINT BRlGHTnrGROG" 40 PRINT "BRIGHT - CIRCLE X,Y,Z.:( Эта команда рисует окружность с радиусом Z и с координатами центра X, Y. Z - берется как абсолютное целое.значение а X, Y используются как плавающие величины. Самая бойыпая окружпость пра радиусе 88 единиц получается оператором CIRCLE 127.5, 87.5, 88, а. оКрУжность 0-вым радиу- сом представляет точку. Любая команда цвета мбжёт быть включена в опе- ратор CIRCLE и ее влияние всегда: будет временным. По некоторым параметрам команда медленней не точна, но очень полезна. CLEAR, CLEAR N. В системе SPECTRUM имеется такое .большое количество памяти RAM, что использование команды CLEAR само по себе вряд ли будет полезным. Однако расширение команды возможностью перемещать указатель RAMTOP делает ЕЕ очень сильной . RAMTOP указывает иаверхнюю границу системы БЕЙСИК и содержимое памяти ниже RAMTOP может изменяться, кто вре- мя как любое содержимое выше RAMTOP остается пеизменцОД'ДО$ё после выполнения команды NEW. Нижняя граница для N возможна нё-мёнее чем 23821. Иначе SPECTRUM выдает звуковой сшнал. ^о: говорит о том что разрешенного RAM не хватает на задачу. Верхней границей N является для системы 16к 32767, а для систем 48к 65535., ^пользование CLEAR N с соответствующим значением вызывает перемещение стека GOSUB в область, отведенную для графики пользователя. Поучительно выполнить следующее упражнение: 12
2.2. Команды БЕЙСИКа. Ввести CLEAR 32767 или (65535) измешпъ:Курсор на G и вывести ли- тералы с L по U. нажать на клавишу SPACE и секунд наблюдать изменение графики пользователя, поскольку каждоР йаЖЙтне.клавиши при- водит к использованию машинного стека. CLOSE #N. Используется с микроприводом. ПредназначенйВдля закрытия потока с номером N (N может принимать значения от 0 до CLS. Это очень простая команда, которая меньше: чем за 1/10 секунды выпол- няет много работы. Команда CLS очищает диспл^ный файл. Она обнуляет адреса с 16384 по 22527 (40000- 5800) и ;-ёбрасьша^:байтм 'атрибутов по адресам 22528-23295 (58OO-5AFF). Байты атрибутов не обнуляются, а копи- руются из системной переменной ATTRIB которая содержит постоянные атрибуты. По команде РОКЕ значение переменной ATTR-P, которая поме- щается по адресу 23693 (5C8D) может быть изменёнй?В переменной ATTR-P бит 7 отвечает за мигание, бит 6 за яркость, биты З^за цвет бумаги, биты 0-2 за цвет чернил. CONTINUE. В большинстве требуемых случаев эта команда сработает хорошо, но ко- гда пользователь выполнит несколько команд непосредственно, SPECTRUM зациклится и сможет работать только по Клавише BREAK. Существует 2 основных аспекта команд^^-й позволяет пользователю использовать в программе БЕЙСИК оператор STOP и тогда не требуется использовать клавишу BREAK; пользователь в этом случае может проверить переменные, установить переменные й^изменить программу БЕЙСИК. Ис- пользование операторов STOP и CONTINUE очень облегчает отладку про- грамм. :Г Второй аспект позволяет повторять выполнение после исправления оши- бок. Например если нрогрз^аРбстаййвилась по ошибке "VARIABLE NOT FOUND"* то переменная может быть определена в непосредственном режиме и оператор заново запущен по команде CONTINUE. 6 системных переменных NEWPPS, NSPPS, PPS, SUBPPS, OLDPPS и OSPPS ikiii^aiwTca некоторым образом в выполнение команды CONTINUE. COPY. ’ Это очень простая команда» Верхние 22 строки TV экрана посылаются на принтер. Команда COPY одна из немногих команд, которые останавли- вают часы реального времени на время выполнения команды. Это можно видеть по системной переменной FRAMES до и после использования кома- нды. 13
2. Функции и команды БЕЙСИК. DATA Е,Е... Эта команда, котор&гмбжет использоваться только в программных стро- ках, определяет СПИСОК данных. Хоргэтр-йупоминается в различных описаниях, но становится очень ясна;чга;рассмотрени0:элементов в операторе DATA как выражений явля- ется1 особенностью, делающей эту команду очень полезной. Более детально см. READ, RESTORE,^ БЁ>Е$рА{в:г)=Е, DEF FN A$(A....Z)=E. Команда DEF FN очень мощная. Пользователь может определять до 52-х функций - 26 числовыхн;2б:строковых. Имена используемые для функции, должны бьп> одинарными литерами (+$ для строк) и они могут быть имена- ми, используёмытЩЛДе-нибудьКак простые переменные. Существует небо- льшое ограничение на имена аргументов, так как они тоже должны быть одинарными литерами, (+$ для строк). Поэтому может бьпъ не более 52-х аргументов для одной функций. Выражение определяемое функцией, может быть любым дающим числовой или строковый результат. DIM А(Е1.....Ёк), DIM A$(EL»...Ek). Команда DIM удаляет существующий массив с тем же именем и затем устанавливает новый. Числовьте массивы обнуляются, а в строковые заноси- тся литера пробел. В сйётёме SPECTRUM вся индексация начинается с 1. Достижение же индексом 0-го значения является ошибкой. Необходимо знать, что в символьных массивах размер строки фиксирован и он опреде- ляется значением последнёго^элемента размерности массива. Например : DIM А$(5,10) означает создание строкового массива А$ из пяти строк, длина каждой из которых равна десяти символам. Возможно обращение как к це- лой строке (LET A$(5)="PRINT!/hhtoh строке присваивается указанное зна- чение), так и к отдельному элементу строки (LETiA$(4,5)="R"). DRAW X,Y; DRAW X,Y,Z..;;h!Hhh::;. Эта команда рисует линию от текущей поЗищщ;(но не включая ее) на расстояние X по горизонтали и Y пр вертикали; Если аргумент Z определен то рисуется дуга вместо прямой линии^.должно быть определенвёйрадиа- нах, при Z=PI (3.14) получается полуокружность. При положитейьЩмх зна- чениях дуги рисуются справа от того места где бы быдац^МаяЛийия, i при отрицательных слева, любая из команд цвета может :6бгп> включена в (итера- тор DRAW, где ее влияние будет временным;;;;::;-;::;::-:"” ’ ERASE. Используется с микроприводом. 14
2.2. Команды БЕЙСИКа. FLASH М. Эго вторая команда управления цветом. Кйиа;пна::используется одна в программе на БЕЙСИКе, ее влияние постоянно. Нанкйга». используется включением в оператор печати, ее влияние временн(к:;::::::":::нШШ::::...„ Как и BRIGHT может принимать значения О,Л, 8. при№=Ф'Н6бЬасть литер не мигает, при М=1 они мигают, при М=8 будет использоваНрцЬсто- явное значение. FOR А=Х ТО Y STEP Z. Команда FOR наиболее интересная команда и обытаоюЁй:ШЮхо пони- мается, хотя и широко используется. Задачи, стоящие перед интерпретатором?:1Ш^йиимеет дело с командой FOR таковы: ::=Ч£нН::::::: 1. Удалить любые переменные с тем же именем (А) и Жбыё управляющие переменные с тем же именем (А). 2. Добавить к существующим переменньЭДЯОДЖ управляющую переменную (А). Эта переменная требует 19 байтов памяжПервьш байт содержит имя переменной. Следующие 5 содержат начальное значение цикла (X). Следующие 5 байтов конечное значение цикла (Y). Следующие 5 байтов значение приращения: (^^Последние 3 байта содержат инфо- рмацию о цикле: первые 2 указьЙЙОТ^мер с’фоки в которой записан оператор FOR, а последний - номер.юпёратора^в строке, увеличенный на 1. таким образом после окончания цикла будет выполняться следу- ющий оператор, вне зависимости находится он в той же строке или нет. Если начальное значение, предельноеяначение и шаг целые числа от -65535 до +65535 то операция вьшёлйяётся на 20% быстрее. Сле- дующая программа демонстрирует содержимое управляющей перемен- ной команды FOR . Заметьте что оператор FOR в строке 10 формирует переменную под имЬйсм А; которая в дальнейшем в про- грамме не используется. 10 FOR А=1.6 ТО 2.;НТЁР 0.1 20 LET V=PEEK 236^7+256л₽ЁЁ^^Зв28-1 30 F0R:.B=1 ТО 19 40 PRINT в, PEEK (\W? 50 aii6aB^;B:^ET;y=V+25 и увидите контрольную переменную В. 3. Третье дейё^ЙсЖёДприиимаемое оператором, является очень специфи- чным. В SPECTRUM не существует ошибок, вызванных установлени- ем шага в неправильном направлении. Это значит, что строка, подобная FOR А=2 ТОО STEr 1 допустима. Однако это действие приводит к полному игнорированию FOR NEXT-цикла. Это может быть показано изменением продемонстрированной выше программы следующим образом: 15
2. Функции и команды БЕЙСИК. ю for а=1.6 то 2;.ше₽ -0.1 50 NEXT А и программа-будёт успешно работать, но не будет никакой печати. Эта возможность пёртпрьпивать через целые циклы, может быть и преимущест- вом ;(^;йозваляет распространить ограничения на 0) и недостатком (ожи- даемый: результат не появляется вообще). F&RMAT F.,..::ir ИсПОШ^уетеЯ::С! микроприводом. GO sBF" Эта команда пршюдитк ^выполнению подпрограммы, которая начинается со строки с номером :Ы;: Ё^ли строки с номером N нет, то будет выполнятся подпрограмм^РаЧиНая со строки следующей в порядке возрастания за N. после выполнения подпрограммы правление возвращается оператору следу- ющему после оператора GO: ЗЕЛкСледующая программа показывает, что в SPECTRUM 48к GO ЗУВстек начинается с адресов 65363-65365 : 10 GO SUB 20: : 20 FOR А=1 ТО 3:;:PRINT A, PEEK;W62+a): NEXT А важным свойством БЕЙСЖажляётся то, что он позволяет командам GO SUB и GO ТО делать управляемые переходы. Эго определяется тем, что в качестве параметра в командах! GO SUB и GO ТО может использоваться, переменная, например: Ш. Ji ...-j 10 LET A=30 '! ...::;;ii:iiSBl 20 GO SUB A: STOP : 30 PRINT A 40 RETURN GO TO N. Это очень простая команда перехрда к. строке N. следующей строкой является строка N или первая строка ;после;:Н. команда GO ТО помещает адрес перехода (номер строки) в системные Переменные NEWPPS и NSPPS, расположенные в 23618-23620 (5С42-5С44). Переход к операторам не явля- ющимися первыми в строке, в обычной:практике не допустим. ..nhiiiii: IF X THEN S. В системе SPECTRUM значение 0 соответствуем лйпиескбму значений "ложь", а любое значение отличное от 0 логическому значению "истина". Команда выполняет действие S и другие операторы в этой строке, если зна1 челне X истинно. Эта команда работает хорэдПо, но следующая программ* написана, чтобы показать, используя повторное деление что происходит, ко, гда значения никогда не становятся ложью . 16
2.2. Команды БЕЙСИК*. 10 LET А=1 20 IF NOT A THEN PRINT A: STOP 30 PRINT А 40 LET A=A/2 J 50 GO TO 20 Ш. h.' значение в команде IF никогда не станет "истиной" (значение.:# будет распечатываться бесконечно). Если строку 40 поменять;наЬЕТ А??А'*0.5 то значение "ложь" будет достигнуто после того как распс«ш»ёкд;6экранов. INK N. Эго 3-я из команд элементов цвета. КогдаГонийснользуется самостояте- льно ее действие постоянно, а когда добавляется в опёраздъпвчатн - времен- но. Значение N может бьпъ от 0 до 9. 8 [основных цветовое SPECTRUM закодированы от 0 до 7 и это ясно видно ^клавиатуре. Использование INK 8 при печати дает цвет, хранившийся впатрйбутах (постоянное значение). Использование INK 9 однако немного болеёё)К)Ж11о::Чернила становятся только черными или белыми в зависимости от цвёганбумаги. Когда цвет бумаги черный, красный, синий, фиолетовый - цвет чернил белый, когда зеленый, голубой, желтый или белый -:;пкт:чернил черный. Действие посто- янной команды INK состоит: для Н=0-7устагавливаются биты 0-2 перемен- ной ATTR-P; для N=8 биты 0-2 переменной МАЗКЖдля N=9 бит 5 P-FLAG . Если команда INK имеет временное, действие тО устанавливаются соответ- ствующие биты временных системных переменных. INPUT... Эго очень мощная комапда,опа позволяет совместно с элементами пе- чати добиваться желаемых резул^атЗДЁс;;.. Пример: 10 INPUT "NAME PLEAS£M:A$;CHR$ 13;=pAGE PLEASE":8$ 20 PRINT AT 5,0; "NAME";TAB::7:;:A$;CHR$ 13; "AGE";TAB 7;B$ использование INPUT позволяет помещать в строковую переменную всю введенную строку. lb INVERSE N. / Управления цветом.'Эффект может быть временным или посто- TMvrroenD 1 цвета чернил и бумаги меняются местами а при INVERSE 0 - нормальное значение цвета чернил и бумаги. При постоянном режиме по команде устанавливается бит 5 P-FLAG, а при временном бит 4. LET V=E. Значение Е присваиваете# Переменной V. ИБ ищет среди существующих переменных переменную V, преобразует ее, если это необходимо, или созда- ет заново, если переменная V не найдена. Далее ИБ вычисляет значение Е и 17
2. Функции и команды БЕЙСИК. присваивает его перемештоигУ. Переменная V может быть различной : чис- ловая переменная, строковаяпеременная, элемент числового или строкового массива. Выводит листинг программы начиная со строки с номером N. допускает что Величина N=0 до tqX: пор пока она не будет определена другим способом. Если сорока существует тогда она становится текущей строкой и обознача- ется курсором, Особепйостью системы является то, что LIST 49172 например будет такои^жё: как LIST 20. LLIST N. Посылает листштгщю^ на принтер начиная со строки с номером N. N становтпся: текущей строкой. LOAD. Имеет много различных оттенков и позволяет загружать программу БЕЙСИК, массивы переменных и блоки кодов. Информация (код или про- грамма) записана на? магнитной ленте в 2-х частях. 1-я представляет 17-бай- товый заголовок, блок кодов. Каждая из этих частей использует одинаковый формат единичных битов^ Который в 2 раза длиннее 0-вых битов. В SPECTRUM используется головной маркер (+00 для заголовка и +FF для блока кодов) и завершйюпотй байт четности после заголовка и блока кодов. Блок заголовка разбит на 5 частей; 1. Одиночный байт информации который равен 0 д ля программы БЕЙСИК, 1 д ля числового массива,. 2 для массивов символ ов>3 - для блока кодов. 2. Следующие 10 байтов содержат название; файла. ’Название больше 10 символов не применяется. 3. 2 байта которые содержат;рбшую длину блока кодов. 4. 2 байта, которые для программы содержат начальный номер строки или адрес загрузки блока кодов. 5. 2 байта, которые для программы содержат длинурбласти программы. Блок кодов загружается в требуемую область RAM как указано в заго- ловке. LPRINT. Вызывает посылку элементов печати на принтер (аналогично:PRINT). MERGE F. Загружает программу и ее переменные с мапштной ленты и соединяет с существующей программой и ее переменньй^^КЬм^нда выполняет обрабо- тку новой программы как блока данных, который должен быть загружен в рабочую область. Далее области протраммьг сравниваются строка за строкой и новые строки копируются из рабочей области в основную область програм- 18 1
2.2. Команды БЕЙСИКа. мы. Область программы переопределяется и расширяется если необходимо. Поскольку строки соединены подобная операццякоёдлняет и область пере- менных. NEW. Эго команда повторного запуска системы без изменения системных пе- ременных RAMTOP, P-RAMT, RASP, PIP, ЦГХз^графика, определенная пользователем при этом не сбрасывается. NEXT A. Команда должна рассматриваться как команда, которая выполняет рабо- ту в цикле FOR-NEXT В котором управляекаяперсжцная установлена (см. FOR выше). Этапы выполнения команды СЛёДуЮЩйё?^р;;;::::.::Н: ф к начальному значению переменней цикла прйб^Оется значение шага; ii” ф получившаяся величина записываетсяиа.место начального значения и сравнивается С конечным значениём^н:^::;:::... ф если начальное значение больше конечн6гоцрц:ноложительном ша- ге или меньше конечного при отрицательномЩаге, то выполняется оператор, следующий за комэндрй.НЕХТ; ф в противном случае производигёящёрехрд на оператор, следующий за командой FOR, которая создала эту i переменную цикла. OPEN #N,X$. Для использованняемикроприводом. Однако^ возможно открывать и за- крывать потоки дагщых следующим образом;Ш;^;: Ф строка PRINT #5;“ WORKS” не будет работать до тех пор, пока поток данных номер 5 не будет открыт использованием строки OPEN #5,”S". Строка CLOSE #5 - закрывает поток. Следующие строки по- казывают ввод с клавиатуры и вЫВбЙ на экран: 10 OPEN #5, "К" 20 INPUT #5;А$ / ..-шШШШЬь 30 OPEN #5, "S" "1L 40P^’nt#5;A$ J- OtiHyNi;.. Команда вюздоляёт .посылать сигналы на выходной порт из БЕЙСИКа. В пункте BORDER было показано как порт 254 управляет цветом бор- дюра: разные цвета были даны для случаев от N=0 до N=7, в тоже время порт 4 может использоваться д ля управления звуковым динамиком и следующая рограмма показывает как это сделать. С помощью программы можно получить оценку времени которое требу- я для того чтобы интерпретировать оператор (--), так как быстрый 19
2. Пункции и команды БЕЙСИК. ): OUT 254,7: GOTO 10 оператор даст высокий звук;: а медленная интерпретация оператора даст ряд щелчков. 10 OUT 254:<:2в В программе оператор может быть например таким Pfti NT; RAND, LET А=$; или РОКЕ 0,0 OYER N. Команда управления выводом на экран. При N=1 содержимое позиции экрана объединяется с выводимым на экран символом по правилу "исключа- ющее или". При N=0 выводимый символ затирает символ, находящийся на экране в позиции печазиУч:^:Л::; PAPER Jgjp™ Команда цвета. Может бьггЬЦостоянной или временной. N может при- нимать значения от 0 до 9. пкчнн:;:; Использование Н от О дп ? очень простое. При N=8 будетиспользовано постоянное значение. Использование PAPER 9 очень полезно при оформлении заголовков. Ко- манда устанавливает, что цвет бумаги згобласти будет контрастным по отно- шению с используемьтмцветпинернил, следовательно, при светлых чернилах - зеленый, голубой, жёлтый, белый - бумага будет черной; а при темных чернилах - черный, синий,; красней, фиолетовый - бумага будет белой. Фактическим действием PARER является: ф для N=8 устанавливается бит 3, 4, 5 переменной MASK-P ф для N=9 бит 7 переменной P-FLAG:,:aiB?w N=()-7 биты 3,4,5 пере- менной ATTR-P. PAUSE N. Эта команда останавливает &80 на N прерьййщй. Единственной рабо- той, которая выполняется за время паузыуявляется опрос клавиатуры. Пери- од паузы закончится после N прерываний или при нажатии клавиш. Если N=0 то пауза будет длиться до первого нажатияналаибую клавишу. PLOT X,Y. Экран представляет собой 256*176 элементов изображения,: каждый из которых может управляться отдельно командой РЕОТ>:Вббь1чной работе команда PLOT установит бит RAM соответствующий битуизображения. Ко- манда делает также этот элемент изображейия ккуйтим в системной пере- менной COORDS, который записывает координаты последнего элемента изображения. Любой из цветовых элементов может использоваться в команде PLOT. 20
2.2. Команды БЕЙСИКа. POKE N,M. Команда позволяет вводить значение М п#;Й]"""” ” память. М может принимать значения от -255 до . _____„_____ вводится непосредственно, а к значениям от -255 до .4:прйбавляегся +256. йрссу ^непосредственно в +255?ЗЙачения от О до 255 PRINT.... Команда позволяет выводить на TV-экран различные элементы;::Элеме- нты отделяются друг от друга разделителями; - элементы вьшодялся под- ряд; - выполняется табуляция к следующей половшв[ётракирПозицию экрана можно также указать с помощью TAB и АТ. Элементы могут быть элементами цвета, дейёпще.которых будет времен- но, числовыми выражениями или строковь1Мй;(ё1^ковре.выражение объе- динение двухъ или более строк символов в:одну пугёметъжбвки, например: "PROG"+"NAME"). Все элементы управления цвета и управления табуляцией могут бьпъ выполнены использованием соответствугощих^ачешгй CHR5 и это может бьпъ полезно. RANDOMIZE N. Команда устанавливает значенйё сй«тёйЙоЙпеременной SEED, располо- женной в адресах 23670 и 23671 (5С76-5С77).:Еслй;Н не задано то значение для SEED , берется из двухъ младших байтов FRAMES и может рассматри- ваться как случайное число. Если N задано тогда: это значение копируется в SEED. Для дальнейшего уточнения работы [генератора псевдослучайных чи- сел смотри функцию RNDZ;: :;.: READ VI,V2... Команда используется вместе со сййёйёй DATA и может рассматрива- ться как несколько комадЩ ЕЕТ. Элементы-в DATA являются выражениями, а элементы в READ - цёременньтми^крторым эти выражения присваиваются. Сообщения об ошибке появляются;: если нет соответствия между перемен- ными И выражениями;;;::::::-;-^;;^ Заметьте что в onepairdp READ можно включать неописанные ранее пе- ременные;; Системная переменная.рАТА, расположенная в адресах 23639 и 2364^-(5С57И5С5.8) используется iiift указания в списке DATA . Первонача- ньно ^азаТе^гуё^йЖадливается на адрес начала области программы и сбра- сывается в это значение по RUNr REM. КРЙги^ЗНаЯ команда т к- Позволяет вносить комментарии. Вся строка руеих*^ После , рассматривается как комментарий и не интерпрети- 21
2. Функции и команды БЕЙСИК. RESTORE N. Эта команда иснользуется вместе со списком DATA и относится к од- ному или нескольким DATA? Если N=0 то переменная DATADD указывает на байт.п^рёц.йбластыо программы. Если N определено то указывает на адрес строй:.БЕЙСИК с номером N если она существует или ближайшую после нее/Ё&гй N больше чем 9999 (самый большой разрешенный номер строки) или "уйгел" за последний номер программы, то DATADD указывает на пос- ледни&байт в областищрограммы. По команде извлекается верхнее значение из стека GOSUB. Если обра- щение в стек корректнр тргда.интервретатор будет выполнять эту команду. Иначе будет,выд<н10:ссюбщенив .об ошибке. RUN "" Позволяет выполнять программы БЕЙСИК. Если N не задано то выпол- нение начнется с первой строкиыКогда N определено то выполнение начи- нается со строки ирограМмй с номером N или со следующей строки, после нее если строка N Не; существует. Команда инициирует требуемые указатели путем выполнения RESTORE и CLEAR до интерпретации какой либо стро- ки. STOP. :i;: По этой команде появляется сообщение об ошибке "STOP" использова- ние CONTINUE как прямой команды позволит затем продолжать программу от следующего оператора,-Как.^ в опШбочной ситуации команда передает номер ошибки в системнуюжременную ERR-NR^ixropax располагается по адресу 23610 (5СЗА) номер ошибки всегда; меньше на 1, чем код ошибки, который появляется перед сообщениемобопшбке. VERIFY. Команда позволяет сверить с оригиналом любую программу, выведенную на магнитную ленту с помощью SAVE, процесс проверки осуществляется для обеих частей программы - заголовка Ж&ЮКа данных. Ошибка "R ТАРЕ LOADING ERROR” появляется еслизапись на лейте не точно соответствует оригиналу. 2.3. Функций БЕЙСИКа. ABS X. Все отрицательные числа становятся положителыщгми в то время как положительные не меняются. f "Пг:::;?”"' ACS X. Аргумент "X” берется как косинус и функция возвращает величину угла в радианах. 22
2.3. Функции БЕЙСИКА. AND (X AND Y). Операция требует 2 операнда. Если опе^дынлашчески истинны, то операция полностью истинная. Однако, если один илитЯззнрперанда ложны, то операция полностью ложна. Например: :Г | F АВ AND ВС THEN PR I NT "YES" PRINT "YES" будет выполнено, если выполнятся^ оба условия одновре- менно (АВ и ВС). asn х. Аргумент X берется как синус и функцид вездращает величину данного угла В радианах. ATN X. : ^Аргумент X берется как тангенс и функция возвращаегвеличину угла в радианах. ATN является первой из 4-х функций, дпрёдёненньгХгВ SPECTRUM ис- пользованием многочленов Чебышева. ATTR (X,Y). Эта функция имеет форму колонка). Она возвращает пользователю значение атрибутного байта;;"-;ЩШШ":::Ш Функция эквивалентна РЕЕК 22528+с}рока*32+колонка. Величина при- знака может рассматриваться; следующим образом INK+PA- PER*8+BRIGHT*64+FLASH* 128. BIN X. Позволяет число в диапазоне:от 0;др 65535 вводить в двоичной форме. Разрешается использовать любое числидапичных цифр до 16. Следующая строка поэтому законна издаст числа от 0 до 10: 10 FOR A=BIN 1 ТО ,₽ТЙ"Тб10 STEP ooddoooi: PR I NT A: NEXT A хотя SPECTRUM ЙозволяеТ;Ввеёти числа в двоичной форме, они не мо- гут печататься в этой ^рмб;бй йспЬльзования программ. снй$ X. J ^^ ФУЙХДИя возвращает пользователю символ, как строку для данного кода.;Слёдующая:£трока показывает как распечатать набор символов. Пер- вые 33 (0-32) значения используются в SPECTRUM для служебных целей и не имеют графического эквивалента. Ю FOR А=33 ТО 255 : PRINT CHR$ A: NEXT А CODE Х$. Функция возвращает пользователю код для первого символа в аргументе Х$, код будет равен 0 , если Х$ 0-ая строка. 23
2. Функции и команды БЕЙСИК. :н Например: 10 PRINT CODEJ:# 20 3&$®!-c6de b$”:cqs X. Аргумент X рассматривается в радианах и функция возвращает соответ- ствующей косинус для:этого угла. ЕХЬ.Х. : Ддя:;йргУйёП^--Х функция возвращает величину Е в степени X, где Е=2,718281s. Вычисления производятся по многочлену Чебышева. FN X(A,B$,C.:,?)ji;tNb=$(A,B$.C...). ВызываетфупкцйюХ илй:Х$, возвращает числовой или строковый ре- зультат выполйёгшяфункции, соответственно. В SPECTRUM 26 числовых и 26 строчных функций. За знаком функции (FN) должна следовать 1 буква или 1 буква и знак $, а затем требуемые аргументы в скобках. IN X. ' Аргумент X исййЖзуется как адрес порта и считываемое значение будет в диапазоне 0-255. ч INKEY$. ::f . Функция опрашивает: клавиатуру и возвращает строку, если нажата кла- виша. Значение строки соответствует нажатой клавише в режиме курсора L. Функция распознает символы при постом нажатии клавиши или при нажа-1 тми клавиши одновременно с клавишами CAPS ЗШЕТили SYMBOL SHIFT. Другие комбинации дают пробел или ?. Есии:н&;6дна клавиша не нажата, или нажата более чем одна, то длина, вхбямбйстроки равна нулю. Например : 10 PRINT АТ 10,15;" 1F"' 20 LET A$=INKEY$ .... 30 PRINT AT 10,15;А$ 1 40 IF CODE A$=0 THEN GOTO 10 50 GOTO 20 К INT X. Для данной величины X эта функция возвращает тшгькпчтелую часть. У отрицательного числа прежде всего отбрасывается дррёнйй Часть, затем вы- читается 1, чтобы округлить результат. LEN Х$. Функция определяет длину заданной строки. 0-ая строка даст 0-ой резу-1 льтат. 24
2.3. Функции БЕЙСИКа. Однако элементы цвета, полученные нажатаемклавипш могут включит- ся В строку. Эти элементы будут иметь ДЛИНУ LN X. . Для заданного X функция возвращает натуральный логарифм; для. вели- чины X (логарифм по основанию Е=2,7182818). Представляет собой другую функцию вычисленную в SPECTRUM ис- пользованием многочлена Чебышева. NOT X. Даст логическое состояние значений в SPECTRUM. Есйй'Х=О, то значе- ние NOT X равно 1, если Х=1 (не равно нулю);;!К>;йНачение NOT X равно О (напоминаем, что значение 1 является "ист^ёй“=;*;Й^к»|№ю^. Например: 10 FOR А=0 ТО 1 :;нХ. Т 20 IF NOT A THEN PRINT "YES": 30 PRINT "NO" 40 NEXT A "::"f OR(XORY). . S: Операция требует два операнда. ЁййЙзйобоййз операндов логически истинный, тогда операция истинна. Однако "ё&ШШ один из операндов не является истинным, тогда операциД ЯОЖнД. Например: И. IF АВ 0R ВС THEMlNT:"YES" . PRINT "YES" будет вьшолнено, если любое одно или оба условия будут выполнены (АВ) или (ВС). PEEK X. Возвращает величину^ находящуюся по: адресу X. результат всегда целое ЧИСЛО В диапазоне ОТ pi ДО 255...:::::::;:::. PI. ; iL:...::::;®FnHh^h. ...Р1^ЯЮ[ЯСГСЯ в таблице постоянных в ROM памяти. Эта ^«^ирается, удваивается , ^'передается пользователю. Величина ₽blNTq^On;;;::::;;.. ж л i’ ^^“^^нт изображения в этом положении установлен, т 0 если сброшен (X и Y - координазы точки на экране TV). RND. шсел for* с^ча®ные числа выдаются генератором псевдослучайных гисел (от о до 1). Значение системной переменной SEED находящейся в 25
2. Функции и команды БЕЙСИК. адресах 23670 и 23671 выбирается, модифицируется и возвращается при каждом обращении SEED сбрасывается в 0 при инициализации SPECTRUM. С этого време- ни она является^ последовательностью целых чисел 0 - 65535. Величина не будет; повторятся до тех пор пока все числа не использовались. SCREENS (X,Y)£ Фермат функции SCREENS (строка, столбец) и функция возвращает строку;; содержащую- символ для заданной позиции. Распознает символы с кодами вдиапйзонё 32-127 , когда они нормальны или инвертированы. Ра- бота заключается в сравнении содержимого 8 байтов для области данного символа с 8-ми байтовым представлением в генераторе знаков. Функция воз- вращает O-ю..строку; если еймйол не является ни одним из 96 символов ге- нератора. Неж.СТ^ГСйьИо, чтобй функция исключала из сравнения символы определенные пользователем, тж. они могут появиться. Однако весьма труд- но проверить обычные графические символы, которые не хранятся в 8-ми байтовой форме, а создаются:когда требуются. Пример : 10 PRINT (0,0) SGN X. 1 ' . Положительные величины ^превращаются в +1, все отрицательные - в -1, О дает 0. -i .i SIN X. £ J Эго обычная функция$1Ь1::вфадианах. SQR X. Вычисляется квадратный корень аргументах. STR$ X. Аргумент для этой функцийрассматриваетсяжак числовое выражение, Операция вычисляет это числовое выражение, печатает его в рабочей обла- сти так, как оно будет выведено на Ту<жране, и затем возвращает пользо- вателю полученную строку. р:: : TAN X. 1 Вычисление тангенса угла в радианах...... USR X. Г' ' Аргумент X, который является числовым выражениемдпринимается как адрес программы машинного кода, написанного: пользователем. Когда команда вызывается, то Z-80 останавливает выполнение програм мы монитора и вместо этого выполняет команды с адресом X и далее. Команда машинного кода RET вызовет возврат к программе монитора В программе написанной в машинном коде, можно модифицировать регисЦ 26
2.3. Функции БЕЙСИКа. IY, но его необходимо восстановить перед возвратом в программу монитора (но маскируемое прерывание должно быть запрегййао тгока пара регистров IY содержит любую величину отличную от +5СЗА). ОДйакозцачение в этой паре регистров должно быть сохранено или восстагщнзТёйб^щ.'требуется успешный возврат к БЕЙСИКу. Функция возвращастпользователюеодержи- мое пары регистров ВС. В SPECTRUM числовые значения передаются через пару регистров ВС. USR Х$. Возвращает адрес требуемого символа из графики определяемой пользо- вателем. Аргумент состоит из 1-го символа и онжцтженбгйъ;в;диапа:юне "A-U". Адрес графической области пользователя (в вей находятсяйимволы, опреде- ляемые пользователем) определен в системной переменней UDG (23675, 23676). Этот адрес соответствует значенйЙ^Й5В:"А". Пример определения символа: 10 DATA BIN 00000001 11 DATA BIN 00000010 12 DATA ВIN 00000100 ..>= 13 DATA BIN 00000100 p "::нЩрШрР: 14 DATA BIN 00001000 J 15 DATA BIN 01001000 ,. 16 DATA BIN OO-fblob&H^lhhL 17 DATA BIN 00010000 18 FOR A=0 TO 7; READ B; POKE ЯЩнА, В: NEXT A 19 PRINT CHR$ 144:.REM»"A" ¥ VAL Х$. "!П=Ф. Позволяет вычисляТЁШфажения, которые содержатся в строках. Например : 10:^О^Ш:Г100+7*4" VAL$ -Эта функция требует строку в качестве аргумента и эта строка должна заключена в кавычки. Строка, заключенная в кавычки считается стро- евой переменной, если это не так, то возникает ошибка. Функция возвра- щает пользователю значение этой строковой переменной. 27
3. Микропроцессор Z-80. Например: 10 LET А$="100*?Й^ШЧ 2.^Управляющие символы. 6- печат^запятой. CHR$ 8- перемещение обратно. СНК$ £^пёрёмещение вправо. CHR$ 13- следувдцэд;:строка экрана. CHRS 16 Эти управляющие знаки да^т временные цвета. Они соответствуют операторам INK, PAPER, FLASH, BRIGHT, IN- VERSE, over: Пример - установить BRED. 10 PRINT "ХХХХГЙШ 16;CHR$ 2;"YYYY" CHRS 22 - A^ Печатаемая позиция видоизмсняётсяв. позицию данными следующих 2-х символов. Первый символ дЙТ йомер строки, второй - номер столбца. CHR$ 23 - TAB? "][ Печатаемая позиция устанавливается в столбещ.даданный следующим символом. Если текущий Номер.столбца равен щщ-йрёвышает новое значе- ние столбца, тогда печатаемая позиция будет ^ следующей строке экрана. 3. МикрппрбЦессор Z-80. 3.1^Введение;:::::::;з: В компьютере ZX SPECTRUM использован микропроцессор (МП) Z-80. Он имеет шестнадцатиразрядную адрёсную щину, восьмиразрядную шину данных и шину управления, которая;включает в!сёбй ряд управляющих сиг- налов. Управляющую шину мы не будем рассматривать подробнр. Хк. для программирования не требуются такиезпанйя. Шина данных предназначена для передачи данных меж^ микропроцес- сором и внешними абонентами, например, такимН::какз£^У; (память) или клавиатура. Шина является двунаправленной,..тязготьдашпые могут переда- ваться как в микропроцессор, так и из неп>иШШн;::::: Шина адреса предназначена для передачи; адреса к внешним абонентам и является однонаправленной. Микропроцессор выставляет адрес на адрес- ную шину и сопровождает его управляющими сигналами, которые определя- 28
3.2. Логический взгляд на Z-80. ют для кого предназначен этот адрес - для ОЗУили для других абонентов (клавиатура, принтер и так далее). УправляюйШ&Ьшнапы формируются ав- томатически в зависимости от требуемых действий й'^^фёбуют вмешатель- ства программиста. Для успешного программирования необходимо знать некоторыеоёрбен- ности компьютера. В частности рассмотрим два управляющих сигнала, ко- торые оказывают на это влияние. Эго сигналы INTaNMI. Управляющий сигнал NMI предназначен для нёмаскировазшону преры- вания, то есть при возникновении этого сигнала прерьййййквыпойййющейся программы произойдет в любом случае. При этом упрйййёйй^передается подпрограмме монитора, которая в свою очередьпередает управление про- грамме, находящейся по адресу указанному вСЙсгёкшойцеременной, которая расположена по адресу 23728 (адрес системной пёрё^ешюй- содержащей адрес программы, которой нужно передать управление).' КЬсржалению в мо- ниторе ZX SPECTRUM допущена ошибкди при возникновении прерывания этого типа происходит сброс, аналогичный::ныключению компьютера. Управляющий сигнал INT предназначен Демаскируемого прерывания программы. В ZX SPECTRUM этот сигнал формируйеМлектР°нной схемой через каждые 50 миллисекунд. Возникновение этого сигнала приводит к пре- рыванию выполняющейся программы и передаче управления программе ска- нирования клавиатуры. После скапйррвания.клавиатуры управление передается прерванной программер Необходимо^ншёгить, что это маскируе- мое прерывание, а это означает, Что его можно запретить или разрешить с помощью определенных команд микропроцессора. 3.2.ЛЪгйчеекий взглйй на Z-80. Рассмотрим МП Z-80 с точки зрения программиста. Он состоит из устройства управления, арифметикд;л<мичеокого устройства (АЛУ) и ряда ячеек памяти, называемьа.регистрами. "::чн: Устройство управлений "предназначено1 для управления работой микро- процессора. АЛУ предназначен) длявВДйМйёЙЙя различных арифметических и логи- ческих команд. Ш Регистры микропроцессора предназначены для хранения информации разли'шргпрода, например: данных:(Числа), адресов данных, команды, адре- са комшдьгЖ^Еяраммис'гу доступны не все регистры, а только часть. Другая часть регисТ(^;йспёш>зуется микропроцессором для организации своей ра- боты. ,:r' Рассмотрим назнаЧёйиёрёйгётров Z-80. Регистры МП Z-80 своеобразны и имеют свои имена. Они обозначаются буквами латинского алфавита: F, А, В, С, D, Е, Н, L, SP, PC, IX/1Y, I, R. Эго основной набор регистров. Есть еще один дополнительный набор, его называют альтернативным, его мы рас- смотрим ниже. 29
3. Микропроцессор Z-80. Некоторые из этих регистров - восьмиразрядные (однобайтные) Уг могут содержать целые чдрда:р*0До 255. Эго регастры F, А, В, С, D, Е, Н, L, I, R. ......' ^у^е::г!!шёётнадцатиразрядные (двухъбайтньге). Они могут содержать целые !числаот 0 до 65535. Это регистры SP, PC, IX, IY. Нфоторые однобайтные регистры могут объединятся в двухъбайтовьге регистровые пары ВС.15Е, HL. В этом случае о такой паре можно говорить как об:отдельном шестнадцатиразрядном регистре. Miikpionponecc6p:Z-80 является весьма асимметричным микропроцессо- ром, то eciri, kaiobffl регистр обладает специфическими чертами, делающими его непохожим на остальные, и различные регистры предназначены для вы- полнения различных, функцйй;: Рассмотрим регистры основного набора. РеГИСТр;!А!!!!;!;::: Аккумулятор. Этот регистр называется: аккумулятором, т.к. во многих случаях резуль- тат исполнения операц ии: остаётся в нем. В этом регистре выполняется наи- большее количества,арифметических и логических команд. Это основной однобайтный регистр микропроцессора. Во многих командах даже не указы- вается к какому регистру они относятся;. предполагается, что они относятся к регистру А. Регистры В, С, H,!L Регистры общего назначения;! !!!!!!: Эти регистры довольно:широко используются.МПЗфи выполнении раз- личных команд. Их характерная особенность-$б^бйТ1:!гом, что они могут использоваться и как однобайтные одинонныерётистры и как двухъбайтные шестнадцатиразрядные регистровые иарьё ВС, DE, HL. В последнем случае наибольшее количество команд имеет регистр HL. При работе с двухъбайт- ными целыми числами он имееТ ^акое же важцое-здачение, что и регистр А при работе с однобайтными. Все эти пары используются, какпраиило, для хранения адресов. При этом в регистровой паре (per. nape):HL часНх>!хра1гится адрес того байта с которым производится операция. В регистровой гйрёЬЕ как правило нахо- дится адрес места назначения. Во многих операциях, связанных с перемеще- нием чего-либо куда-либо, регистроваялгара HL указывает откудачтзязъ, а регистровая пара DE - куда отправить. В регистровой парё!ВС!!нри;этом обычно содержится длина пересылаемой информации;!!!;!!!";!!^" При объединении одиночных регастровддары.^нервом хранится ста- рший байт, а во втором - младший. Итак В, Ь,:Й!?!тргпий; С, Е, L младший. Регистр SP Указатель стека. 30
3.2. Логический взгляд на Z-80. В тех случаях, когда необходимо на некоторое время освободить какой- либо регистр (или регистры) и запомнить его сЬ^жймое впредь до дальней- шего использования, компьютер может использ6ЁатЙЬв::качестве места временного хранения данных особый участок оператцвйййназывае- мый стеком (машинным). Стек - это такая форма оринизации -памяМ при которой загрузка и выгрузка данных выполняется пр принципу "последним пришел - первым уйдешь". Он может быть организован почти в любйм месте оперативной памяти (даже в экранной области). Стек "растет" сверху вниз. То есть если вёршиначё^анн^рдится по адресу 60000, то следующее число, помещенное в стек^ будётзаписано в ячейку 59999, а следующее за ним - в 59998. Принтом перемещается и его вершина. В регистре SP содержится адрес вёрйййй:стека. При помещении очередного числа в стек, регистр SP автоматически умёйьптетёвое значение, а при извлечении числа из стека - увеличивает. Заслав свойадрес в указатель стека, вы можете организовать стек в другом.месте оперативной памяти. В принципе, для временного хранения:яроме^угочньгх результатов вы- числений можно использовать обычные йет6дьг^ий^:ЬР::(АВПЕ),А, но при хранении данных на стеке доступ к ним проще. " Еще одно назначение стека связано: с использованием подпрограмм. Так, при изменении нормального порядка исполнения программы, (когда коман- ды выполняются последовательно одна за:другай) и нри переходе на выпол- нение подпрограммы необходимо запбмнйтьнадрес возврата, чтобы продолжить вычисления с точки, находящейся после места вызова подпро- граммы. Этот адрес (в виде двухъ байтов) и помещается в стек. По окончании выполнения подпрограммы по команде ЯЁТ аДрёс возврата извлекается из стека и помещается в программный счетчик РС,: что и обеспечивает возврат. Разумеется, если во время работы подпрограммы вы что-то будете помещать на стек, то при возврате будет выбрана:из стека помещенная туда величина, что неизбежно приведет к нарушению рабййя программы. Значит, если при работе в подпрограмме вам=необходимо поместить сколько-то чисел на стек, то столько же надо откуда снять;Д0:Трго, как встретится команда RET. Регистр PC Прр^шмньгй счетчик. Этот^мяи стр: также, как и регистр SP - шестнадцатиразрядный. Он слу- жит для хранения: адрес а той команды, которая должна выполнятся следую- щей. Когда миКрЙпЩййёссор (МП) начинает выполнять эту команду, программный счетчик увеличивается на единицу, если команда однобайтная, на два - если команда двухъбайтная и так далее. Таким образом, по оконча- нии выполнения этой команды МП знает какую команду выполнять следую- щей. Так обеспечивается последовательное выполнение команд из которых состоит программа. 31
3. Микропроцессор Z-80. 3.3. Структуралрограмм в машинных кодах. Программа д<^ЭД<а ё}щёсгвовать как набор машинных команд и данных, размещенных впамяти. В SPECTRUM единицей памяти является один байт. Поэтому программа в машинных кодах является последовательностью 8-ми битовых значений',. Пример: LOCATION ч;::нТ;г:- 3 11110011 11001100 11001100 10101010 это представлениеиллюстрацией программы в машинных ко- дах. Но очень громоздко и приводит к ошибкам. Поэтому лучше использо- вать 16-тиричнуго "запись кодов или программу на БЕЙСИКе, которая печатает байты в 10-ричной форме. 10 FOR А=0 ТО 7 20 PRINT • LOCATION4^ TAB 10; A; TAB 15; PEEK A 30 NEXT A программа показывающая (бнричНре.представление рассматривается на следующем примере: .... 10 FOR А=0 ТО 7 I 20 LET H=INT(PEEK а/16) J 30 LET L=PEEK А-Н*16"Ч 40 PRINT -LOCATION"; WlO;A; TAB. 15;СНЙ$СЛё+¥|+7*(Н9)); CHR$(48+L+7*(L9)) . 50 NEXT A эти программы включены, чтобы показать способ получения 10-ного или 1б-ричного листинга программы в машинных кодах.Рассмотрим шаги полу- чения документированною листинга. Используя табднщу машинных кодов можно представить эти машинные команды в Следующем виде: LOCATION 0-01 запрещение маскируемого прерывания; LOCATION 1 - XOR А сложение подмодулю 2 регистра А с регистром А; .... ....Ъ LOCATION 2 - 4 LD DE.+FFFF загрузка.регисур00бй:^ары DE константой FFFF (десятичное 65535) LOCATION 5 - 7 JP +11СВ переход по абсолютному адресу. Все машинные команды Z-8O имеют свою мнемонику и программы в машинных кодах записываются с использованием мнемоники, а не двоичного 34
4.1. Шестнадцатиричное представление. или 16-ричного представления. Такая мнемоническая форма представления называется ассемблерной. Программист вначалеббычносоставляет програм- му в мнемоническом виде на языке ассемблера, а затем, * процессе трансля- ции, это представление преобразуется в шестнадцатеричное ^кричное). Поэтому такое написание очень удобно при записи npoipaMKC H- HH 4. Математика машинного программирования. В МП Z-80 все данные передаются 8-ми битовыми 'кстчбинацйями, но такое представление трудно для работы и поэтому программисты обычно используют 16-рнчное представление. 4.1. Шестнадцатирично^; представление. В этой системе счисления первые 10знаков записываются цифрами от О до 9 и к ним добавляются 6 знаков, занисываемых буквами от а до F. Таблица ПОКаЗЫВаеТ СООТВеТСТВИе ЧИСеЛ 0 - 2-ное 10-ное ::;;1$£ное 0000 .0 ::::::: 0* 0001 0010 0011 ;:Т :::::: :. 1 2 3 :: 3 0100 \А- L 0. 4 010:1 ... :5 Ш.. .::Ш 5 0110:: Н:::;:.. 6 6 0111 7 7 1000 8 1001 9 1010 ... 10 "" А 1011.:*= == и »= в 1W С 0 1116*:::***” 14* Е * 1111 •••• 15:Н F из .Таблицы вид но что одна 1<ьрцчная цифра записывается 4-х битовыми двоичнымичислами. Поэтому 8-ми битовое число записывается парой 16- ричнйх знакдв;:д1б-битовое 4-мя 16-ричными знаками. Нацрнмер: 0000 0000 (2-ное)=00(1б-шх): 0100 1111 (2-Hoe)=4F(16-Hoe); 0000 0000 0000 0000 (2-пбе)=0000(16-ное); 0100 1100 1010 1111 (2-ное)=4САР(16-ное). Следующая программа переводит числа из 10-ной в 16-ричную систему. 35
4. Математика машинного программирования. LET D=D-h(2)*256; 10 INPUT "DECIMAL.NUHBiER'.D 20 IF D65535JHE$;M;170 3.0 PRlHlihKiRAL’.D so Jim h$(4) 60 ?LeT H(1)=INT. J/4096) 70 Ш:Р=0гн[1^Й096 80 LEf H( 2)=:i NT (D/256) 90 100 LET H(3)H:INiiD/i6): 110 LET D=[p(;3)*16 120 LET H(4)=D 130 FOR A=1 TQ 4 140 LET H$(A)JH^Jh(A)+48+7«(H(A)9) ) 150 NEXT A 160 PRINT "HEXADECIMAL-i^J^^^h. 170 PRINT У 1 180 GO TO 10 В программе десятнчпгое значение ПОследовательнр:уменыпается для по- иска 16-ричного эквивалента;. Сфоки 130- 150 этизначения переводят в код ASCII. Следующая программа показываетЛ^раганбе в 10-ное преобразование. 10 20 30 40 50 60 70 60 ТО 120 80 LET D=D+k*(CODE Н$(А)-48-7*(C(fey$®W: 85 LET К=К*16 90 NEXT А 100 PRINT "HEXADECIMAL".Н$ DIM Н$(4) INPUT "HEX. CHARACTERS^! IF CODE H$=32 THEN GO TO 20 LET D=0: LET к=1 > FOR A=4 TO 1 STEP -1 :н IF H$(A)=CHR$ 32 THEN GO T0;90 IF (H$(A)"O" OR H$(A)”9”) AnRW(A)"A" OR Н$(Д)врЕЯ 36
4.2. Абсолютная двоичная арифметика. 110 PRINT "DECIMAL",D 120 PRINT 130 GO ТО 20 . в программе строка 1б-ричных знаков Н$ всегда имеет :4;ШаЖа^Если значение не задано пользователем, требование вссЁда повторяетсЯ?Йосле- дний пример в этом разделе показывает как преобразование 16-ного в 10-ное может быть выполнено вручную. 16-ричный член = 789А десятичный эквивалент = 7*4096=28672 8*256 = 2048 + 9*16 = 144 А*1 « 10 ...."«ШШШ:-::.. 789А =30874 или попарно: десятичный эквивалент = 78*256=30720 9А*1 = 154 789А =30874 4.2. Абсолютная двоичйая арифметика. Одинарный регжтр или байт ЦЭДяти &рдер$Йт 8-ми битовое двоичное число. Это число моЖетбыгь в диапазоне $000000-1111 1111.Нив одном из этих случаев число не можётбыть ни отрицательным ни дробным и это образует основу абсолютной двоичнааарифметики - значение в памяти или в регистре всегда положительное й цёлиёё:::й; Также важно представлять себе, чточначение, содержащееся в памяти или в регистре изменяетсйЦиклически в пределах от 0 до 255. Это означает, что если в операции с$ожепия.црлуданное значение превышает число 255 , то окончательный результаг:ЗЙ1)ЙСШаС|ся после вычитания 256, а при вычи- тании к значению мейЫйефприбавляёуся 256. Эго: показано на следующих примерах. 254£44:ддет 42 ИлЙ&НДПнНнЙ::!.. FC+2C Йй;28:Я7ь2рр дает 143 ИЛИ .. 57-С8 дает 8F в системах, основанных Й£2-80, все числа представлены в абсолютной Двоичной арифметике, но программист часто нуждается в различной интер- претации чисел, таких как положительное или отрицательное, целое или Дробное. 37
4. Математика машинного программирования. 4.3. Дополнительная арифметика. Принцип дополнительной арифметики очень прост. Но при использова- нии ее результат может бьпъ очень неожиданным. Метод позволяет рассматривать программисту двоичные значения в ин- тервале 0000 0000-0111 1111 , как эквивалент 10-ных значений от 0 до 127, а двоичные значения в интервале 1000 0000-1111 1111, как эквивалент 10- ных значений от -128 до -1. В результате такой интерпретации бит 7 (левый крайний бит 8-ми бито- вого числа) рассматривается как знаковый. Он будет 0 для положительного числа и 1 для отрицательного. На диаграмме 4.1 показан принцип дополни- тельной арифметики для 8-ми битных чисел. двоичное десятичное 16-ное крайний левый I бит - знаковый I 0111 1111 +127 7F 4- 1 0111 1110 +126 7Е 4- + 4- 0000 0010 +2 02 4- 0000 0001 +1 01 4- 0000 0000 0 00 11111111 -1 FF 1111 1110 -2 FE .... .... 1000 0001 -127 81 1000 0000 -128 80 • Диаграмма 4.1. Заметим, что возможно распространить принципы дополнительной ари- фметики на 16-битовые числа. В этом случае интервал возможных значений чисел будет от -32768 до 32767 десятичных. Таким образом положительные числа в двоичной дополнительной ариф- метике записываются гак, как они есть на самом деле, например: +127 (десятичное) - 0111 1111 (двоичное); +3 (десятичное) - 0000 ООН (двоичное). 38
4.4. Двоично-десятичная арифметика (BCD-арифметика). Отрицательные числа для записи их в двоичной дополнительной форме требуют преобразований. Рассмотрим эти преобразования: 1. Отрицательное число записывают в абсолютном двоичном виде. 2. Полученный двоичный код инвертируют (меняют "О" на ”Г и наоборот). 3. К результату вышеизложенных действий прибавляют 1. например: | номер действия 1 2 3 -127 (десятичное) 0111 1111 1000 0000 1000 0001 -128 (десятичное) 1000 0000 0111 1111 1000 0000 - 3 (десятичное) 0000 0011 1111 1100 1111 1101 4.4. Двоично-десятичная арифметика (BCD-арифметика). Это особый вид представления десятичных чисел в двоичной форме. Каждая цифра десятичного числа представляется в виде четырех двоичных разрядов, например: 1563 -0001 0101 0110 0011 9701 - 1001 0111 0000 0001. Таким образом в двоично-десятичной арифметике цифры от 0 до 9 за- писываются в виде четырехразрядных двоичных чисел от 0000 до 1001. Двоичные комбинации от 1010 до 1111 (от 10 до 15) считаются запре- щенными. Арифметические операции с числами, представленными в двоич- но-десятичной форме необходимо выполнять учитывая вышеизложенные правила. В каждом байте памяти можно записать две десятичные цифры числа, представленного в двоично-десятичной форме, одну в правом полу- байте, другую в левом полубайте. В системе команд микропроцессора Z-80 есть 3 команды работающие с BCD-арифметикой. 4.5. Интегральное представление. Интерпретатор БЕЙСИК в системе SPECTRUM использует 5 байт для представления чисел. Любое целое число в интервале от -65535 до +65535 включительно записывают в интегральной форме, в то время как любые дробные или целые числа вне этого диапазона записываются в плавающей форме. В интегральной форме первый байт всегда 0. второй байт содержит 0, если число положительное и 255 (FF), если оно отрицательное. 3-ий и 4-ый байты содержат целое значение как 16-битовое беззнаковое число в допол- нительном коде. Но 3-й байт содержит всегда младшую часть, а 4-ый стар- шую. 5-й байт не используется, но всегда содержит 0. 39
4. Математика машинного программирования. Следующая протраммачжемонстрирует интегральную форму (в десяти- чном ввде) для шо&йфетых чисел вводимых пользователем. Строка 20 профамод:де^ЗД|гуег получение интегральной формы. ................... 2(Н£ NINT N 0R N6&535 OR N65535 THEN GO TO 10 30 Sint "numoSosen =-,n 40 1ЁШиЁЕ|И27+256*РЕЕК 23628 50 FOR A=1 TO 5 60 PRINT А; .”Н:7йПр'5У^|к(а+У) 70 NEXT A 80 GO TO 10 " .nr В приведенной вышефргжрамме переменная V указывает на начало поля переменных и адрёсй:й;+Т по +5 будут содержать 5 байт введенного числа. Программа даетфезультаты в виде:.. выбрано значение 0 1.0 .::: Ч: 2.0 0 1 з.о 1 ...J 4.0 ш. .=: Ч=*! .. 5.0 так как 0 - попожителён й;представляетсЯ:КЙЁ;0*1+О*25б выбрано зна- чение 1516 1.0 2.0 3.236 Ч: 4.5 "i: 5.0 так как 1516-положительно и представляот&:к$К:23б* 1+5*256; выбрано значение -1. 1.0 Т::::::.::- 2.255 3.255 " 4.255 . 5-0 так как -1 отрицательно и имеет формурРТР. Замечание : ошибкой программиста будетферевод -65536. это значение не соответствует интегральной форме 0, 255, 0, 0, 0. 40
4.6. Представление с плавающей точкой. 4.6. Представление с плавающей точкой. В системе SPECTRUM минимальное значение которое можно записать в плавающей форме равно 2.9387359Е-39. Максимальное значение, записан* ное в плавающей форме, равно 1.7014118Е+38. Причем эти числа могут быть как положительными, так и отрицательными. Такие числа хранятся в экспо- ненциальном представлении. Под числа с плавающей точкой выделяют пять байт. В старшем (пятом) байте хранится экспонента числа, увеличенная на 128, а в остальных четырех байтах - мантисса. Причем старший бит четвертого байта указывает на знак мантиссы. Если он включен (равен 1) - число отрицательное, если же вы- ключен (равен 0) - положительное. байт 5 байт 4 байт 3 байт 2 байт 1 76543210 716543210 76543210 76543210 76543210 экспонента* 128 мантисса первый бит - знак мантиссы для тех, кто не помнит, что такое экспоненциальная форма, кратко по- ясним. Предположим, что вам надо записать какое-то очень большое число. Если вы будете его делить раз за разом на два до тех пор, пока оно не станет по абсолютной величине меньше единицы, то сколько раз вам пришлось его делить это и есть экспонента, а то, что осталось после последнего деления - мантисса. Обратите внимание на то, что мантисса всегда больше 0.5, но меньше 1. Мантисса хранится в четырех младших байтах, а экспонента - в пятом (старшем). Обратная операция выполняется так: мантиссу надо умно- жить на двойку в степени экспоненты. Если же число было малой десятичной дробью, например 0.0000375, то делить его на два, конечно бессмысленно. В этом случае его наоборот надо умножать на два до тех пор, пока оно не станет больше, чем 0.5, но меньше, чем 1. Только экспонента в этом случае считается отрицательной. На знак экспоненты указывает ее величина. Если в старшем байте стоит число, бо- льшее 128, то экспонента положительная, а если меньше, то отрицательная. Следующая профамма показывает как хранится число с плавающей то- чкой. 10 INPUT N 20 IF N=0 THEN GOTO 40 30 LET N=N+.2E-38 40 PRINT "NUMBER ";N 50 PRINT 41
5. Система команд. 60 PRINT "EXP";TAB.:10E;i''MANTISSA" 70 LET V=PEEK:2®*&&PEEK 23628 8.0 РП1ЫТ:РЕр;:(В.1);ТАВ 10; Й1ЙЖ ТО 5 Ч l6oSPRINT PEEK (V+$);" 110Щ1ЕХТ A ,:;f! iso бдаж^::‘: сравните результаты ввода чисел .5 и 1/2 (задавать именно в указанном ВИДО). 4.7. Представление символьных переменных. Символьная переменная или строка символов (STRING) в системе SPEC- TRUM представляется дурей Задания начального адреса строки в регистро- вой паре DE и длшп>г строки"в регистровой паре ВС. 5. Сисхёй&команд. 0-255 10-вое. те команды, 5.Т. Ком^нды И данные. Команды поделены на: 18 групп, каждая из которых состоит из тех ко- манд, которые сильно похожи друг на друга. Рассмотрим 6 классов данных, которые могут следовать закбмандой. 1. Однобайтовая константа (+DD). То есть число в диапазоне 00^Ф:1б-ное которые требуют за собой однобайтовую констадеу, имеют мнемоническую приставку ’+DD’. Например: LD A.+DO 1- 2. Двухъбайтовая константа (+DDDDj;:TO ёстьянсловдиапазоне 0000-FFFF 16-ричное и 0-65535 10-ное. Те командй/кбторые требуюгза собой двухъбайтовую константу, имеют мнемоническую приставку ’+DDDD’. Ч:;;:;:;. Например: LD HL.+DDDD =: 3. Двухъбайтовый адрес (ADDR). То есть число в диапазоне ОООО-FFFF 16^рйЗЙРё;0-65535 10-ное, которое используется как адрес памяти. Те команды; которые требуют за собой дву- хъбайтовый адрес, имеют приставку ’ADDR’/i. Например: JP ADDR 42
5.2. Группы команд. 4. Однобайтовая константа смещения (Е). то;есуь число в диапазоне OO-FF 16-ричное, от -128 до +127 10-ное. Чиёлйвсегда представлено в до- полнительной арифметике. Те команды, которыеотребуют за собой однобайтовую константу смещения, имеют мнемЙййчвС1(^ю. приставку *Е*. '"г::::::::::::..:: Например: JR Е 5. Однобайтовая индексирующая константа смсщеШВ1:(+Р). То есть число в диапазоне 00 - FF 16-ричное, -128 - +12740чное. Число представлено в дополнительной арифметике. Те команды, которые требуют за собой однобайтовую индексирующую консШиу Смещения, имеют мнемо- ническую приставку ‘+D’. Например: LOA,(IX+D) б. Однобайтовая индексирующая констаятаГййещения и однобайтовая кон- станта (+D.+DD). То есть два числа в диапазоне 00-FF 16-ричное, первое из которых рас- сматривается как 10-ное -128 - +127,аиторое как десятичное 0-255. Команды, требующие за собой 24k байтов данных^ сопровождаются мнемо- никами ’+D’ и ’+DD’. Например: L0 (iX+Ph+DD важно отметить1 следующее: если в коМЙЖёуказывается адрес данных или пара регистров, содержащих адрес данных, то он записывается в круглых СКОбкаХ. Например: LD (HL), +00 - загрузись константу $0 в ячейку памяти, адрес которой находится^ паре .регистров HL. 5.2. Группы команд. ОйюЕЙу^много путей для разделения на труппы сотен различных ма- шинных командШднако метод, выбранный здесь, разделяет команды на 18 функциональных Груйй? л!: . При описании команд;; сначала записывается мнемоническое обозначе- ние, затем операнды, если они есть и затем эквивалент машинного кода в 16-ричном виде. После изучения команд по труппам читатель выполнит программы БЕЙСИК из следующей главы, которые иллюстрируют эти команды. 43
26 DD 2Е DD 06. DO OESD 16 DO 1E DD 5. Система команд. Группа 1. команда ’негчмгерации’. NOP 00 ...!:::уП₽П" ““'г выпщшецжк^ацды требует 1,14 мкс. ан один из регистров или флагов не изменяется. Команда NOP используется программистом для организации задержек, но чаще для удаления ненужных команд из программы. Группа 2. КомацДй загрузки регистра константами. LDW*№ LD н;*пв LD L.+DD LD B.+DD LD С, +DD: LD D,+DD: LDE.+DD каждая строка этих комайДчтребует 2-х байтов памяти: один для кода операции, второй ; для койстйнгы. Команды записывают в регистр соответст- вующие значения. Старые значения регистра пропадают. Следующие команды выполняют загрузку пары регистре» двухъбайтовы- ми константами. LD HL.+DDDD 21 ' 1= LD ВС, +DDDD 01 DD:.ODp;:: ’ .= LD DE.+DDDD 11 DD DD = .:^i: LD IX.+DDDD DD 21 DDbDD ;У LD IY.+DDDD FD 21 DDi'BttiF LD SP.+DDDD 31 DD DD :: ::::" строка команды требует 3 или 4,байта;в:яамяти. Код операции занимает 1 или 2 байта и 2 байта занимает: константа. Первый байт константы загру- жается в младший регистр регистровой пары то есть L,CJE,X,Y,P, а второй байт - в старший регистр, то ест* HJD,B,I,S. Эти команды записывают в регистррвыепары данные значения. Эти зна- чения часто рассматриваются программмстрм^.как 2-х байтовый адрес, но могут быть так же и двухъбайтовым числовым Означением и 2-я отдельными 1-байтовыми числовыми значениями^. Команды этой группы не изменяют.флагрв. Группа 3. Команды копирования регистров и обменщ;Оун;П;;;:: Существует 59 команд, которые выполняют копирование регистров и регистровых пар. Эти команды лучше делитьиаО^гголрУгшы. Подгруппа А. Команды копирования регистр-регистр. Следующая таблица дает коды операций команд, выполняющих копиро- вание содержимого одного регистра в другой. 44
5.2. Группы команд. регистр LD LD LD LD LD LD LD R A.R H.R L.R B.R C.R D.R E.R А 7F 67 6F 47 4F 57 5F Н 7С 64 6С 44 4С 54 5С L 7D 65 6D 45 4D 55 5D В 78 60 68 40 48 50 58 С 79 61 69 41 49 51 59 D 7А 62 6А 42 4А 52 5А Е 7В 63 6В 43 4В 53 5В ви одна из команд, приведенных в таблице не изменяет флаш. Существует кроме того 4 команды для I и R регистров. LD A, I ED 57 LD A, R ED 5F LD I.A ED47 LD R.A ED 4F эти последние команды влияют на флаг переполнения/четности. Подгруппа В. Команды копирования регистровая пара - регистровая пара. Существует только 3 команды этой подгруппы. И они копируют зна- чения в указатель стека. LD SP, HL F9 LD SP, IX DO F9 LD SP. IY FD F9 эти команды не изменяют флагов. Заметьте, что если содержимое регистровой пары надо копировать в дру- гую регистровую пару и эти команды не подходят, необходимо выполнить 2 команды копирования регистр-регистр. Например, нет команды LD HL.BC и ее заменяют, используя LD Н,В и LD L,C. иначе содержимое 1-ой регис- тровой пары может быть сохранено в стеке и в последствии переписано во 2-ю регистровую пару. Подгруппа С. Команда EX DE.HL. Существует только одна команда, которая позволяет обменивать содер- жимое регистров в пределах основного набора регистров. EX DE,HL (ЕВ) это очень полезная команда. Она производит обмен содержимого пары DE с содержимым пары HL. Значение флагов не изменяется. Команда ис- пользуется когда необходимо, чтобы адрес или 2-х байтовая числовая кон- 45
5. Система команд. станта из пары DE былазайисана в пару HL, но содержимое последней не было потеряно. Подгруппа\П^Команды альтернативного набора регистров. Е.этг&Ёрушге 2 команды. (D9), EX A;|,A’F’ (Е8) команда ЕХХ вызывает переключение регистров HX.B.C.D.E на регист- ры Н’,В.В’,С’Х>’,В:;ЬГ KoMaHaa ®C:Af?;A’F’, как следует из мнемоники, переключает регистры А и F наА~Р^:::" Альтернативные регистры часто используются для хранения адресе» и данных. ПомещенньгеваЙИ^Нативньге регистры, эти значения сохраняются от искажения и мфутбьгть легко и просто восстановлены. Группа 4. Команды загрузки регистров из памяти. В систему 2-80 входит ^§(&Команд, позволяющих находить данные в памяти и затем за^ружагьикв-основной регистр. Все эти команды требуют, чтобы программист;указал адрес, откуда данные должны быть скопированы в регистр. Команды этой группы лучше.ра^Штривать как команды трех подгрупп в соответствии с методом адр^ащгй/:::::^. Виды адресации: ф Косвенная - 2-х: байтовый адрес уже размещен в адресной регистро- вой паре. .Н Непосредственная^адрегёуказан в двухъ байагаквелед за кодом опе- рации. Индексная - адрес данных должен быть высчитан путем сложения значения смещения +D с основным адресом уже содержащимся в регистровой паре IX Подгруппа А. Команды, использующие непосредственную адресацию. Эти команды не влияют на значения флагов. : LD A,(ADDR) LD SP,(ADDR) LD HL,(ADDR) LD BC,(ADDR) LD DE,(ADDR) LD IX,(ADDR) LD IY,(ADDR) Подгруппа В. Команды, использующие крёаёниуда'адресацию. Эти команды так же не изменяют значения флагов. LDA, (HL) LD А,(ВС) Ф Ф 3A:ADDB;h::.. :i 6D'7BA№::::...::dr 2А ADDR игшЕЮВ ADDR ED..4B ADDR EDWADDR DD 2A ADDR FD 2A.ADDR ..и-рШШШн; 7Е ОА 46
5.2. Группы команд. LD A, (DE) 1А LD Н, (HL) 66 LD L, (HL) 6E LDB.(HL) 46 LD C. (HL) 4E LD D, (HL) 56 LD E, (HL) 5E Подгруппа С. Команды загрузки регистров из Ш&ют^-.мепШзующие индексную адресацию. Состояние флагов не менленюс'^жж^г DD 56 DO 5Е FD 7Е FD 66 FD6E FD 46 FD 4Е FD 56 LD A.(IX+D) DD 7E LD H, (IX+D) DD 66 LD L, (IX+D) DD 6E LD B, (IX+D) DD 46 LD C, (IX+D) DD 4E LD D, (IX+D) LD E, (IX+D) LD A,(IY+D) LD H.(IY+D) LD L.(IY+D) LD B.(IY+D) LD C,(IY+D) LD D,(IY+D) LD E, (IY+D) FQ:;5E.. D D D D D D D 0 0: 0 D & 0: Группа 5. КомандЫЗйИ «йИвпамять содержимого регистров или кон- станты. Обычно команды этой группЫ йШйщ|яют операции противоположные тем, которые делают команды группы Команды позволяюъЭДДержимое регистров переписывать в память или записывать туда константы. Эти. команды лучше рассмотреть по трем труп- нам. Подгруппа А. Комагеды нёпосредственной адресации. 22 ADDR или ED 63 ADDR ED 43 ADDR ED 53 ADDR DD 22 ADDR FD 22 ADDR ED 73 ADDR LD.;£ADflR), A 32 ADDR LDRM^HL. LD (ADDR;)h^iiihh:::.. LD (ADDR), DE -:::":::::”! LD (ADDR), IX LD (ADDR),IY LD (ADDR).SP приведенные команды выполняют только непосредственную адресацию и важно заметить, что нет команд для записи в память констант. Если нео- 47
5. Система команд. бходимо записать в памятакгжстагпу, то ее нужно загрузить в регистр, на* пример в А, а затем содсй^йиое регистра А записать в память. Команды. зднйеив Память содержимого пары регистров можно рассмат- ривать какд^команды. Например: LD (ADDR).HL эквивалентна двум ко- манДам^ИЭ (ADDR),E:H LD (ADDR+1)J1; хотя таких команд на самом деле нетЛр^р" £ Команды подгрупп# часто используются для сохранения адресов и зна- чений и памяти, когда Гэти значения рассматриваются как переменные. На- пример^'яастр:: используется LD (RAMTOP),HL, где RAMTOP системная перемени ая.Гйспсйьзуемая для хранения текущего значения верхней границы памяти. Выборка текущего значения может быть позднее выполнена коман- дой 4 группы, наггрик^Л^Ь НЕ,(RAMTOP). ПодгруппдйЯ.^Команды косвенной адресации. Команды этой подгруппы позволяют копировать содержимое регистров в память, адрес которой содержится в регистровой паре HL.BC или DE. Существует также. комаггда Запйсй .однобайтовой константы по адресу, ука- занному в паре LD (HL),А LD (ВС),А LD (DE),A LD (HL),Н LD (HL),L LD (HL),В LD (HL),C LD (HL),D LD (HL),E LD (HL),+DD 36 DD „ Подгруппа С. Команды индексной адресации. LD LD LD LD LD LD LD LD (IX+D),+DD LD (IY+D),A FD 77 D LD (IY+D),Н FD 74 D LD (IY+D),L FD 75 D LD (IY+D),В FD 70 D LD (IY+D),С FD 71 D 77:: W 12 74 75 70 71 72 73 (IX+D),A DD 77 D (IX+D),H DD 74 D (tX+D),L DD 75 D (IX+D),В DD 70 D (IX+D),C DD 71 D (IX+D),D DD 72 D (IX+D),E DD 73 D DO 36.DD D 48
5.2. Группы команд. LD (IY+D),D FD 72 D LD (IY+D), E FD 73 D LD (IY+D),+DD FD 36 DD 6 команды пятой группы не изменяют значения флагбве^нурр^.... Группа 6. Команды сложения. Эта группа команд выполняет арифметическиердействия. Команды сло- жения позволяют программисту прибавить (в абсолгйнрй двоичнойарифме- тике) заданное число к регистровой паре, регистру, бйту в памяти^ Команды этой группы могут быть поделены на 3 йомфуццыркаждая из которых имеет собственное имя. Команды ADD. Команды INC. Специальный случай сложения, когдакРчислу прибавляется 1. Команда ADC. Значение флага переноса прибавляется к результату;:-1 Флаг переноса - это один из битов регистра флагови используется для сигнализации о том, было ли при выполнении последней арифметической операции двоичное переполнение регасгфаилибайта памяти. Команды ADD и ADC меняют флаг переноса, a INC - н£йОй$<::::Н: Подгруппа А. Команда ADD ADDA.+DD COD.. ADD А, А ADD А, Н 84 1 (простое сложение). ADD A, L 85 ADD А, В 80 ADD А, С 81 ADD A, D 82 .;•* == ADDA.E 83 ADD A, (HL) 86 :Н. .;*Ш ADDA-, (IX+D) ADDtiA, (IY+D) ADOl^HL 29 А0&ЯЁр&:::;:09 ADD HL,ШИШ*:::.. ADD HL.SP DD186I FQ-JB6 1 ) ) ADD IX, IX DD ADD IX, BC DD09 ADDIX.DE DD 19 ADD IX, SP DD39 ADD IY, IY FD 29 49
5. Система команд. ADD IY.BC FD 09 ADD IY.DE Fft:=T0=iiH=i:::ii ADD IY, SP:::::::FSiS9 команжАОЬ^нриведенные выше очень просты. Команда устанавлива- ет ийн;ёб£аёывает флаг, переноса в зависимости от того, было или нет дво- ичнбрйёреполнение регистра или пары регистре®. Это показано на следующих примерах: 1Jj&r.......А^01Й: 16-ных ЧЦШШШШН^о выполняется ADD ‘=h:::;!B=90 флаг переноса сброшен 2. " А=А8 выполняется ADD A, В A=26 . В=7<::ПЖШШ" :: флаг Переноса установлен Подгруппа В. КомандаЛПС. ,i Команды этой подгруййы прзйолявйприбавнтьедин&цу к 8-ми битовому регистру, ячейке памяти илйП1бфазрядной ш^^ШИффв. Во всех случаях флаг переноса не изменяется. INCA ЗС INCH 24 INC L 2С INC В 04 INC С ОС INCD 14 INCE 1С INC (HL) 34 INC (IX+D) DD34D INC(IY+D) FD34 0 INC HL 23 INCBC 03 INC DE 13 INCSP 33 INC IX DD23 INC IY FD23 50
5.2. Группы команд. Подгруппа С. Команда ADC ADCA.+DD СЕ 00 аоса.а 8F ’*::111ШН1Ьн«п.. АОСА.Н 8С ,:Г. ADCA.L 80 :Г ADCA.B 88 hi ADC А, С 89 АОС А, О 8А ......«ИР АОСА.Е 8В АОС A, (HL) 8Е АОС А. (1Х+0) 00 8Е 0 АОС А, (IY+0) F0 8Е .... ADCHL.HL ED6A нГ "ЩШШн-нГ ADCHL.BC ED4A ADCHL.DE Е0 5А AOCHL.SP Е0 7А .FWiife=:: команды этой группы позволяют сложитьдва'чйелаГс учетом текущего значения флага переноса. Все команды этой подгруппы меняют флаг переноса. Он сбрасывается если операция ADC не дает двоичиргопёрсшонненияи устанавливается, если ДаСТ. р’ Примеры показывают это: рог. А=60 флаг.=1 ШС AjB per. A=F1 флаг=0 РОГ. В=90 РОГ. В=90 per. А=А8 флагЙн:Н:::::;:;::.. АОС А, 8?=====" per. А=27 флаг=1. per. В=7Е "::Н==ПпОУ:=:::::.. Р©Г. В=7Е Группа 7. Команды вычитания. Позволяют вычесть заданное число из одинарного регистра, пары регис- тров, или байта памяти:"' Команды этой труппы подезиеразделитъ на 3 подгруппы, каждая из ко- торых имеет свою ьшёмоннку<;?:“ Команда SUB. Кййййй^ЙЙЖ,.. сйециальй^^йдуйай.вычитаиад, когда из числа вычитается 1. Команда SBC, значение флага переносгянчитается из результата. . Все команды SUB и $ВС.№меняют флаг переноса в зависимости от того, требовался ли двоичный заем. Команда DEC оставляет флаг переноса без изменения. 51
5. Система команд. Подгруппа А. Команды\$иВ. SUB +DD SUB а 95 :h SUB В 90 Ш SUB с 91 SUBiiQ .Э&Шг зив^Ь^ншШР1' SUB (Ht!jF=:::;;:::96 SUB (IX+D) DD 96 .0::::::.. SUB (IY+D) FDSQp^b:; замечанйЬкМЙ^Мбййка койМнд хота и пишется, как указано выше, но SUB L подразумевается SUB АХ и так далее поскольку все команды ис- пользуют регистр А. В Z-80 команда SUB выполняет "истинное" абсолютное двоичное вычи- тание, как показано ^ прим^ах. Флаг переноса сбрасывается если первона- чальное значени&фёГистра А больше или равно вычитаемому и устанавливается если меньше. Например: stiffs per. ,;A=DQ...:::::r рег1;;ВтААШ;::::: рег.-А^АА: per. В=$С Подгруппа В. Колшнд#$№& Команды этой подгруппы позволяют„вдл&Я®=1 из содержимого 8 бито- 1. 2. SUB в рог. А=32 флаг=0 per. В=АА per. А=се флаг=1 per. B=DC вого регистра, ячейки памяти или 16-битовой пары регистров. Во всех этих случаях флаг переноса не изменяется.^ DEC А 3D DEC Н 25 DEC L 2D DEC В 05 DEC С 0D DEC D 15 DEC E 1D DEC (HL) 35 DEC (IX+D) DD35D DEC (IY+D) FD35D DEC HL 2B DEC BC OB DEC DE 1B DEC SP 3B 52
5.2. Группы команд. DEC IX DO 2В Ji:::;::.. DEC IY FD 2B Подгруппа С. Команды SBC. SBCA.+DD DEDD /........ SBC A, A 9F ::: "1»Ш= SBCA.H 9C Hh; ii: SBC A, L 90 .-Ш SBC A. В 98 "Ч::::::::;:::::::::::::::::1’ SBC А, С 99 ' SBCA.D 9A SBCA.E 9B SBC A, (HL) 9E F......:F=::.::=r SBC HL, HL ED 62 if SBCHL.BC ED 42 SBC HL, DE ED 52 SBCHL.SP ED 72 =’ SBC A, (IX+D) DD9ED SBC A, (IY+D) FDJ.ED команда SBC выполняет ”истаннбе”::вычитание,если флаг переноса сброшен н вычитание "с займом", «йяшфл^^ййрсносаустановлен. Это может быть полезно, если используются значений Цойьййёййбй точности. Например 4-х байтовое число содержащееся В регистрах Н’ДЛНД. может быть вычтено из другого числа, хранящегося в рёпастраД::П*£'УР,Е следующим образом: AND А сбрОС^лага переноса “щнщрр’ SBC HL, DE 8ЫЧИтанйё:М/>адшей части... ЕХХ переключенйбЬнабОра. SBC HL, DE вычитание старшейндаёж ЕХХ переключение набора :::Ш! и соответствуюпщйзаёммежду младшей и старшей частями учитывается. Группа 8. Команды сравиёйййн^:. Команды этой трУшшчйёйбльзутёТЬя очень часто во всех программах. Они позволяют программисту сравнит# значение находящиеся в регистре А с константой, значением в регистрен-области памяти. Команды выполняет опермойо:шчнтания без переноса,^ запоминания результата вычитания и только устанашпйают.флаги в регистре F. Первоначальное значение в реги- стра А не измёняётсячФлаг переноса устанавливается, как и при операциях вычитания. Сравнение; которреббльше или равно сбрасывает флаг переноса, а меньше - устанавливает, ч CP+DD FE DD СР A BF СР Н ВС 53
5. Система комацд. CP L BD СРВ CP C .Ur U.и;;;:::;:;:: r-Dnr:::. 6В^Ш=н!!" BB ;h. CRHL) BE ii: CR;( IX+D) DD BO CPl(.IY+D) FD:8ED следующие: примеры показывают использование команды СР В. per. В оставляет регистры без изменений В=ЗО И СбраСЫВабТ флаг Переноса (3130) per. А=30 оставляет регистры без изменений !h::.::::;B530=!!" 'ч» И СбраСЫВвбТ фЛЭГ ПврвНОСв (30=30) per. A’OiiiHr^P В оставляет регистры без изменений В=30 и устанавливает флаг переноса (01). Группа 9. Команцылоннш (AND, OR, XOR). Эти команды кц^дйёйййют, что первый операнд находится в регистре А. операция выполняё^Япобитно и 8-битовый результат возвращается в ре- гистр А. Ч- Подгруппа А. Логическая отерацвй;выполняется над каждыми двумя битами и резуль- тат равен 1 только, если оба используемых бита равны 1. В противном случае результирующий бит равейО. Следующий пример п$КдзЫЙ*ет как командавЖбЙйиется над восемью отдельными битами. =:: ANO ; со :::! Е6 DD А7 А4 А5 АО А1 А2 АЗ А6 В двоичной 10101010 AND 11000000 результат-------------- ---------- 10000000 в этой подгруппе следующие койиды: AND+OO AND А AND Н AND L AND В AND С AND D AND E AND (HL) 54
5.2. Группы команд. AND (IX+D) DDA6D AND (IY+D) FDA6D командой AND удобно сбрасывать боты 0-8 регйй|^:Ах::.. Этот процесс называется демаскированием и поздшж€ё:Ц|Й%^гь опре- деленные биты байта данных. Следующий пример показывает какэтфмЬжно сделать. ____ ___________________________________"г’Ф В системе SPECTRUM биты 0-2 системной перченной ATTR-P содер- жат информацию о постоянном цвете чернил. Когда двет чернил изменяется, старый цвет удаляется использованием команды АГЮ &йбв^гШ^йводится по команде ADD: LD A,(ATTR-P) AND +F8 ADD A,-«-NEW COLOR LD (ATTR-P),A находитаянй»сте.мная переменная демаскируётся^т&рый цвет добавляется новый-цвётт сохраняется системнанпеременная Подгруппа В. Команда OR. . Логическая операция "или" выполняется над:кйкдыми 2-мя бигами, и результат равен 1, если один или оба проверяемых бйтгравны 1. В против- ном случае бит результата равен 0. Пример показывает как командайВДйййяе.т операцию над 8 отдельными битами: ’ в 2-ной 10101010 ОЯШШШ::::.. 1100000^ :Ь:В. 16-ЙОЙ W it OR С0 результат 11101010 В подгруппе следующие команды "Ч::::::* OR +DD F6 DQ:H!!"=" OR А 87 :Г’ OR Н 84 :Н. OR L.r 85 'ШШШШ OR № .... ORiEihh:::.. 81 ОЙрВчннШШ* •:;В2 ... ОЙ E " OR (HL) !:КбПП:ППЬ;::::. OR (IX+D) DO ЙНШШ OR (IY+D) FDB6D при работе команды OR буйут установлены или проверены, что они уста- новлены от 0 до 8 битов регистра А. Пример показывает одно из использования команды OR. 55
5. Система команд. f"":;. найти системную переменную устаИювить биты 5,4.3 \ сохранить системную переменную в 16-ном АА XOR СО 6А б SPECTRUM биты5Л;3 системной переменной ATTR-P определяют постоянный дает буиШШГЬШэтому можно сделать дает бумаги белым ис- пользованиемкЛЙа^шОЕ +DD. ш&жэю: I CDj(ATTR-P), А Ш По&группа С. КрШ^да XOR. Прй^ХСюгаХ^аНды проверяются два разряда. Если хотя бы 1 из них, но не вместёЬуёгйовлен в единицу, то результирующий бит устанавливается также в 1; иначе результирующий бит сбрасывается в ноль ("исключающее или" или сложение по;модуз^даа). Пример ЦюкааЬ1В^ёт ХакиМЧ>бразом команда XOR выполняет восемь от- дельных оперй^ЙЙНад битами.:" !=: В 2-H0M ЮЮШЙнШЬ 11800000 результат -«+------------ 01101010 команды в этой поШруйЯЙ X0R+DD X0R А XOR Н XOR L XOR В XOR С XOR 0 XOR Е XOR (HL) XOR (IX+0) XOR (IY+D) при работе этой команды буду^устанойЛёц$;ЭДЩ сброшены ip 0 до 8 битов регистра А. Это, вероятно вначале трудно" понять, но рассмотрите пример, приведенный выше еще раз; а;именно: . АА XOR СО дает 6А в этом примере 2-ым операндом является байт О&у&Офйш все биты, за исключением 6 И 7 равны нулю. ' Поэтому эффект работы операции ХО&ЬзШ^Чается в переключении битов 6 и 7 первого операнда и изменении АА;й6А. использование команды XOR в программах машинного кода часто является сложным, но команда "XOR а", однако часто используется как альтернативная, для LD А,+00. Обе ЕЕ 00;* AF АС АО А8 А9 АА АВ АЕ DD AED F0 АЕ D 56
5.2. Группы команд. эта команда очищают регистр А, но XOR исшвкзде? только одни байт, в то время как LD А,+00 использует два байта. Все команды AND.OR.XOR сбрасывают флаг"Ш^ЁйЬта:Ж<ида ови ИС- ПОЛЬЗУЮТСЯ. .. Грутша 10. Команды перехода. Имеется 17 команд, которые позволяют выполнив переходы Bnyipti про- граммы. Команда: этой группы лучше всего рассматривать в 8 подгруппах. 4 из этих подгрупп содержат команда!, которые Нши^ . от ^остояния одного из основных флагов, и если требуется, флаги буМ5Ф: ЯййфОбйО рассмо- трены. Подгруппа А. Команда абсолютного л^йЙййЙОуШ::::....... JPADDR СЗ ADDR =f при выполнении команды значение ADDR загружаетояй счетчик команд и вьшолнение программы машинного код^йродолжается с отого адреса. Подгруппа В. Команды переходов, и№л&уЮ(^::кос#енную адресацию. JP (HL) Е9 JP (IX) DO Е9 f JP (IY) FD E9 эта команды приводят к тому, что 1^ОШия;;^япииа, хранящаяся в соответствующем регистре загружается ч= счёйияЁ-жоманд. Команды этой группы часто используются, когда переход должен осуществляться на кома- нду, адрес которой Находится в собНветстй^вщейпаре регистров. Подгруппа С. Ко1Ш$ямн^^ JR Е 18 Е " команда добавляет к счетчику кдййд.:.чйсло Б и после этого начинает выполнятся команда, на которую указыЁЙЙ'счетчик команд. Заметьте, что текущий адрес фактичесКИ-ЯВляется адресом, идущим после JR Е, поскольку счетчик команд уже получил прррдщение. Число Е всегда рассматривается как число, представленное в:дашвянйельной двоичной форме и может при* нимать значения от ИЗ&диЙШ. Следовательно переход возможен как впе- ред, та&£ назад. Команда переходам флагу переноса. (|йёёгёя::Й;крма^даг, позволяющие делать такой переход. Флаг ЛереНОЙ^^:::::::::::::::.. . Этому флагу соойёгЬйу^бит 0 регистра F и он является флагом, ко- торый показывает имело лй'й&то или нет двоичное переполнение. Но этот флаг может при определенных условиях сбрасываться или устанавливаться. Имеется много примеров, когда на флаг переноса не влияет выполнение команд. 57
5. Система команд. Кратко можно описать; ;<йедующее правило: 1. Все команды А1Ж?;Й;АСС Влияют на флаг переноса. Если нет перепол- нения фиагсбрасывается, но если есть переполнение, то флаг устана- 2. Вйе;команды SUB;;SBC, СР влияют на флаг переноса. Если был 2-ньгй :;::’&ём, тогда флаг устанавливается; в противном случае сбрасывается. 3. Всф.команды ANDpOR, XOR сбрасывают флаг переноса. 4. КоМЫдагсдащ^^йЩгяют на флаг переноса. К койайдйй пёрехода по флагу переноса относятся следующие команды: JP NC.ADDR D2ADDB JR NC, Е JP C.AD0R: JRC, Е : в качестве примера этих команд рассмотрите следующую программу, ко- торая распознает цифрывкодё:А5СП. введите в регистр А, распознаваемый код КОД^ДЛя цифры 0 переход, если он.находится за границей диапазона КОД ДЛЯ переход,если флаг сброшен переход,если флаг установлен З&ЕНОШ ;DA:;A:0DR НШНЭДЕ СР +30 JP С.ERROR СР +ЗА JP NC, ERROR опятЬ..дер^кЬй| если Он находится за пределами диапазона П J ......................... j продолжение только с цифрами то есть диапазон 3O-39L первые две команды вййгпёйриведенном примёре;ипределяют нижнюю границу диапазона цифр в кбДё: ASCII (ЗО),Вт$рь1ё две команды определяют верхнюю границу диапазона цифр в ASCII (39). Если код, находящийся в регистре А не является цифровым-сймвблом кода ASCII, то будет переход по адресу ERROR, а если код, находящийся в регистре А является символом цифры, то выполнение программы продолжится;:;::;;:. Подгруппа Е Команды перехода пофлагуО. Имеется 4 команды, которые позво^1яЮТ кШолнитЬ:переход только в том случае, если флаг нуля будет таким же, как трёбуёгёя командой, h. Флаг 0. Этому флагу соответствует 6-й бит регистра F и в бощдЩДСХйё: случаев он устанавливается, если результат равен 0, в противном сдучаё он сбрасы- вается. =:...::::"££==7 Напртмер: 6С ADD 5А дает С6 и флаг нуля сбрасыёёйНЧУя 6С ADD 94 дает 00 и флаг нуля устанавливается. Можно привести правило: 58
5.2. Группы команд. С2 ADDR 20 Е СА ADOR 28 Е переход только когда; сброшен флаг. О лереход;ТйО$;к.Огда установлен флнгнИШ;;;;:. 1. Все команды ADD, INC, ADC, SUB, DE£i;-SBC, CP, AND, OR, XOR, использующие одиночные регистры и кЬмивды АОС, SBC использу- ющие пару регистров, установят флаг 0 , ёёлидозуд^тат равен 0, в противном случае флаг нуля сбрасывается. 2. Команды сдвига, команды проверки битов и команды пдйёкаубйоков влияют на флаг. 3. Команды LD за исключением LD А,1 и LD A,R;&e влияют на ф^аг нуля. Команды перехода по флагу нуля: JPNZ.ADDR JR NZ,Е JP Z.ADDR JRZ.E команды этой группы обычно широко йснользуютсяинример показыва- ет, как распознать символы ASCII. .......... введите в регистр А Йб&£ЙМйО.ла СР +ЗВ это символ ";" ? JP Z, S-COLON переход, если 'йёШгак СР +2С ЭТО СИМВОЛ " , " JP NZ, ELSE переход, если .. .......... продолжение П|ЭЙ ", " "ШШШЬШ:::. Jh Подгруппа F. Команды перехода .по флагу siffliia. Имеется две команды, которыеирзволяют сделать переход только в таи случае, если флаг знака;будет таким же какоребуется командой. Флаг знака. Этому знаку соответствует7-йй;|юдистра.Р и в большинстве случаев он представляет собой копию старшего' (ЛйЙйп$: бита результата. Когда 8 битовое или.16 битовое двоичное число представлено в форме дополнительной двоичнойарйфметики, тогда левый бит (бит 7 или бит 15) принимает бит знака. .Он сбрасывается для положительных чисел, и устана- вливается для отрицательных;;;;;^"''"^;;;; Поэтому флаг знайй:мО^: сбрасы^аться с помощью положительных ре- зультатов, и устанавливаться с помощь# отрицательных. Кращиодашем правила: 1. B&W»;;ADD, INC, ADQ SUB, DEC, SBC, CP, AND, OR, XOR " используюЁЦ№;::;1::регистр, а команды ADC и SBC использующие 2 регистра, будут ктаязьна флаг знака, как указано выше. 2. Команды поиска бл<жа;й;;бёлыпинство команд сдвига также влияют на флаг знака. 3. Команды LD, за исключением LD А,1 и LD A.R не влияют на флаг знака. Команды перехода по состоянию флага : 59
5. Система команд. JP P.ADDR F2 АООД-^йереход, если результат "+” JP И, ADDR ЕД:А0^;^:(1ереход, если результат команды вЭТСЙргруппе о&гао не используются. Частично потому, что треб^..^Оютвюга:Д]феса и частично потому, что биг знака может счи- тглтдар^ёторыми другими методами. ilpHMep показываетиспользование этих команд. введете в регистр А код символа. .ЗПШфлияет на флаг знака ;кеды 00-7F вызывают переход Продолжение только с графическими символами (коды an$s JP Р.=ш& 8O-FF) Подгрупп» Сл-:^^д^П^!(хода по флагу перепалнения/четности. Имеютсяд^кшанды, которые позволяют выполнить переход, если флаг переполнениеЛгётности будет таким как требуется. Флаг перепёлнения/четностИ;^ Этому флату соответствУёК^^Ой бит регистра F и является флагом двой- ного назначения.ПеКОТСфыё команды используют флаг, чтобы указать на переполнение, в то врёмя как другие команды используют его, чтобы хранить результат проверки на четность. Понятие переполнение отиоёйФ^ ^арифметическим операциям с чис- лами в дополнительном двф^ом коде, как показано следующими примера- ми: Ц 16-ный ОА ADD 5С дает; 66 ;; 10-ный 10 ADD 92 дае^:302£йЬторое правильне^^т переполнения. ...инПШрР”" ! 16-ный 6А ADD 32 дает 9Q 10-ный 106 ADD 50 дает 1б$УрНэдЬе неправильно - дает Переполнение. Переполнение может также возникнурь.прт выЧйуании, а именно: 16-ный 83 SUB 14 дает 6F jf. 10-ный 131 SUB 20 дает 111, которое нёГ$|Ы&о,то есть ;: имеет переполнение. ' „«-Ш-. Таким образом, если мы при вьшолЙ^ЩЩ 'арифметическВД :рй^|фйФ рас- сматриваем исходные данные как числа, представленн№:$:|^ршитёй$ном двоичном коде, то флаг переполненияЛгетиости указываёгнгналичие пере- полнения (он устанавливается, если резульаэтзоведадии, представленный в дополнительном двоичном коде больше +127;(двсй+йчное) или меньше -128 (десятичное)). "ig" Понятие четности касается числа единичных бите» в заданном байте. Эго показано примером: 60
5.2. Группы команд. байт 01010101 имеет четное число единщ£й;;флаг устанавливается “«Шфф:!:.. байт 00000001 имеет нечетное число единиц и сбрасывается. / Кратко сформулируем правила: 1. Все команды AND, OR, XOR и большинство ^манд сдвига да&т резу- льтат, который может был» проверен на четность. .. 2. Все команды ADD, ADC, SBC, SUB, СР использукййас;»дййдчные ре- гистры и команды ADC, SBC использующие два регистра дают резу- льтат который может быть проверен на лсредолнение. 3. Команда INC установит флаг, если реэтльтат:бу^ет;ра®ен 80 (16-ричное) и команда DEC так же, установит фйг, если резуйржГравен 7F (16- ричное). 4. Различные другие команды, а именногШ&АД и LD A.RH команды отра- ботки блоков также влияют на флаг нсфенапнение/четпости. Команды перехода этой группы: JP Р0,ADDR Е2 ADDR - переход,.если равенство йёчетное или нет переполнения .. JP РЕ,ADDR ЕА ADDR - переход, раве^твоНнЬтнюе или имеет место переполнение. Г Команды этой подгруппы исп<ййуют<й? только в тех случаях, когда не- возможно использодйнедругих команд, зф-ннфф Группа 11. КоМандаШ1Й&;:: Одиночная команда в этоЙгишне:является одной из самых полезных и самой широко используемой в 2-80;:;;ффф:::Н: DJNZE10E работа этой команда может быгь.уподбблена циклу FOR-NEXT програм- мы БЕЙСИК следующего ввдаФУфффй. FOR В»Х ТО 0 8ТЕ1*Й:Н$ВО в этой цикле перемёййбй "в" присваивается значение X. затем с каждым проходбй:Викла она уменьшаетсядоДех пор, пока не достигнет значения 0. К(ШШО:;ШМ2 используется подобным же -образом, прежде всего про- граммист ДбйЖ8Й::;0йрсделить значение переменной цикла и занести ее в регистр В. ЗатёМ”ЙЖГ:Жкл. Наконец, используется команда DJNZ, но с большим вниманием.Ч^Й^Дйться, что величина смещения подходит. Следующий пример показывает как эта команда должна использоваться для печати алфавита. LD В.+1А 26 букв в алфавите "А” - первая LOOP LD А, +5В в регистр А загрузим код последней 61
5. Система команд. SUB В RST 001Q... RETHh; буКВЫ ЭЛфаВИТЭ ..«ннШИШнн уменьшим значение регистра А " печатаем символ, чей код НЭХОДИТСЯ В рвГИСТрв А сравниваем регистр В с нулем, если в регистре В ноль^то выполняем следующую команду, а если в регистре В не ноль, то вычитаем из регистра В единицу и переходим на метку LOOP нврат в БЕЙСИК. 16-мк6дойййяэтого примера является: 06,1A,3E,5B,90,D7,.1QJtA,C9 где байт "ЗЕ" цикла. Автор обйадуирВД'ЧГго лучшие методики для вычисления правильной ве- личины "Е” впримёрах коротких машинных кодов, подобных приведенному выше, заключается в представлении байта "Е" величиной "FF" и затем счи- тать в обратном направленив^(вй16-ой форме) до тех пор, пока не будет достигнут байт ЦИЮ1а.::;Шн£:Н;:: В приведенномиыше примере имеется 5 шалю назад и соответственная величина для "Е" райна FA. Группа 12. Команды стекй££;;;::: В большинстве программгмашинных кодов осуществляется активное ис- пользование машинногостека: программистом в качестве места, где можно хранить данные; микропроцессором - ДЛЯ сохранения адресов возврата. Команды, которые образуютэту группу можно разделить на две подгруп- пы для пользователя и трй вюдгруппы для мшцршфоцесёора. Подгруппа A. PUSH и POP. Эти команды позволяют программисту по PUSH сохранить 2 байта дан- ных в машинном стеке, а по РОВКшшровать 2 байта из машинного стека. Эти 2 байта данных должньГконироваться й'СТрого определенную пару регистров, но важно знать, что не осуп^пвляется никаких пометок, указы- вающих к какому из двухъ регистров какойбайт принадлежит. PUSH AF F5 if • i= PUSH HL E5 Jh. PUSH ВС C5 •«h=-:"=- PUSH DE D5 ' PUSH IX DDE5 PUSH IY FDE5 т» POP AF F1 ' POP HL E1 POP BC C1 POP DE D1 62
5.2. Группы комавд. POP IX DDE1 Jh=:;::.. POP IY FDE1 Нужно понимать работу этих команд, если1 в прбфййй&машинного кода собираются использовать машинный стек не в прямо^ШЬКйёёЬ;;-:.. Когда выполняется команда PUSH, указатель стека предварительно уме- ньшается так, чтобы указать на свободный байт стека. В этот байгзависы- вается содержимое старшего регистра. Затем указатель стека уменьшается вторично и величина из младшего регистра копируется# стек. Противоположные действия имеют место во времйййййжшенййкоманды POP. Важно помнить, что указатель стека посцевыполнения одной из этих команд указывает текущий адрес стека, использованный, в "последний раз". Команды этой подгруппы часто испол^рются одиовр^менно и следую- щий пример подтверждает это: PUSH AF сохранить AF PUSH ВС сохранить ВС .и ....... "другая работа" POP ВС восстановить ВС POP AF восстановить АРф:::::=;ШШШ::::...„ в примере под словами "другая работа“;нодразу}йевается использование регистров A, F, В, с "без вреда", но она ("другаярйбёта") не должна изменять содержимое указателя стека. Подгруппа В. комопды обмена со стеком^ - ' Команды этой подтруппЫ:Нечасто используются, но они могут оказаться полезными: EX(SP),HL ЕЗ EX (SP), IY DD ЕЗ.йШ::::: EX (SP), IX FD ЕЗ' эти инструкции позволяют;прбграммисту обменивать текущую величину, имеющуюся в указаннййларё^гистров с последним значением машинного стека. Зййчение указатёлямашинного.Ётека не меняется. Исшшьэование этих команд.мржвт привести к путанице и лучше всего их исЩЖЙЖ1ь.:Как альтернативу йймандам POP и PUSH в особых случаях. НаПрЙМ^::=!^Ш:И::Ьй::::.. величина "пёрв^йаходитсяв стеке, величина "вторая" в паре регистров HL, и если програмМйсТ йамерей обменять их друг с другом, то имеется два способа: 1. Использовать команду EX (SP),HL тогда данные из стека по текущему значению указателя стека будут размещены в паре HL, а из HL пере- дадутся в стек. 63
5. Система команд. 2. Использовать допошгшЗЗьный регистр дня временного храпения ^перво- го", то есть: POP ВС ..;:;::;;Нфдефаните "первый" а регистровой паре ВС •PUSH::Hiii:::i=:=::!”bh4)poB" передать в стек Й$Н!!ВС: "первый” передать в стек PO^HL "первой" передать из стека в HL кр$ие того команд^этой подгруппы могут использоваться для изменения адресазозврата (см;:ЕЙже). Подгр^й&Кдманды вызова подпрограмм (CALL). Командымашинного кода CALL эквивалентны команде БЕЙСИК "GO- SUB". Команды включаютёяпв.эзу группу, тж. микропроцессор использует стек нашим, то.в^й®й<ййй:Ш.кот^ой хранятся адреса "возврата". Имеются Ф&йгЙЙа в этой группе и они позволяют перейти на подпро- граашу без условий или в зависййрсти от состояний 4-х флагов. Командами» этой подфунпе:®ляются: CALL ADDR.:n::iiiii:i = CD ADDR CALL GpDDiR"" DC ADDR CALL NGfADDR Z/ADDR D4 ADDR CALL sO» CALL NZ.A&OR ...: CALL И.АОМШШн FC ADDR CALL P,AD0R"T 1 F4AQDR CALL PE, ADDR! i •: EGOR CALL PO.ADDRiib:. E4 ADDR действие команд САБЕйудут следуюпщмп:^ШШ:;;::";^ 1. Текущее значение счетчика команд,тоесп>адрес первой ячейки после ADDR, сохраняются в сзекег:УкйЗЙель стека изменяется как в случае команды PUSH. СгаршййТийт счетчика команд сохраняется в стеке над младшим байтом. 2. Адрес вызываемой подпрограммы записывается ^ счетчик команд и вы- полнение программы продолжаете^::^;;. Подгруппа D. Команды RET. :р '"чШШрнУр1 Команды машинного кода RET эквивалентны” команде БЕЙСИК "RE- TURN". Имеются 9 команд в этой подгруппе, которые позволяютосущест- вить выход из подпрограммы без условий или в завнсимр^ЗД!$6£ОДшия 4-Х флаГОВ. ..и-НШШШШ””" Командами в этой подгруппе являются:;. RET С9 RET С D8 RET NC DO RET Z C8 64
5.2. Группы команд. СО F8 F0 Е8 ЕО RET NZ RET М RET Р RET РЕ RET РО по команде RET адрес возврата из машинного стека побайтно восстана- вливается в счетчике команд. При этом указатель йека дважды модифици- руется в сторону увеличения. Важно понимать, что восстановленный адрес возврй^йз;машЕЙйого сте- ка не обязательно тот, что был вначале помещен туда кбйййДбйСАЬЬ. Не совсем обычно при программированвд ца ВЕЙСИКе модифициро- вать стек GOSUB , но при программирован^втадшинном коде это обычно имеет место. :Ш" Следующий пример показывает как это делается. Айресщрограммы вы- бирается из таблицы адресов и на эту программу осуществляется переход. регистр А содержит вхбДноёЬШнаяение LD D.+00 очистка регУЮзпяйГхР-? ADD A, A удвоение входного' значения LD E.A ^пересылка в регистр Е LD HL,+TABLE .;; HL Называет на таблицу ADD HL, DE г указаТел&й&тбЧку входа LD D,(HL) Ь:.получф:ние старшего байта адреса INC HL.. LD E.llii,. пдлучёние;:МЙадшего байта адреса PUSH DE С0храненив:.адреса в стеке”" RET возврат Подгруппа Е. каманд^ ХЗТ. Последняя подгруппа команд.в.этрй группе содержит специальную кома- иду RST или команду; "повторник;цуск". Эти команды являются аналотич- ными командам САШ^о^ёк^^^йтШчтобы адрес определялся. RST >0000 C7 CALL 0000 RST $>>::::.. 0008 ::::CF CALL 0008 RS-T ННННШЖ=::::0О1О :::07 CALL 0010 RST DF CALL 0018 RST RST RST 0028::Ч::::::::::;::: 0030 :: E7 EF F7 CALL 0020 CALL0028 CALL 0030 RST 0038 FF CALL 0038 в системе SPECTRUM восемь адресов "перезапуска" являются точками входа подпрограмм монитора и они будут рассмотрены в главе 7. 65
5. Система команд. Группа 13. Команщыс^ига. Эти команды поэ8вляют;сдвигать на один бит вправо или влево содер- жимое регастррни^байтов памяти. Разделим эти команды на 4 подгруппы: ф комайШй Шйиеского сдвига ф^ЙрйЙДЫ арифметического сдвига Ф^Команды ротации (циклического сдвига) Фр команды ротацди полубайтов. Подгруппа 4,;:|$дояды логического сдвига. Эти команжсдайгают содержимое указанной ячейки на один бит впра- во. При этом в крайний левый бит записывается ноль, а "вытесненный" бит поступает во флаг персноёа^если "вытесненный" бит равен 1, то флаг пере- носа устанавливаетсД:й:1‘;-ёСЖ;:''вьпесненный бит равен 0, то флаг переноса сбрасывается:$:$У:;:;;:"' SRL А СВ 3F SRL Н СВ зс SRL L .СВ ЗВ;ШШ SRL В SRL С СО8?:::" С&39 SRL D СВ-ЗА SRL Е СВ ЗВ: SRL (HL) СВ ЗЁ;;-:£ SRL (IX+D) DD СВ'^з; SRL (IY+D) FDCB Ш Подгруппа В. Команды SRL(IX+D) DDCB1 О 30 SRL (IY+D) FDCB Ш J 0 Зр Подгруппа В. Командыяфйфметич^^^ Команды арифметического сдвига сдаигд&тфДёржимое указанной ячей- ки на один бит вправо или влево» Црц$Тбй "Вытесненный" бит поступает во флаг переноса. Рассмотрим команды арифметического сдвига вправо. Эти команды сдвигают содержимое указаннойДчейки (регистра, байта в памяти) на один бит вправо, при этом крайний левый бйТ:(бцт знака Для чисел в дополните- льном двоичном коде) остается прежним; а;крайний :правый бит поступает во флаг переноса. Например, число] 100 11Ь0;(£Ж:1б-ричное) после ариф- метического сдвига вправо будет следующим: 11100110 (Е6 1б-ричйре). Ва- жно отметить, что арифметический сдвиг вправо эквивалентеЦ:Д$М$ню на два (для чисел представленных в дополнительной двоичной фр^ё^прд.этом флаг переноса свидетельствует о наличии остатка. SRA А СВ 2F SRA Н СВ 2С SRA L СВ 20 SRA В СВ 28 SRA С СВ 29 66
5.2. Группы команд. СВ 2А СВ 2В СВ 2Е DD СВ FDCB D 2Е D 2Е SRA О SRA Е SRA (HL) SRA (IX+D) SRA (IY+D) рассмотрим команды арифметического сдвига вдево. Эти командьгсдви- гают содержимое указанной ячейки (регистра, байтов памяти) на один бит влево. При этом в крайний правый бит записьшаетсяНйань, а "вытесненный" бит поступает во фиат переноса. Команда арифмеТ^йкогоийЁййв влево соответствует умножению на два, при этом флаг переноса -СййДЙ^ельствует о том, что результат больше 255. Поскольку арифметический и логичесдйй;:ёд^фн..1ще^ совпадают по результатам действия, то для логического сдвига влйр;;нй:ИЬ1делено своей команды. 8LA А СВ 27 SLA Н СВ 24 SLA L СВ 25 SLA В СВ 20 SLAC СВ 21 SLA 0 СВ 22 SLA Е СВ 23 SLA (HL) СВ 26 SLA (IX+D) DD СВ SLA (IY+D) FOiiCB.. &:26 0;26 Подгруппа С. Команды рдтации. Команды ротации - это йШй&Шдаклического сдвига вправо или влево. Рассмотрим эта команды. Команды RL - ротация влево. В рёзуоджте действия этих команд содер- жимое указанной ячейедйёдвигается на один бит влево, "вытесненный" бит поступает во флаг переноса, а фдагпереноса поступает в крайний правый бит ячейки. Таким образом, прййсХадйт циклический сдвиг влево через флаг переноса.:. ’Нй-нОЙнР*' .RL =if А С&И7 RLiOBiH Н •::::::CB‘ 14 ВШШннШ ННЙййХ ":::СВ 15 RL СВ 10 RL СВ 11 RL RL D Е СВ 12 СВ 13 RL (HL) СВ 16 RL (IX+D) DD СВ D 16 RL (IY+D) FD СВ D 16 67
5. Система команд. команды RR • команшйтотического сдвига вправо. В результате дейс- твия этих команд указанной ячейки сдвигается вправо, "вытес- ненный1* бит:(1фййЦйЙ правый бит) поступает во флаг переноса, а флаг переносадррдуиаетв: крайний левый бит указанной ячейки. Таким образом содержнмоёрегистра или байта памяти циклически сдвигается вправо через флагГШфёноса. RReh. А CB 1F ЯЯ»И-:.. СВ 1С RR СВ 10 RR СВ 18 RR СВ 19 RR Ш; СВ 1А RR СВ 1В RR 1HHL) г СВ 1Е RR (IX+D) чнчч; DD СВ D 1Е RR ( IY+D):::::::::: .-ч; FD СВ D 1Е необходимо отметить; что при использовании команд RR и RL бит, "вы- тесненный” во флагйереноса, хранится там до тех пор, пока не будет изме- нен следующими командами, влияющими на флаг переноса. Команда RRC и RLC - комшоди ёапишческото сдвига вправо и влево соответственно. Эти ю^нды;:в отличии;от команд RR и RL, сдвигают со- держимое указанной яйсйПЙйа оДин бит вправо или влево минуя флаг пере- носа, хотя "вьггесненный":бит по^тупа^ТИ в него. Например, команда RRC (HL) сдвигает содержимо&ячейкн памяти, адрес которой находится в паре регистре» HL, на один бите [вправо, при этом "лыЁёэтёвный” бит (крайний правый) поступает в "освободившийся" бит.(крййИйй левый). "Вытесненный" бит поступает также и во флаг перенрсц;[[[:;:::" RLC А RLC Н RLC L RLC В RLCC RLC 0 RLC Е RLC (HL) RLC (IX+0) RLC (IY+0) RRC А RRC Н RRC L RRC В RRC С СВ 07 СВ 04 СВ 05 СВ 00 СВ 01 СВ 02 СВ 03 СВ 06 DD СВ FD СВ СВ 0F СВ ОС СВ 00 СВ 08 СВ 09 D 06 0 06 68
5.2. Группы команд. СВ ОА СВ ОВ СВ ОЕ DD СВ FD СВ О ОЕ О ОЕ RRC D RRC Е RRC (HL) RRC (1Х+0) RRC (IY+0) Подгруппа D. Команды ротации полубайтов. В этой подгруппе всего две команды RRD и RE&,. Указанные операции производятся над байтом, адрес которого находитсян№:нар^..реп^пфов HL, также в этих операциях участвует правый полубайт (4:разр5ща.);рёгастра А (аккумулятора). Рассмотрим действия вышеуказанных команд. Команда RRD производит следующие действия;:;.. 1. Левый полубайт ячейки, адрес которой:й^бдЖ^Гв;Ш<<;:поступает на место правого полубайта этой ячейки памяти. 2. "Вытесненный" правый полубайт ячейкй.памяти поступает в правый по- лубайт регистра А. 3. "Вытолкнутый" правый полубайт регистра;А;нрступт на место левело полубайта ячейки памяти. Левый полубайт:рёй|ёара А остается без изменений. Команда RLD производит следующивЬдействия: 1. Правый полубайт ячейки памяти, адрёсНкоторойЬиаходится в паре реги- стров HL, поступает на место левого полубайта этой ячейки. 2. "Вытесненный" левый полубайт ячейки памяти поступает в правый по- лубайт регистра А- Вьполкну™й"11равБЙполубайт регистраА-'поступает на место правого полубайта ячейки памяти, Левый полубайт регистра А остается без изменений. RRD ED 67 ”:! RLD ED 6F кроме перечисленных4-х групп естьЪще одна дополнительная группа (пятая) команд ротаций аккумупя^а;(ре1истра А): RLA RRAJ RLQAi RR.^ 3. "1 17 1F ““чОР* 07 OF в^Скнб^ЙйИТв^что все переноса. И всё:КОМйНДЫ,: кроме RLA, RRA, RLCA, RRCA влияют на флаг четности И знака. Группа 14. Команды обработки битов. Набор команд Z-80 имеет команды, которые позволяют определять, уста- навливать и сбрасывать отдельные биты в пределах байта, помещенного в регистр или находящегося в памяти. действия аналогичны команде RL а действия аналогичны команде RR а действия аналогичны команде RLC А ’ "“^'-действия аналогичны команде RRC А команды, кроме RRD и RLD влияют на флаг 69
5. Система команд. Подгруппа А. Команды BIT. Они позволяют определять состояние определенного бита. Например: ВГГ О,А - проверяет нулевой (крайний правый) бит регистра А. при использо- вании одной из этих команд обычным является процесс проверки, например, путем использования команды JP Z.ADDR. Команды бит устанавливают флаг нуля, если проверяемый бит равен нулю, и наоборот. Подгруппа В. Команды SET. Эти команды позволяют устанавливать определенный бит в 1, при этом ни один из флагов не изменяется. На практике команды используются для установки битов, но во многих случаях их использование лучше описывать как подтверждение, что опреде- ленный бит установлен. Команда SET, работающая с установленным битом, не будет иметь демонстрационного эффекта. Подгруппа С. Команда RES. Данная команда позволяет сбрасывать определенный бит в ноль. Флаги не меняются. Команды этих трех подгрупп приведены в таблицах. Команды ВГГ: per. В1Т0 BIT1 BIT 2 виз BIT 4 ВГГ 5 BIT 6 BIT 7 А СВ 47 CB4F СВ 57 CB5F СВ 67 CB6F СВ 77 CB7F Н СВ 44 СВ4С СВ 54 СВ5С СВ 64 СВ6С СВ 74 СВ7С L СВ 45 CB4D СВ 55 CB5D СВ 65 CB6D СВ 75 CB7D В СВ 40 СВ 48 СВ 50 СВ 58 СВ 60 СВ 68 СВ 70 СВ 78 С СВ 41 СВ 49 СВ 51 СВ 59 СВ 61 СВ 69 СВ 71 СВ 79 D СВ 42 СВ4А СВ 52 СВ 5А СВ 62 СВ6А СВ 72 СВ 7А Е СВ 43 СВ 4В СВ 53 СВ5В СВ 63 СВ6В СВ 73 СВ7В (HL) СВ 46 СВ 4Е СВ 56 СВ5Е СВ 66 СВ6Е СВ 74 СВ7Е (IX+D) DDCB D46 DDCB D4E DDCB D56 DDCB D5E DDCB D66 DDCB D6E DDCB D76 DDCB D7E (IY+D) FDCB D46 FDCB D4E FDCB D56 FDCB D5E FDCB D66 FDCB D6E FDCB D76 FDCB D7E 70
5.2. Группы команд. Команды SET: per. SETO SETO SETO SETO SETO SETO SETO SETO А СВС7 CBCF CBD7 CBDF CBE7 CBEF CBF7 CBFF Н СВС4 свес CBD4 CB DC CBE4 СВЕС CBF4 CBFC L СВС5 CB CD CBD5 CBDD CBE5 CBED CBF5 CBFD В СВ СО СВС8 CB DO CBD8 CB EO CBE8 CBFO CBF8 С СВС1 СВС9 CB DI CBD9 CBE1 CBE9 CBF1 CBF9 D СВС2 СВСА CBD2 CBDA CBE2 CBEA CBF2 CBFA Е свез свев CBD3 CBDB СВЕЗ CBEB CBF3 CBFB (HL) СВС6 СВ СЕ CBD6 CBDE CBE6 CBEE CBF6 CBFE (IX+D) DDCB DC6 DDCB DCE DDCB DD6 DDCB DDE DDCB DE6 DDCB DEE DDCB DF6 DDCB DFE (IY+D) FDCB FDCB FDCB FDCB FDCB FDCB FDCB FDCB DC6 DCE DD6 DDE DE6 DEE DF6 DFE I Команды RES: per. RESO RES 1 RES 2 RES3 RES 4 RES 5 RES 6 RES 7 A CB87 CB 8F CB97 CB9F CBA7 CB AF CB B7 CB BF H CB84 CB8C CB94 CB9C CBA4 CBAC CBB4 CBBC L CB85 CB 8D CB 95 CB9D CBA5 CB AD CB B5 CB BD В CB80 CB88 CB90 CB 98 CBAO CB A8 CB BO CBB8 C CB81 CB89 CB91 CB99 CB A1 CB A9 CB B1 CB B9 D CB82 CB8A CB92 CB9A CBA2 CBAA CB B2 CB BA E CB83 CB8B CB 93 CB9B СВДЗ CB AB CB B3 CB BB (HL) CB86 CB8E CB96 CB9E CBA6 CB AE CBB6 CB BE (IX+D) DDCB D86 DDCB D8E DDCB D96 DDCB D9E DDCB D A6 DDCB DAE DDCB DB6 DDCB D BE (IY+D) FDCB D86 FDCB D8E FDCB D96 FDCB D9E FDCB DA6 FDCB DAE FDCB DB6 FDCB DBE 71
5. Система команд. Группа 15. Комавды .обработки блоков. Имеется 8 кома11Д:обработки блоков. Эти команды очень интересны и очень полезньЕ:Онн;ндзволяют перемещать блок данных из одной области памяти в.друГ^р/йййцскать данные в области памяти. Д^;ррёМещения блока данных перед выдачей соответствующей коман- ды необходимо подготовить следующую информацию: 1. Адрес начала перемещаемого блока в паре регистров HL. 2. Адресместаназпайения в паре регистров DE. 3. Количёствойёремещаемых байтов в паре регистре» ВС. для поиска за- данной величины в блоке данных необходимо подготовить следующую информацию: 1. Заданная^всдич^^ Дблжна^бьпъ помещена в регистр А. 2. Адрес начаяаблока, в котором осуществляется поиск заданной величины в паре регистров HL. 3. Длина блока, в котором^осуществляется поиск в паре регистров ВС. Команды груЩЦ&Ш^" автоматически# LOIR ED B.Q: . LDDR ED В&;;£ CPIR ED BT::::! CPDR ED B9 неавтоматические "i::::::::” LDI EDAO LDD ED A8 ” CPI ED A1 * CPD ED A9 как можно увидеть из выше йриведелн.ой таблицы имеются автоматиче- ские и неавтоматические команды. Ароматические команды более просты и боле полезны. Автоматическая команда будет вЬшолнять сйркг^адачу до тех hop пока не будут выполнены все действия nij .поиску или пересылке. ВыйЬднение автоматической команды может длиться разное время. Это вреМЯ^авНсит от количества байтов, которые будут перемещаться. Неавтоматическая команда передает только потному: байту, и требует, чтобы программист использовал команду повторио для^дальнейшей пересы- лки или поиска. Время выполнения неавтоматигаёёкбй команды поэтому фи- ксировано. Автоматическая команда представляет собой команду обработки блока, при выполнении которой адреса источника, места назначения информации 72
5.2. Группы команд. и значение счетчика байт - уменьшаются или.^жличиваются микропроцес- сором. Каждая команда этой труппы будет обсужДатьсяйё'ййгсрсди. LDIR. Это самая распространенная команда из этойукруппы. КомайДа:;будет перемещать данные, адрес источника которых содержится в паре регистров HL, в область памяти с адреса, находящегося в парёгдегистров DEJKonwre- ство пересылаемых байт определено в паре регистрогВЁШён^-ннШП" Команда работает следующим образом. Байт памяти.адрёскоторого со- держится в паре регистров HL, пересылается в;память по адресу, находяще- муся в паре регистров DE. Величина в паре регистре» ВС затем уйёньшаёТСЙ^Йр:ЙИйкчина в парах HL и DE увеличивается. Если счетчик в регистровой паре BCrg&e не достиг 0, тогда будет пере- сылаться другой байт данных. Этот процёёс[нр^джается пока счетчик не достигнет 0, но заметьте, что в этот момент парыр^риздзов HL и DE дости- гают значения адресов после блока. Флаг переполнёнийМетности сбрасыва- ется. jp LDDR. Эта команда является такой жёкак койанд^ЩИК, за исключением того, что после пересылки каждого байтазначёния вёцарах регистров HL и DE уменьшаются. Поэтоиу команда требует, чтобу начальный (базовый) адрес блока соответствоваящоедзднему байту блакаШМёсто назначения информа- ции также должно бтноейтыя ^щюледнему байту выбранной области памя- CPDL Эта команда просмайфйвает определенную область памяти для поиска первого наличия эталонной ведиФйНы, Регистровая пара HL должна содер- жать базовый адрес, 4. ВС.^ЖёЖГфЙйтов для исследования, регистр А - эталонную величину. "НННППИ""' Команда работает следующим образом. Байт данных из памяти по адре- су, нахрО^емуся в паре регнстренНЕ'сравнивается с регистром А. Если они не совнгщи£го;садержнмое пары регистре» HL увеличивается, а ВС умень- шается и срЙйййЙ^ёятугедующий байт памяти с регистром А. Так происхо- дит до тех пор, йёжа; йё йроиэойДёт сравнение байта памяти с содержимым регистра А или пока tiiipi’^ilctpoB ВС не станет равной нулю. Если содержимое байта ^регистра А совпали, тогда флаг нуля устанав- ливается, а флаг знака сбрасывается, а регистровая пара HL содержит адрес выбранного байта. Величина в ВС указывает как далеко от конца блока определено совпадение. 73
5. Система команд. Если не совпали, То: регистровая пара ВС=О , а флаги нуля, знака и переполнения/четност& ^рафваются. Раб<^^;Й6й команды похожа на CPIR, но блок данных просматривается сверху-вниз (то есть содержимое HL уменьшается, а не увеличивается). Далее рассматриваются неавтоматические команды. LDfc:....... Дейстоте;ЭлЩ<:командь1 такое же, как и у команды LDIR, но если кома- нда LDIR вьЙОЛЙяет перемещение блока целиком байт за байтом до тех пор, пока в регистре ВС небудетдостшиуг ноль, то команда LDI перемещает только один байт., ]^ли:1фй?этом в регистровой паре ВС не достигнут ноль, то флаг переполиеЩ^й/чётности; равен 1, если ноль достигнут, то флаг пере- полнения/четйЬйй равен 0 (сбрбшен). По результатам проверки этого флага программист может принять решение о продолжении действия команды LDI или прекращении. Одним словш^ если команда LDIR выполняет перемеще- ние каждого следующего байта автоматически, то LDI - не автоматически. LDD. Работает как LDI за исключением, того, что величины в HL и DE умень- шаются. 4 ...Ч: СИ. J Команда аналогична CPIR, но в отличии от нее не является автоматиче- ской. Здесь после каждого равнения очередного байта; программист может принять решение о прекращении или продолжении поиска в зависимости от состояния флагов регистра F. Если содержимое проверяемой ячейки я аккумулятора (регистра А) со- впадут - включается флаг нуля* в противном случае он выключен. Если в процессе поиска нужный байт ещё не найден, а содержимое пары регистров ВС уменьшилось до нуля, то включается флаг пёрёполнения/четности, в про- тивном случае он выключен (сброшен)?’-г" CPD. Эта команда подобна CPI, за исключением того, что регистровая пара HL уменьшается. Группа 16. Команды ввода/вывода. Периферийное устройство (принтер, клавиатура,; мап^тофон и так да- лее) подключается к компьютеру через специа/вьвювгус-тройство, называемое ’’порт ввода/вывода” или просто ’’порт”. Максимальное количество портов 65535, но реально их гораздо меньше. Для обмена информацией с перифе- рийным устройством через порт существуют специальные команды. Рассмотрим эзи команды. 74
5.2. Группы команд. Подгруппа А. Команды простого ввода. .hih:::.... Эти команды принимают байт данных из указанного порта и помещают его в указанный регистр. Важно отметить, что адреё^нррра.двухъбайтовая величина, но во многих ситуациях старший байт моядгошрбшнорироватъ и не задавать вообще, так как он не влияет на выбор лорта. Командами этой подгруппы являются: адрес порта И::. .йЖадший :::?байт регистр приемник Партий Whhhhhh IN A, (+DD) ЕВ 00 А А • 00 IN А,(С) ED 78 А В с IN НДС) ED 60 Н .-hhh^h hhhhB::- с IN L (С) Е0 68 L Рг’ ’••В:::::::::::.::::- с IN В,(С) Е0 40 В Н В •• =h=h: с IN С, (С) 1м П Е0 48 СП С hihlh:. П и::::::::::::., В D С 1 N U, IN Е, (С) Еи OU Е0 58 Е " -==:• D и с IN F,(С) Е0 70 F с последняя команда служит для выставления флагов'в регистре F без из- менения содержимого остальных регистре®:::.. Подгруппа В. Команды простого «bwq^ch-hhhhihh Эти команды посылают байт из указанного регистра в выбранный порт. Адрес порта задается аналогично команда^ IN: jh Ф младшая чаййгиреса порта задаетёя:мий»ом +DD или в регистре С. с*> старшая частьадреса задается в peniCtpt A (для команды IN A,+DD) или в регистре В (ййя остальных команд). Командами этой подгруппы являются: адрес порта регистр ,.;:::::ПриеМНИК старший байт младший байт OUT (+00), A D3 Щ) hhhhP^Hi:. A DD OUT (С), A ED 79: ПГ A:hL В С OUT:fC),H ЕОбШ":'^' H h В С OUTh(£),L Е0 69 L::*! 8 С OUiiBi^pft::.. ED 41 В С OUT W$HHO::49 c В С OUT (O, 0 В С OUT (C),E ED e В С Подгруппа С. Команды 'блочного ввода/вывода. Эти команды требуют для своего выполнения адрес порта в регистре С (если нужно, то в регистре В содержится старшая часть адреса), количество передаваемых байт в регистре В, адрес области памяти в паре регистров HL. 75
5. Система команд. среди этих команд есть автоматические и неавтоматические (аналогично ко- мандам LDIR. IDDR:HjiUE>L;LDD соответственно). Автоматические команды принимают или И^рёдают данные до тех пор пока регистр В не станет равным нулю. Пда:3гшэдрёс:данных в HL увеличивается или уменьшается. Неавто- матйчёскяёпкЬманды передают по одному байту аналогично командам LDI, LDD^tlpH этом программист может принимать решение о продолжении об- мена данными по состоянию флага нуля (он равен 1, если в регистре В окажется ноль). INI автомат, ввод, увеличивает HL INDR """""""ED ВА автомат, ввод, уменьшает HL OTIR ED ВЗ.акгомат. вывод, увеличивает HL OTDR вывод, уменьшает HL INI Т"::::йГ£|£А'2'неавто’нат. ввод,увеличивает HL IND АА неавтомат. ввод, уменьшает HL OUTI ED АЗ неавтомат. вывод, увеличивает HL OUTD ED АВ .неавт&Жт. вывод, уменьшает HL Группа 17. КОМЗДШ1Й прерывания. Имеется 7 команд, связанныхснрсрываниями микропроцессора Z-80 . командами этой труппы. являютсяв;;;;;^::ч;: El FB DI F3 """!Г : IMO ED46 Ш :: ШШ' IH1 ED56 I М2 ED 5Е RET I ED 5D RETN ED 45 ... каждая из команд будет рассмотрена поочередно. EL При включении Z-80 система масюарованного прерывания не может пре- рвать выполнение команд. Эта ситуация супкстеует до тех пор, пока преры- вания не будут разрешены программистом по йоМайдё EI. В SPECTRUM система маскируемых прерываний используется; ;для от- счета текущего времени и опроса клавиатуры и эти прерьшаниятфоисходят с частотой 50 гц. В любом месте программы программист можёг Запретить маскируемые прерывания по команде DI. В SPECTRUM маскируемое прерывание нё возможно во время выполне- ния команд SAVE, VERIFY, MERGE. 76
5.2. Группы команд. IMO. Имеется три типа маскируемого прерывания-РежимО выбирается авто- матически при включении или по команде 1М0. Эг'от;р^ом.в SPECTRUM не используется. 1М1. ,:Г Режим 1 устанавливается по команде IM1 при ^инициализации компью- тера (после включения питания). В этом режиме при;возникновении: маски- руемого прерывания, управление передается подпрограмме по адресу 0038 (16-ричное). Это подпротрамма сканирования клавиатурйГй^йёпёния сис- темного счетчика кадров (через каждые 20 миллисекунд знаЧёййе системной переменной FRAMES (23762) увеличиваетсяца^ёДииццу). IM2. Режим 2 не используется в SP, но является самым мощным из трех ре- жимов. В нем периферийное устройстволмржет указать, какая из 128 под- программ должна обрабатывать маски^сйре ^рерывание. Содержимое регистра I и байт, который поступает извнейп1ё}Й;У<йР0Йсзва используются вместе, чтобы образовать 16-битный адрес, которьйГзатём используется для выбора элемента из таблицы адресов, размещенной заранее в памяти. Двухъ- байтовое число, выбранное из табпийрм является начальным адресом подпро- граммы обработки прерывания. RETI. Эго специальная команда возврата длялспользования в программе обра- ботки маскируемогр прерывания. По этойкоманде происходит возврат с разрешением маскируемого прерывания. RETN. Эта команда подобна RET1, но онаприменима в конце программы обра- ботки немаскируемого прерывания. Группа 18. Допел ннпгёпьныекоманды. Имеется 7 команщкоторьюгфассмртрены ниже, а именно: CPL NEG ::: SCE* СС£Ш HALT DAA каждая из этих команд; будет рассмотрена по очереди. CPL. Представляет собой простую команду, которая инвертирует регистр А, то есть она устанавливает сброшенный бит и сбрасывает установленный. Эго называется дополнением до 1. основные флаги не изменяются. 2F ih: ED 44 37 3F \76.. 77
6. Демонстрационные примеры программ в кодах. NEG. Эта команда инведощруеф содержимое регистра А и прибавляет к нему единицу, что эквивалентно преобразованию положительного числа в отрица- тельное, дадшйцщбев двоичной дополнительной форме. Эта команда влияет на флаги. Флаги знака и 0 зависят от результата. Флаг переноса будетустановлен, если ^регистр А первоначально был равен 0, в противном случа&флаг переноса сбрасывается. S<%::!.... Установка ^1Л'агйпереноса. CCF. Переключение флага рвреяоса на противоположенное значение. halt. 1= Это специальная команда, заставляющая микропроцессор останавливать выполнение команд, пока не. возникнет маскируемое прерывание. DAA. Эта команда используется при работе с числами представленными в дво- ично-десятичном коде. В системе команд Z-80 нет специальных команд, которые учитывали бы цравила еложёнйя и вычитания чисел представленных в двоично-десятичном::коде.^ВСР-арифметика). Поэтому двоично-десяти- чные числа складьшаютнииычйтают с помощью имеющихся команд сложе- ния и вычитания.(ADD;; ADC; SU.B;h SBC), но после них результат корректируют с помощью 'крмадйы DAA Например;. LD A, +DD (+00=77 IfcipjiSb ADD A, +DD (+DD=14 16-ричное) „пиЖИП'—"" DAA после выполнения командьгАШВв вышеприведенном примере, в регис- тре А будет находится число 8В: (16-ричное).:После выполнения команды DAA в регистре А будет находится чийдо:91 (16-ричное), что соответствует правилам BCD-арифметики. DAA 27 < Важно отметить, что команда DAA преобразует только регистр А. флаги О и знака зависят от результата. Флаг передолнения/четности устанавливае- тся как флаг четности. Флаг переноса зависит от того было дн^йёрсцашгение или заем при операциях BCD. 6. Демонстрационные примеры; программ в кодах. Основная цель главы дать читателю сведения о начальных проблемах, связанных с написанием программ в машинных кодах. Команды Z-80 пере- 78
6.1. Запись машинных команд в память компьютера. числены в главе 5, но не указывается как ими.пользоваться на SPECTRUM. Настоящая глава содержит серию демонсфацдойиыкярофамм. 6.1. Запись машинных команд в память компьютера. Имеется три точки фения, подлежащие обсуждению. 1. Выбор области RAM. Профаммист должен определить требуемый обьём;:йайЯГйШВ SPEC- TRUM имеется несколько областей памяти, которые могугйёнмьзоваться, но демонсфация программ в этой главе будет.представлена в области RAM с адреса 32000 и дальше. Профамма в кодах;кэт6й:о&1асти, если требуется, может сохраняться на ленте (SAVE) или зафужагьсятглёнты (LOAD) как блок данных. 2. Ввод кодов программы. В SPECTRUM можно вводить кодь1толъкдйр::1юманде РОКЕ. Однако операнд этой команды может быть задан как 10-ное йлй:2-ное число или как выражение. Поэтому следующие строга.все равносильны: 10 РОКЕ 32000,201 10 РОКЕ 32000.BIN 1100 1001Г 10 LET А=201: РОКЕ 320Й..А Определенном случае. и каждая может; сказаться полезной в Рекомендуемый метод заключается в написании команд в 16-ных симво- лах. Следующий 16^ньй загрузчик будет использоваться во всей главе !!! 1 REM HEXADECIMAL LOADER '-.[ 5 CLEAR 31999 10 LET D=32000 ..йНВ:::: 20 DEF FN A(A$,8)>C0DE A$:(:8^:48-7*(C0DE A$(B)57) 30 DEF FN C(A$)=1®*FN;:A^rWH A(A$,2) 40 READ A$: IF AS’Wff POKeJ), FN C(A$): LET D=D+1: GO TO зафййЙййн будет считывать дайЙые из DATA , в котором каждая пара 16-ных сймвнлж^аклФчепа в кавычки и отделена от других пар запятыми. Пара символов К**:'-Йсй(1льзуется:как символ конца. Пример: 50 DATA ••00","01","0Wii*" если теперь получившуюся программу выполнить с помощью команды RUN, то это приведет к тому, что байт по адресу 32000 будет содержать О, 32001 - 1, 32002 - 2. 79
б. Демонстрационные примеры программ в кодах. 3. Выполнение программы. Команда БЕЙС1Жа;’!и$К число" позволяет остановить выполнение про- граммы монитора;и;иачать выполнять программу в кодах. Важно убедиться, что опер^:?Щ$К-^Йгановлен на требуемую команду, что программа пользо- вате^К^чаётся командой "RE- TURN", если необходимо вернуться в БЕЙСИК, и что величина возвращенной командой "USR" обработана соот- ветствующим образом.:;;; Примеры USR PR I Й1;^и311;М;^ййЖтает содержимое регистровой пары ВС (10-тиЧйбё;У-: RANDOMIZE USR N -..впияёт^а генератор случайных чисел. LET А=и8Н;;М..Т;;изманяёт переменную А. Каждая итэтик форм полезна при определенных условиях. Следующиёпрограммы представлены в формате ассеьйлера и оператор DATA используется совместнО^Лб-ным загрузчиком. Команды представле- ны в том же порядке как:иГ&лгавё 5. 6.2. Программы. обозначение NOP RET . Маш. КОД; 00 С9 комментарии возврат Группа 1. Команда "нет^ёрйййи^кНОР). Следующая программд ; ассемблера показывает простое использование команды NOP. адрес 7000 7D01 . ....... . , следующая программа БЕЙСИК пшадывает строки, которые необходи- мо добавить к 16-ричному мрузта^дайдемонстрации команды NOP. Программа 1. "NOP". 50 DATA ”00", "С9","**" ...."Ч 60 LET A=USR 32000 jL 70 PRINT "YES" < ;= Группа 2. Программы для непосредственной загрузки регасгра. Команда "USR число" возвращает 'значение регистррвой;;пары;ВС как абсолютное 16-битовое число и команда PRINT отобржайггггТ(Тном;ввде от 0 до 65535. В следующем примере показаны комайшД;ХрВ-ЖВ" и "LD C.+DD". В регистры В и С загружаются константы. 7D00 7D02 06 00 ОЕ 00 LD В,+00 LD С, +ХХ регистр В=0 пользователь 80
6.2. Программы. вводит разводные значения 7D04 С9 RET ршШШш;:.... пользователь может задавать различные зйачешй;ЗДД;регистра С. Программа 2. 50 DATA "06", "00","0Е","00", "С9", "**" Ш 60 INPUT "INPUT THE VALUE FOR REG. C (0-25^k,N J 70 CLS 80 POKE 32003,N 90 PRINT AT 10,0; "REG. C = "; USR 32Qft0ii;h::::::„ 100 GOTO 60 следующая программа показывает команду LD BC^+DDDiD 7000 01 00 00 LD ВСШй&йОр пользователь вводит 7D03 С9 RET „различные значения В программе 3 можно задавать различныейййНййы^+DDDD". Введен- ная величина должна быть разбита на младший в одрпшй байты прежде, чем она может быть заслана по POKjg;:::::... Программа 3. ’LD BC.+DDDt)' 50 DATA "01", "00","00" F "Т"”' 51 DATA "С9", Й:„ J 60 INPUT "INPUlWeijFOR REG. ВС (W^5)",N 70 CLS ’ ":Ч1ЦНЩШВ=Н::.. 80 РОКЕ 32001,N-256*lNT (Й^рМЕ 32002, INT (N/256) 90 PRINT AT 10,0, "REG: ВС = "; iMloOD 100 GOTO 60 Группа 3. Команды.койН^ййан'Й;'» обмена. Команды копирования:рёгнстр-ре^стр могут быть показаны загрузкой регистр£й,. отличш>1х от в и С, постоянными, которые затем копируются в регисдаг^:И:О.для возврата их пользователю. 7Й00 LDB.+00 7D02 LD L, +ХХ регистр 8=0 вводится значение в 7D04 4D LDC, L . 7D05 C9 RET . регистр L. регистр С = регистр L В программе 4 переменная величина заносится в регистр L и пересыла- ется в регистр С. 81
6. Демонстрационные примеры программ в копах. Программа 4. 'LD С,Д*:;:. 50 DATA "О6",;Ж^УВНГ’ОО" 51 DATAJ:4SS^?**" 60,:|;Н1ЙТ^-Ч:ЙРитШ VALUE FOR REG. L (0-255)",N 7$₽’ 0= 80 $)KE 32003,N 90 %й1..А1.МрЙЕ6. C = "; USR 32000 ioo Группа 4. Командьгзафузки регистров из памяти. Команды, в этой;Гру|ше;йо?^юляют пользователю зафузитъ регистр соде- ржимым памята;Алрёсация может быть абсолютной, косвенной и индекс- ной. .р Первая программа показываем абсолютную адресацию. Задается адрес 60000, имеющий имя БТО^ЕйКОмавда LD A, (ADDR) используется для выборки содержимого; STORE в следующей программе. регистр 8=0 выборка текущего значения 7D00 7D02 3&60 ЕА L0 В,+00 .лША, (STORE) 7005 4F <..::::===ЬП ЬЬГ LD C,A 7D06 09 =*ШФ::" Ч RET :5 В программе 5 пользователь можелнвводнгь различные значения, сохра- няемые В STORE. ... .лп-Н'Ш Программа 5. "LD A,(AS)". 50 DATA "06", "00" 51 DATA "ЗА", "60", "ЕА" чН:унЖНН=^=":" 52 DATA "4F", "09","**" 60 INPUT "ENTER a VALUE FOfr LOCATION STORE 5(0-255 ONLY)",N 70 CLS j: 80 POKE 60000, N f •ilF 90 PRINT AT 10,0; "THE LOCATIOtihSTORE NOW HOLDS"; CHR$ 32|L USR 32000 100 GOTO 60 Вторая профамма показывает косвенную еддерщщкЁВ ней адрес STORE загружается в регистр HL до использованидкоманды ’ЬО C,(HL)’. STORE=EA60 7D00 7D02 LD B,+OO ;L регистр 8=0 LD HL,+STORE HL указывает на STORE 06 00 21 60 EA 82
6.2. Программы. 7D05 4Е LD С, (HL). выборка текущего значения 7D06 С9 RET В программе 6 пользователь может вводить разлгрЩЫё ЙЙЙ^ИЬГ сохра- няемые В STORE. Программа 6. ‘ID С,(НЪУ 50 DATA "06", "00" ....::=:р’ 51 DATA "21", "60", "ЕА" 52 DATA "4Е","С9","**" строки 60-100 как В программе 5. Третья программа показывает индексную адресайЙёп®:ЖЙ>й программе адрес 59937 (ЕА21) называется BASE, а адрес 60000 (ЕА60)р- STORE. BASE=EA21 STORE=BASE+3F 7000 06 LDB.+OO 7D02 DD 21 21 ЕА LD IX,BASE 7D06 DD 4Е 3F 7D09 С9 Г RET н ::нЩШ£ даёйстр В=0 ^ёТановка IX вйборка текущего .значения В программе 7 пользователь ойдть вводит различные значения, которые помещаются в STORE, Программа 7. 'ID 50 DATA "06", "00" 51 DATA "ОО'."21","2Г,"ЕА" ::;;^;В^: 52 DATA ”DD","4E",;«: Т 53 DATA "CD","**’/" строки 60-100 как;в программе^;: В программе испайьзуё1ёя:регас1р:1Х, но вполне возможно использова- ние регистра IY, но прй йом машинной код надо изменить заменив DD на FD. ЛЩШН:::::.. Замёйтё^чго маскируемое прерывание потребует блокирования, в то время, пока:№$рдёрйшт новую величину. Группа 5. Команды загрузки памяти константами или данными, хра* нящнмися в регистре. Команды этой группы позволяют пользователю загрузить байты памяти константами или данными из регистров. Опять возможны абсолютная, кос- венная и индексная адресация. 83
б. Демонстрационные примеры программ в кодах. Первая программа показывает абсолютную адресацию. В программе аб- солютный адрес ДЛЯ:М<ОШШ 60000, 16-ной ЕА60 названный ’STORE*. Ис- пользуется комаОД^Ш (ADbR)A*. ijiF"’ ЗЕ diji LD A, +XX ввод различных значений 7D$2 32$ПЕА LD (STORE), А ввод текущего ЗНЗЧеНИЯ В STORE ' 700^ШШШШШ^;ЙЕТ В профайле 8 пользователь опять вводит различные значения в STORE ЗЕ","00" JL 32", "Ш-О Программами) (ADDRfcA 50 DATA 51 DATA 52 DATA 60 INPUT "ENTEfp::VALUE FOR LOCATION STORE (0-255 ONLY)",N 70 CLS 4‘ ..кнШШШШй. 80 POKE 3200<N:<h$MTZE USR 32000 90 PRINT AT 1O.O; :,Wft6CAtlON ST^RE NOW HOLDS"; CHR$ 32; PEEK 60000 i j ..: 100 GOTO 50 Вторая программа покайййает косвенную;;й^сайив)1 В этой программе пара регистров HL указывает на STOR&'LD (HL),E* используется для записи в память. STORE=EA60 1E 00 21 60 ЕА 73 09 RET LD E.+XX ...."^вводится значение 70;iii&feSTORE HL-указывает на STORE ,.:ПереСЫЛКа 7D00 7002 7005 7D06 В программе 9 пользователь вводит величину,"которая должна передава- ться в STORE и обратно считываться с^шэмощыо РЕЕК 60000<:;;;;;;;;;;;;; Программа 9. 'LD (HL),E' 50 DATA "IE", "99" 51 DATA "21","60","EA" 52 DATA "73","09","**" строки 60-100 как в программе 8. 84
6.2. Программы. В 3-ей программе используется индексная.;йдресация. В этом случае ад- рес 60063 (EA9F) называется BASE л ЗТОНЕйййШурассматргвается как BASE-3F. BASE»EA9F STORE=BASE-3F 7000 ЗЕ 00 LD А, +ХХ Ш вводится знайёйие 7002 . D0 21 9F ЕА L0 IX.+BASE 1ШЛХ указывается BASE 7D06 DD77C1 LO (1X-3F),A ::В₽е.Сылка..:< (-3F представлено в дополнительном двоичнойЬЩйР!^) 7009 С9 RET В программе 10 пользователь опять ввод^:вещрщны, которые должны быть передаяы в STORE и считывает образтаснбмрщыоРЕЕК 60000. Программа 10. 'LD(IX+D),A' « 50 DATA "ЗЕ", "00” felL. 51 DATA "DD", "21", "9F", “ЕА" .-. 52 ОАТА "DD", "77", "С1" |ШР' 53 DATA ”С9", "**" f Группа 6. Команды сложения; Команды этой группы позволяют скгё&Ш^н&ичины вместе (ADD), увеличивать значение на единицуЬ(ШС) й склаййвать величины с учетом флага переноса (ADC). Первая програьй^ЙРказывает нспользеданйёкоманды ’ADD А,В’ 7D00 7D01 7D03 7D05 7D06 7008 7009 00 NOP 3E 00 "4:::”iLft:At +XX вводятся значения 06 00 :L^:gi>XX: 80 ... ADD:A;:|; суммирование 06 0Q::::::::::: LDB,*OO регистр B=0 4F .:=: С, А ПвреСЫЛКЭ рОЗуЛЬТаТЭ C9 :P ...:::ЙШР^ЭДЕЕ В рОГИСТр С. В программе 11 пёяьяйатёль вводагт 2 числа. Эти числа передаются в регистры! а и в и складываются вместе в двоичной арифметике. Результат возвратится.функцией USR. • 1^огрШИШ^АОП А,В’ 50 DATA "00"';:"ЗЕ’':;:''00" 51 DATA "06", "00:i7^b 52 DATA "06", "00", ”4F" 53 DATA "C9","♦*" 60 INPUT "ENTER a FIRST VALUE (0-255)";CHR$ 32;F 85
6. Демонстрационные примеры программ в кодах. 70 INPUT "ENTER a .SECOND VALUE (0-255)";CHR$ 32;S 80 CLS 90 POKpaS'ftPOKE 32004,8 1^)O^T:AT 10,5jF;CHR$ 32;"ADD";CHR$ 32;8;CHR$ ЗЙ>"; CHR$ 32;US^32000 ПОЛОТО 60 Втёрся цдопэдОдля этой группы использует команду ’INC ВС’ L0 ВС,+ХХХХ вводятся значения значение увеличивается 32002, ГЙГ (N/256) 32001, N42l?6*llfr (N/256) 7000=W;i»W:!“ 7D03 03 INC ВС 7D04 С9 RET В прсирг^еТЗНЙййоёйбДЬ вводит число в диапазоне 0-65535. это число затем Д&ЯЙЧйй на старту# и младшую части и помещается командой РОКЕ в байтьгэдб адресам 7DO1H.7DO2. Регистровая пара ВС загс&увёличивается и значение возвращается фу- нкцией USR. Заметьте.эфф^ввода значения 65535. Программа 12:^Шё"вС" 50 DATA ”01н ”00","00” 51 DATA "03",.X9"^:Ks^^Hi;ii^: 60 INPUT "ENTER а-^Л^ЙббЗб) JCHR$ 32;N 70 POKE 80 POKE 90 CLS 100 PRINT AT 10,0; CHR$ 32; "INCREMEfeWTO GIVE"; CHR$ 32; USR 32000 110 GOTO 60 Третья программа показывает использование команды "ADC”, это та же программа, которая используется в программе 11, но: изменена для включе- ния команды "ADC А,В" а не "ADD SCF устайой&нфлага переноса LD .А, +ХХ вводятся значения LD”B,:^XX ADC А, В суммированиепсчпёрёнбсом LD В, 100 . LD С,А:;:.. RET ::ii Эта программа используется в программр::13, в которой пользоватеш» складывает 2 числа вместе с битом переноса. Флаг переноса всегда устанав- ливается. 7D00 37 7D01 ЗЕ 00 7D03 06 00 7D05 88 7D06 06 00 7D08 4F 7D09 С9 рёгистрВ=О регистр С=регистр А 86
_______________________________________________________6.2. Программы. Используйте эффект замены команды "SC^iia "AND А" (16-ное А7) которая даст сброс флага переноса. Программа 13. "ADC А,В". 50 DATA "37","ЗЕ","00" 51 DATA "06"; "00", "88" 52 DATA ”06","00","4F" 53 DATA ”С9", "**" 60 INPUT "ENTER a FIRST VALUE (0-255)".;£HR$ 32; F 70 INPUT "ENTER a SECOND VALUE (0-2Sf|^®i^;S 80 CLS f 90 POKE 32002, F: POKE 32004, S 100 PRINT AT 10,0; "WITH GARRY SETpB&l8$ 32; "ADC";CHR$ 32; S; CHR$ 32; "=",CHR$ 32; USR 32000 110 GOTO 60 Группа 7. Команды вычитания. Команды в этой группе позволяют йЫчесТ^рйДйу величину из другой (SUB), уменьшить значение на едйЙЙПУ ФЕС) ^вычесть одну величину из другой с учетом флагдяереноса (SBC). Первая программадляэтой труппы комйэдрйспользует команду ’SUB В’ . Состояние флага переиосаопределяется после вычитания и величины 0 или 1 сохраняются в STORE. STORE=EA60 7D00 00 NOP будет использоваться дальше 7D01 ЗЕ Q0 А, +ХХ ВВОДЯТСЯ ЗНаЧвНИЯ 7D03 06 00 £р:г;::»,+ХХ 7D05.;- ОЛ ::::::::::::::: QI R О LILI UTQ UUQ Уи :::::::::::::: OUD и оЫЧИ I dnHt? 7D06- 06 00 •••• LDJB,+00 регистр 8=0 4F • :::::::LD: С, А ПврвСЫЛКЭ рвЗуЛЬТаТЭ 706$:”::::: НН:::..ЗЕ 00 ' LD А, +00 реТистр А=0 ADC А,+00 сложение с переносом I l/vir:::::::: 7D0B 7D0D .J" LD (STORE),А передача значения флага переноса в STORE 7010 С9 RET В программе 14 вышеприведенная программа вызывается после того, как пользователь вводит значения для регистров айв. значение флага переноса получено использованием РЕЕК 60000. 87
б. Демонстрационные примеры программ в кодах. ;о0НУ^“?“оо" НЕ "°0"’ ”90" "06";;";00", "4F" "ЗЕ”.jpo”,"СЕ","00" "32^60”, "ЕА" Программа 14 ‘SUB.Bi 50 DATA 51 0АТ£: 5&$р 5^ЩТА 54 ША 55 D$& 60 INPUT "ENTER a FIRST VALUE (0-255)"; CHR$ 32; F 70 INPUT ;ENTER::aii®4VALUE (0-255)";CHR$ 32;S 80 CLS ’РШУрР""” '1 90 POKE 32$2,F: POKE 32(&S 100 PRINT AT 10,OjMOBI'SUB";CHR$ 32;S; CHR$ 32; "=";CHR$ 32;ubgp^; CHR$ 32; "WITH GARRY";CHR$ 32; "SET" and peek 60000 "Preset" and HftWEK eoooo 110 GOTO 60 ,:f Используйте привё^йй^йрбграммуЬ числами, которые меньше, боль- ше и равны одно apyroMy(GARR¥ - фцаТ переноса). Вторая группа команд-содеркит команду DEC. команду "DEC ВС" мо- жно продемонстрировать, Ш«ша11Гёоответстауюпще:ш^&шения в программе 12: ’"= 51 DATA "0В","С9", "**" ... ;;.;н:пурр:н::" 100 PRINT AT 10,0;N;CHR$igKREMENTS ТО GIVE";CHR$ 32; USR 32000 ’Pi Третья подгруппа команд содержиткгаиавду SBC;. Команду SBC можно продемонст^йр^Ш;:РДела^соотвегствующие ис- правление в программе 14: . 50 DATA "37", "ЗЕ", "00" для установки С-флага или 50 DATA "А7", "ЗЕ", "00" для сброса С-флага..;и:£ЕШ;Г": ' -Ъ 51 DATA "06", "00","98" 'SBC А,В’ :изменвниё:§ув:на SBC Опять используйте эффект вычитания чиёй^кбторые меньше, больше и равны друг другу. Следует отметить, что нет разницы в результатах между SUB и SBC при сброшенном флаге переноса. 88
6.2. Программы. Группа 8. Команды сравнения. Команды сравнения по существу такие вычитания, ис- ключая тот факт, что регистр а не изменяется . Флаг пёрщрса изменяете! и в последствие может проверяться. Действие команда "СР В" может бьпъ показано, сделав соагайёгвующие изменения в программе 14: 51 DATA "06”, "00","88" Ш 100 PRINT АТ 10,0;F;CHR$ 32; "СР";CHR$ 32; GARRY";CHR$ 32; и добавить строки 101 RANDOMIZE USR 32000 102 PRINT "RESET" AND NOT PEEK 60000^И^КЕК.:60000 Группа 9. Логические команды. Команды в этой группе позволяют осуществлять логические операции AND.OR.XOR над двумя 8-битовыми чишшйщнн::;.... Следующая программа показывает командУ'АМ&В’^которая использу- ется в логических операциях над двумя значеннямиГЙЖимыми пользовате- лем. -Р' 7000 ЗЕ 00 LDA.+XX 7002 06 00 LD В.+ХХ 7D04 АО AND В 7D05 32 60 ЕА :.. 7008 С9 RETinhh:.. вводяТсоОйЙия hлогическое :i:(iD (STORE) ,.А результат в STORE В программе 15 йспользуркя вышеприведённая программа. Пользовате- лю предлагается мести 2 значения;::..... При вводе каждого значения онойёчатается в двоичной форме. Результат считывается из STORE с использовашгёЙРЕЁК 60000, и также печатается в двоичной форме. :Р: Программа 15. ’AND 50 DATA "ЗЕ"|^ВРРР‘” ’ "Ч: 51 DATA "06", "ЙГ / 52 ®O=hh: -. "АО" =*=F бЗ^М^чШРОРЖ, "60", "ЕД- 54 DATA "”С9^;:Пж*":; 60 INPUT "ENTER а ЯЙ®Д1иЕ (0-255)";CHR$ 32;F 70 CLS 80 POKE 32001,F 90 PRINT AT 8,4;: GO SUB 300 89
б. Демонстрационные примеры программ в кодах. 100 PRINT АТ 10,8;.:7AN8!!: 110 INPUT "ЕЕ;вЯ&0 VALUE (0-255)"; CHR$ 32;S 120 ШЙЙГАТ 12,4;;: LET F=S: GO SUB 300 146 ;PRINT AT 14,7;BIVES" 150$AND0MIZE USO2000 160 : LET F=PEEK 60000: GO SUB 300 170 G6WO:*:i "' 300 LET P=256 310 FOR Nn7 -Wh: 320 LET P^$P:;::" 330 PRINT dHR$(48+lNT (F/Ь); 340 LET F=F-p*INT 350 NEXT N 360 PRINT I NT 370 RETURN Программа 15 можСТ:бытЬ: применена; для демонстрации команд ’OR В’ и ’XOR В* для ’OR В’ требуется внести изменения в строки 52 и 100 следу- ющим образом: 52 DATA "ВО" Ок..........J 100 PRINT АТ 10,8;"ОЙв^ и для ’XOR В’ ..кШШНР”"’ 52 DATA "А8" * 100 PRINT АТ 10,8; "XOR" Группа 10 . Команды переходов... Семнадцать команд этой группы ;1ЙЗЙйЛЯЮт сделать переходы из одной части программы в другую. Переходы; могут бьтГетарёительньми от -128 до +127 от значения счетчика команд, или абсолютными т. Б. задается адрес перехода. Переход может быть сделан безусловно или условно в зависимости от состояния основных флагов, хотя только абсолютные од&одОёрзхода имеют полный диапазон имеющихся возможностей. " Следующая программа будет использоваться в программе 16, чтобы по- казать команды этой группы. NEXT=7D0E 7D00 ЗЕ 00 LDA,+XX:;. вводятся 2 значения и сравниваются 90
6.2. Программы. 7D02 FE 00 CP . +ХХ между собой 7D04 01 00 00 LD BC,+O^::j: =Ш=В£=О 7D07 18 06 JR NEXT "ПФЖЮД.на NEXT 7D09 00 NOP доя:::йайьнеишегр ;:?использ6&анйя:^ 7D0A C9 RET ::: ВЫХОД 6СЛИ Ф::не было перевода 7D0B 00 NOP используемся 7D0C 00 NOP 'ЖЙВЙОЛйЗЙТСЯ 7D0D 00 NOP не исйойьзуется 7D0E 00 NOP не используется 7D0F 03 INC ВС :::::увеличение 7D10 регистровой пары ВС,если был П®реХОД:::Г C9 RET ВЫ:Х6Д:::: В приведенной программе в паре регионов ВС будет возвращено значе- ние 0, если не делается переход и 1 еслиГЯййёгся переход. Программа 16 приведена для демонстрацййКйЙайдьг’Ж Е’. Эта команда является безусловной, так что переход будет вне зависимости от результата сравнения величин введенных пользователем. Программа 16. 'JR Е’ |Гг5ЧП||ИЦ:;:::!р 50 DATA "ЗЕ","00" Г 51 DATA "FE:H:"00" Й. ,Jh 52 DATA "OR-fc*Ж 53 DATA 54 DATA "C9" 55 DATA "00",""Q0", "00", "оНЖ 56 DATA "03",Ж!;:1,*< 60 PRINT AT 4,0; jC0MMANI>i8(h:. 70 PRINT "JR E" :НН:::::НННУ==И:: 80 PRINT AT 8,0; / 90 jfei:"£NTER a FIRST VALL|Ho-255)";CHR$ 32;F 10ЛШ&8$::32; "CP";CHR$ 32; 110 INPUT WHSECOND VALUE (0-255)"; CHR$ 32; S 120 PRINT S 130 PRINT AT 12,0;"JUMp-:p:"; 140 POKE 32001,F: POKE 32003,S 150 LET R=USR 32000: PRINT "NO" AND NOT R; "YES" AND R 91
б. Демонстрационные примеры программ в кодах. 160 PRINT АТ 21.OPPRESS ANY KEY ТО CONTINUE" 170 LET А=СООЕ:уЯ$::!!=: 1.80 I F:A?OiTHE^<5pTO 170 ifefflHoTO 60 4 Впрограмме 16 вводятся две величины, выполняется операция сравне- ния, а затем, если необходимо, переход. Переменная R будет равна 0, если перехбйа. не было ц Т^^сли был переход. Программа п^ЙИсана так, что пользователь может путем замены строк 53 и 70 продёмбнйрйровать 14 из 17 команд переходов. Для команд относительного перехода изменениями будут следующими: 53 DATA::"20";i;HS6^i;"66"^i; 70 PRINT:i:iy|ii«Z, E" 53 DATA "28", "06","00" » 70 PRINT "JR Z,Е" 53 DATA "30"., "ОбГ^ЙйР* 70 PRINT "JO&i&i";:" - JR NZ,E - JR Z.E - JR NC.E 53 DATA "38", W, "00" - JR С, E 70 PRINT "JR C?E" Команды абсолютного лерехша пбказапы изменением программы так, что абсолютный перевёл йё|Нйёфляется:|ю адресу NEXT. Строка команды по адресу 7D07 будет тёНёрь читаться следующим образом: 7D07 СЗ OF 7D JP NEXT;. Изменения в программ&Яб:;: W ...ThsIliplW !h;;=ipfPHiiz,ADDR 53 DATA "C3", "0F':,: 70 PRINT "JP ADDR" 53 DATA "C2”,"OF","7D" 70 PRINT "JP NZ.ADDR" 53 DATA "CA", "OF","7D" 70 PRINT "JPZ.ADDR" 53 DATA "D2","OF", "7D" 70 PRINT "JP NC.ADDR” 53 DATA "DA","OF","7D" 70 PRINT "JP C.ADDR" 53 DATA "E2","OF”,"70" 70 PRINT "JP PO.ADDR" - JP>;M '' - jjj NC, аЯ;|Ш - JP &ADDR - JP P0’ w®fty;ii 53 DATA "EA", "OF","7D” - JP PE, ADDR 70 PRINT "JP PE,ADDR" 92
6.2. Программы. - JP Р, ADDR - JP M.ADDR 53 DATA "F2","OF","7D" 70 PRINT "JP P.ADDR" 53 DATA "FA","OF", "70" 70 PRINT "JP M,ADDR- остальные 3 команды используют косвенную адресацию н они оЙИются как упражнение для заинтересованного читателя. Группа 11. Команда DJNZ Е. Эта команда является очень полезной комаддяй.и может легко использо- ваться для получения простых циклов в програЙЙФУиаяи.санной в машинных КОДаХ. Чтобы использовать команду программист сначала должен определить число требуемых циклов и это число должнрбыгь занесена в регистр В. Следующие 3 строки программы БЕЙСЙКбудут печатать алфавит загла- вными буКВаМИ. 10 FOR А=65 ТО 90 20 PRINT CHR$ A; :=i==::.. р 30 NEXT A f..j: Следующая программа машинного кода показывает выполнение этой же программы. Обратите внимание, что.программист может использовать толь- ко уменьшение на Ь:... LOOP=7D02 7D00 06 1А LD В, +1А ;^ЙШ£аадание счетчика циклов 7002 ЗЕ 5В L0A.+5B 7D04 90 SUB в регйёяргА содержит значение 7D05 D7 RST 0010;::: печатн'символа 7006 10 FA DJNZitOOP ..последующая буква 7008 09 RET.1 Программа 17 исйёявдркк;йЫше приведенную программу для печати ал- фавита нВ экране телеййЗбрй/ 50 DATA 51 DATA "ЗЕ", ”5В:::;^ФЙУЙрг 52 DATA "90", "D7" 53 DATA "10", "FA" 55 DATA "09","**" 93
6. Демонстрационные примеры программ в кодах. 60 PRINT 70 RANDOM IZE.USKiSSOOO" примечанда1;йьпючение строки 60 важно, т.к. она открывает канал для осноан0И;области экрана. ШЖЗта команда Нии подобная ей опускается тогда печать произойдет в нижней части экрана^ Группа 12. Команды стека. 1^вется:нягъ;вддгрупп в этой труппе. Первая содержит команды PUSH и POP, а йсргйТсёйанды обмена со стеком. Следующая программа использу- ется в программе 18 чтобы доказать команды из первой подгруппы. 7D00 +ХХХХ вводятся значения 7D03 "Ж: PUSH HL СОХрЭНЯЮТСЯ В СТ6К6 7D04 "•“г’С! POP ВС пересылаются в ВС 7D05 С9 RET В программе 18 поадюваТЫйЬ; будет предложено ввести величину. Эта величина затем передаер^Н-рёгистровую пару HL. потом она сохраняется в машинном стеке йдвлее данные из стека поступают в регистровую пару ВС. 00". Программа 18. TUSHHL" и"М№ВС 50 DATA "21", "00 51 DATA "Е5", "С1 52 DATA "С9","*« 60 INPUT "ENTER a VALUE..(0^5535)";CHR$ 32^:;Ш 70 POKE 32001, F-1 NT W&)*256: POKE^O^nW (F/256) 80 CLS 90 PRINT AT 10,0; "VALUE WN: OFF' STACK =";CHR$ 32; USR 32000 100 GOTO 60 читателю предлагается использовать альтернативные процедуры в этой программе. Но следует бьпъ уверенным что число команд PUSH совпадает с POP. .... 3 и 4 подгруппы содержат команды САЕЕй:К£Тгследующая программа в машинных кодах может использоваться для демонстрации разли$дых ко- манд CALL. "Й::::::::- NEXT=7D0F 7D00 ЗЕ 00 LDA.+XX вводятся 2 знанннйя;мйфавнива1йтся 7D02 FE 00 СР +ХХ . 7D04 01 00 00 LD ВС, ^00OF::'BC=0 7D07 CD OF 7D CALL NEX1*i: вызов подпрограммы 7D0A C9 RET возврат В.БЕЙСИК 7D0B 00 NOP 94
6.2.. Программы. 7D0C 00 NOP 7D00 00 NOP 7D0E 00 NOP 7D0F 03 INC ВС 7D10 С9 RET увеличение ВС . возврат из подпрограммьг:£н;£:£ эта процедура может использоваться в программе 16 с последующими изменениями для различных команд для всех команд -130 PRINT AT 12,0;"CALL CALL ADDR - 53 DATA "CD”, "oWfcjiiinF 70 PRINT "CALL ADDR" CALL NZ.ADDR 70 PRINT "CALL NZ.ADDR" CALL Z, ADDR - - 53 DATy-:&4;;/'0F","7D" 53 DATf:"CC", 70 PRINT "CALL Z.ADDR" CALL NC.ADDR 70 PRINT "CALL NC.ADDR" CALL C.ADDR - - 53 Ёй|А;"04", "OF", !^D" 53 DATA 70 PRINT "CALL C.ADDR" CALL PO.ADDR 70 PRINT "CALL PO.ADDR" CALL PE,ADDR :"^:DATA "E4",-#","7D" p 53 C^i^::j;F0F","7D" 70 PRINT "CALL PE,ADDR" CALL P.ADDR - ;ЬЗ DAtA "F4pOF", "7D" 70 PRINT "CALli;;PiADDR" CALL M.ADDR -HHH-HHHfh:::... 53 DAT^W’,”0F","7D" 70 PRINT "CALL И,АЬЙЙШНЬП:::.. Следующая программ машинного; кода может использоваться для демо- нстрации команд RET. однако она составлена для тренировки читателя, что- бы он сделал необходима исправления в-ирограмме 16. 7000 3E 00 • LD A, +XX вводятся 2 значения и 7D02 FE 00 •HHH&R.+XX сравниваются 7D04 01 6Ь..ОО:::ШН P»"®c,+oooi ВС=1 7007:=' D8 RET=C возврат, если флаг С=1 7DQ0L. OB DEC BC уменьшение ВС 7D09=£i*= C9 ”::::::flET Группа сдвига. Имеется б6йьщЬёиКёйичестао:Команд сдвига. В программе 19 использу- ется следующая процёдура,;ЧГ<>&1 продемонстрировать семь типов сдвига в качестве примера выбран регистр С. STORE=EA60 7D00 AF XOR очистка регистра А 7D01 FE 00 СР +ХХ сравнение с нулем 95
б. Демонстрационные примеры программ в кодах. 7D03 06 00 LD B.+00 регистр B=0 7D05 LD C.+XX вводятся значения 7007 ...uHiCKi&l" RLC С сдвиг .7D09..::::B: •••••r==3E:G0 LD A,+00 регистр А=0 ce OQ. ADC A,+00 пересылка состояния w 32 6C):£A LD (STORE),A флага С в STORE 7DI0 C9 Jp RET В программе 19.нальзователю предлагается ввести 0 или 1 чтобы сбро- сить шЫ:^гашшйй;|флаг переноса. СледуюВйгЙ^ЙЬДимая величина передается в регистр С и сдвигается как требуется. Результат печатается совместно с текущим значением флага пере- носа. ПрограммШШ^^С С’ 50 DATA "AfC"FE","OO" jL:: 51 DATA "06", ••00", "QE^®; 52 DATA >-,"”CE' 60", "EA' 00" 53 DATA "3E 54 DATA "32 55 DATA "C9 60 PRINT AT 2,0; ”fWSSWUCtI©N J"; 70 PRINT "RLC C" . ;0 4 80 INPUT "CARRY RESElpOfLSET ? (0/1)";СН^ЗЙ 90 POKE 32002,C ..’= 100 PRINT AT 6,0; "GARRY - 110 INPUT "ENTER a VALUEl®^j;:;CHR$ 32;F 120 POKE 32006, F 130 PRINT AT 10,0;"INITIAL VALUE 140 LET F=USR 32000 150 PRINT AT 14,0; "FINAL VALI/ё ";: GO WSDO 160 PRINT AT 18,0; "GARRY - ", PEEK 60000 ’ 170 PRINT AT 21,0; "PRESS ANY KEYTOCONTINUE" 180 PAUSE 0 200 CLS: GOTO 60 300 LET P=256 * 310 FOR N=7 TO 1 STEP -1 320 LET P=P/2 i::<:GO SUB '300 96
6.2. Программы. - 52 DATA "CB","1f C" h-O:. - 52M::"=C.8","19 C" = ;29? 39 330 PRINT CHR$ (48+1NT(F/P));CHR$ 32; 340 LET F=F-INT(F/P)*P 350 NEXT N .- 360 PRINT I NT F / 370 RETURN | Программа 19 может бьпъ использована для демонстрации 7-мц&оманд, которые используют регистр С со следующими изменениями:......;///1 RLC С - 52 DATA "СВ", "01" 70 PRINT "RLC С" RRC С - 52 DATA "СВ", "09" гйШШШШШ:::.. 70 PRINT "RRC С" ;=F" RL С 70 PRINT "RL RR С 70 PRINT "RR SLA С - 52 DATA "СВ", "21 70 PRINT "SLA С" SRA С - 52 DATA "СВ 70 PRINT "SRA С" SRL С - 52 DATA "СВ 70 PRINT "SRL C" Группа 14. Когодод!. обработки 6iitobL....::// Команды этой грушш^мотуг делиться найтри подгруппы. Команды RET и SET не очень часто используются, и здесь не приводятся программы БЕЙСИКа, чтобы показать их йсййЙзевание, Читатель однако, может попробоййт^йатшсагь простые программы, ко- торые используют эти команды. Команды BIT являютсясамьр^и полезными в этой группе и следующая программа показываеткак используется команда 'BIT 7,Н’. Программа 20 является:программой печати чисел в двоичной форме. Программа предстОёй#:следующ£м образом: LO0E*=7DO5 ""Hi::!" 7D0O LDHL.+XXXX ВВОДЯТСЯ ЗНаЧОНИЯ 7D03 06 10 /счетчик цикла на 16 бит 7D05 СВ 7С BIT 7,Нл роведяется левый байт 7D07 ЗЕ 30 7D09 28 01 7D0B ЗС LDA.'O’ JR Z,PR I NT INC А символ 1 подготовка для печати О переход,если символ О 97
б. Демонстрационные примеры программ в кодах. 7D0C D7 RST 001ЙШШ; печать 0 или 1 7D0D 3E 20 ;; 7D0F 07;::ЙШШО:Я010 печать пробела RL L :h. сдвиг L 7бЖCB 14 RL H Ш сдвиг Н 7D1&:10 EF- DJN&BOP 7Dl6::h::::::::::;:RE1i^;- повторить Про1рйММй:20 йоказывает используемую процедуру. , "00" 10", "СВ", "t 30", D7": '2F '07" 1&", ,"СВ", "14Г:; EF”: ГСЭГ::; Программа 20. .’.ШЁ7№ 50 DATA "Ъ: 51 DATA "0& 52 DATA "ЗЕ 53 DATA "ЗС 54 DATA ”ЗЕ' 55 DATA ”СВ‘ 56 DATA "10' 60 INPUT "ENTER а^вЁг(о4б5535) 70 РОКЕ 32001 ,F-INTd/256)^256;::ii 80 РОКЕ 32002,1 NT( F/^):;4P 90 CLS 100 PRINT AT 10,8; "BINARY 0Г^(ШрЖ F 110 PRINT AT 12,14; "IS" 120 PRINT AT 14,10; 130 RANDOMIZE USR 32000 140 GOTO 60 CHR$ 32; F Группа 15. Команды обработки блоков. Команды этой группы позволяют перемещать блоки данпыХ:Ййй:Осуще- ствлять пешек в блоке данных. Из всех команд в группе LDIR будет несомненно:<йм9Й;распростраиен- Следующая программа использует команду itDIR для копирования верх- ней трети области экрана в область средней трети. Это означает, что когда программа вызывается все байты из экранной ^области по адресу 4000-47FF копируются командой LDIR в экранную область по адресу 4800-4FFF. 98
6.2. Программы. Пользователь может увидеть, что это произошдо^так как все символы, ко- торые были в строках 0-7 будут продублированьТн;стр«жи 8-15. Программа представлена следующим образом: 7D00 7D03 7D06 7009 7D0B Программа 21 использует Программа 21. 'LDIR'. 21 00 40 11 00 48 01 00 08 Е0 ВО С9 L0 HL.+4000 LD 0Е, +4800 LD ВС, +0800 LDIR RET эту процедуру. ^ервЗй^рм.Экрана восьмая стррйокрана 2048 байт h ^пересылка бл'вка ШЭВраТ.. 50 DATA "21" ,"00","40" 51 DATA "11” ,"00","48" 52 DATA "01" ,"00","08" 53 DATA "ED- , "B0" 54 DATA "C9" 1 60 INPUT "ENTER YOUR CHARACTERS...-8 LINES";C$i; 70 PRINT C$ 80 RANDOMIZE USR 32000 "рЩЫр Нижеследующая программа демонстрирует йрКЙнду CP1R. Эта программа ищет заданную величину в ROM-области. Заданная вели- ’154 впервые встречается в чина изменяется в от&до 255. НапримерПчиспр; ROM-области по адрёсу:Г1?2&.„ Программа имеет вид: чн 7D00 ЗЕ 00 7D02 01 FF 3F 7D05 21 OOjfiH::: 7D08 ED H-f 7D0A 44 .ii 7D0B:. 4D "::Ш)нйф*ХХг L0&euHi3FFF LD HL>0000 ,.::rflR нШШчйй-В.Н LD4E, L 7D0C;' 0B 7DQQb:h:;,. C9 DEC BC ^ограмма^^СР^'. 50 DATA "ЗЕ" Г!'О0":::;::::;:::.. 51 DATA "01", 52 DATA "21", "00","00" 1 53 DATA "ED","Bl",”44",:" 54 DATA "0B",”C9","**" 4D" ввод образца старший байт ROM первый байт ROM поиск в ROM пересылка адреса байта указатель на искомый байт 99
7. Монитор 16к. 60 FOR F=0 ТО 255„::::ШШЬ 70 POKE 320Q^:Ri 80 PRINlHftpTA&A; "OCCUSR FIRST AT LOC. ';CHR$ 32;USR 32000 % читатель может перфшсать эти программы, используя не автоматические команды. Здесь не приводятся программы для команд ввода-вывода, команд пре- рыванийПЙ ;ВсбоВД|Ьйй группы смешанных команд, но читатель может напи- сать ИХ Сам£П;::П;::':'’ ....аЖНЖПР^^МОНИТОр ^К. Система SUSTRUM снабжена 16к постоянной памяти (ROM) включа- ющей в себя: :н: 1. Операционную систему.::;:Н^п^ 2. Интерпретатор БЕЙСИК? 3. Набор 96 литерПн?!" Содержимое ROM-области, включающее в себя вышеперечисленные ко- мпоненты называют мошгтором^:;у:^:::::;ч ____ Монитор занимает^-областьпамяти Начиная с адреса 0000 до 3FFF (0- 16384) и в стапдартнойсийеме SPECTRUM не может бьпъ перемещен из этих адресов. Команда расположенная: на 0-му адресу является первой кома- ндой, выполняемой послефключвния питания. Программа монитора заслуживает изучения лфЖйфющим причинам: 1. Подпрограммы монитора всегда доступны ДЛЯвызова из программ в ма- шинных кодах, написанных.пользователем. Эго позволяет создавать короткие программы. 2. Программа монитора показывает, как фирма, решила определенные про- блемы. 3. Программа монитора - это программа в машинных кодах больших раз- меров и поучительно посмсггре'гь. кЖк можпо , структурировать боль- шую программу. •"ПШ’ПжШг Разные части монитора теперь будут обсуждены по очереди, сперва ис- пользуя системный взгляд, а затем каждую в- отдельности. 7.1. Системный взгляд на Пользователь системы обычно не подозревавтжнт&МП (микропроцес- сор) в центре системы работает по программйвмайшниых кодах содержа- щейся в 16 к ROM с того момента когда питание подается к системе. Единственным исключением из этого бывает вьщолнение программы в кодах, написанных пользователем. 100
7.1. Системный взгляд на монитор. Пользователю SPECTRUM представляетсякакмапгина, которая ожидает программную строку БЕЙСИКа либо в вепосрёдётвённом режиме, либо с номером для построения БЕЙСИК программы'. СгроЙгБЕЙСИК без номера выполняются немедленно и могут использовать интерпрётащЙЬстрок из за- ранее введенной программы. Система SPECTRUM немного слЬжншнЬёколь- ку интерпретатор вызывает проверку синтаксиса строки прежде чем записывает ее в программную область - вне зависимости от того выполняется она непосредственно или представляет элемент программы. ' Операционная система (ОС). Изучение программы монитора начинается^.лрограммы INITIALIZA- TION, которая запускается либо после включёЙййЖтания, либо по переходу К 0-му адресу. INITIALIZATION (инициализация). Эта программа занимает адрес 0000-ЙОО?^й;;ЦСВ-12А1. основными за- дачами являются проверка наличия памяти и устяновка:сйстемных перемен- ных. Более подробно это будет рассмотренсгнёзднее. Программа инициализации заканчивается появлением coo6menHai;SINCLAIR. За этим стартует программа MAIN EXECUTION^Sra программа занимает адреса 12А2-15АЕ. в системе SPECTRUM эта йрйЕрййиа,.;как следует из названия выполняет основные функции в мониторе^ Эта программа вызывает ( еслийеобхбдимо ^программы LIST EDITOR и SYNTAX CHECKER строка БЕЙСИК добавляется в программную область, в случае непосредственного выполнения строкивызывается программа LINE- RUN и эта строка интерпретируется - это может включать в себя интерпре- тацию других строк БЕЙСИК^ Затем по возвращению из программы LINE-RUN выдастся сообщение. Таблйпасрббщепий об ошибках находится по адресам 1391-1536. возврат к MAIN-EXECUTION приводит к новому вызову программы EDIJOR.- EDITOR (реДаДТОр^:;;;^::^:^;^ Программа занимает-адрёёа 0F2C-I0A7. Программа позволяет пользователю поместить строку БЕЙСИКа в ни- жней чайй;экрана. В действительности строка формируется в области реда- ктирования^ татемкопируется в дисплейную область. ПользовЙ^:Мржст. вводить символы или управлять курсором и соотве- тствующие подпрограммы вызываются по мере необходимости. Управление курсором й ENTER вызывают возврат в программу MAIN EXECUTION. В стандартной системе SPECTRUM войти в программу EDITOR можно только через клавиатуру и поэтому программа KEYBOARD-INPUT вызывает программу EDITOR . 101
7. Монитор 16к. KE YBO A RD -IN Программа занимаёгчадреса 10А8-ШС. Эта программадаёт код последней набранной на клавиатуре клавиши, читая егонЗсййСмйой переменной LAST-K. Этацрограмма выполняет некоторые операции, например, устанавливает флагиСАРЗ LOCK и Другие и получает 2-й байт управляющей клавиши цвета для системной переменной. Каждыё;1/50 еек. прерываются вычисления и производится сканирование клавиатуры. Существует 5 отдельных программ связанных с основной про- граммой KEYBOARD^ зайЖаюшей адреса 02BF-030F. Собственно сканиро- вание клавижгуры:ВЫр(ЯШЯёт подпрограмма KEY-SCAN, которая занимает адреса 028Е-02ВЕ^Подпрограмма возвращает соответствующее ключевое значение в регистровой паре DE.j которое другие программы клавиатуры используют для получения кода: литеры. PRINT-OUTfcUt^^^"'"' В добавление копрограммам, обсужденным выше, имеется много других, которые также составляют часть ОС;:;;:;:. Программа PRINT-pUTPUT:paHttQrtiiraeTCH в адресах 09F4-OD4C и воз- можно является самой;Важной :Ср^ди других программ. Эта программа вызы- вается командой RST :i В системе SPECTRUM nporpaMMajiPRINT-OUTPUT очень мощная, по- скольку И СИМВОЛЫ И упрадляюйше ЙЬДЫ ВЫВОДЯТСЯ;;^; помощью этой же Программы. В системе SPECTRUM каждый символ,: кйггорьш печатается на TV-эк- ране или принтере, формируется программой PRINT-OUTPUT, тот факт, что программа применяется во многих различных случаях, делает программу до- вольно мед ленной, но несмотря Ж Вто и очень подезной. Интерпретатор БЕЙСИК. Интерпретатор вызывается как длЯпровсрки синтаксиса, так и для вы- полнения строки. Например, в строке LET А=1 сначала проверяется синтаксиста затем переменной а присваивается значение !, поэтому в таких случаях может быть удобно рассматривать синтаксический Диализатор как сум^г .отдШгьйхдх фу- нкций исполнителя строк, несмотря на то, что реально. BtdHi йётР .. Интерпретатор состоит из нескольких частей:.. ' 1. Таблица команд: ' располагается в области 1А48-1В16. в системе SPECTRUM существует 50 команд. Таблица команд содержит класс команд, символы разделители и адреса программ выполнения команды; 102
7.1. Системный взгляд на монитор. 2. Управляющая программа: располагается в адресах 1В17-1СЕЕ и содёржигкоманды, позволяющие рассматривать операторы БЕЙСИК один за друтим,как:тр^уется в програм- ме. . Точкой входа в синтаксический анализатор является адрёйН1В1?, а в исполнитель строки 1В0А; 3. Программы класса команды: располагаются в адресах 1C01-1CDD и главным образомзанимаготся ана- лизом параметре® команды БЕЙСИК. Например, команда NEXT относится к классу 4, как требующая за собой простуюперсменную. Команда РОКЕ относится к классу 8, как требующая за сй^^Ш&йистрвьи выражения, разделенных запятой; 4. Программы команд: большинство программ команд располагаются::вадресах 1CDE-24FA. программы команд, связанные с процедурами ввбдачвывйда, обычно входят в ос как часть программы монитора. Программы команд существуюТД#Я:;каждой из 50: команд БЕЙСИК и выполнение этих программ и есть собствешйработа интерпретатора. Интер- претация (итераторов БЕЙСИК может быть-проицщвёгрирована следующими примерами: рассмотрим оператор 10 CLS, интерпретация: которого проста. Сначала рассматривается команда.не имеющая операндов по таблице команд нахо- дится адрес (0D6B); :: Программа команды вЬШсиййстся, вызывая очистку экрана дисплея и установку атрибутов. Программа управления затем переходит к интерпретации следующего (итератора. Преобразователь выражении: эта программа загйшёё;8дреса 24Й8-28В1. в SPECTRUM результат пре- образования выражения может быть или числовой или строковой. Числовой. результат возвращается как плавающее значение в 5-ти верх- них бщтах;к^ткуляторного стека/в случае строкового результата эти же 5 байтбв представяяюгсобой набор параметров определяющих строку. Выражение йрёб^йуется слёва направо. Операция, имеющая высший приоритет, выполняется перед операцией с подобным или низшим приори- тетом. Определен!! ые операции такие как FN,RND,PI,INKEY$,BIN,SCREENS, ATTR,POINT выполняются без ис- пользования преобразователя выражений, но для всех других он использует- ся. 103
7. Монитор 1бк. Кода переменная используется в выражении, преобразователь выраже- ний получает соозвстсгЭуй’ЩЙе значение для переменной, вызывая программу идентификапди^ЙнпёременИой. UjpaiTgjkwiiiiwiпеременных. 3№рт:йабор программ занимает адреса 28В2-2АСВ. Эти программы возвращают текущее значение или параметры заданной перемётной в областОеременной. См^йаамкы^^^йфметические программы. Часть программы монитора, которая занимает адреса 2С88- 2F9A, соде- ржит серию арифметических программ. Самое важная из них STACK-BC (по адресу 2D2B ),:кот^й'(фсобразует текущее значение, содержащееся в регистровой Пар^ВСУЙПлавакЙйее значение наверху калькуляторного стека, и PRINT-FP ( rip -адресу 2DE3 ) которая берет верхнее значение калькулято- рного стека, преобразует его вДО-ную форму и печатает на TV-экране или принтере. Калькулятор,;.;;;;:;^^" Это большая несложная программа, занимающая адреса 2F9B-2FCD . Обычно выполняется по команде.RST;0028 , в свою очередь выполняющую переход по адресу 3358. посуз^ЬЙукдлькулятор состоит из 66 подпро- грамм, каждая из которьй^ЙййШяет различные действия. Вызов этих под- программ осуществляется не По команде ’CALL’, а использованием литералов с 16-ным значением 0Q-41 (1&ричное). Например литерал 04 Эквивалентен CALL 30СА;и;вфиводит к тому, что два верхних значения калькудЯ^брцого стека .замё&^^Ьдиночным значени- ем, которое является результатом умножения:этих значений. Следовательно 04 является литералом, обеспечивагшпимумножение. Эти литералы включа- ют в программу как байты данных ( ЬЕРВ-определение байтов), следующие за командой RST 0028. последШгйТЭЕРВ всегда имеет значение 38, которое выполняет завершающие операции и таким образом, является возвратом из калькулятора. Рассмотрим для примера подпрофаммудычисленшт тангенса (TAN X). 37DA EF RST 0028 - вызов кальфлятора.:;:ЗЙШЖзие X уже в h. калькуляторном стеке. 37DB 31 DEFB+31 37DC 1F DEFB+1F 3700 01 DEFB+01 370Е 20 DEFB+20 37DF 05 DEFB+05 37Е0 38 DEFB+38 дублирование Х,Х SIN X Обмен SIN X И COS X деление - TAN X конец 104
7.1. Системный взгляд на монитор. 37Е1 С9 RET - возврат к обычным машинныйнкодам и верхнее значение калькуляторного стека поменя:лдс:б;:С^Ж.ТАМ X. Причина включения специальной системы нспользбва1ЩЯ:Комавды RST 0028 со следующими за ней литералами состоит в том, чт6::эш;ёркращает программу в машинных кодах. Пример приведенныйГвыше испоаазуётталько 8 байтов памяти, в то время как использование 5-ти;команд CALL потребо- вало бы большего количества байт. Набор литер. Существует "неиспользуемая" область 386Ен36ЕР, которая предшествует наберу литер, занимающих адреса ЗПОО-ЗНЖ::!:::::Щ$Ш:::... Набор литер содержит 96 форм символб^ каждьй й^К^кфЬгх использует 64 бита. Например знак ’+’ хранится в Ф<фМе представлейЦой ниже. 3D58 DEFB+OO ’00000000’ 3D59 DEFB+OO ’ 00000000’ 3D5A DEFB+08 ’00001000’ 3D5B DEFB+08 ’0 0 0 0 1 0 0 0’.;::iiii:::::.. 3D5C DEFB+3E *0011111 С|*=::::ч 3D5D DEFB+08 ' 0 0 0 0 1 0 0 & 3D5E DEFB+08 ’0 0 0 0 1 0 0 ahi::: L h" 3D5F DEFB+OO ’ 0Й$;О 0 0 0 0; ;i:’ далее представлёнапрсйрдмма, показывающая содержимое литерной об- ласти и соответствующего ёй^ешфмзла. 20 FOR А=15616 ТО 16376 8Тр8ШЬ:::::.::Г 30 FOR В=0 ТО 7: LET.f=PEEK (А+В?*В SUB 300: NEXT В 40 PRINT 50 PRINT TAB 2; "Г"; СНВ<Н^А-15615)/8); ....... 60 PRIWT AT 20.0;Ь!1?ЙЕЙО KEVijrO CONTINUE": PAUSE 0 70 Cki / 80 •==:=::Н!|!‘ 300 LET P=36p::h*fe::;::,. 310 FOR N=7 TO 1 320 LET P=P/2 330 PRINT CHR$ (48+1NT(fyP)); 340 LET F=F-INT(F/P)*P 105
7. Монитор 1бк. 350 NEXT N 360 PRINT 1М₽И!:!!!^ 370 ROT строка бОэтой программы позволяет пользователю последовательно про- слетйтьформы всех 96;яитер одна за одной. Ш:7’2. Различные части программы монитора. Прбй|шша:мОж>ра теперь будет обсуждена секция за секцией в том порядке в какбиъйа занимает ROM. 0000-0007. RST.oooa^ Первоначальимй^цубк^Занрещаются маскируемые прерывания, очищае- тся ретистр А.чрешстровая napaiDE загружается значением +FFFF (верхнее значение aapecaiRAM ) и происходит переход по адресу 11СВ. 0008-000R RST OOOSiflh Программа вь^рдачп^^Шибке. Машинный стек очищается и выдается соответствующее сообщение. 0010-0012. R§T 0010. . Точка входа программы: FRDfFA (ггёчать символа, код которого нахо- дится в регистре А). О^йОййяёгся переход по адресу 15F2. 0018-0024. RST 0018 и RST «Й0. Получает текущий символ н$ который указываегчёН-АЛО как следую- щий. ’Ч:::::::::1 ...::Ч:::Ч:::::::Ч: 0028-002F. RST 0028. Переход по адресу 335В, кокфый; яйляется стартовым адресом кальку- лятора. 0030-0037. RST 0030 B&SPACE. Переход по адресу 169Б для выделйнйя;.:йеста в рабочей области. 0038-0052. f ” Программа обработки маскируемых прерываний'.' Часы реального време- ни обновляются и осуществляется сканирование клавиатуры вызшю&по ад- ресу 02BF. ' 0066-0070. Программа обработки немаскируемых й^рШййЙ8Й;Которая перезапуска- ет систему, если по адресу 5СВ0 записан О.ччШн;«::' 0095-0204. Таблица ключевых слов. Программа показывает эту таблицу: 106
7.2. Различные части программы монитора. 20 FOR А=149 ТО 516 -ШШИн»... 30 LET В=РЕЕК А 40 IF ВЗ THEN PRINT CHR$ В: GOTO 60 50 PR I NT CH R $ (В -128) /’ ’ 60 NEXT A 1. 1Г 0205-028D. Таблица клавиш. Существует б таблиц, по 1 на каждый из возможнйхрр^Йдшр&Наиболее важна 1-ая таблица (0205-022В), которая содержит значёйия в коде ASCII для больших букв и цифр. 028Е-02ВЕ. Программа КЕ¥-8СХЙГ*"ШЙППНН.::Н: Значение клавиши возвращается в регистровую паруВ^Флаг 0 сбрасы- вается, если одновременно нажато слишкоьгмного клавшп.:Обычно регистр Б указывает номер клавиши ( 16-ное 0042^^:».регистр D указывает какой регистр клавиши был набран. 02BF-03B4. Подпрограмма KEYBOARD/4^: Набор подпрограмм, которые осуществляют возможность повторения и декодируют значения клавиш для пдлучёнгаЕ:Требуемого кода литеры. Если клавиша нажата, то ее код копируется в снстемную;переменную LAST-K и бит 5 системной переменной FLAGS устанавливается, чтобы сигнализиро- вать о наличии нового кода. 03B5-03F7. Подпрограмма BEEPER^” При входе регистровая пара НЕ. содержит высоту тона требуемой ноты и регистровая пара DE содержйтгсё ^длительность. 03F8-046D. Программа командыУВЕЕР. Эта программа широкоиспользует калькулятор для вычисления длите- льности и высоты тона в соознетсгкии со значением регистровых пар HL и DE. существует таблица 12 чисел ( 016Е-04А8 ) для получения правильных значений 04AA-Q4C1. Эт^йфЙГрамма была написанаЩк ZX-81 и не изменена для использова- ния B^SPEClRtilMi; поэтому она не используется. 04С2-09ЕЗ?::--::ЙЬ:;;:::::.;;.::;:;Г: Программа команд SAV^EOAD, VERIFY и MERGE. 04С2-053Е. Программа SAVE-BYTES. Передает количество байт указанных в регистровой паре DE, начиная с адреса, хранящегося в регистре IX на магнитофон вместе с байтом четности. 107
7. Монитор 1бк. 053F-0555. Подпрограммазжончанйя SAVE/LOAD. 0556-0б04.;П6дпрограмма LOAD-BYTES. Загружает или сопоставляет данные, количество которых указано в ре- гистровой паре DE с магнитофона. Регистровая пара IX содержит адрес пе- рвогойбайта. Флаг переноса сброшен для операции верификации и установлен для оперли загрузки или добавления. SAVeB^ " LOAD-BYTES. Используется как для работы с заголовком так и с блоком данных. ОбО5-О7Ж.:;;!уШрУШ;Ч^(:. Точка вхбдаио всё подпрограммы находится по адресу 0605, и эта часть имеет дело с конструкцией деталей заголовка в рабочей области и является общей для всех:4-х команд БЕЙСИКа. 0760-096F. Эта часть связаЖО загрузкой, верификацией (сравнением) и добавлени- ем и вызывает LOAD-BYTES. 0970-09А0. h Эта часть связана ^сохранением и совсем проста. Капал предназначен- ный для печати в нижней части экран&ткрывается и появляется сообщение "пустите ленту". Затем появляется сообщение "нажмите любую клавишу" и ожидается нажатие. После выводится заголовок Й £ще через секунду - блок данных. 09A1-09F3. Сообщения, связанные с работой магнитофона. 09F4-0D4C. Программа PRINT^OUTPUT;.- печать символа. Бит 1 системной переменной FLAGS должен бытьусгаповиен для вывода на принтер и сброшен для вывода на TV-экранс ^важные части этой секции монитора описаны ниже. 09F4-0A10. Символы, которые могут быть напечатаны, отделяется ^управляющих символов. В любом случае ищется текущая позшщя^дия иёчати. 0А11-0А22. Таблица управляюшйх^ЦМйолов. 0A23-0ADB. Различные программы, имеющие дело с управляющими символами. 108
7.2. Различные части программы монитора. 0ADC-0B02. Важная подпрограммаЙ§ТОКЕ. Текущая позиция сохраняется в соответствугапщксистемных перемен- ных. Позиция печати может указывать на основную частыжрана, нижнюю часть экрана или буфер принтера. 0В03-0В23. Программа определения текущей позиций;;; Текущая позиция выбирается из соответствующих системных йеремен- ных. 0B24-0BDA. Подпрограмма печати nnTepuTRIiN^ANY. Эта особенная подпрограмма представляет, собой весьма важную часть программы печати символов в системе .регистровой паре HL содержится начальный адрес места где должен бьгТЬ ЙаЙейатан символ (сис- темная переменная DF-CC). Регистровая пдра ВС содержитНтекущее значе- ние строки и колонки (системная переменная S-POSN) и регистр А содержит код символа. Начальный адрес формы литерыпаходится или в наборе литер, или в области памяти, где находятся спепиальноёоздагптые графические ли- теры. P-FLAG также анализируется, чтобы опреДёлгйь требуемый режим (OVER или INVERSE или оба сразу),... 0ВВ7-0ВС4. Форма символа копируется из памяти; буфер принтера. 0BDB-0C09. Программа установки, атрибутов. После того, кай символ напечатал, устанавливается байт атрибутов для этого символа. Эго включает н;себя поиск и формирование значения атри- бутов и системных переменных ATTR^ MASK-T, P-FLAG. ;ЙЛЙЪ; ДйёЙлейную область или в 0С0А-0С54. Подпрограмма печати сообщений и ключевых слов. Входной точкой для печазпРсЬобщений является ОСОА, а для печати ключевых слов - ОС 10. В ,сл}чаё: печати сообщений регистровая пара DE содержит;начальный адрес ;табйицы сообщений (значение должно быть более чем 7F );;а регистр А содержит номер .сообщения (начиная с 0). Все символы печатакй^ло. тех пор, пока не ветретится "инверсный" символ. В случае печатй;йЖй1ейй<;тШ0в команда по адресу ОСЮ загружает в регистровую пару DE пачаяьнЫй;ад^?аблиг1Ы ключевых слов 0095. 0C55-0D4C. Подпрограмма SCROLL. Всякий раз, когда символ: печатается на TV-экрапе, каждая текущая по- зиция проверяется для определения необходимости продвижения экрана. Ес- ли продвижение необходимо, то печатается сообщение-подсказка и ожидается нажатие клавиши. 109
7. Монитор 16к. 0D4D-0D6A. Программа устанюйййременных цветовых характеристик. ООбВг.ОЕАВ^Программа команды CLS. (МсрфЦйй очисткиЭкрана в SP включает в себя заполнение всех байтов экразцййй области нулевыми значениями, байтов в области атрибутов специ- фицированными значениями. 0ЁАС-0Г2Ва::Программы для принтера. ОЕАСФЕСС; Программа команды COPY. 176 точечных линий непосредственно на принтер. ОЕСП-ОЕЕ^уШШйрогр^мма COPY-BUFF. Содержимоё'буфера принтера передается на принтер. 0EF4-0F2B. Собственнопрограмма принтер. 0Р2С-10А7.:;$£§ЬкГ Программа позвйййет пользователю создавать строку на БЕЙСИКе в ре- дакторской области Памяти. При каждом нажатии клавиши печатаемый си- мвол или ключевое слово:;Нй;:Прбграмме ADD-CHAR (0F81-0F91) добавляется в редактируеедгф:СТррку. Адреса 0FAC-0FA8 содержат таблицу для кодов (16-ое 07-0рудля клавиш редактирования и секция 0FA9-10A7 содержит различные программы обрабОФЙи этих клавиш. EDITOR также вы- зывается из программы койадцыЖРЦТ й позволяетНОЛЬзователю создавать входные строки В рабочей бблаёти. 10А8-111С. KEYBOARD-INFUTp^ " Подпрограмма собирает зйаченйя^йЗ LAST-K до тех пор, пока бит 5 FLAGS показывает, что нажата нбйая клавиша. 111D-11B6. Подпрограмма EIKCOPY. Редакторская строка или входная^грока^построенные в редакторской или рабочих областях этой подпрмраммой высвечиваются на TV-экране. 11В7-11СА. Программа команды NEW. Эта команда выполняет операции системного рестарта, но вставляет без изменения переменные RAMTOP, P-RAMT, RASP, PIPi iUDG.'-Oiia iipoflo- лжается в INITIALISATION. 11СВ-12А1. Программа INITIAtlsOM* При входе в регистр А содержит значение 0 для полного системного рестарта или FF для генерации NEW. Далее описаны основные части программы INITIALISATION. 110
7.2. Различные части программы монитора. 11CC-11CF. TV-экран становится б^дым. 11D0-11D9. В регистр I записывается +3F. Регистр используе^гд^Ггедерации TV- сигналов. .:Г 11DA-11EF. Программа RAM-CHECK. Ш Тестируются байты, начиная с 4000 до RAMTOfe При завершении реги- стровая пара HL содержит адрес последней пригоЖгй.для испоййования ячейки памяти. 11F0-11FF. В случае операции NEW эта секция испоДЙуёг^ ддя перезаписи значе- ний P-RAMT, RASP, PIP, UDG. 1200-1218. Эта часть используется при системн(жг;рестарте. Графика пользователя от А до U устанавливается копированиемфдрм;из.набора литер в область UDG. переменные PIP, RASP, P-RAMT инипиалйзируются. 1219-1234. Системная переменная CHARS У&ййййаивается. равной +3000 и органи- зуется машинный стек. Устанавлйается:рёжйй^1.3?истемы прерываний, в регистровую пару IY загружается :+5СЗА и разрешаются маскируемые пре- рывания. С этого момента клавиатура опрашивается через каждые 20 мил- лисекунд (50 раз в секунду). 1235-1243. Начальная информаций кйайовикопируется в область каналов. 1244-127В. Инициализируется ряд .системных переменных. Например, переменные постоянных характерисГНКТХвета устанавливаются так, чтобы были черные чернила, белая бумага» белый:бррд)ор. 127С.-1285. Начальные данные'потока копируются в первые 14 байтов STRMS (по- токи 0^1ii:2, 3 и еще 3 дополнительных потока, используемых монитором ДЛЯ ВН^ЙЙЙЙЙг^боты). Очищается бу<|^;принт^а*:бчищается экран и фирменное сообщение печатается в нижней частй ^рййа. 12А2-15АЕ. Программа MAIN EXECUTION. Различные части этой программы будут обсуждены ниже. 111
7. Монитор 16к. 12А2-12Е1. Основной цшот:дл&!кк$роения и последовательного вывода программы БЕЙСИК. Сцнзгаксйс каждой строки проверяется и, если синтаксис прави- льней, строй^Ьйирустся в область программ. ^р-1302. Непосредственная Йрока БЕЙСИКа, которая прошла проверку на син- таксисфдолжна быть:интерпретирована. Возврат по адресу 1303 завершает интерпретацию, независимо от причин. 1303-WPF"’ Соответствующие сообщения появляются на экране и цикл повторяется с адреса 12АС. 1391-155&;Таблнца сообщений об ошибках. Фирменноехообщение находится также в этой таблице. 1555-15АЕ., Закл|<>ЧЙ7ёЛьйая часть программы MAIN EXE- CUTION. Используется длй копирования строки из редакторской обл. в соответс- твующее место в программной обшасшШри копировании строки с номером, который уже существует, пррисхбйтг ййещение. 15AF-15C5. Начальная Таблица данных канала. 15C6-15D3. Начальная таблица данных потока. 15D4-1651. Программанббслуживаниянканйла "К". Входом в этот набор программ являетсй^Црес15Е)4. Программа ожидает нажатия клавиши на клавиатуре повторным вызовом подпрограммы KEY- BOARD-INPUT до тех пор, пбкжуетэновлен флаг переноса. Вход 15EF или 15F2 вызывают печать символ^; Выход стандартно осуществляется через PRINT-OUTPUT. Первая точка входа используётсддця печати цифр, вторая для одинаковых символов и КЛЮЧеВЫХЗД&В;::.. 1652*1654. Подпрограмма ЙЙЕ-йЖ&Ея-ср Одиночное место выделяется в редакторскойббйасти или рабочей обла- сти для строки БЕЙСИКа. ’ч........... 1655-1663. ...:;::::рНВ5Р="И”Ч Текущее значение регистровой пары: ВС показынаёт как много места должно быть выделено, а регистровая пара НЬ указынаёт после какого места в памяти должна быть выделена эта обласп£р;£Р=;; 1664-168Е. Подпрограмма POINTERS. Все указатели от VARS до STREND при необходимости изменяются. 112
7.2. Различные части программы монитора. 168F-169D. Подпрограмма сбора нОД&ра строки. Для данного адреса начала строки номер йрокйреобирается в регистро- вой паре DE. ""НШШШ::::.. 16DE-16AF. Подпрограмма RESERVE. Требуемый номер области делается доступен в рабочей областн.:;ч; 16B0-16D8. Набор программ очистки. По коду 16В0 очищается редакторская строка, щюмшшаянр^бочая об- ласть и калькуляторный стек, в то время как по коду 16С5;ичшцаётся только калькуляторный стек. 16DB-16E5. ::f Подпрограмма индексации используется в различнШ&рименениях по- иска по таблицам. 16Е5-1792. Программа командУёЖЖ;И OPEN. Открытие потока состоит в помещении отличного яг О значения в соот- ветствующую переменную STRMS для этого потока.^ Например: PRINT РЕЕК 23584 сбдрржит нормальный 0, который пока- зывает что поток 5 закрыт. Но после ОРЕ14:-#5,"К":.команда PRINT РЕЕК 23584 даст 1 и поток теперь открыт и к йему^ё^оючен канал "К". После CLOSE #5 команда PRINT 23584: даст (К эти эдхлраммы проверяют, что потоки открываются, и закрываются правильно, н; ' 1793-1794. В стандартном SPECTRUM; использование команд CAT, ERASE, FOR- MAT, MOVE приводит к вьщачёсддбнюния.об ошибке - "неверный поток” 1795-1А47. Программа листинга? Вход 1795 нспользуется МАШ EXECUTION для выработки автоматиче- ского листинга, вход ;;17Р5 д^ШШЯБТ и вход 17F9 собственно для LIST, различные части этойцрода^йы буду* обсуждены ниже. 185S-18B5. Про^р&йма печатй строки БЕЙСИКа. ОнОЙшается повторно управляющими программами для печати каж- дой с^КйнВШ^СИКа. Сначала печатается номер строки, затем, если требу- етсяйурсор^стрркй^.Подпро^амма 18С1-18ВС вызывается в случае необходимости мигающих’ символов. Окончательно печатаются все символы и ключевые слова. 190E-197F. Подпрограмма L1NE-ADDR. Она используется для поиска начального адреса строки БЕЙСИКа в об- ласти программы. 113
7. Монитор 16к. 19B0-19D4. Подпрограмма NEXT-ONE. Используя ее, ишётёя=€Лвдующая строка БЕЙСИКа или следующая пе- ременная. 19D5-19FA. Подпрограмма исправления. Любые исправления которые необходимо произвести, выполняются этой подпрограммой, сначала исправляется указатель от VARS до STREND, а затем требуемое данное? добавляется в конец калькуляторного стека. lAiB.«i:Il9jikip0^paMMa печати номера. Используется д ля печати номера оператора БЕЙСИКа, или при листинге, или при выводе сообщения?;:::... 1А48-1В16ч:Таблйца команд. Существует:двё'таблицы. Первая таблица ссылок для таблицы парамет- ров. Полная таблица параметров приведена ниже. Таблица п ДраЛГеЛ1р^:;:::::;:: Адрес команда класс команды адрес программы и разделители:.;: команды 1А7А LET .:::?Ш;;»;.О2 2AFF 1A7D GOTO:? 06 ОС: 1Е67 1А81 IF ЧНУУР5” ’ ii 06 THEN 05 1CF0 1А86 GO SUB::T I 06.00= 1EED 1А8А STOP Ш 00:ii:i:: 1СЕЕ 1A8D RETURN !c::::::-::: ;? 00 TTF23 1А90 FOR "ЧН:Ш= ' 04 = O6::T0:;06:C51D03 1А98 NEXT 04 " 1DAB 1А9С PRINT 1ECD 1A9F 1NPUT i;i;i:05' 2089 1АА2 DIM Г 05 2С02 1АА5 REM 4 05 ::1ВВ2 1АА8 NEW 00 И1В7. 1ААВ RUN 03^::' ":ттЧ:.. . ,JEA1 1ААЕ 1АВ1 LIST POKE 05 0'8.00 t17F9 1Е80 ..Т:; 1АВ5 RANDOMIZE 03'4;;:?- 1E4F 1АВ8 CONTINUE 00 1Е5Е::ШШШШ*!:!::Ч: 1АВВ CLEAR 03 ::;i1EAC?TT::'' 1АВЕ CLS 00 i;iO£)6B 1АС1 1АС5 PLOT PAUSE 09 00 нШнЧЧ1 06 00 т^- 22DC 1F3A 1АС9 READ Об 1DED 1АСС DATA 05 1E27 114
7.2. Различные части программы монитора. 1ACF 1AD2 RESTORE DRAW 03 .iiiH: 09 05 1E42 iiiiiiii&382 1AD6 1AD9 COPY LPRINT 00 05 .лданнн;;;:::.. 1ADC LLIST 05 .r:17F5 1ADF SAVE 0B •И (0605) 1АЕ0 LOAD 0B J-:(0605) 1АЕ1 VERIFY 0B W605) J 1АЕ2 MERGE 0B 1АЕЗ BEEP 08 00 03F&:=::H::=:J- 1АЕ7 CIRCLE 09 05 2320 1АЕВ 1АЕС INK PAPER 07 07 ;;;::;:::(.1C96) 1AED FLASH 07 ii: (fcoe-fc’ 1АЕЕ BRIGHT 07 h-JL (1C96J 1AEF INVERSE 07 ШШШШ:::: ... (1C96) 1AF0 1AF1 OVER OUT 07 •= 08 00 iiiiiii;;(.1.C96) 1AF5 BORDER 06..00 2294 1AF9 DEF FN iiF60 1AFC OPEN ;::06 OOfr:;:;;;;: i::1736 1В02 CLOSE i. 06 00 :: Ji iiiiiii: 16E5 1В06 FORMAT ;; .QA 00 i i Г 1793 1В0А MOVE ; 0A 0A ;00 .i н 1793 1В10 1В14 ERASE; . CAT ' ~ 0A 00 00 1793 1793 замечание: некоторые адресапрограмм не находятся в таблице. Такие адреса даны в скобках. 1В17-1С00. Управляющая программа интерпретатора БЕЙСИК. В случае проверку редактируем8й:строки на ошибку, вход в программу осуществляется по адр^уЛЙЙ й выполняются следующие шаги: 1. Сбрасывается флаг синтаксиса - биг 7 FLAGS. 2. Любой: номер строки проверяется на корректность - используя подпро- .p^aii^i^LINE NUMBER’ по адресу 19FB. 3. Системная переменная, которая считает количество операторов в строке (SUBPPC) устанавливается в 0. 4. Системная переменная ERR-NR устанавливается в FF. затем по очереди (адреса 1В28-1ВЗС) нд синтаксис проверяется каждый оператор стро- ки. В случае отсутствия синтаксических ошибок, выход осуществляе- тся через программу по адресу 1ВВЗ-1ВВ6. 115
7. Монитор 16к. В случае непосредственной интерпретации строки БЕЙСИКа входом служит адрес 1В8А,::^йт!сЦнтаксиса (бит 7 FLAGS) должен быть всегда установлен. Затем !<Йёраторы строки рассматриваются по очереди. Прямой возврат вынолшётся,: если нет больше строк БЕЙСИКа для интерпретации. Однако;й.тбм случае копта непосредственный оператор БЕЙСИКа содержит такие^Кбманды как RUN, GOTO, CONTINUE или соответствующее RE- ТиЯЦЦли NEXT возможна интерпретация других строк БЕЙСИКа прежде, чем возврат будет выполнен. В сл^лтаевынолнёния интерпретации оператора выполняются следующие ДеЙСТВИЯ!’^Нр:::::::";::" 1. Определяется команда^ЕЙСИКа и вычисляется адрес в таблице команд. 2. В таблице парамеп^вбпределяется первая протрамма класса команды и затем выполняется. 3. Выполняются следующие программы класса команд или подбираются соответствующие разделители, пока не достигается состояние, при ко- тором адрес программы команды находится и протрамма выполняется. 4. Когда интерпрега^йвав последний оператор в строке, рассматривается следующая строка. 1С01-1С0С. Таблица класеа&оманд Эта таблица использустсЯ:Авд поиску основного адреса различных про- грамм класса команд. :i :i 1C0D-1CDD. Программы классов команд,..: Требования определяёмы& различными классайй::Команд, могут быть суммированы так: .. ф класс 00 - нет других оператрррВкШ;п?;:: ф класс 01 - требуется переменная;!": ф класс 02 - выражение числовое или строковое; Ф класс 03 - числовое выражение, по умолчанию используется 0; ф класс 04 - следующая должна быль простая символьная переменная; ф класс 05 - может быть набор, элементов; ф класс 06 - должно следовать.чйсловре выражйие; ф класс 07 - элементы цвета; ф класс 08 - должны следовать ;2 числовых выражения, разделенных запятой; .. ф класс 09 - как для класса 08, но элементам цвета.М0|УК;ЦрёДте.Отво- вать выражения; .. Ф класс 0А - должно следовать строковое выражение; ф класс 0В - программы управления м^ттЫттофоном. Программы классов команд довольно сЛОЯОгы и дальше обсуждаться не будут. Однако адреса 1CAD-1CBD, которые содержат часть программы клас- са 07, представляют собой интерес. Эти адреса содержат программы, кото- 116
7.2. Различные части программы монитора. рые копируют текущие временные системные’переменные в соответствую- щие постоянные и которые могут вызываться вам^гнадобности. 1CDE-24FA. Программы команд. Программы этой секции вновь достаточно сложны и не буду^;^йлъно обсуждаться. В главе 8, однако, сделаны ссылки й различные программы печати в том виде, в кагором они могут вызываться^?. программ пользовате- ля. ЧШ:::. .:НГ 24FB-28B1. Вычислитель выражений. Наиболее интересная программа в SPECTRUM. Вьгчислитель функций, не требующих аргументов, выполняется внуг^й^йёйсиит^ы выражений, не выделяясь в отдельные подпрограммы. В результате йёйбЖзсж&ия этого ме- тода программист, желающий использовать, эти программы;:- функции, до- лжен обратиться за помощью к вычислителю выражений из программы VAL/VAL$ калькулятора (см. главу 8 длйдётюшзагщи). Существует 2 основных момента, связанйък;:ё;иг^^телем функций. Первый из них связан с тем, что программа вьгчисляётслёдугощее выражение и формирует одиночный результат. Этот.результат занимает 5 байтов памяти, которые хранят число в плавающейфсфмё для числового значения или набор параметров строки для каждого строковой В любом случае эта 5 байт памяти содержат последнее значение $ прйршма помещает их на верх стека калькулятора, то есть при вьпюлнещш вычислителя выражений стек калькулятора всегда увеличивается на одно значение. Второй момент связан с .тем, что вычислитель выражений использует значение приоритетов и операции с более высоким приоритетом должны вьпюлняться раньше операций с;низким приоритетом. Операции с равными приоритетами должны выполняться в .р^ядкё просмотра. В системе SPEC- TRUM значения приоритетов операции,’ которые еще будут выполнены, со- храняются в машинном:втёке и по частямлгередаются в стек калькулятора. В машинном стеке также сохраняются литералы, определяющие какая про- грамма калькулятора будет использоваться для различных операций. Различные части вьпшслигёля выражений описаны ниже. 24«fe?WFE. О0Я^№Шё:К.машинном стекёО значения маркера приоритетов. 24FF-279^^*=*;::;::::. Основной цикл вьгзйсййтёля' выражений. Через этот цикл проходит ка- ждый элемент выражения. =:Ы= 2530-2534. Подпрограмма SYNTAX-Z. Во время проверки синтаксиса флаг нуля должен быть установлен. 117
7. Монитор 16к. 2535-257F. Программа SCREENS. 2580-2595. Программа ATTR. 2596;25АЕ4:;Таблица функций, не требующих аргументов. Шв1б. Программа RND. 2627-2634. Программа PI. 26^4-2667. Программа INKEYS. 2756г2758^Йспользуется калькулятор для выполнения спе- цифическйх операций с одним или двумя операндами. 2795-27AF. ТаблилаЬдля преобразования кодов операций в литералы калькулятора^::;:. 27В0-27ВС;нТаблица приоритетов операций. 27BD-28B1. Программа FN. 28B2-299F. Лодп^^Р^мйа LOOK-VARS. Эта подпротрамма; вызывается всякий раз, когда ищется поле перемен- ной. Для специфицированной переменной возвращается адрес текущего зна- чения если переменная уже. использовалась, или устанавливаются соответствующие флаги в противном случае. 2996-2А51. Подпрограмма STK^-VARS. Сложная подпрограмма, используемая для поиска простых строковых переменных или переменных массива. Параметры строки или элемента мас- сива ВОЗВраЩаЮТСЯ В СТеК КаЛЬКуЛЯТОра. 2А52-2АВ0. Подпрограмма SLICING.” Любая подстрока может быть выделена из строки и эта подпрограмма вызывается всякий раз, когда нужно выделение. 2АВ1-2АСВ. Подпрограмма STK-STORE. Очень полезная программа, которая передает параметры текущей строки (регистры А, В, С, D, Е) в стек калькулятора. Стек расширяется на одно значение. В наборе параметров строки регистровая кара ВС содержит длину строки, регистровая пара DE - начальный адрес отроки и регистр А не ис- пользуется И СОДерЖИТ НОЛЬ. .... Иногда регистр а содержит единицу и индицирует н^щчн.е-^Д^.ентов массива. 2AFF-2BF0. Программа команды.LET.; Она специально предназначена для команд .LET и INPUT. В случае нросюй числовой переменной, йли старое значение переписы- вается, или новая переменная добавляется в конец текущего поля перемен- ных. В случае простой строковой переменной любое старое значение будет 118
7.2. Различные части программы монитора, уничтожено или построена новая переменная :в?конце поля переменных. И, наконец, в случае переменного массива староёр^ачёние. .всегда переписыва- ется. 2BF1-2C01. Подпрограмма STK-FETCH^” Вызов этой подпрограммы приводит к перезаписи верхнего значения сте- ка калькулятора в регистры A,B,C,D,E. Стек калькулятора уменьшается на одно значение. В системе SPECTRUM подпрограммы STK-ST0O?&:STK-FETCH обы- чно используются для установки параметров строки, хотйф'то'можёт быть и 5-байтовое плавающее значение (но использование точки входа 2АВ2 для STK-STORE приведет к потере пятого байта)у:рнр:::::;: 2С02-2С87. Программа КОМаНДЫрШМ. Простая программа которая устанавливает специфицированный массив. Если заданный массив уже существует, то старый массив уничтожается пре- жде, чем новый добавляется в конец облоги; йеремеш1Ь1Х. 2C88-2F9A. Разнообразные арифметические программы: наиболее важные из них описаны далее. 2D22-2D27, Подпрограмма STT&DIOIT.?:: Цифровой код ASCII (шестааДцатариЧПоеЗО^З^передается из регистра А в калькуляторный стек в плавающем виде. 2D28-2D2A. Подпрограмма STACKrAi Значение содержащееся $ регистре А,- Помещается в калькуляторный стек. 2D2B-2D3A. Подпрограмма' STACK-BC. Значение регистровой, пары ВС пе^йЖся в калькуляторный стек. Интересно, что эта .подпрограмма испойьзуется как программа выхода из функции USR. Следовательно текущее значение в регистровой паре ВС ста- новится последним значением? выражения "USR число”. Заметим особо, что: регистровая пара IY снова устанавливается на +5СЗА и поэтому всегда вьшолняётся корректный возврат после вызова функции USR. в Программах, написанных:пользователем, необходимо учитывать эту особеО&йн&ж.регистровая пара IY содержит модифицированное значе- ние й испоййуё^ или STACK-A. 2DA2-2DC0. Подпрограмма FP-to-BC. Верхнее значение калькуляторного стека упаковывается в регистровую пару ВС. 2DD5-2DE2. Подпрограмма FP-to-A. Верхнее значение калькуляторного стека упаковывается в регистр А. 119
7. Монитор 16к. 2DE3-2F9A. Подпрограмма PRINT-FP. Длинная и очень;«пожная подпрограмма, которая получает верхнее зна- чение кальку^тО^йй№::стека^уменьшая его на 1, и печатает требуемое число в целом илИ^Цйавжщем формате. Эта подпрограмма печатает значение лю- бых & байтов, независимо от того, являются они или не являются дейстеите- ЛЬНО:ЧЙСЛОВЫМН. ПрЦ своей работе -^а подпрограмма использует специальный буфер пе- чати в;$:0 байтах МЕ.1Й$ МЕМ4 (системные переменные 5СА1-5САА). 7.3. Калькулятор. В системе команд Zr&O нет команд умножения и деления, а имеющиеся команды слржения.итнлштавдия позволяют производить (итерации только с целыми чиа^ами й ййайкзоне 0455535. Поэтому в состав монитора включена специальная тффф&мма "калькулятор". Эта программа позволяет, вшолнять большое количество арифметиче- ских и логических операций^ Всёонерации производятся над числами, ко- торые находятся;^.калькуляторном стеке. Стек калькулятора аналогичен машинному стеку. Но он отличается от него тем, что одна ячейка калькуля- торного стека занимает 5 байт памяти.и положение стека в памяти опреде- ляется системными переменными-ЗТКВОТ и STKEND. Кроме этого существует еще шеёть.щятнбайтовых ячеек памяти калькулятора: МО,Ml,М2,М3,М4 и М&ЬПрёфаймист мЬжет копировать содержимое вер- шины калькуляторного стека в Эти ячейки и помешать содержимое этих ячеек на стек. При программированииёледует учитывая» тот факт, что вы- полнение некоторых функций:разрушает содераяшаеячеек памяти кальку- лятора М0-М5: ..:: ф SIN, COS, TAN, ASN, ACS, ATN^)LNнарушают содержимое МО, Ml и М2; ф EXP нарушает содержййкМЮ, Ml, М2, М3; ф INT, MOD DIV, GET ARGT нарушаютсодержимое MO; ф STR$ нарушает содержимое всех.шести ячеек от МО до М5; ф USR N может нарушил» содержимрё.любой ячейки; ф печать трафических символов с кодбмххг:128 до 145 нарушает соде- ржимое ячеек МО и Ml; ч. ф процедура печати десятичных чисел с плавающей точкой разрушает содержимое всех шести ячеек памяти калькулятора. . Запуск программы "калькулятор" происходит по команде ^8Т-1Й28. По- сле этой команды должны следовать одпобайтовыеинструкпий калькулято- ра, которые определяют какие действия необходимо;выполнить. Последней инструкцией в калькуляторной программе (к*)1ЬКулЯторная программа - не- сколько инструкций калькулятора следующий Друг за другом) должна быть инструкция с кодом 38 (16-ричное). Программа "калькулятор" после запуска последовательно просматривает инструкции, следующие после команды за- 120
7.3. Калькулятор. пуска (RST 0028) и выполняет их. Когда встречается инструкция с кодом 38 (конец работы калькулятора) программа "калькулятор" завершается, и упра- вление передается программе машинного кода, следующей за инструкцией 38 (16-ричное). Необходимо отметить, что в системе инструкций калькулятора есть ин- струкции перехода (безусловного и условного). За инструкцией перехода до- лжен следовать байт смещения (все переходы относительные) в дополнительной двоичной форме. Величина смещения отсчитывается от бай- та в котором находится инструкция перехода. Переход возможен как вперед, так и назад. Всего таких инструкций две: ф инструкция безусловного перехода; ф инструкция перехода по условию. Результат выполнения всех операций заносится на вершину калькулято- рного стека. При выполнении логических операций на вершину стека зано- сится значение "истина" или "ложь" в зависимости от результата. Значению "истина" соответствует ненулевое число, а значению "ложь" - ноль на вер- шине калькуляторного стека. Поэтому, когда встречается инструкция пере- хода по условию (код 00 16-ричное), то с вершины калькуляторного стека снимается значение. Если это значение равно нулю, то переход не выполня- ется и байт смещения игнорируется. А если это значение не равно нулю, то выполняется переход. Необходимо помнить, что числа в калькуляторном стеке, над которыми выполняются операции, замещаются результатом выполнения операции. По- этому, если эти числа нужны для дальнейших вычислений, необходимо их дублировать в калькуляторном стеке или копировать в ячейки памяти каль- кулятора. Так же необходимо помнить, что содержимое регистра В микропроцес- сора может нарушиться при работе программы "калькулятор". Таблица инструкций калькулятора. Код Условное обоэна- чение Содержимое вершины стека наруше- ния реги- стров назначение инструкции До После 00 JUMP TRUE X • - выполняется относите- льный переход на S шагов, если X имеет значение "истина" 01 EXCHANGE X.Y Y.X - меняются местами два числа на вершине стека 121
7. Монитор 1бк. Код Условное обозна- чение Содержимое вершины стека наруше- ния реги- стров назначение инструкции До После 02 DELETE X - - верхнее число удаляет- ся из стека 03 SUBTRACT X.Y X-Y - вычитание 04 MULTIPLAY X.Y X*Y - умножение 05 DIVIDE X,Y X/Y - деление | 06 POWER X.Y X**Y в.мо-мз возведение в степень | 07 OR X.Y "истина" или "ложь” - логическое "или” 1 08 N AND X,Y "истина” или "ложь” - логическое "и” (для чи- сел) 09 N LE X.Y "истина” или ”ложь" - "меньше или равно”, | регистр В должен соде-1 ржать 09 (для чисел) 0А NGE X,Y "истина” или ”ложь” - "больше или равно”, регистр В должен соде- ржать 0А (для чисел) ОВ NNE X,Y "истина" или ”ложь” - "не равно”, регистр В должен содержать 0В (для чисел) ОС NGT X.Y "истина” или "ложь” - "больше", регистр В должен содержать ОС (для чисел) 0D N LT X.Y ’’истина” или "ложь” • "меньше”, регистр В должен содержать 0D (для чисел) ОЕ N EQ X.Y ’’истина” или ’’ложь” - "равно”, регистр В до- лжен содержать ОЕ (для чисел) OF ADD X.Y X+Y - сложение (для чисел) 122
7.3. Калькулятор. Код Условное обозна- чейие Содержимое вершины стека наруше- ния реги- стров назначение инструкции До После 10 SAND X$,Y ’’истина” или "ложь" - логическое ”и” для стринга и числа 11 SLE X$,Y$ "истина” или ”ложь” - "меньше или равно", регистр В должен соде- ржать 11 (для стрингов) 12 SGE X$,Y$ "истина” или "ложь” - "больше или ”, регистр В должен содержать 12 (для стрингов) 13 SNE X$,Y$ "истина” или ”ложь” - "не равно”, регистр В должен содержать 13 (для стрингов) 14 SGT X$,Y$ ”истина” или ’’ложь” - "больше”, регистр В должен содержать 14 (для стрингов) 15 SLT X$,Y$ ’’истина” или ”ложь” - "меньше”, регистр В должен содержать 15 (для стрингов) 16 SEQ X$,Y$ "истина” или ’’ложь” - "равно”, регистр В до- лжен содержать 16 (для стрингов) 17 SADD X$,Y$ X$+Y$ - слияние стрингов 18 VAL$ X$ VAL$ Х$ расчет Х$ без ограни- чительных расчет Х$ без ограничительных кавычек как стрингово- го выражения, регистр В должен содержать 18 123
7. Монитор 1бк. Код Условное обозна- чение Содержимое вершины стека наруше- ния реги- стров назначение инструкции До После 19 USRS Х$ USRX$ - определение адреса графического символа пользователя, установ- ленного для клавиши с символом Х$ 1А READ IN X INKEY$ #Х - определение символа, поступающего от кана- ла, подключенного к потоку X (процедура содержит ошибку) 1В NEGATE X -X - изменение знака на противоположный 1С CODE Х$ CODE Х$ - определение кода сим- вола 1D VAL Х$ VALXS расчет Х$ без ограни- чительных кавычек как числового выражения, регистр В должен соде- ржать 1D 1Е LEN Х$ LEN Х$ - определение длины стринга 1F . SIN X SINX В.М0-М2 вычисление синуса 20 COS X COSX В.М0-М2 вычисление косинуса 21 TAN X TANX В, МО-М2 вычисление тангенса 22 ASN X ASNX В.М0-М2 вычисление арксинуса 23 ACS X ACSX В.М0-М2 вычисление арккосину- са 24 ATN X ATNX В.М0-М2 вычисление арктанген- са 25 LN X LN X В.М0-М2 вычисление натураль- ного логарифма 124
7.3. Калькулятор. Код Условное обозна- чение Содержимое вершины стека наруше- ния реги- стров назначение инструкции До После 26 ЕХР X ЕХРХ В.МО-МЗ вычисление ”Е" в сте- пени X, Е - основание натурального логариф- ма 27 INT X INTX МО преобразование дейст- вительного числа в це- лое, округление выполняется вниз 28 SQR X SQRX в.мо-мз вычисление квадратно- го корня 29 SGN X SGNX - определение знака чис- ла 2А ABS X ABSX - определение абсолют- ной величины числа 2В РЕЕК X РЕЕКХ - определение содержи- мого ячейки памяти по ее адресу 2С IN X INX - ввод числа с внешнего порта X 2D USRN X USRX ? выполнение програм- мы машинного кода начиная с адреса X 2Е STR$ X STRSX М0-М5 преобразование числа в соответствующий ему стринг, в систем- ной переменной МЕМ должен хранится адрес МЕМВОТ 2F CHR$ X CHR$ X - определение символа числа по его коду 125
7. Монитор 16к. Код Условное обозна- чение Содержимое вершины стека наруше- ния реги- стров назначение * инструкции До После 30 NOT X "истина” или "ложь” - условие ”не" 31 DUPLICATE X х,х - дублирование (повто- рение) числа на верши- не стека 32 MOD DIV X.Y X- Y*INT(X/Y), INT(X/Y) МО выделение остатка от деления двух чисел и целого частного (для отрицательных чисел результат неверный) 33 JUMP - - - безусловный переход на S шагов 34 STK DATA X помещает на стек чис- ло X; оно следует за инструкцией и должно быть в упакованной фо- рме 35 DJNZ - - если в регистре В не 0, то выполняется пе- реход на S байтов, а содержимое регистра В уменьшается на 1 36 LTZ X ’’истина” или "ложь” - условие "меньше нуля” 37 GTZ X ’’истина” или "ложь” - условие "больше нуля” 38 END CALC - - • выключение калькуля- тора 126
7.3. Калькулятор. Код Условное обозна- чение Содержимое вершины стека наруше- ния реги- стров назначение инструкции До После 39 GETARGT X 2/PPASN (SIN X) МО вычисление 2/PI‘ASN(SIN X) ЗА TRUNCATE X (SGN X) * INT(ABS X) - выделение целой час- ти числа (округление ”к нулю”) ЗВ EXECUTE В • - - выполнение инструк- ции калькулятора, код которой содержится в регистре В ЗС ETOFP X 7 - не работает по причи- не ошибки в ПЗУ 3D RESTACK X X - перевод целого числа в действительное (в плавающую форму) 8п SERIES N X Pn(X) В.М0-М2 вычисление многочле- на Чебышева n-го по- рядка 9п SERIES N+10 X Pn+10(X) В.М0-М2 вычисление многочле- на Чебышева (п+10)-го порядка АО CONST ZERO - 0 - помещает на стек 0 А1 CONST ONE - 1 - помещает на стек 1 А2 CONST HALF - 1/2 - помещает на стек 0.5 АЗ CONST PI/2 - 1.570796 - помещает на стек PI/2 А4 CONST TEN - 10 - помещает на стек 10 127
7. Монитор 16к. Код Условное обозна- чение Содержимое вершины стека наруше- ния реги- стров назначение инструкции До После Сп STORE Мп X X Мп копирование числа с вершины стека в Мп-ю ячейку памяти кальку- . лятора, нормально п=0...5, но можно уве- личить до 1F путем из- менения системной переменной МЕМ Dn STORE М(п+10) X X М(п+10) то же, но Mn=M10...M1F Еп RECALL Мп - Мп - вызов на стек данных | из М0-М5 (M0-MF) Fn RECALL М(п+10) - М(п+10) - то же, но для I M10...M1F I Упакованная форма целых чисел от 0 до 65535. Если число представить в двухъбайтовой форме ММ NN, то упакованная форма будет следующей: 34 80 ВО 00 NN ММ код 34 (16-ричное) здесь и далее означает инструкцию STK DATA. Упакованная форма отрицательных целых чисел от -65535 до -1. Если число представить в двухъбайтовой дополнительной двоичной фо- рме ММ NN, то упакованная форма будет следующей: 34 80 B0FFNN ММ Упакованная форма стрингов. Если адрес РР QQ, а длина ММ NN, то упакованная форма стринга будет следующая: 34B0QQPPNNMM Упакованная форма действительных чисел. Представим число в пятибайтной интегральной форме: АА ЕЕ DD СС ВВ здесь "АА" - экспонента. Если экспонента находится в диапазоне от 51 до 8F то пользуемся таблицей 1, в противном случае пользуемся таблицей 2. 128
8.1. Введение. Таблица 1. интегральная форма упакованная форма значение АА” АА ЕЕ 00 00 00 34 АА” ЕЕ АА-50 АА ЕЕ DD 00 00 34 АА” ЕЕ DD АА-10 АА ЕЕ DD СС 00 34 АА" ЕЕ DD СС АА+30 АА ЕЕ DD СС ВВ 34 АА” ЕЕ DD СС ВВ АА+70 Таблица 2. | интегральная форма упакованная форма '— ” 'ь-' ““I значение АА” АА ЕЕ 00 00 00 34 00 АА” ЕЕ АА-50 АА ЕЕ DD 00 00 34 40 АА” ЕЕ DD АА-50 АА ЕЕ DD СС 00 34 80 АА" ЕЕ DD СС АА-50 АА ЕЕ DD СС ВВ 34 СО АА” ЕЕ DD СС ВВ АА-50 1 8. Использование подпрограмм монитора. 8.1. Введение. Цель этой главы показать, что программы машинного кода могут был» написаны для SPECTRUM относительно просто, используя большое число подпрограмм, которые всегда имеются в программе монитора. Автор не имеет намерения в этой книге обсуждать структурное програм- мирование, но хотел бы отметить, что хорошая программа всегда приносит удовлетворение как пользователю так и самому программисту. 8.2. Шестнадцатиричный ввод. В гл.6 программа HEX. LOADER (16-ный загрузчик) была так предста- влена, что читатель может составить программу машинного кода в списке данных DATA и потом выполнить ее. Однако HEX. LOADER не совсем подходит для больших программ и предпочтительна следующая программа : 1 REM HEX INPUT 5 CLEAR 31999 10 LET 0=32000 20 DEF FN A(A$,B)=CODE A$(B)-48-7*(C0DE A$(B)57) 30 DEF FN C(A$)=16*FN A(A$,1)+FN A(A$,2) 40 DEF FN G$(F)=CHR$ (F+48+7*(F9)) 129
8. Использование подпрограмм монитора. THEN GOTO 160 50 DEF FN H$(E)=FN:^!;NT(E/16))+FN G$(e-16*INT(E/16)) 60 DIM 70 PRINTi:№M$<feK D); TAB 7; FN H$( INT(D/256)); FN H$X^256i::iNT( D/256)): B^i^PUT A$ £ 90 ЙТ=1 100 LET L=-1: GOTO 130 110 li^W)'...... 120 IF A$(1) CHR$ 32M. POKE D, FN C(A$) 130 PRINT.TAB::1|ihO:filHEEK D) 140 LET D^li-:::': hi 150 GOTO 70ii J; :::? 160 INPUT "PRESS ANY:K$OhuN THE ROUTINE"; A$ 170 RANDOM I ZE:U6R;£2b<j0 Примечание: используйте режим CAPS LOCK; введите значение как пару Тб-ньхх символов; используйте ENTER \ длявыполнения шага вперед; используйте ЧГ if ENTER, выполняя шаг назад; используйте ”*” и ENTER дляйьнюлнения программы; строка 160 дает пользователю вторую возможность. Используя вышеприведенную программу, читтгель может просто ввести и проверить программу машинного кода^ныЫ:^’ Читатель должен быть хорошо осведомлён о программе SAVE перед тем, как использовать ее впервые, таккак имеют место частые аварийные ситуа- ции в системе. 8.3. КомаНДйВЕЕР. В БЕЙСИКе команда ВЕЕР имеет форму: ВЕЕР длительность, высота тона, где д лительность должна быть положительной величиной, не.превыша- ющей 10 и высота тона - положительным ИЛи отрицательным:ЧИСЛОМ, ука- зывающим как далеко находится нота от среднего В программе машинного кода имеются два особыхмйгода, используя которые программа ВЕЕР может быть вьшопнена.:ЙО: первому методу нео- бходимо вызвать подпрограмму BEEPER с соответствующими величинами в двухъ регистровых парах DE и HL; в то время как по второму методу надо вызвать команду ВЕЕР с помощью величин для длительности и высоты тона в калькуляторном стеке. 130
8.3. Команда ВЕЕР. Метод 1. Используя программу HEX INPUT введите: 7D00 11 05 01 LD ОЕ, +0105 7D03 21 66 06 LD HL, +0666 7006 CD В5 03 CALL BEEPER 7D09 С9 RET й®Йй&н.ость 1 сек. лВйсЬтаитрна;;:.. когда вышеприведенная программа будет выпшшена, она дастнтот же эффект, как ВЕЕР 1,0. Величины в регистровых парах DE и HL будут слёдувицнмиИп=: с> рассмотрите ноту заданной частоты "F", например; среднее "до" при- нято как 261,63 гц в SP. затем длитешшрсяъ требуемого периода "Т" будет просто равна F*T. Это задаетсО^йарё; регистров DE. ф величина для пары регистров HL прёДставлёЙй;ЙДЙ:43?:.500/Р-30.125 заметьте, что нет ограничения длительности 10 секундами при использо- вании метода. Метод 2. Используйте программу HEX. INPUT, чтобы::йёййг:йрограмму. 7D00 ЗЕ 01 LD..A, +01 длительность 1 7002 СО 28 20 .::САШ;8ТАСК-А перевод в стек 7005 ЗЕ 00 LD '^высота тона 0 7007 CD 28 20 CALL STAC^&H ПврвВОД В СТОК 7D0A CD F8 03 4:£ALL BEEP if’ 7000 С9::... :"RET iL .Ш сек. когда вышеприведённаяпрограмма будётпвьшолнена, она даст тот же эффект, как ВЕЕР 1,6. Можно использовать программу:STACK-А для целых значений, для дро- бных значений необходимо испш1ьз6вййгД10Дйрограмму STK-DATA. То есть для ВЕЕР 1.3,1.12 програмМ^^удет выглядеть следующим обра- зом: 7D00 EF / ::ЙШ$8Т 0028 7D01.:- 34 DESB +34 7002; F1 DEFB 7D03*h:::. 26 66 66 66 ОЕЕВЗГ 70Э?:::-::::: DEFB +34 7008 "= OEFB 7D09 ";:8Г;5С!28::Е.б DEFBS 700D 38 * DEFB +38 7D0E CD F8 03 • ULI U ' W CALL BEEP 7D11 С9 RET использование калькулятора STK-DATA экспонента 81 мантисса (= дес. 1.3) STK-DATA экспонента 81 мантисса (= дес. 1.12) END CALC чтобы получить ряд звуков, величины могут помещаться в таблицу и выбираться как требуется. 131
8. Использование подпрограмм монитора. 8.4. .Сохранение и загрузка. Подпрограммы SAVE-BYTES и LOAD-BYTES вызываются из машинно- го кода простымси особом. В любой случае регистровая пара DC должна содержать адрес места на- значений регистровая: пара DE - количество байтов, например, переслать байты с 7Е00 по 7EFF включительно. Регистровая пара IX будет содержать 7Е00, й-DE 0100. В регистр А записывается величина +FF, чтобы показать что переписы- вается &1ОК:ДайНЫХ^: Перед выполнением LOAD должен быть установлен флаг переноса. Следующая программа сохранит байты. 7D00 7D02 ЧП--: 7D06 7D09 7 DOC заметьте что .3E-.EEi;i*:::4iii: iiijij 21 00 7Е I:: :ii оо oi CD C2 04 ГО .. LDA.+FF указатель бл. данных LD IX,+START установка пары IX . LD DE.+COUNT установка пары DE CALL 8АУЕ-ВУТЕ8выполнить сохранение ост байты сохранены без "заголовка”, но загрузка будет в том случае, если известно количество байтов. Программа загрузки будет следующая: 7D00 37 установка флага переноса (сбрасывается для VERIFY) 7D01 ЗЕ FF:;;;:;: :i LD A,if FF указатель блока данных 7D03 DD 21 Off 7ELD; IX,4START установка пары IX 7D07 11 00 0$:.;. ,.:::Р LD DE, +COUNT. :::у$Гановка пары DE 7D0A CD 56 05::ii!iiiii;; CALL LOAD-KBYTES выполнить загрузку 7D0D С9 RET 8.5. $.ЛФМ£НТЬ1 цвета. В системе SPECTRUM все байты атрибутольимеют следующий вид: бит 7-FLASH; бит 6 - BRIGHT; :;iPPPP::ii:;... биты 5-3 - PAPER; ... биты 2-0 - INK. :Р этот вид относится к 768 байтам.в области атрибутов и к системным переменным BORDER, ATTR-P, MASK-P;: MASK-T. В добавление к атрибутным байтам системная переменнаЯ:РгРЕА6 ис- пользуется для хранения постоянных и временных флагов: для PAPER 9, INK 9, INVERSE и OVER. Четные биты P-FLAG - биты 6,4,2,0 - являются временными флагами, а нечетные биты - 7,5,3,1 - являются постоянными флагами. В большинстве случаев SPECTRUM использует временные величины, когда заполняется значение для атрибутной области, но при определенных 132
8.5. Элементы цвета. условиях более важных, когда выполняется программа CLS, используются постоянные величины. Команда BORDER и 6 элементов цвета буйут раёёй^шшъся теперь по очереди. ... .. BORDER. В любое время цвет бордюра может изменятся футем использования ин- струкций OUT (+FE),A. Но эта операция обычночздязана с сохранением нового значения цвета в битах 5-3 BORDER. заме1ъте^йго дру^:бип>1 кон- тролируют мигание, яркость и цвет чернил нижней частаГэкранаг Следующая программа показывает, каким образом цвет бордюра может изменяться. 7D00 ЗЕ 02 LD А, ’ 7D02 D3 FE OUT (н 7D04 07 RLCAh; 7D05 07 RLCAh 7D06 07 RLCA’ 7D07 СВ 6F BIT 5, 7D09 20 02 JR..NZ, 7D0B ЕЕ 07 7D0D 32 48 5С 1LD (ВС RED’ -"kgai ЁЕ),А бор; ЦВ6Т борДК В 6l ёныйГбордюр Ййр^’изменяется ipai* пересылается тгы 5-3 регистра А А B0RD-2 I7:.. Ж цв А: ет^ чёс кЬн ::УСТ эрнил для нижней ти экрана - трастен ановить BORDER 7D10 С9 L RET или проще: 7D00 ЗЕ 02 LD A^’.RED’ красный 6opj Ьр -::Н 9 1/VV VU \Zfc-. U.IV Г>ф .. .1 JJU.IV FX|Vl*WI lUIFI WV/|V^J\4k/ ...... 7D02 CD 98 22 ;CAELBQRD-1 установ^;ЙЙ^Дюра 7D05 C9 RET : интересно увидеть, как'Оышёпри веденной программе цвет INK делается контрастным по сравнению;^цветом бордюра. PAPER. Постоянный цвет бумаги задается битами 5-3 ATTR-P. Следующая программа прказьшаёгдля PAPER 0 - PAPER 7 только один метод, с помощью которого;этибиты могут изменяться без изменения других атрибутов. ,р 7D.0fe:::. ЗА 8D 5С A, (ATTR-P) ПОИСК ATTR-P 7КЗЭч:ШШ HHUA пересылка оитов э-j 7D04 •= RRCA в биты 2-0 7D05 •oF:;;;:;:;:::; RRCA 7D06 Е6 F8 W AND.+F8 7D08 С6 02 ADD A, +RED ввести новый цвет 7D0A 07 RLCA сдвиг байта 7D0B 07 RLCA 7D0C 07 RLCA 133
8. Использование подпрограмм монитора. 7D0D 32 80LD (ATTR-P).A сохранить ATTR-P 7D10 RET ВьппеприведенньЙ методне очень эффективный, но это "общий метод", который мржй;йсп6ньзоваться в других ситуациях. PAPER8 задается;.отдельно и включает в себя установку битов 5-3 MASKj-pjв то время Ka^PAPER 9 включает в себя установку бита 7 P-FLAG. пф. JP Поёт!ЖННЫЙ. П^Г:;чернил задается битами 2-0 ATTR-P. Следящая: Йрфрамма показывает, как эти биты могут изменяться для INK 0 - INK7:.:;;” 7D00 ЗЕ F8:i::;;;i;;;;:: LO A.+F8 приготовить MASK 7002 ,.:ES;AO3:::::;4 AND (ATTR-P) выделить биты 7-3 7005 Ш ADD A, +RED красные чернила 7007 700А =;;;:’32 80 50 :: С9 :=: LD (ATTR-P).A ;;;;;;; RET сохранить ATTR-P заметьте, что АТТК?₽:в::6дадм.случае рассматривается как адрес 53А6, а в другом - как а'дрес ЗСГО. INK 8 включаеТСЯустановкой битов 2-0 MASK-P в то время как INK 9 - установкой бита 5 -P-FLAG. FLASH. ;::= Можно задать трн:сйегоянйд;Р'ЬА8Н’;установкой или сбросом бита 7 в ATTR-P и MASK-P следующим ббразомгр FLASH 0 0 для 7нг.р бита ATTR:-P FLASH 1 1 для 7^0;.бЙТа ATTR-P ,.;;;:ПННННН; FLASH 8 1 для 7-ГОбйта MASK-P;;;*;;:;;;;^"’ BRIGHT. Подобным образом задаются три состояния яркости используя установку и сброс бита 6 в ATTR-P и MASK4P: BRIGHT 0 0 для 6-го биТа ATTR-P BRIGHT 1 1 для 6-го бита АТЖ*Р; ; . BRIGHT 8 1 для 6-го бита М»Р;;Ш;;:;-.. во всех случаях, когда 8-ой режим требует исключения соответствующие биты MASK-P нужно сбросить опятър OVER. ..-xHi ГчЬ ЖШ:. Два состояния OVER могут был» заданы установкой;или сбросом; 1-го бита в P-FLAG: ..::;;чРРР;Р:;^::' OVER 1 0 для 1-го бита P-FLA(T;;;:;;;;P;£;£:^::: OVER 0 1 для 1-го бита P-FLAG INVERSE. Два состояния INVERSE могут быть представлены следующим образом: 134
8.6. Команда CLS и SCROLL. установка и сброс бита 3 в P-FLAG аналбЬично OVER. Постоянные и временные элементы цнётаУ;:::.. Большинство операций в SPECTRUM используют.йрёййные элементы цвета. Например, операция RST 0010. CLS является важной для использования постоянных цветов. Для того, чтобы копировать текущее постоянноезначение во временные системные переменные используется CALL ТЕМР&.ч. CALL 0D4DHh если временные величины будут использоваться как новыё;ндстоянные йеличины, используется CALL PERMS - "CALL 1CAD". Читатель может написать эквивалентные программы машинного кода: PAPER 4: INK 3: ВЕЕР 2,0 ИЛИ :ф:' ВЕЕР 1,0: BORDER 5: ВЕЕР 2,12: BORDER 2 LD А, +2 открыть канал S .CALL CHAN-OPEN &A1.L CLS очистить экран W ЗЕ 02 CD 0.116 CD 68 0D C9 8.6. Команда CL&Mpg&ROLL. В программе монитора SPECTRUM имеются нодпрофаммы для очистки части экранной области и для сдвига ее части. Этййбдпрограммы могут вызываться только из программ машинногокода. CLS. ip" 1 j=: Полная очистка экрана и установка вбех атрибутных байтов в постоян- ные величины получена путем использования: CALL CLS - "CALii::0D6B” L... но важно убедиться, что канал S (канал:Ж:подключеп к потоку номер 2) открыт до того, как вызывается программа. Каналу потребуется потом вторичное открытие, если будет производиться дальнейший вывод на печать. Следующая программа очищает весь экраннП' 7D00 7D02 7D05 7D08. - ................... вышеприведенная НрЙрймма име^т преимущество при использовании постоянйых цветов, но проще во многих случаях использовать подпрограмму CL-LOgiOhhH:::.. liodnpoipaMMa'^L-LINE. ~ Ис пользуется1 ДЯЯЪчйстки определенного числа строк экрана. Эти стро- ки считаются снизу. До того, как сделан вызов подпрограммы в регистр В должна быть по- мещена величина в диапазоне 01-18 (16-ричное), где 18 - очистить весь эк- ран. Следующая программа показывает, как используется эта подпрограмма: 135
8. Использование подпрограмм монитора. 7D00 06 17 LDB.+17 очистить 23 (10-ное) строки, 7002 ОЕ : CALL CL-LINE оставить одну верхнюю 7ОО5.:;:;:ПШПШ^:;:; RET feipCkOLL. 4h. Эта интересная подпрограмма, т.к. она дает возможность пользователю сдвигать определенноснчисло строк дисплея на одну строку вверх. ПоДщх>граммак<дачаезся использованием подпрограммы CL-LINE для очистит важней строки. Регистр в используется для указания номера строки, начиная с которой и ниже все строки сдвигаются,. Строки выше указанной остаются неподвиж- ными. Значение 8 должно бьпъ в диапазоне 01-17 (16-ричное). СледуюЩ^йррГрамма показывает как подпрограмма будет использова- ться: *Ш?"" 7D00 :: 06 16 LD В,+16 оставить верхнюю СТРОКУ НО СДВИНУТОЙ 7002 CALL CL-SCROLL 7D05 RET заметьте, что пи-нодпрограмма СЬчЦМЕ, ни подпрограмма CL-SCROLL не влияют на использование текущего'канала. 8.7U Подпрограмма печати. Для того, чтобы испоЩйовать зпобую из подпрограмм печати для изобра- жения символов, подпрограмма. PRINT-OUTPUT должна бьпъ сделана теку- щей программой ввода. Этоможно легко получиз^открыв канал S. Поэтому СТРОКИ: LD А,+02 CALL CHAN-OPEN должны использоваться до того, как вызываются любые подпрограммы. RST 0010. В системе SPECTRUM вся печать символов на экране выполняется при использовании этой команды. С открытым кайадойЗподпрограмма PRINT- OUTPUT по адресу 09F4 действует как программД'вывода. Инструкция RST 0010 очень мощная и может использоватьсяаля печати любого символа, изменения текущего положения печати использованием АТ и TAB, печати расширенных ключевых слов и временных цветовых элемен- тов. : Следующая программа показывает это: 7000 ЗЕ 02 LD А, +02:-' открыть канал S 7002 СО 01 16 CALL CHAN-OPEN 7005 06 18 LD В,+18 " 136
8.7. Подпрсирамма печати. 7007 СО 44 0Е CALL CL-Lj^NE:.. очистить экран 7D0A ЗЕ 16 L0 А,+’АТ!:::=:НШ 7D0C 07 RST 0010 Ойёратйр:... 7D0D ЗЕ 05 LD A, +05 ::-PR I NT AT:5jig;:::::i 7D0F 07 RST 0010 7D10 ЗЕ 00 LD A, +00 7012 07 RST 0010 7D13 7015 ЗЕ 41 07 LD A,'A* RST 0010 ••I:::::::::::::::::** 7016 ЗЕ 00 LD A, ’ ::::OflepaTOp PRINT 7018 07 RST 00$ 7019 ЗЕ F9 LD A,:*JF? оператор 7018 07 RST Q»h:::... PRINT CHR$ 249 701С ЗЕ 0D LD A;' CRT:::"iiiii; 7D1E 07 RST 0010 ёнёратор PRINT 7D1F ЗЕ 11 .Mi:::PAPER’ 7021 07 :::.оператор PAPER 2 7D22 ЗЕ 02 L LD А, $0^1 •:= (временное) 7024 07 :£rst 0010 il 7025 7027 ЗЕШ::: D7 CD A, RST 0010-”" оператор PRINT 7D28 ЗЕ 42 оператор 7D2A 7028 D7 С9 "ЖМ RET в’ PRINT "в" следует отметить, что в вышеприведенной программе вызов подпрограм- мы CL-LINE очшцает;экран,:нО;йё:уёганавливает положение печати "(X)" (в то время.рсак CALL (ХЗУё^&вливаЮТ). Когда используется инструкция RST 0010 для печати цветного элемента, тогда потребуется два отдельных: вызова, а когда используется символ упра- вления:АТ;:трг^:трсбуется 3 отдельных вызова. Альтернативный;метед изменения положения печати будет следующим: загрузите пару регистров ВС соответствующими величинами для нового положения печати - CALL CL-SET (CALL 0DD9), которые помещают тре- буемые величины в S-POSN и DF-C. Величины в паре регистров ВС определяют АТ А,В; где регистр В соде- ржит 16-ное 18-А, а регистр С 16-ное 21-В. например: 137
8. Использование подпрограмм монитора. 7D05 со бв жУ. CALL CLS очистить экран 7D08 LD A,+02 снова открыть 7D0A ...::-Ж0Т16 CALL CHAN-OPEN канал S 7D0D 27 LD BC, +270F CALL OUT-NUM-1 RET десятичное 9999 печать числа moil W" CD ТВ. 1А С9 8.8. Команды PLOT, DRAW и CIRCLE. Этитри:крмдцды имеют дело с изображением точек в экранной области. Весь экрансостойт из 256*176 точек, что образует 22 верхние строки. Ко- ординаты нижней левой точки принимаются как 0,0; а верхней правой точки 255,175. системные.церйМёйГЫе COORDS-x и COORDS-Y содержат коор- динаты последней точки, которая должна использоваться. Эти системные переменные устанавливаются в 00 командой CLS, или другими командами, такими как RUN, которая вызывает программу CLS. Команда Эта самая простая:изтрех команд, т.к. опа включает в себя идентифи- кацию только одного бита в области экрана и его последующую установку ИЛИ сброс. Имеется три вполне подхогйШйк::ТбЧки входа в команду, но третья из них, возможно, самая Простая для использования. 1. CALL PLOT - "CALL; 22DC'!. Для. входа в команду PLOT необходимо иметь величины X fl Y на-Bepxjh калькуляторного стека. Величина X находиться ниже величины Y. Необходимо использование STACK-A для помещения значений^ стек калькул?прр:;:::::;т 2. CALL PLOT-1 - "CALL 22DF". Вход-й:;этой точке требует, чтобы в регистре В хранилась величина ^; а В регистре С - величина X. после того, как точка выводится;:постоянные цветовые величины копирую- тся автоматически во временные системные переменные. 3. CALL PLOT-ВС - "CALL 22Е5". .Опять регистр В должен содержать величину Y, а регистр С - величин? X- Подпрограмма выполняет фа- ктическую операцию PLOT, требуемый бит идентифицируется вызо- вом FIXED-ADD (22АА) и затем будет'установлен или сброшен в соответствии с результатом его состояния И величиной P-FLAG (бит 0 P-FLAG даст постоянное состояние. OVER и бит 2 дасг.соетояние INVERSE). " Следующая программа показывает изображение рд^рчной Точки С по- мощью PLOT. 7D00 ЗЕ 02 1 П Д открыть канал S LU П, 7D02 CD 01 16 CALL CHAN-^OPEN 7D05 CD 6В 0D CALL CLS очистить.экран 7D08 ЗЕ 02 LD A,+02 " снова открыть 140
8.8. Команды PLOT, DRAW и CIRCLE. 7D0A CD 01 16 7D0D 01 64 32 7D10 CD E5 22 7D13 C9 CALL CHAN.«O₽:EN канал S LD ВС, +32$4нШШ;;|?Ш 100,50 CALL PLOT-ВС " RET Команда DRAW. Использование DRAW X,Y по существу являема расширение^ PLOT X,Y, описывающей ряд точек, которые составляют гфЯМую.линшй^ Команда DRAW X.Y.A включает в себя изображеНйё:ДЙЙ'Ж^6добна по многим аспектам CIRCLE X,Y,R и DRAW X,Y. Имеются две соответствующие точки входаОдлз£;Этой команды: 1. Точка входа DRAW-1 (2477) с величинами Хй:;У^которые являются верхними значениями стека калькулятора. Постоянные цветовые ве- личины переписываются во временные системные переменные после того, как линия уже нарисована. ШОШУШ:::... 2. Точка входа DRAW-3 (24ВА). При этом регистр;® содержит ABS Y, регистр С содержит ABS X, регистр D содержит ЗОИ X и регистр Е, содержит SGN Y. Следующая программа рисует Линию. Заметьте, что пара регистров H’L’ должна быть сохранена, а позднее восстановлена для выполнения успешногоФозврйа в БЕЙСИК. 7D00 36 LD А, +^РШШГ открыть канал S 7D02 CD 01 16 CALL CHAN-OPEN 7D05 CD 6B OD CALL CLS очистить экран 7D08 3E 02 "LD::;A'i:+Q2: снова открыть 7D0A CD 01 1.6 CALL"CBAN-OPEN канал S 7D0D D9 EXX u сохранить 7D0E E5 / ,::::ШШРи$Н HL значение H’L’ 7D0F D9 7D10J FD 3O3iiB#::LD (C0@RDS-x),+64 установить координаты 7D14; FD 36'44 64 LD (COO'RDS-Y),+64 7D^aii=h:::. 01 32 32 '•:::::::LD' BC, +3232 оператор 01 01 "LD DE,+0101 DRAW 50,50 7D1E " ИНННёШ=:0А.24 CALL DRAW-3 7D21 EXX восстановить Н’ L’ 7D22 E1 POP HL 7023 D9 EXX 7D24 C9 RET вышеприведенная программа устанавливает последнее положение графи- ки в координате 100,100 и затем рисует линию +50,+50. 141
8. Использование подпрограмм монитора. II. DRAW X,Y,A, Для того, чтобымарбразйть дугу величины X,Y и А должны быть нервы- ми помещенывстскжалькулягора либо в их длинной или короткой форме из пяти байТОВтЗЙём можно вызвать DRAW-ARC (2394). Следующая программа дает тот же результат, например DRAW 50,50,1 с ^начальным положением графики в координатах 100,100. 7DW:. 7Пбйи^:::: .3£:$2 : 01 16 LD A,+02 открыть канал S CALL CHAN-OPEN 7005 ’: :;;:::CD 6В 0D CALL CLS очистить экран 7008 ЗЕ 02 LD A,+02 снова открыть 7D0A CALL CHAN-OPEN канал S 7D00 EXX сохранить H’L’ 7D0E •т::Е5 . PUSH HL 7D0F D9 ; EXX 7010 FD 36 43 64 LDXCOORDS-X), +64 установить 7014 EQ36 44 64 LD(COORDS-Y),+64 координаты 7D18 RST 0028 использовать калькулятор 7D19 34 . +34 STK-DATA 7D1A 40 BQ QQ..32W6S 10-ное +50 7D1E 31 ;; : DEFB +31 DUPLICATE 701F А1 ; DEFB +A1 STK-ONE 7020 38 J DEST+38 END-CALC 7021 CD 94 23:;h . .::"7 CALL DRAW-ARG .::^^0бражение 7024 D9 EXX : 7025 Е1 POP. HL:;;; восстановить H’ L' 7026 D9 ;. . EXXr^ 7027 С9 ё;:Е;::ЙЕТ в программе величины, полученные для :X^;Y, а будут десятичными <50,4-50,+!. Команда CIRCLE. Опять три операнда команды должны быгёрбмёЩены в стек Калькуля- гора до того, как будет сделано обращение к CIRCLE-1 (232D). Следующая программа показывает выполнение этой команды;3амеп>те, что нет заметной экономии времени изображением окружи скатт из машин- ного кода, т.к. программа команды CIRCLE медленна^ 7D00 ЗЕ 02 LD A,+02. .:::!::$:::Г::ОГКрЫТЬ КЗНаЛ S 7D02 CD 01 16 CALL CHto.REN:' 7D05 CD 6В 0D CALL CLS... " очистить экран 7D08 ЗЕ 02 LD A, +02 :. снова открыть 7 D0 А CD 01 16 CALL CHAN-OPEN канал S 142
8.9. POINT, ATTR и SCREENS. 7D0D D9 ЕХХ сохранить HL 7D0E Е5 PUSH HL 7D0F D9 ЕХХ 7D10 EF RST 0028 .использовать 7D11 34 DEFB +3 7D12 40 ВО 00 64 DEFBS 7D16 31 DEFB +3 7D17 34 DEFB +3 7D18 40 ВО 00 30 DEFBS 7D1C 38 DEFB +3 7D1D CD 2D 23 CALL Cl 7020 09 ЕХХ 7D21 Е1 POP HL- 7D22 09 ЕХХ 7D23 С9 НЕТ кН: I4 :r:STK-DATA:;;i;iii;i in +100 10-ноеч 11 ^DUPLICATE i >4 ^STK-DATA 8 ЕНОЭДСн-’ RCLEfrl. изображение Г ’':'®?GGT ановить кальк. HL выше приведенная программа дае11$йнже. результат, как CIRCLE 100,100,48. Л Заметьте, что при использовании вьппеприведеЙЙ6Й:Йро1раммы постоян- ные цветовые величины копируются .во . временные системные переменные, одновременно с изображением дуги [окружности. 8.9. POINT, AtTROO^ENS. Эти три функции Moiyr вызьшаться из программы машинного кода очень просто, т.к. каждая имеет отдельную вьпшслшетьную подпрограмму. Они могут также вызываться как.функции, используя VAL, но этот метод не заслуживает внимания. POINT. Координаты точки, которые должйы[^>пъ переданы, вводятся в пару регистров ВС и вьвьшаелй:подпрограмма:РОШТ-1 (22СЕ). Как обычно ре- гистр В хранит координату Y, ре^рсггр С хранит координату X. Результат выполнения воаэдадаогея верхним значением стека калькуля- тора. 1г Следящая програШЙ йоказьтаефыполнение команды POINT. 70ЙбО==::::. ЗЕ 02 •:::::::LD' А, +02 открыть канал S 7И$ШШн :ih;::::CD 01 16 CALL CHAN-OPEN 7D05 **ш£и.оо CALL CLS очистить экран 7D08 LOA,+02 снова открыть 7D0A СО 01 16 Т т CALL CHAN-OPEN канал S 7D0D ЗЕ 41 LOA,’A’ печать ’А’ 7D0F 07 RST 0010 7010 ЗЕ 0D LD A, ’ CR’ переход к следующей 7012 D7 RST 0010 строке 143
8. Использование подпрограмм монитора. 7013 01 04 Afcii’L LDBC,+aeO4 оператор POINT* (4,174) 7016 CALL POINT-1 7019 ...::uiCKiE3 20 : CALL PR I NT-FP печать результата 7D1C:::;-:i^p^^C9:i;: RET кьнпегфиведенная :ч. программа аналогична команде PRINT "А"; CHR$13; POINT (4,174). Atr». Номёр стрцки^йюдится в регистр С, а номер копешки в регистр В, и вьвьшается подпрограмма ATTR-1 (2583). Результат выполнения возвращае- тся верхним значением калькуляторного стека. Следующая программен Доказывает выполнение. 7D00 L0 А, +02 открыть канал S 7D02 ;Шй^СО 01 16 Т CALL CHAN-OPEN 7D05 ч; CD 68 00 CALL CLS очистить экран 7D08 ЗЕ 02 LD A,+02 снова открыть канал S 7D0A :С0 01®::::- ‘ CALL CHAN-OPEN 7000 ЗЁ;Н:?;'”' LD A,'PAPER’ бумага временно 700F ОТн" RST. 0010 становится голубой 7010 ЗЕ05 ...i-XD^’CYAN’ 7012 07 C:? RST 0010 7013 QC ЕЕ::.::::::::::: ' ii LDA. 'COPY' печать ключевого ОС ГГ.:::::::::: - 7015 07 1 RST $10 слова COPY 7016 ЗЕ 00 Н: Й LO W CR' переход к следующей 7018 07 RST 0010 :: строке 7D19 01 00 04 =Н:::= !r LD BC, +Q40&:::;* •бпёратор ATTR (0,4) 701С СО 83 25 CAL.L:AWT 7D1F СО ЕЗ 20 •CAliliiPRlNT-FP 7D22 С9 iiiiHiiSET ’ вышеприведенная программаГаналогична команде: PRINT PAPER 5;CHR$ 255;CHR$ 13;АШ;.(о',4)"Ч. SCREENS. 1 Опять номер строки засылается и регистр С; д ;иомер колонки в регистр В. Затем вызывается подпрограмма SCREENS-1(2538). Результат возвраща- ется как верхнее значение стека калькулятора, но следует отмети^ ягго это набор параметров строки. Пример: h 7000 ЗЕ 02 LD А, +02...::”::;;;;н:ЭТкрыть канал S 7D02 СО 01 16 CALL СНДИН$Е1Г' 7D05 CD 6В 00 CALL CL§H:: очистить экран 7D08 ЗЕ 02 LD А, +02снова открыть 7D0A СО 01 16 CALL CHAN-OPEN канал S 144
8.10. PI, RND, INKEYS. 7D0D ЗЕ 7А LD А, ’ Z’ 7D0F D7 RST 0010 7010 ЗЕ 00 LOA,’CR’: 7D12 07 RST 0010 7013 01 00 00 LD ВС,+0000 7016 СО 38 25 CALL SCREEN$-ii 7019 CD F1 2В CALL FETCH 7D1C СО ЗС 20 CALL PR-STRIN& 7D1F С9 RET печать символа .печать строки •ЭДф&ЮД. к следующей .етреЙЙПШ::::.. ;оператоЗ:^ЙЕЕН$(0,0) программа аналогична команде PRINT "Z"; CHR$ 13£$<3REEN$ (0,0). Помните, что SCREENS будет искать только вжборе символов и следова- тельно, определяет коды в диапазоне 20-7F.(кричное). 8.10. PI, RND, 1NKEY$. Эти функции группируются вместе, пикшу что их программные вычис- ления включают в вычислитель вьфажений й;иЕ®езможно вычислить их не- посредственно. Однако использованием программы VAL/VALS К^йькулятора, который вызывается вычислителем выражений,;.£ледует рассмотреть преобразование. VAL CHR$ VAL CHR$ VAL$ CHR$ 166 PI. Процедура вычислёншгдвд PI находитсхниэдресу 26C6 и выглядит сле- дующим образом: .для PI ;для RND 165 для INKEY$ 262C RST 0028 : истюиьэдвание калькулятора 262D АЗ 262E ЗВ ’END-CALC 262F INC Ж) ..::::::удвоение увеличением экспоненты процедура занимает 4 оаитаичлсгко копируется. Ее можно вызвать с ПОМОЩЬЮ .VAL GHR$-1j67>:::::::::: • Призер: 70й&Ш:::.. ЗЕ 02 • :::::::10‘ А, +02 ОТКрЫТЬ КЭН ЭЛ S 7И02ШНШШ •:::::С0 01 16 ‘ :::CALL CHAN-OPEN 7005 " i^fea.OD CALL CLS очистить экран 7D08 LD А, +02 снова открыть 700А CD 0ТШ;нч ;i: CALL CHAN-OPEN канал S 7D0D ЗЕ А7 LDA,’РГ код PI 7D0F CD 28 2D CALL STACK-A 7D12 EF RST 0028 использовать 7D13 2F OEFB +2F калькулятор 145
8. Использование подпрограмм монитора. 7D14 38 DEFB +38 7D15 LD B.+1D 7D17 RST 0028 7D18..::::ii;i ^ЗВН:. DEFB +3B 38 Ч DEFB +38 ША" СО ЕЗ;:20 CALL PRINT-FP 7D$) RND. С9 .:Ш RET END-CALC строка литерал ФуШЩ|й(1Ш&№№сляется следующим образом: содержимое системной переменной SEED делится на 65535. При включении шпанви.лли NEW величина SEED равна 0, затем, с помощью 1-го o6pwKl^ k: RND величина SEED становится 74 (10-ное). Эго дает пер^^ЭДучайное чН&ю: 74/65535=0,0011291504 последователь- ность чисел длж&ёеЬ 0,74,5624р28652...0,74 то есть представлены все числа от 0 до 65535, Правило для изменения;вёлйчины SEED следующее: 1. Прибавьте 1 (SEE^^EED+l); 2. Умножьте на 75:(SEED=SEED*75); 3. Возьмите по модулю 65537 ,(SEEE^SEED-65537*INT(SEED/65537)); 4. Вычтите 1 (SEED=5EED+6^ : Следующая протрамы» ^БЕЙСИК показывает эти изменения. 10 INPUT "SEED ?";СНЙ 32;gEED 20 PR I NT "OLD VALUE 32; §EED 30 LET SEED=SEED+1 ' .” 40 LET SEED=SEED*75 .. 50 LET SEED=SEED-65537* |Шв/65537) 60 LET SEED=SEED-1 70 PRINT "NEW VALUE ="; CHR$ 32;$®:: 80 GOTO 30 J= Программа RND может вызываться из прбтршодЙ В машинных Кодах как результата вычисления функции VALCHR$ 165.::;; ПрИМер: 7D00 3E 02 LD A,+02 открь1ть:канал8: 7D02 CD 01 16 CALL CHAN-OPEN: 7D05 CD 6B 0D CALL CliS.. чистить экран 7D08 3E 02 LD А,+0&;:::;:::Н:: снова открыть 7D0A CD 01 16 CALL CHAN^OPEN канал S 7D0D ЗЕ A5 LD A, ’ RND’ код RND 7D0F CD 28 2D CALL STACK-A 146
8.10. PI, RND, INKEYS. 7D12 EF RST 0028 использовать 7D13 2F DEFB +2F ^калькулятор 7D14 38 DEFB +38 7015 06 1D L0 В,+10 j/Wfiepaig:::::::::... 7017 EF RST 0028 7D18 ЗВ DEFB +ЗВ 7D19 38 OEFB +38 ::END-CALC 7D1A 7D1D INKEYS. СО ЕЗ 20 С9 CALL PRINT-FP: RET Имеется ряд путей, с помощью которых ря|^;Кдадиатурь1 может осуще- ствляться из программы в машинных кодад;р;:" 1. Непосредственным чтением системной цеременнойЕАйТ-К. 2. Клавиатура может опрашиваться пу^ё&использованиЯ инструкции IN аналогично KEY-SCAN (028Е). 3. Подпрограмма KEY-SCAN может вызыватьскЩшм:идозультат значения клавиши находится по известным таблицам, 4. Действие выполняемые по програмив;:ШКЕУ$ (2646 16-ное) мотут быть ПОВТОреНЫ. 5. Программа INKEYS может ЙспользйДОП^ФДОислением выражения VAL$ CHRS 166. , В следующей программе демонстрируется эта; возможность. 7000 З&Ю&Н:::;:::... LD А, +$&::::?= 7D02 CO 01 Ж;:;* . CALL CHAN-OPEN 7005 CO 6B 00 CLS.. 7008 ЗЕ 02 С0:=Аф*02: 7D0A СО 01 1.6 CALLWN-OPEN 7000 11 ОО:08::::: LD DE ,*0800 7010 05 :::iii=iPU.SH DE 7011 ЗЕ iFWA. ’ INKEYS’ 7013.; СО CAU STACK-A 7D1fli EF RST 0028 70.1/::::::::. 2F •:::::::DEFB +2F 7Й»нШУ0 :::::::::38 "DEFB +38 7D19 LOB,+18 701В •'! I ! 11!•. л RST 0028 7D1C ЗВ DEFB +3B 7D1D 38 DEFB +38 7D1E CD F1 2В f CALL STK-FETCH выбор параметров строки 7021 CD ЗС 20 CALL PR-STRING печать строки 147
8. Использование подпрограмм монитора. 7D24 СО BF 16 CALL Х-ТЕМР очистка рабочей 7D27 01 POP DE области 7D28 7В LD А. Е 7029 В2 OR D 702А С8 RET Z 702В 1В DEC DE 7D2C 18 Е2 JR LOOP 7020 00 когда эта программа выполняется, то она аналогична выражению: FOR А=1 ТО 2048: PRINT INKEY$;: NEXT А 8.11. BREAK (работа с клавиатурой). Рассмотрим принцип ввода данных с клавиатуры. Клавиатура ZX SPEC- TRUM разбита на 8 полурядов по пять клавиш. Данные с клавиатуры посту- пают через порт с адресом 254 (FE 16-ричное). Пять младших разрядов (0-4) этого порта определяют какая из клавиш полуряда была нажата. Шестой разряд порта указывает на наличие сигнала с магнитофона (1 - сигнал есть, 0 - сигнал отсутствует). Остальные разряды не используются. Обращение к клавиатуре происходит следующим образом. Формируется адрес порта: ф младший байт адреса равен 254 (FE 16-ричное); ф старший байт адреса определяет опрашиваемый полуряд клавиатуры в соответствии с таблицей. Затем производится ввод данных с порта по сформированному адресу. Нулевое значение любого из пяти младших битов в полученном байте озна- чает нажатие соответствующей клавиши. Нужно отметить, что назначение разрядов (битов) порта 254 при вводе и выводе различно (смотри таблицу). При этом при вводе старшая часть адреса определяет опрашиваемый полуряд, а при выводе старшая часть ад- реса порта игнорируется (младшая часть адреса всегда 254). Таблица разбивки клавиатуры. номер полуря- да разряд порта 254 (FE) старшая часть ад- реса по- рта 4 3 2 1 0 1 5 4 3 2 1 F7(247) 2 6 7 8 9 0 EF(239) 3 Т R Е W Q FB(251) 4 Y и 1 О Р DF (223) 148
8.11. BREAK (работа с клавиатурой). номер полуря- да разряд порта 254 (FE) старшая часть ад- реса по- рта 4 3 2 1 0 5 G F D S А FD (253) 6 Н J К L ENTER BF (191) 7 V С X Z C.S. FE (254) 8 В N М S.S. SPACE 7F (127) Структура порта с адресом 254 (FE -16-ричное). номер бита назначение бита при операциях ввода (IN) назначение бита при операциях вывода (OUT) 7 не используется не используется I , 6 ввод с магнитофона не используется 5 не используется не используется 4 определяют нажа- тую клавишу полуря- да, если бит равен нулю, то клавиша нажата. Полуряд определяется стар- шим байтом адреса в соответствии с таб- лицей разбивки кла- виатуры, младший байт 254 выход на динамик 3 выход на магнитофон 2 определяют цвет бордюра (один из возможных восьми цветов) 1 0 напоминаем, что 7-ой разряд - это старший (крайний левый) разряд в байте, а 0-ой - младший. Во многих случаях полезно, чтобы был сделан выход из программы ма- шинного кода по клавише BREAK. Пример: 7D00 ЗЕ 02 LD А, +02 7002 СО 01 16 CALL CHAN-OPEN 7005 CD 6В 0D CALL CLS 7D08 ЗЕ 02 LD A,+02 7D0A СО 01 16 CALL CHAN-OPEN 149
8. Использование подпрограмм монитора. 7D0D ЗЕ 7F LD A, +7F вводной порт 7FFE 7D0F IN A,(+FE) бит 0 регистра А 7D11 RRA сброшен,если .7D12..::::i;i •••••НОВ;;;. RET NC нажато BREAK. 18 F8. JR BREAK переход адресу 7D0D дцрограмме половина ряда клавиатуры от BREAK до В неоднократно просматривается. ВыхфД будет осуществлен только тогда, когда сбросится бит, который соответствует клавише BREAK. 8.12. Заключение. Теперь читатель готов, к. написанию программ в машинных кодах. Про- граммы в машинных кйДДХ^08ут использоваться в программе на БЕЙСИКе. Они вьвьшаютсяяч^граммепё команде "USR-число". Разумеетс^чтопрограммы необходимо писать в мнемонических обозна- чениях, а затеипереводить их ^машинный код, используя специальные про- граммы (например EDITAS^^EUS, GENS4 и так далее). Используемый в этой кише загрузчик машинных кодов применим только для написания про- стых и коротких программ. 150
СОДЕРЖАНИЙ :х, Предисловие...............................jj; 1. Принцип работы микрокомпьютерной системы. 1. 1. Описание системы...............£ . 12. Логика работы................... ROM область...................... Карта памяти экранной области....... Область атрибутов................... Буфер принтера............. .. .... . . Системные переменные.......... Карты микроприводов........ Область информации о каналах.^ .... Область Бейсик-программ (БЦ). ;;.... Формат строк БП:........ШШУУ-'я.. • • • Область переменных. . . . Область редактора............. Рабочая область. . . . . ........... Стек калькулятора. . • • • • Резервная память. . . Ч:.- Машинный стек. . . В . . . GOSUB - стек. Графическая область, определенная пользователем. 2. Функции и команды БЕЙСИК.. 2. 1. Введенйё"::^£;£:а:..,.. 22. Команды БЕЙСИК^;::;,:.* .... ВВЕРХУ..........: BORDER М...............-!Ч=Р:. OUT 254,М ................:П . BRIGHT М,Г."............ .... CIRCLE XXZ. . . . . CLEAR, CLEAR^==H;: . . * . . . :i: CLOSE #N. •;:**". . . . ji . . . JH:":CLS..................J'. . . . :iniinni0Q!NTINUE. . . .... F -eCafe::.......................... DATA’»»::.. . . .=:........... DEF FN АСАП^Ж РЕР FN A$(A. DIM A(E1....»©1M A$(El.....Ek). DRAW X,Y; DRAW X,Y,Z. . . . ERASE......................... FLASH M....................... . 3 £;н;3 0: ’4 Ш 5 5 . б . б . б . б . 7 . 8 . 8 . 9 . 9 . 9 . 9 . 10 . 10 . 10 . 10 . 11 . 11 . 11 . 11 . 11 . 11 . 12 . 12 . 12 . 13 . 13 . 13 . 13 . 14 . 14 . 14 . 14 . 14 . 15 : х: ,Z)=E 151
FOR A=X ТОЖЗТЕР Z.................. ЮКМАТ^ШШШНО........................ gq:sW№ ............................ I№!HENS............................ iiiiilNKN. . B-...................... INPUT... . .Ш...................... INVERSE МШ......................... LETV=E,:B*:........................ ........................ :;вЖ‘............................... LOAD............................... LPRINT. .................... KffiRGEiSKiiiF;'. /•£:............ NEWbXT. . . . B;................... NEXT A. .... iL.=.................. OPEN #N,X$. ...uiJBii:;............ out MiN.. ................. OVER №4^'.......................... PAPER Nif.......................... PAUSE N7'......:^ii®ih............. PLOTX.Y. Г::: X POKE nm:Xx;X1 . . Л PRINT....<1 -it RANDOMIZE N. . . •= . . READ VI,V2... iir c dii . . . . REM......................... RESTORE N............. В RETURN......... RUN N..........". . stop...........Ж". . . . VERIFY.........I . 23. Функции БЕЙСИКа. . ABS X.............;iij: :: ДС5 x , .’i AND (X AND Y). ’ ’ ’X ’ ' ASN X..........• . . .::B;i;i ATN X................... ATTR (X,Y)............... BINX....................; CHR$ X.................. CODE X$................. EXP X................... FN X(A,B$,C...), FN X$(A,B$,C...). 15 16 16 16 17 17 17 17 18 18 18 18 18 19 19 19 19 20 20 20 20 21 21 21 21 21 22 22 22 22 22 22 22 22 23 23 23 23 23 24 24 152
IN X..........................ПГ:::.;..................24 INKEYS................................................ 24 INTX............................, • • .24 LBN X$................................ 24 LN X.................................У!. . . . NOT X................................-У.............i:;25 PEEK X...............................Hb:...........Hi 25 И....................................iii=b=:x .... лУУ 25 POINT X,Y..............................................25 RND......................................сУУнУУУУУ. .25 SCREENS (X.Y)......................................... 26 SGNX.................................................. 26 SIN X.......................Ж". • • • 26 SQRX........................У!........... . .26 STRS X......................«::У=.............. 26 TANX.....................УУУУУ:::<.....................26 USR X................................................. 26 USR XS................................................ 27 VALXS...................................•>.............27 VALS "X$“........................• • • •"............27 2.4................ Управляющие символы. ."!;НУиЦЦиниг.г Ьн............28 CHRS 6 - печать запятой . . . У.'У^УУУУУУ'.............28 CHRS 8 - перемещениёобратно. . . УУ....................28 CHRS 9 - перемещение вправо.У. . ..У;..................28 CHRS 13УУ&|едующая строка эКраваУУ-....................28 CHRS 16 д6 СНК$:21 .... . R............................28 CHRS 22-АТ. УУУУУУн::..................................28 CHRS 23-TAB.. . ;::У:ШУУУ:»:....:>.....................28 3. Микропроцессор Z-80. . . . '.":УУ£У.:......................28 3.1. Введение. ..................£.........................28 3.2. Логический взгляД:Ш:2т8О..............................29 Регистр А :У . . лнУУУ::У.:;;УУУ.........................30 Регистры B^Ci,:J&y)2-:H, L '!1|:.........................30 .У’ Регистр SP :::. . ... Ji................................30 ::УУ::РеГИСТр PC............................................. 31 .УУУУУРёшстр F................................................. 32 РёййЙрЫ?1Х, IY...........................................32 Регайр-й-у-:!;:::*.... . .33 Регистр 1":£УУУУУУУ;УУ:............................ . . . 33 Ажтернативныййафйр регистров.............................. 33 153
3.3. Структура программ в машинных кодах..............34 4. Математика машинного программирования.................35 4.1. Шестнадцатиричное представление..................35 :.л::4&&&6л1оПЙ)Я двоичная арифметика...................37 р;р'4.3. Дополнительная арифметика.......................38 -4.4. Двоично-десятичная арифметика (BCD-арифмегика). 39 Ф4Л. ИнтеградЬЙое представление...................... 39 4.6. Предстанление с плавающей точкой.................41 4.7. ;Прёдётавление символьных переменных.............42 5. Система команд........................................42 5.1. Комавды: жданные.................................42 5.2. Группы;к6мавд. ’т-...............................43 NOPOO..............:................................44 EX DE,HL (ЕВ) . i ..................................45 ЕХХ (D9), EX.:AFjAT^(E8)............................46 IM2. . ".............................77 6. ДемонстрацйбййЫе примеры программ в кодах.............78 6.1. Запись машинных команд: в память компьютера. . . 79 6.2. Программы. .,....................................80 7. Монитор 1бк. . . . :i.....................100 7. 1. Системный взгляд на монитор....................100 Операционная система; (ОС)/;.................... 101 INITIALIZATION; (инициализация). ...:«:гф!г....... 101 EDITOR (редактор).........:....................... 101 KEYBOARD-INPUT............:....................... 102 KEYBOARD. . . .:................................. 102 PRINT-OUTPUT. . :i ............................... 102 Интерпретатор БЕЙСИК..........., ........... 102 Преобразователь выражений;....., Г л.............. 103 Программы переменных, • • Ф............ 104 Смешанные арифметические программы...;;;.......... 104 Калькулятор...........;. . . . ';:Ф;;ФФ: .• . . . . л. 104 Набор литер...........ф........................,.:Ч 105 72. Различные части программы монитора......* Ф: 106 0000-0007. RST 0000.................... ;;ФФ;;ФГ 196 0008-00OF. RST 0008.......=,.... ,:"й;ф:ф;=*=< . . 106 0010-0012. RST 0010. .... i й; i............... 106 0018-0024. RST 0018 и RST 0020;Ф1ФЯФ.............. 106 0028-002F. RST 0028............Ф.................. 106 0030-0037. RST 0030 BK-SPACE. Ф................... 106 0038-0052......................................... 106 154
0066-0070........................................ 106 0095-0204........................................ 106 0205-028D. Таблица клавиш. . . 107 028Е-02ВЕ. Программа KEY-SCAN. . . 1Q7 O2BF-O3B4. Подпрограмма KEYBOARD.:J;::i:::;107 03B5-03F7. Подпрограмма BEEPER. . ............ 107 03F8-046D. Программа команды ВЕЕР, у.......jl07 04АА-04С1.................................... .t;h:107 04C2-09F3...................................~;;J£:107 04С2-053Е. Программа SAVE-BYTES. . . 107 O53F-O555....................................... 108 0556-0604. Подпрограмма LOAD-BYTES;:>:.....108 SAVE-BYTES и LOAD-BYTES;:*; . V****:-;:....=ё . . 108 0605-075F...............*...........? . . . 108 0760-096F................................ ... 108 0970-09A0...................................... 108 09A1-09F3...............Г/....................... 108 09F4-0D4C. Программа PRINT-OUTPUfei*ii*......108 09F4-0A10..........................;i-............108 0A11-0A22. Таблица управляющих символов......108 0A23-0ADB........................................ 108 0ADC-0B02. Важная пфшрограМма$ТОЕЁ................109 0В03-0В23. Программа Определения текущей позиции. . 109 OB24-OBDA. Подпрограмма печати литеры PRINT-ANY. 109 0ВВ7-0ВС4П;...................................... 109 0BDB-0C09. Программа установит атрибутов..........109 0С0А-0С54. Подпрограмма печати сообщений И ключевых СЛОВ. . 109 0C55-0D4C. Подпрограмма’SCROLL.............’. 109 0D4D-0D6A.::::y:.<................................ ПО 0D6B-0EAB» Программа команды CLS...................ПО 0EAC-0F2B: ПрограЖЙ ДЛЯ, принтера..................ПО ОЕАС-ОЕС& Программа команды COPY...................ПО : OECD-OEFO'.TTranporpaMMajCOPY-BUFF........,. ПО ::0EF4-0F2B. Собственно программа принтер..........ПО £ЙР2Ст10А7. EDITOR. Чн*.............................ПО "WOHC, KEYBOARD-INPUT...............................ПО 1110^НВб:Подпрограмма ED-COPY......................НО 11В7-11СА1 Программа команды NEW...................ПО ПСВ-12А1. Программа INITIALISATION.................ПО 11CC-11CF. TV-экран становится белым. ....... 111 11D0-11D9. . . ...................................111 1 IDA-11EF. Программа RAM-CHECK...................Ill 155
11F0-11FF. . x -iii:;.......................... 1200-1218и==ШШРО^.............................. 121М13£:\::.................................... ..::1235ii!24^:.................................. Ш1244-127В. i;................................... 127С-1285. Ji-................................. 1286-12А1. :iiP................................ 12A2-15AB£i:................................... H:12A2.412Bfe!i.................................. 12Ё2^302....................................... 1303-1390. . ...................... . . . 1391-1554,.;Таййййа:Сообщений об ошибках....... 1555-15АЕ?:ЗаклюЧИТелгяая часть программы MAlOXECUTION. ji............................... 15AF-45C5. Начальнйя:|аблица данных канала. . . . 15C6-15D3. Начальная:таблица данных потока. . . . 151>М651. Программа обслуживания канала "К”. . . 1652-1654? Подпрограмма ONE-SPACE.............. 1655-1663;..................................... 1664-168EJnoflnpoipa*diiai:PixiNTERS......, . . 168F-169D. Подпрограмма сбора номера строки. . . 16DE-16AF. Подпрограмма RESERVE................ 16B0-16D8. Набор программ очистки.............. 16DB-16E5. Л . . J . =.;===.......... . . . . 16Е5-1792. Прбграммд команд CLOSE.a OPEN. . . 1793-1794. . . .......... ;. . . . 1795-1A47. Программа листинга/ ? . ............ 1855-18В5. Программа нечатистроки БЕЙСИКа. . . 190E-197F. Подпрограмма LINE-ADDR.............. 19B0-19D4. Подпрограмма NEXT-ONE?;............. 19D5-19FA. Подпрограмма исправления. .......... 1А1В. Подпрограмма печати: номера.. . . .?..... 1А48-1В16.Таблица команд. . ....... 1В17-1С00. Управляющая ' программа вШЙрпретатора БЕЙСИК......................................... 1С01-1С0С. Таблица класса команд........ 1C0D-1CDD. Программы классов команд. ..«нчнЦН- 1CDE-24FA. Программы команд......... 24FB-28B1. Вычислитель выражений???? ??:. . . . 24FB-24FE...................................... 24FF-2794.....................:=;i............. 2530-2534. Подпрограмма SYNTAX«Z............... 2535-257F. Программа SCREENS................... 111 111 111 111 111 111 111 111 112 112 112 112 112 112 112 112 112 112 112 113 ИЗ 113 113 113 ИЗ ИЗ 113 ИЗ 114 114 114 114 115 1:16 116 117 117 117 117 117 118 156
2580-2595. Программа ATTR. . ............118 2596-25АЕ. Таблица функций, не трёб^йгихаргументов. 118 25F8-2626. Программа RND. . . .'. . ... • • 118 2627-2634. Программа PI...............................118 2634-2667. Программа INKEYS. . . . А . . . 2756-2758. Используется калькулятор для:выполнения . специфических операций с одним или двумя операндами J118 2795-27AF. Таблица для преобразования кошм операций в 8. литералы калькулятора............... 27В0-27ВС. Таблица приоритетов операций. . . 27BD-28B1. Программа FN. . . .::а:::г..:........ 28B2-299F. Подпрограмма ЕООК^ЛЖ&Ш-х::.,. . . ., . . 2996-2А51. Подпрограмма STK-VARS. . . 2А52-2АВ0. Подпрограмма SLICING. . . . .: . . . 2АВ1-2АСВ. Подпрограмма STK-jSTORE. . . . G . . . 2AFF-2BF0. Программа команшЁЕТ;................. 2BF1-2C01. Подпрограмма STK-FETCfti;;i:;x.... •. 2С02-2С87. Программа команды DIM. .............. 2C88-2F9A........................ ..р.......... 2D22-2D27. Подпрограмма 5ТКгРЮ1Т. . ............ 2D28-2D2A. Подпрограмма STACKhA^.. Ih:.......... 2D2B-2D3A. Подпрограмма STACK-BC;^.............. 2DA2-2DC0. Подпрограмма FP-ito-BC.;;............ 2DD5-2DE2,.Подпрограмма FP-lp-A. ,:н;........... 2ОЕЗ-2Р9АГПодпрограмма PRlNTrFPr................ 73. Калькулятор^чгГ^Ьл:..*.....•.................. Упакованная форма' целых чисел от 0 до 65535.... Использование подпрограйммднйгора................... 8.1. Введение. ............iii:.................... 8.2. Шестнадцатиричныйввод. V...................... 83. Команда ВЕЕР. ....................... 8.4. Сохранение н зафузка; ^....................... 8.5. Элементы цвета. . . . £....................... : ...BORDER............... =:...................... :^:£PAPER............' ....................... ........................................ • • ............................. OVER. ........................... INVERSE. ........................... Постоянные и временные элементы цвета........... 8.6. Команда CLS и SCROLL.......................... CLS............................................. 118 118 118 118 118 118 118 118 119 119 119 119 119 119 119 119 120 120 128 129 129 129 130 132 132 133 133 134 134 134 134 135 135 135 157
CL-SCROLL. .kJ-1.......................... 136 8.7. Подпродаидонёчати........................ RST;($ii№. . :.............................' . . Шчатъстрок................................ чисеЩ................................. 8.8. Команды PLOT, DRAW и CIRCLE.............. Команда PLOT................................ :j;:: KoMaimaDRAW............................. ;:.ILDRikWiX,YA............................... Команда CIRCLE.............................. 8.9. POINT, ATTR иSCREENS..................... POINT. .......................... ATTRi^;:^:" . . . .......................... 8.10. PI,RND, INKEYS.......................... PI.. i...................................... RND........z-............................... INKEYl:;.ri-yp ? :j......................... 8.11. BREAK (работа с клавиатурой)............ 8.12. Заключение. . . . .................... 136 136 138 139 140 140 141 142 142 143 143 144 145 145 146 147 148 150 158

ВНИМАНИЕ! I Кроме того, что Вы держите в 1 РУках, л о 1 — ^рииииииииииии(ииияииивиижииииямиишвииниии1 , Mvkow мы имеем еше НЕИМОВЕРНОЕ количество литературы для "ZX- SPECTRUM" и других популярных компьютеров и электронных устройств. НАПРИМЕР: №: описании системных и игровых программ; р:| языки программирования; | Ж описания по сборке, нам ройке и ремонту различных типов игровых и полупрофессиональных компьютеров и телефонных серверов (АОН). широкий выбор элементной базы, готовые АОНы (гарантия 6 месяцев); игровые, системные, обучающие пррограммы для "ZX-SPECTRUM" на кассетах и дискетах (калсОая кас сета и дискета имеегсвое описание); РАССМОТРИМ предложения о сотрудничестве и оптовой закупке наших товаоов и услуг. 4