Абордаж
У моряков существует поверье, что корабль обычно ждет судьба, соответствующая его названию. Если бы создатели персонального компьютера "Корвет" вспомнили об этом, а еще о штормах, рифах, пиратах и, наконец, о Бермудском треугольнике, то, быть может, они отказались бы от столь романтического морского имени... Но что сделано, то сделано, отступать некуда, остается только продолжить развитие морской темы и попытаться рассказать о том, как "Корвет" был взят на...
В морской терминологии абордаж - это захват корабля в условиях непосредственного контакта с ним. О полуторагодичном непосредственном контакте с ПК "Корвет" и поведем мы повествование, демонстрируя попутно, что при овладении компьютерной техникой иной раз приходится применять пиратские приемчики.
Человек берет в руки перо по разным причинам: от избытка досуга, или большого ума, или желания прославиться... Ни к одной из перечисленных категорий автор причислить себя не может, но, роясь в исторических аналогиях, все-таки вычислил собратьев по перу. Это люди, заброшенные судьбой на необитаемый остров, доверявшие свои литературные труды запечатанной бутылке, морской волне и сетям случайного рыбака. Отчего делался этот жест отчаяния? Прежде всего из-за отсутствия возможности общения.
Ситуация с "Корветом" аналогична: попытка добыть какую-либо серьезную информацию об этой машине порождает иллюзию пребывания на необитаемом острове. В подобных условиях остается надеяться только на собственные силы, и хотелось бы верить, что эта статья внесет вклад в консолидацию людей, "выброшенных" с "Корвета" на необитаемый остров.
Итак, рассказ первый. Посвящается тем, кто, затаив дыхание и стиснув в руке клещи, согнулся над ящиком № 1 КУВТ "Корвет".
Что сулит вам грядущее мгновение? Через несколько минут на свет божий будут извлечены два килограмма сопроводительной документации, охапка проводов и с помощью атлетов-старшеклассников трансформаторная будка, обязательно покореженная от избыточного давления на саму себя. Как ни скромен покажется найденный клад, при наличии энтузиазма его достаточно, чтобы приступить к монтажу класса ЭВТ. Самый полезный (естественно, субъективный, основанный на личном опыте) совет для этого этапа работы - не обращайтесь за помощью к шефствующим организациям!
Наши школьные шефы - люди серьезные, и чем солиднее организация, тем с большим размахом будет оказываться помощь. Примерно месяц продлятся предварительные переговоры, сопровождаемые дружескими чаепитиями и клятвенными заверениями, после чего шефы исчезнут и появятся лишь месяца через полтора, торжественно демонстрируя смету, проект и другую документацию; затем исчезнут вновь, и если вы не проявите инициативу, то, вполне возможно, навсегда, так как козыри - смета и проект - у них на руках и любой вышестоящий инстанции их можно предъявить, показав, какая активная развернута шефская работа.
И если настанет тот день, когда порог будущего кабинета ЭВТ переступит шефская нога, то закончится он тем, что несколько серьезных мужчин, поползав вдоль стен с рулеткой, многозначительно посмотрят на часы и объявят об окончании рабочего дня. Удивительное умение соблюдать режим рабочего дня будет потрясать вас на протяжении двух-трех месяцев и трех-четырех бригад: плотников, электриков, штукатуров, маляров. Наконец в сверкающий кабинет будут внесены все еще не распечатанные ящики с соблазнительными надписями: KORVET made in USSR, где их и запрет директор вашей школы до приезда установочной бригады электронщиков. Если за это время вы не ушли с работы, у вас не сменились директор и шефы или у шефов не сменился бухгалтер, то в один прекрасный день вы станете таки счастливым обладателем компьютерного класса.
Мне довелось монтировать два кабинета ОИВТ за последние четыре года. Первый - КУВТ-86 по вышеизложенному сценарию с шефами, второй - КУВТ "Корвет" самостоятельно с отверткой и дрелью в руках, с помощью завхоза, обеспечивающего меня тремя ржавыми трубами для прокладки проводов, и учителя труда - владельца самодельной электросварки. Управились за 4 дня, причем (дело было в июне) на руках у меня был выпускной X класс и половина времени уделялась ему.
Рассказ второй, начинающийся после того, как повернут блестящий тумблер, помеченный заманчивой надписью ВКЛ...
Теперь повествование необходимо перевести на более технический уровень и попросить прощения за излишне беллетристическое вступление. Что происходит в этот торжественный момент? При правильном подключении блоков компьютера машина издает писк, начинает шуметь вентилятор и на мерцающем экране появляется загадочное заклинание ОПТС. Именно в эти томительные секунды выносится приговор. При получении правильных результатов тестирующей программой ОПТС из ПЗУ будет загружен Бейсик и можно начинать работать; возможен и вариант, когда вам скажут: "СИСТЕМНЫЙ БЛОК НЕИСПРАВЕН". Бывает еще хуже - в момент включения по экрану начинают гулять девятки и раздается мычание пьезодинамика или раздается писк, имитирующий сигнал спутника. Это заводской брак. Если говорить конкретно о комплекте, доставшемся автору, то в день торжественного спуска "Корвета" на воду свистнули, подмигнули и потухли навсегда три машины из тринадцати. Четвертая придурялась в течение месяца, извещая о том, что "СИСТЕМНЫЙ БЛОК НЕИСПРАВЕН", пока поиски в литературе не позволили сделать первое открытие: если одновременно со сбросом нажать клавишу F1, то программа ОПТС "обходится" и сразу включается Бейсик. Поступаю так ежедневно с дуркующей машиной, и она полтора года служит верой и правдой. Отсюда вывод, что, конечно, хорошо иметь в ПЗУ тестирующую программу, но нет гарантий, что она будет работать правильно; да и те байты, которые ушли на ее хранение, лучше бы отдать под ОЗУ.
Итак, в первый день не работали три машины. На работающих удалось вычислить, что такими темпами оставшихся десяти хватит на неполных четыре рабочих дня, но, к счастью, в расчеты вкралась ошибка и оставшиеся десять машин работают по сей день, хотя идеально работающими можно считать лишь три из них. Очень привередливы блоки питания, доставляющие много хлопот. Что касается дисплеев, то можно лишь завидовать тем, кому досталась "Электроника", и жалеть обладателей исковерканных телевизоров "Юность", изобретенных для того, чтобы окончательно испортить зрение подрастающего поколения.
И все-таки, подводя итог первым впечатлениям о "Корвете" и опираясь на опыт полуторагодичного абордажа этого компьютера, решусь утверждать, что "Корвет" на сегодняшний день является лучшим советским школьным компьютером, и если бы сборка его производилась на уровне конца XX в. или хотя бы середины...
Несколько практических советов:
- сразу же заклейте изоляцией контакты расширения на левом боку системного блока. Вряд ли вы найдете то, что можно было бы к нему подключить, а любознательные ученики не преминут ткнуть сюда металлическим предметом (хотя бы ручкой), после чего у вас станет одной машиной меньше;
- если не работают какие-либо клавиши, не поленитесь, разберите клавиатуру, подрегулируйте магниты, плотнее затяните винты - этот дефект легкоустраним;
- картинка на экране монитора "Юность" самопроизвольно "гуляет" влево-вправо, поэтому носите в кармане маленькую отвертку, чтобы в любой момент можно было прийти на помощь ученику, силящемуся прочитать спрятавшуюся букву.
Рассказ третий, о борьбе человека с языком.
Убедившись, что хотя бы одна машина работает, вы, разумеется, попытаетесь доказать самому себе, что ваши знания Бейсика вполне пригодны для покорения "Корвета". Обращение к наиболее стандартным функциям языка еще больше убедит вас в этом, и вы, хотя и заподозрите Бейсик-Корвет в малом быстродействии (особенно по отношению к графике), тем не менее будете получать искреннее удовольствие от работы, пока не соберетесь внести какие-либо исправления в программу. В этот момент забудьте о ваших выдающихся достижениях в области ИиВТ, возьмите руководство оператора ПТ.00552-01 34 01 и проведите три-четыре часа у машины, одновременно поглядывая на страницы 26-30 данного руководства, объясняющие принцип работы редактора строки. Эти часы сэкономят вам в дальнейшем недели работы. Осилив это мероприятие, вы, наверное, присоединитесь к моему "спасибо" авторам этого редактора, заставляющего работать на ощупь. Еще раз это "спасибо" вы повторите, когда увидите, что целую четверть надо заниматься с десятиклассниками не системами счисления, не алгоритмами и исполнителями, а правилами использования редактора строки. На БК, на "Агате", на "Ямахе" эта проблема решалась в основном на первом уроке и навсегда.
Когда у меня от объяснений правил редактирования отсох язык, до меня дошло, что этот этап обучения необходимо переложить на железное терпение машины, составив обучающе-объясняюще-контролирующую программу. Она приведена ниже - отнюдь не как эталон, а для тех, у кого нет времени или воображения на составление собственной.
10 IF PEEK(0)=243 THEN POKE &HFB29,255
20 CLS:PCLS:RELOC(0,0):LINE(0,0)-(511,255),,В
30 PSET(20,20):FOR X=20 TO 490 STEP 40:LINE-(X,INT(RND(7)*20+10)):NEXT:FOR Y=40 TO 200 STEP 30:LINE-(INT(RND(7)*30+450),Y):NEXT:FOR X=480 TO 20 STEP-40:LINE-(X,INT(RND(7)*20+196)):NEXT:FOR Y=200 TO 40 STEP-30:LINE-(INT(RND(7)*30+40),Y):NEXT:LINE-(20,20)
40 PAINT(2,2)
50 FOR I=1 ТОЗО:LINE(I*2+60,50-I)-(70+I*3,70+I),4,B:LINE(290-I,50+I)-(300+I,55+I*2),1,B:LINE (235-I*2,200-I*1.5)-(210+1,190-1*2),6,B:NEXT
60 PRINT CHR$(&O33);"3"
70 LOCATE13,4:PRINT "А К Ц И О Н Е Р Н О E О Б Щ Е С Т В О ":LOCATE 21,5:PRINT "П О Р Е М О Н Т У" :LOCATE7,6 :PRINT "Г А З О В Ы Х Ф О Н А Р Е Й И П А Т Е Ф О Н О B":LOCATE 19,8:PRINT " С В Е Т И Т Ь М А ":LОСАТЕ 19,10
80 PRINT "П Р Е Д С Т А В Л Я Е Т :
90 FOR I=1 ТО 6000:NEXT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT
100 RELOC(0,0):CLS:PCLS
110 GOTO 240
120 RELOC(0,0):CLS:PCLS:PRINT CHR$(&O33);"3"
130 FOR K=10 TO 60 STEP 5:LINE(50-K,50-K)-(350+K,150+K),,B:NEXT
140 LOCATE 17,13:PRINT "Р А У H Д":LOCATE 13,15:PRINT"И H Ф О P M A Т И К A":LOCATE 13,16:PRINT"< < О П E P A T О P > >"
150 PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT
160 DATA 4,5,5,1,0,5,8,3,50,80,156,87,34,98,3,80,4,5,190,200,60,76,10,25,10,5,4
170 RESTORE 160:FOR X=1 TO 9
180 READ A,W,S
190 POKE &HF715,A:POKE &HF716,W:POKE &HF71 7,S:BEEP
200 I$=INKEY$:IF I$="" THEN 210 ELSE 230
210 NEXT
220 RESTORE 160:GOTO 160
230 PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PCLS:PRINT CHR$(&H1B);"2":RETURN
240 N=1:I=0:GOSUB 120:INPUT "ВВЕДИТЕ ВАШУ ФАМИЛИЮ ИЛИ ИМЯ";А$
250 CLS:PRINT "ЗДРАВСТВУЙТЕ, "А$", СЕЙЧАС МЫ ПРОВЕРИМ ВАШИ ЗНАНИЯ":PRINТ "ПО ИНФОРМАТИКЕ":PRINT:PRINT:PRINT "НАЧНЕМ С КЛЮЧЕВЫХ КЛАВИШ":LINE(20,210)-(320,249),,BF
260 LINE(350,210)-(450,249),,BF:LINE(346,170)-(454,250),5,B:GOSUB 490
270 PRINT "KAKAЯ КЛАВИША ПОЗВОЛЯЕТ ОСУЩЕСТВИТЬ ЗАПУСК ПРОГРАММЫ":PRINT A$", НЕ ОШИБИТЕСЬ, НАЖМИТЕ ПРАВИЛЬНО. ЭТУ КЛАВИШУ":GOSUB 530
280 IF ASC(I$)=85 OR ASC(I$)=82 THEN I=I+1:PRINT "HAЧАЛО УДАЧНОЕ, ПОСМОТРИМ,ЧТО БУДЕТ ДАЛЬШЕ" ELSE PRINT "НЕВЕРНО, ЭТО КЛАВИША F5. НЕ ОТЧАИВАЙТЕСЬ, ПЕРВЫЙ БЛИН ВСЕГДА КОМОМ"
290 GOSUB 490:INPUT "НАПЕЧАТАЙТЕ КОМАНДУ, ХРАНЯЩУЮСЯ В КЛАВИШЕ F5 И НАЖМИТЕ ВОЗВРАТ КАРЕТКИ";L$
300 IF L$="RUN" THEN I=I+1:PRINT "BЫ, "А$", ПОДАЕТЕ НАДЕЖДЫ. ВАШ ОТВЕТ ПРАВИЛЬНЫЙ" ELSE PRINT "BOT И НЕ УГАДАЛИ, "А$", ЭТО КОМАНДА 'RUN'"
310 GOSUB 490:PRINT "А ТЕПЕРЬ НАЖМИТЕ КЛАВИШУ, С ПОМОЩЬЮ КОТОРОЙ ВЫЗЫВАЕТСЯ РЕДАКТОР СТРОКИ":GOSUB 530
320 IF ASC(I$)=69 OR ASC(I$)=68 THEN I=I+1:PRINT "ОТЛИЧНО, "A$", ПРОДОЛЖАЙТЕ В ТОМ ЖЕ ДУХЕ!!!" ELSE PRINT "УСПОКОЙТЕСЬ И СОБЕРИТЕСЬ С МЫСЛЯМИ, "А$", НУЖНО БЫЛО НАЖАТЬ НА F3"
330 GOSUB 490:PRINT "1.LIST":PRINT "2.RUN":PRINT "3.CLS":PRINT"4.EDIT":PRINT "5 RENUM":PRINT "KAKAHЯ ИЗ ПЕРЕЧИСЛЕННЫX КОМАНД ЯВЛЯЕТСЯ КОМАНДОЙ РЕДАКТОРА СТРОКИ?":PRINT "HAЖMИ НА КЛАВИШУ С ЦИФРОЙ СООТВЕТСТВУЮЩЕЙ ПРАВИЛЬНОМУ ВАРИАНТУ ОТВЕТА":GOSUB 530
340 IF I$="4" THEN I=I+1:PRINT "Я С ВАМИ ПОЛНОСТЬЮ СОГЛАСЕН, "A$ ELSE PRINT "ОЙ,МАМА, НА ЧТО ВЫ ЖМЕТЕ??? НАДО НА '4'"
350 GOSUB 490:INPUT "НАПЕЧАТАЙТЕ КОМАНДУ, ПОЗВОЛЯЮЩУЮ ВЫВЕСТИ НА ЭКРАН ТЕКСТ ПОГРАММЫ И НАЖМИТЕ ВОЗВРАТ КАРЕТКИ"
360 IF I$="LIST" OR I$="LIST " THEN I=I+1:PRINT "КОНЕЧНО,"A$", Я ТОГО ЖЕ МНЕНИЯ" ELSE PRINT "СОВСЕМ ДАЖЕ НЕ "I$", А КОМАНДА 'LIST'"
370 PRINT "A ТЕПЕРЬ НАЖМИТЕ НА ТУ КЛАВИШУ, В КОТОРОЙ ЭТА КОМАНДА ХРАНИТСЯ":GOSUB 530
380 IF ASC(I$)=76 OR ASC(I$)=73 THEN PRINT "ЧУДНЕНЬКО!!! В ТАКИЕ ГОДЫ И ТАКИЕ ПОЗНАНИЯ!!!":I=I+1 ELSE PRINT "HET, Я БОЛЬШЕ НЕ МОГУ ТАК!!!НЕ ИЗДЕВАЙТЕСЬ НАДО МНОЙ. ЭТО ЖЕ КЛАВИША F4"
390 GOSUB 490:PRINT "А ЕСЛИ НУЖНО ВСЕ СТЕРЕТЬ С ЭКРАНА??? НАЖМИТЕ ЭТУ КЛАВИШУ!!!":GOSUB 530
400 IF ASC(I$)=67 OR ASC(I$)=76 THEN I=I+1:PRINT "ПPEKPACHO, "A$"!!!" ELSE PRINT"У ВАС, НАВЕРНОЕ, ПЛОХОЕ ЗРЕНИЕ... ВЫ ПРОМАХНУЛИСЬ МИМО КЛАВИШИ F1"
410 GOSUB 490:PRINT "И3 ПРИВЕДЕННЫХ НИЖЕ ВАРИАНТОВ ВЫБЕРИТЕ ТОТ, В КОТОРОМ СТОИТ КОМАНДА ОЧИСТКИ ЭКРАНА И НАЖМИТЕ КЛАВИШУ С СООТВЕТСТВУЮЩЕЙ ЦИФРОЙ":PRINT "1. PRINT":PRINT "2. EDIT":PRINT "3. RENUM":PRINT "4. LIST":PRINT "5. CLS":GOSUB 530
420 IF I$="5" THEN I=I+1:PRINT "BECbMA PAЗУМН0!!!" ELSE PRINT "ДА НЕТ ЖЕ, HEТ!!! ЭТО КОМАНДА 'CLS'"
430 GOSUB 490:PRINT "И НА КОНЕЦ, НАЖМИТЕ КЛАВИШУ, КОТОРАЯ ОСВОБОДИТ ВАС ОТ НУМЕРАЦИИ СТРОК":GOSUB 530
440 IF ASC(I$)=65 OR ASC(I$)=85 THEN I=I+1:PRINT "ФЕНОМЕНАЛЬНО, ВЫ ЯВНО ПРЕТЕНДУЕТЕ НА '5'":ELSE PRINT "АЙ-Я-ЯЙ!!! КАКАЯ ДОСАДА... ЭТО ЖЕ КЛЮЧ F8 .НАВЕРНОЕ ВЫ ЗАБЫЛИ ОДНОВРЕМЕННО НА ЖАТЬ 'РГ'"
450 GOSUB 490:PRINT "KAKУЮ ИЗ ЭТИХ КОМАНД ИСПОЛЬЗУЮТ ДЛЯ ПЕРЕНУМЕРАЦИИ СТРОК? ВЫБЕРИ ПРАВИЛЬНЫЙ ВАРИАНТ ОТВЕТА. ":PRINT "1. RENUM":PRINT "2. AUTO": PRINT "3. LOAD":PRINT "4. PCLS":PRINT "5. CONT":GOSUB 530
460 IF I$="1" THEN I=I+1:PRINT "КОНЕЧНО ЖE ЭТО КОМАНДА 'RENUM'" ELSE PRINT "СТЫДНО, "A$", ДАЖЕ ДВОЕЧНИКИ ЗНАЮТ, ЧТО ЭТО КОМАНДА 'RENUM'"
470 GOSUB 490:U=I/2:LOCATE 25,4:PRINT "ИTAК, "А$:LOCATE18,7:PRINT "ВЫ ПОЛУЧИЛИ ОЦЕНКУ "U
480 GOSUB 490:IF U>=4 THEN PRINT "ТАКИМ ОБРАЗОМ ВЫ ВЫХОДИТЕ В СЛЕДУЮЩИЙ ТУР " :GOSUB 490:N=2:GOSUB 120:GOTO 540 ELSE PRINT "ВАМ ПРИДЕТСЯ ПЕРЕЭКЗАМЕНОВАТВСЯ, В СЛЕДУЮЩИЙ ТУР ВЫ ПРОЙДЕТЕ С ОЦЕНКОЙ НЕ МЕНЬШЕЙ '4'":GOSUB 490:GOTO 110
490 FOR К=1 TO 19:I$=INKEY$:NEXT
500 LOCATE 5,15:PRINT "ДЛЯ ПРОДОЛЖЕНИЯ НА ЖМИТЕ 'ПРОБЕЛ'"
510 I$=INKEY$:IF I$="" THEN 510
520 IF I$=" " THEN CLS:LOCATE 45,12:PRINТ "ВАША ОЦЕНКА":LOCATE 49,15:PRINT I/2:LOCATE 1,1:RETURN ELSE 510
530 I$=INKEY$:IF I$="" THEN 530 ELSE RETURN
540 I=0:LOCATE 2,12:PRINT "А ТЕПЕРЬ МЫ РАЗБЕРЕМСЯ С КЛАВИШАМИ РЕДАКТИРОВАНИЯ!!! ВЫ ГОТОВЫ, "А$"? НУ, ТОГДА ВПЕРЕД!!!":LINE(20,210)-(320,249),,BF:LINE(350,210)-(450,249),,BF:LINE(346,170)-(454,250),3,В
550 GOSUB 490:INPUT "ВЫ НАЖАЛИ НА КЛАВИШУ F3 И НА ЭКРАНЕ ПОЯВИЛОСЬ СЛОВО 'EDIT'. ЧТО НЕОБХОДИМО ДОПЕЧАТАТЬ ПОСЛЕ ЭТОГО СЛОВА, ЧТОБЫ ОТРЕДАКТИРОВАТЬ ДВАДЦАТУЮ СТРОКУ? НАПЕЧАТАЙТЕ И НАЖМИТЕ ВОЗВРАТ КАРЕТКИ";I$
560 IF I$="20" THEN I=I+1:PRINT "ЖЕЛАЮ ВАМ, "А$“, ТАКЖЕ УДАЧНО ОТВЕТИТЬ НА ОСТАЛЬНЫЕ ВОПРОСЫ" ELSE PRINT "НУЖНО БЫЛО НАПЕЧАТАТЬ ПРОСТО 20"
570 GOSUB 490:PRINT "BMECTO КОМАНДЫ 'INPUТ' ВЫ, ПО ОШИБКЕ НАПЕЧАТАЛИ 'INRUT'... НАЙДЕТ ЛИ ЭВМ САМА ВАШУ ОШИБКУ (ДА-1/НЕТ-0)":GOSUB 530
580 IF I$="1" THEN I=I+1:PRINT "МОЛОДЕЦ, "А$ ELSE PRINT "БУДЬ ВНИМАТЕЛЬНЕЙ, ТАКИХ ОШИБОК МАШИНА НЕ ПРОЩАЕТ!!!"
590 GOSUB 490:PRINT "B ТЕКСТЕ 'СООБАКА БАСКЕРВИЛЕЙ ЖИВЕТ НА БОЛОТЕ' НУЖНО УДАЛИТЬ ВТОРОЕ 'О' В СЛОВЕ 'СОБАКА '... МОЖНО ЛИ ЭТО СДЕЛАТЬ С ПОМОШЬЮ КЛАВИШИ 'СТРН' ?(ДА-1/НЕТ-0)":GOSUB 530
600 IF I$="0" THEN I=I+1:PRINT "ПРАВЛЬНО, НИ В КОЕМ СЛУЧАЕ!!!" ELSE PRINT "НИ В КОЕМ СЛУЧАЕ, СОТРЕШЬ ВЕСЬ ТЕКСТ!!!"
610 GOSUB 490:PRINT "РЕДАКТИРУЯ СТРОКУ ВЫ СЛУЧАЙНО ОКОНЧАТЕЛЬНО ЕЕ ИСПОРТИЛИ... НАЖМИТЕ КЛАВИШУ, П03В0ЛЯЮЩУЮ ОТКАЗАТЬСЯ ОТ РЕДАКТИРОВАНИЯ":GOSUB 530
620 IF ASC(I$)=11 THEN I=I+1:PRINT "ХОРОШО, ИМЕННО ТАК!!!" ELSE PRINT "ЗАПОМНИ!!! ЭТО КЛАВИША |<--- СПРАВА, ВНИЗУ"
630 GOSUB 490:PRINT "ПОЕХАЛИ ДАЛЬШЕ! НАЖМИТЕ КЛАВИШУ, ПОЗВОЛЯЮЩУЮ ЗАМЕНИТЬ ОДИН ЗНАК ДРУГИМ":GOSUB 530
640 IF ASC(I$)=16 THEN I=I+1:PRINT "HУ, НАВЕРНОЕ, ВЫ ВООБЩЕ ВСЕ ЗНАЕТЕ!!!" ELSE PRINT "ЭХ!!! КТО ВАС, "А$", ТОЛЬК О УЧИЛ!!! ЭТО КЛАВИША 'МЕНЮ'"
650 GOSUB 490:PRINT "А ТЕПЕРЬ СКАЖИТЕ: КЛАВИША 'ИЗ'":PRINT "1. УДАЛЯЕТ ОДИН ЗНАК":PRINT"2. ВСТАВЛЯЕТ 3HAK":PRINT "3. УДАЛЯЕТ ВСЮ СТРОКУ":PRINT"4. ВКЛЮЧАЕТ РЕЖИМ ВСТАВКИ":PRINT "5. ВЫКЛЮЧАЕТ РЕЖИМ ВСТАВКИ":PRINT "ВЫБЕРИТЕ ПРАВИЛЬНЫЙ ВАРИАНТ ОТВЕТА":GOSUB 530
660 IF I$="1" THEN I=I+1:PRINT "ДA, КОНЕЧНО. АХ, КАК ВЫ,"А$", ТАЛАНТЛИВЫ" ELSE PRINT "НУ, ДРУЖИЩЕ, ТАК ДЕЛО ДАЛЬШЕ НЕ ПОЙДЕТ! ПРАВИЛЬНЫЙ ВАРИАНТ БЫЛ '1'"
670 GOSUB 490:PRINT "ДОПУСТИМ В ТЕКСТЕ:'РЕДКТИРОВАНИЕ-СЛОЖНЫЙ ППРОЦЕСС' НУЖНО ВСТАВИТЬ БУКВУ 'А' В СЛОВЕ 'РЕАКТИРОВАНИЕ', А ПОТОМ УБРАТЬ В СЛОВЕ 'ППРОЦЕСС' ЛИШНЕЕ 'П'":PRINT "KAKУЮ КЛАВИШУ ВЫ НАЖМЕТЕ ПЕРЕД ТЕМ, КАК ВСТАВИТЬ 'А'? НАЖМИТЕ EE!":GOSUB 530
680 IF ASC(I$)=28 THEN I=I+1:PRINT "ОТЛИЧНО! ПОЛУЧИТСЯ ФРАЗА 'РЕДАКТИРОВАНИЕ СЛОЖНЫЙ ППРОЦЕСС' ":GOSUB 490:PRINT "HO КАКУЮ КЛАВИШУ ВЫ НАЖМЕТЕ ПОСЛЕ ТОГО, КАК ВСТАВИТЕ 'А'. НАЖМИТЕ EE!!!" ELSE PRINT "HEBEPHO! ЭТО КЛАВИША 'ВЗ'... ДАВАЙТЕ ПОВТОРИМ ЭТОТ ВОПРОС.":GOTO 670
690 GOSUB 530:IF ASC(I$)=27 THEN I=I+1:PRINT "ВЫ ОПЯТЬ ПРАВЫ, "А$”, ОСТАЛОСЬ ТОЛЬКО НАЖАТЬ КЛАВИШУ, КОТОРАЯ ПОЗВОЛИТ УНИЧТОЖИТЬ ОДНО 'П' В СЛОВЕ 'ППРОЦЕСС'. НАЖМИТЕ ЕЕ!":GOTO 710 ELSE PRINT "БУДЬТЕ ВНИМАТЕЛЬНЕЙ! ЧТОБЫ ПРОДОЛЖИТЬ РЕДАКТИРОВАНИЕ СТРОКИ,"
700 PRINT "НУЖНО ВЫЙТИ ИЗ РЕЖИМА 'ВСТАВКИ'. ДЛЯ ЭТОГО НУЖНО НАЖАТЬ КЛАВИШУ ' РФ'. А ТЕПЕРЬ НАЖМИТЕ КЛАВИШУ, КОТОРАЯ ПОЗВОЛИТ УНИЧТОЖИТЬ ЛИШНЕЕ П' В СЛОВЕ 'ППРОЦЕСС' "
710 GOSUB 530:IF ASC(I$)=29 THEN I=I+1:PRINT "ВОСТОРГ!!! БУРНЫЕ АПЛОДИСМЕНТЫ!!! СТРОКА OTPEДAKTИPOBAHA" ELSE PRINT "HИ КУДА НЕ ГОДИТСЯ. ОСТАВАЛОСЬ ТОЛЬКО НАЖАТЬ НА КЛАВИШУ 'ИЗ'"
720 GOSUB 490:PRINT TAB(22) "ВНИМАНИЕ!!!!!!":PRINT "BAC АТАКУЕТ КОМПЬЮТЕРНЫЙ ВИРУС":PRINT "ПОБЕДИТЬ ЕГО ВЫ СМОЖЕТЕ СТРЕЛЯЯ ИЗ БЛАСТЕРА, КУРКОМ КОТОРОГО ЯВЛЯЕТСЯ КЛАВИША ПРОСМОТРА СТРОКИ ПРИ РЕДАКТИРОВАНИИ!!!":GOSUB 490
730 CLS:PCLS
740 G=0
750 A=10
760 FOR N=1 TO 200 STEP 5
770 CLS
780 A=A+10:B=A+20
790 J=10:Q=30
800 LINE (A,J)-(B,Q),7,В
810 IF G>0 THEN 850
820 I$=INKEY$:IF I$="" THEN 850
830 IF ASC(I$)<>30 THEN 850 ELSE 950
840 IF (L>=10 AND D>=30 OR L>10 AND D>10 OR L>30 AND D<30) AND (A<<=256 AND B>=256) THEN GOSUB 880:GOTO 730
850 NEXT N
860 GOTO 730
870 REM ----ВЫСТРЕЛ----
880 FOR A=230 TO 280 STEP 10
390 FOR B=5 TO 20 STEP 5
900 BEEP
910 LINE (A,B)-(256,30)
920 NEXT В
930 NEXT A
940 GOTO 1040
950 REM ----ВЫСТРЕЛ-----
960 L=256
970 FOR K=1 TO 48 STEP 2
980 G=G+l
990 D=L-5
1000 L=L-10
1010 LINE (256,L)-(256,D)
1020 NEXT К
1030 GOTO 840
1040 M=(I+1)/2: CLS:PCLS:PRINT TAB(25) "И T A K !!!":PRINT A$", ВЫ ПРОШЛИ ВТОРОЙ ТУР НАБРАВ " М" БАЛЛОВ":IF М>4 THEN FRINT:PRINT "ПОЗДРАВЛЯЮ, ВЫ СТАНОВИТЕСЬ ХОРОШИМ ОПЕРАТОРОМ ЭВМ!!!" ELSE PRINT "ПРИДЕТСЯ ПЕРЕЭКЗАМЕНОВАТЬСЯ!!!":GOSUB490:1=0:N=2:GOSUB120:GOTO 540
1050 END
1060 REM А.Б.ШУКШЕНЦЕВ (п/п 33497-"Ш")
Итак, преодолев неожиданное препятствие, вы снова со спокойной душой занимаетесь программированием на Бейсике, но в один прекрасный день, переслав с центральной машины на ученическую завершенную накануне программу, обнаруживаете, что она не работает. Превращает вполне разумные команды в полуцензурный набор букв. Проверка на учительском ПК8020 показывает, что программа в порядке и работает без ошибок.
В чем дело? Разработчики "Корвета" подложили нам еще одну оригинальную хрюшку: Бейсик, зашитый в ПЗУ ПК8010, и Бейсик, загружаемый с диска на ПК8020, разные, хотя и очень похожие языки, так что команды DRAW, WIDTH и все средства работы с файлами вам необходимо забыть, если вы хотите, чтобы программы работали на ученических машинах. Вообще-то об этом сказано в руководстве по Бейсику, прилагаемом к комплекту, и в перечне команд некоторые из них помечены звездочкой - запретом использовать на ПК8010, однако повторение в статье избранных мест из документации представляется уместным, поскольку литература, прилагаемая ко всем отечественным комплектам ВТ, имеет необъятные размеры, изобилует ошибками и туманными полунамеками.
Вообще-то такое положение дел с документацией по вычислительной технике приведет к тому, что скоро придется выпускать руководство по изучению руководства. К сожалению, наиболее подходящая единица измерения количества документации - килограмм. В данном аспекте КУВТ "Корвет" выгодно отличается от КУВТ-86, где масса документации втрое больше. Увы, это преимущество достигнуто частично за счет тривиальной нехватки нужных страниц. Например, увлекшись описанием работы с принтером, вы внезапно оказываетесь в описании НМЛ и в итоге не понимаете ни того, ни другого. Единственная книжка, написанная доходчиво и позволяющая понять все сразу,- описание принтера "Epson", составленное добросовестными японцами, допускающими ошибки в русском языке, но не в технических деталях. Все другие пособия требуют от программиста ничему не верить на слово и немедленно искать подтверждения прочитанному непосредственно на ЭВМ.
Продолжим, глядя одним глазом в руководство, а другим на дисплей, покорять коварный Бейсик-Корвет. Поглядывая на соблазнительный принтер "Epson" или его индийский аналог "Ravi", вы, конечно, попытаетесь что-нибудь напечатать. И тут нервные снова схватятся за сердце, а веселые рассмеются: вместо русского текста японская машинка выдаст непереводимую игру букв. Стократное перечитывание описания к успеху не приблизит, но разглядывание таблицы с кодами русских символов натолкнет на мысль, что должна быть программа-переводчик. Дело в том, что коды КОИ8 и ASCII совпадают до тех пор, пока не начался русский текст. Посмотрев в каталог системного диска, вы легко обнаружите нужную вам программу: она будет называться EPSON.COM, PAVIM.COM или PRINTER.COM в зависимости от того, какой у вас принтер. После выполнения этой программы принтер становится послушным и не раз порадует вас своими способностями. Достаточно легко научить "Epson" выбирать нужный шрифт из около 200 возможных и, когда эта задача будет освоена,- еще и рисовать. Ниже предложены две программы: первая позволяет выбрать нужный шрифт, а вторая - скопировать на бумагу любую картинку с экрана, не превышающую по ширине 80 точек (это ограничение легко устранить, если переложить алгоритм на другой язык программирования, например Форт, входящий в комплект поставки программного обеспечения "Корвета"); перед ее использованием нельзя выполнить программу EPSON.COM и ей аналогичные.
10 DATA S,U,P,E,R,P,A,G,E,R,
20 PRINT CHR$(27);"3":RELOC(0,0):Y=3:CLS:FOR X=21 TO 40 STEP 2:Y=Y+1:POKE &HF716,X:BEEP:READ P$:LOCATE X,Y:FRINT F$:LINE(X*8-20,Y*16-20)-(X*8,Y*16),,B:NEXT:FOR I=1 T0 200:NEXT:PRINT CHR$(27);"2"
30 CLS:PCLS
40 PRINT" ВКЛЮЧИТЕ ПРИНТЕР!!!"
50 PRINT "ВЫБЕРИТЕ НЕОБХОДИМЫЙ ВАМ ИНТЕРВАЛ МЕЖДУ СТРОКАМИ"
60 PRINT TAB(20) "МАЛЕНЬКИЙ_____1-10"
70 PRINT TAB(20) "ЭКОНОМНЫЙ_____10-20
80 PRINT TAB(20) "НОРМАЛЬНЫЙ____20-40"
90 PRINT TAB(20) "БОЛЬШОЙ_______40-70"
100 PRINT " И Т.Д, чем дальше, тем больше"
110 INPUT В
120 LPRINT CHR$(27);"3";CHR$(B)
130 PRINT "HE ЖЕЛАЕТЕ ЛИ ПЕЧАТАТЬ КУРСИВОМ ?":GOSUB 260:IF В=1 THEN А-А+64
140 PRINT "БУДЕМ ПОДЧЕРКИВАТЬ ?":GOSUB 260:IF В=1 THEN А=А+128
150 PRINT "BAM НРАВИТСЯ ШРИФТ 'ПАЙКА' ?" :GOSUB 260:IF В=1 THEN 170
160 PRINT "ТОГДA МОЖЕТ БЫТЬ 'ЭЛИТ' ?":GOSUB 260:IF В=1 THEN А=А+1:В=0
170 PRINT "ШРИФТ ПРОПОРЦИОНАЛЬНЫЙ ?":GOSUB 260:IF В=1 THEN А=А+2
180 PRINT "ШРИФТ УПЛОТНЕННЫЙ ?":GOSUB 260:IF В=1 THEN А=А+4
190 PRINT "ШРИФТ ВЫДЕЛЕННЫЙ ?":GOSUB 260:IF В=1 THEN А=А+8
200 PRINT "ШРИФТ ДВУУДАРНЫЙ ?":GOSUB 260:IF В=1 THEN А=А+16
210 PRINT "ШРИФТ С ДВОЙНОЙ ШИРИНОЙ ?":GOSUB 260:IF В=1 THEN А=А+32
220 LPRINT CHR$(27);"!";CHR$(А)
230 PRINT "МОЖЕТ НУЖНЫ БУКВЫ ПОВЫШЕ ?":GOSUB260:IF В=1 THEN I=1 ELSE I=0
240 LPRINT CHR$(27);"w";CHR$(I)
242 PRINT "БУДЕМ УСТАНАВЛИВАТЬ ЛЕВОЕ ПОЛE ?":GOSUB 260:IF B=1 THEN INPUT "СКОЛЬКО СИМВОЛОВ В ЛЕВОМ ПОЛЕ";A:LPRINT CHR$(27);"l";CHR$(А)
244 PRINT "БУДЕМ УСТАНАВЛИВАТЬ ПРАВОЕ ПОЛЕ ?":GOSUB 260:IF В=1 THEN INPUТ "СКОЛЬКО СИМВОЛОВ ДО ПРАВОГО ПОЛЯ";А:LPRINT CHR$(27);"Q";CHR$(А)
250 END
260 B=0:I$=INKEY$:IF I$="" THEN260 ELSE IF I$="D" OR I$="Y" THEN B=1
270 RETURN
5 REM ПРОГРАММА РАСПЕЧАТКИ РИСУНКА НА ЕPSON FX-800
10 CLS:Х=60:Y=40:PSET(X,Y):LOCATE10,3:РRINT"<< КУРСОР":FOR I=1 TO 1500:NEXT:CLS:PRINT "УСТАНОВИТЕ КУРСОР НА ЛЕВУЮ ВЕРХНЮЮ ГРАНИЦУ РИСУНКА И НАЖМИТЕ ВЗ "
20 I$=INKEY$:IF I$="" THEN 20
30 IF ASC(I$)=8 THEN A=-8:В=0
40 IF ASC(I$)=24 THEN A=8:B=0
50 IF ASC(I$)=25 THEN B=-8:A=0
60 IF ASC(1$)=26 THEN B=8:A=0
70 IF I$=" " THEN 140
80 IF ASC(I$)=28 THEN 130
90 PSET(X,Y),0
100 X=X+A:Y=Y+B
110 PSET(X,Y),7
120 GOTO 20
130 FOR I=1 TO 10:BEEP:NEXT:AX=X:AY=Y:CLS:PRINT "УСТАНОВИТЕ КУРСОР НА ПРАВУЮ НИЖНЮЮ ГРАНИЦУ РИСУНКА И НАЖМИТЕ ПРОБЕЛ !!!":GOTO 20
140 PSET(X,Y),0:FOR I=1 TO 10:BEEP:NEXT:BX=X:BY=Y
150 N=INT((BX-AX)/256):N0=((BX-AX)/256-N)*256
160 CLS:PRINT "X= Y= A="
170 LPRINT CHR$(27);"A";CHR$(4);
180 FOR Y=AY TO BY-8 STEP 8:LPRINT CHR$(27);"K";CHR$(N0);CHR$(N);
190 FOR X=AX TO BX:FOR Z=0 TO 7 IF POINTC(X,Y+Z)>>THEN A=A+2^(7-Z):NEXT Z ELSE NEXT Z
200 LPRINT CHR$(A);:LOCATE 3,1:PRINT X:LOCATE 10,1:PRINT Y:LOCATE 17,1:PRINT A" ":A=0:NEXT X:LPRINT:NEXT Y
210 REM ШУКШЕНЦЕВ А.Б. 193-59-57
Шаг за шагом вы продвигаетесь от изучения наиболее популярных команд Бейсика к командам, специфичным для "Корвета", а их достаточно много. Тот факт, что в этом компьютере реализованы раздельные АЦЗУ и ГЗУ (алфавитно-цифровой и графический экраны), обязывает обзавестись отдельной командой PCLS для удаления с экрана графической информации, что, как вы убедитесь, весьма удобно. Много времени было положено, чтобы укротить весьма своевольно ведущую себя команду LUT. Проблема в том, что у нее слишком много возможностей. С ее помощью можно сменить цвет изображения, цвет шрифта, более того, цвет рисунка можно сравнять с цветом фона и "спрятать" его на время, чтобы "зажечь" в нужный момент.
Очень соблазнительно выглядит в описании команда SCREEN, которая якобы позволяет запомнить целый экран монохромной графической информации. Увидев, что команда подобных функций не выполняет и вообще никак не влияет на работу машины, обратитесь к программе DEMON.BAS, входящей в комплект поставки. В седьмом разделе этой программы авторы еще раз объяснят вам, как пользоваться оператором SCREEN, и порекомендуют сменить ПЗУ, если команда все-таки не работает. Одним словом, не принимайте эту команду близко к сердцу; все, что она могла бы сделать при "нужном ПЗУ", можно сделать и без нее с помощью LUT, некоторые возможности которой иллюстрирует следующая программа.
10 CLS:PCLS:LOCATE,,0
20 FOR I=1 ТО 8:IF I=8 THEN C=0 ELSE C=I
30 LOCATE 24,3:PRINT "РИСУЮ ЦВЕТОМ "С
40 LINE(40+I*10,40+I*10)-(480-I*10,220-I*10),C,BF:NEXT
50 REM КОНЕЦ ПРОГРАММЫ РИСОВАНИЯ РАМОК, ДАЛЕЕ ВНИМАТЕЛЬНЕЙ, ПЕРЕХОДИМ К ОСВОЕНИЮ ОПЕРАТОРА 'LUT'
60 DEFINT X:DIM X(31):REM ОБЪЯВЛЕН МАССИВ ТАБЛИЦЫ ЦВЕТОВ
70 FOR I=0 TO 7:Х(I)=I:NEXT:FOR I=8 TO 15:Х(I)=15:NEXT:REM СТАНДАРТНОЕ ПРОГРАММИРОВАНИЕ ТАБЛИЦЫ LUT
80 LOCATE 10,3:PRINT "HAЖMИTE НА КЛАВИШУ С НОМЕРОМ ЦВЕТА, КОТОРЫЙ":LOCATE 20,4:PRINT "BЫ ХОТИТЕ ЗАМАСКИРОВАТЬ."
90 LOCATE 2,14:PRINT "КЛАВИША '8' - ПЕРЕХОД К ПРОГРАММЕ РАЗМАСКИРОВКИ"
100 I$=INKEY$:IF I$="" THEN 100 ELSE N=VAL(I$)
110 IF N>7 THEN 140
120 X(N)=0:LUT X(0):GOTO 100:REM ПЕРЕПОГРАММИРОВАНИЕ ЦВЕТА N В ЦВЕТ 0 (В ФОНОВЫЙ ЦВЕТ)
130 GOTO 100
140 LOCATE 10,3:PRINT "НАЖМИТЕ НА КЛАВИШУ С НОМЕРОМ ЦВЕТА, КОТОРЫЙ ":LOCATE 20,4:PRINT "BЫ ХОТИТЕ РАЗМАСКИРОВАТЬ.""
150 LOCATE 2,14:PRINT "КЛАВИША '8' - ВОССТАНОВЛЕНИЕ ТАБЛИЦЫ ЦВЕТОВ И ОКОНЧАНИЕ РАБОТЫ"
160 I$=INKEY$:IF I$="" THEN 160 ELSE N=VAL(I$)
170 IF N<8 THEN X(N)=N:LUT X(0) ELSE 200:REM ПЕРЕПРОГРАММИРОВАНИЕ ЦВЕТА N В СТАНДАРТНЫЙ
180 GOTO 160
190 REM ВСЯ ХИТРОСТЬ ЗАКЛЮЧАЕТСЯ В ТОМ, ЧТО ДЛЯ ОТРАЖЕНИЯ РЕЗУЛЬТАТОВ ПЕРЕПРОГРАММИРОВАНИЯ НЕОБХОДИМО ВЫПОЛНИТЬ ИМЕННО LUTX(0), В ПРОТИВНОМ СЛУЧАЕ РЕЗУЛЬТАТ ПРОГНОЗИРУЕТСЯ С ТРУДОМ, ИБО НЕ ВСЕ ВОЗМОЖНОСТИ КОМАНДЫ ЗДЕСЬ ПОКАЗАНЫ
200 CLS:FOR I=0 TO 7:Х(I)=0:NEXT:LUT X(0):FOR J=1 T0 20:FOR I=1 TO 8:X(1-1)=0:X(I) = I:LUT X(0):NEX TI,J:LOCATE 29,9:PRINT "'GOOD BYE !":REM БЕСПЛАТНОЕ ИЛЛЮСТРИРУЕЩЕЕ ПРИЛОЖЕНИЕ
210 FOR I=8 TO 15:X(I)=15:NEXT:FOR I=0 TO 7:X(I)=I:NEXT:LUTX(0):REM ВЫПОЛНИТЬ КОМАНДУ ПО ВОССТАНОВЛЕНИЮ ТАБЛИЦЫ ЦВЕТОВ
Люди, избалованные "Ямахами" и увидевшие внешнее сходство "Корвета" с ними, покопаются в описании в тщетных поисках команды PLAY. Вместо этого можно предложить им внимательнее изучить описание системной страницы памяти, из которого видно, что, записывая разные числа в ячейки памяти F715-F718 с помощью команды РОКЕ, можно изменять длительность и высоту звучания команды ВЕЕР. Если и этого вам покажется мало, воспользуйтесь ячейкой FE33 (на ПК8010 FB33) для включения динамика (записью в нее числа 7) и выключения (число 6). Тональность звучания легко программируется через ячейку FE00 (на ПК8010 FB00). Приведенная ниже программа позволит вам еще раз насладиться зажигательным ритмом ламбады, а дальнейшая работа со звуком на "Корвете" зависит только от вашей фантазии...
10 REM ЛАМБАДА
20 DATA 36,45,12,50,12,57,12,60,24,67,12,67,12,57,12,60,12,67
30 DATA 12,76,12,67,12,90,12,101,96,90,36,45,12,50,12,57,12,60
40 DATA 24,67,12,67,12,57,12,60,12,67,12,76,12,67,12,90,12,101,96,90
50 DATA 12,50,12,50,12,50,12,57,24,85,12,85,12,76,24,45,12,50
60 DATA 12,57,24,85,12,67,12,57,24,60,12,67,12,76,12,76,12,67,12,76,96,67
70 DATA 12,50,12,50,12,50,12,57,24,85,12,85,12,76,24,45,12,50
80 DATA 12,57,24,85,12,67,12,57,24,60,12,67,12,76,24,76,12,57,12,50,96,57
90 RESTORE 20:FOR R=0 TO 67;READ A,B:POKE &HF718,A*1.1:POKE &HF716,В/3:BEEP:NEXT
Кстати о фантазии: руководство программиста сообщает нам, что она не должна разыгрываться больше чем на 24 килобайта. Если учесть, что объем программы после ее запуска за счет резервирования памяти под переменные и массивы увеличивается, то придется смириться с тем, что программа, текст которой превышает 20К, находится на грани зависания. У таких критических по размерам программ наблюдается "самопожирание" строк. Да и вообще, память "Корвета" - лабиринт, где можно блуждать годами. Если сложить все ресурсы памяти, включая ПЗУ, то можно насчитать минимум 108К, но размеры рабочей области чрезвычайно малы при работе на Бейсике и просто малы при работе на Форте или в машинных кодах.
На всех известных мне учебных ПК строковые редакторы Бейсика позволяют копировать строки, что часто бывает очень удобно. О том, что это можно делать на "Корвете", нигде не написано, но...
Напечатайте любую строку под номером 10 и нажмите ВК. После этого наберите номер любой другой строки (например, 20), клавишей "забой" загоните курсор на строчку выше и снова нажмите ВК. Посмотрев после этого текст программы, вы увидите, что строка 20 - копия десятой.
Следующую полезную вещь вы узнаете, обратив внимание на то, во что превращается русский текст, который забыли поставить в кавычки, отгородить REMаркой или оператором DATA. Капелька воображения подскажет вам, что каждую клавишу "Корвета" можно использовать в качестве функциональной. Так, например, если вам лень печатать длинное слово CIRCLE, достаточно поставить просто "я", вместо FILES можно ввести "ф" и т. д.
И наконец, если вы дорожите программами, записанными на ваших дисках, при их смене в дисководе обязательно перезагрузите операционную систему: у "Корвета" дурная привычка переписывать каталог старого диска на новый.
Подводя итог описанию впечатлений от Бейсика "Корвета", позволю себе утверждать, что при работе с ним множество приятных и неприятных сюрпризов подтверждают правило: единственный надежный способ овладеть языком программирования - это работать на нем, т. е. брать на абордаж.
Рассказ четвертый, следующий за выполнением директивы STS, ибо с этого момента начинаются страдания о локальной сети КУВТ "Корвет".
Первая задача - заставить работать сеть в принципе. А не работать у нее найдется масса поводов, так что не работающая сразу после сборки сеть - нормальное явление. Первое, что в данном случае необходимо сделать,- проверить номер разъема сети, подключенного к ПК8020. Разъем с любым номером, кроме 0, будет превращать его в ПК8010 со всеми вытекающими последствиями. Если с этим все в порядке, следует убедиться в наличии замыкающих сопротивлений на концах ветвей сети, а затем подключать компьютеры к сети по одному, проверяя, отвечает ли очередной на запросы центральной машины по STS и не блокирует ли работу всей цепи. Если подобные неприятности происходят, то нужно поменять полярность включения разъема локальной сети данной машины. После всех этих процедур сеть должна заработать, но работать хорошо она не будет никогда, с этим придется смириться.
Имейте в виду:
- все машины "прислушиваются" к работе друг друга, и слишком активные действия на одной (включение/выключение тем более) могут привести к зависанию других;
- при передаче программы нужно предупредить абонентов о прекращении работы или, что лучше, попросить сделать сброс. В противном случае может происходить изменение кодов дополнительной клавиатуры с рядом неприятных последствий;
- не следует пересылать программы в момент работы графических команд на машинах. Вероятность зависания при этом 60%;
- если в начале урока вы вошли в STS, постарайтесь (по возможности) не выходить до конца.
А вывод таков: последовательное подключение "Корветов" в локальную сеть, конечно, облегчает ее сборку, но отнюдь не гарантирует удовлетворительной работы (Впрочем, и тут есть свои хитрости, одна из которых применена в строке 10 первой распечатки данной статьи).
Рассказ пятый, адресованный людям, измученным графическим "быстродействием" "Корвета" и избалованным общением с машинами и языками, допускающими использование спрайтов и аналогичных им приемов.
Из популярной литературы несложно узнать, что операция рисования на экране сводится к передаче в специальную область памяти (на "Корвете" ее называют ГЗУ) нужной числовой Информации. Адрес в этой области памяти определяет положение рисунка на экране, а цифровая информация - сам рисунок (двоичные единички будут указывать точки, которые должны "зажечься"). Если такого теоретического введения мало, можно заглянуть в руководство системного программиста (с. 10 ПТ.00546-01 34 01), а если достаточно, можно ринуться на поиски в лабиринтах памяти "Корвета" 16-килобайтного участка ГЗУ в надежде собственными силами увеличить графическое быстродействие машины.
Однако, посмотрев на карту памяти "Корвета", мы увидим, что ГЗУ на ней нет... Углубленное чтение вышеуказанного руководства объяснит, что ГЗУ все-таки есть, но надежно спрятано, так как память "Корвета" может менять свою конфигурацию. Изменить конфигурацию можно, записав в так называемый системный регистр специальное значение. Но поскольку память компьютера "блуждающая", а в руководстве толком не сказано, в какой конфигурации она оказывается после включения, то отыскать системный регистр тоже окажется хлопотным делом. Сейчас я знаю, что в МикроДОСе на ПК8020 его адрес FF7F, но до сих пор для меня остается загадкой, почему в начальный момент в нем записан 0, а не 5С, как обещано в инструкции?
Определив адрес системного регистра, можно попробовать записать в него, например, число ЗС, после чего с адреса 4000 по 8000 подключится ГЗУ. Попытка сделать это с помощью команды РОКЕ и последующее зависание машины заставят снова сесть за изучение вариантов конфигурации памяти и увидеть, что невозможно заставить машину одновременно помнить Бейсик и графическую информацию. Если подключается одно, то отключается другое. Выход один - составить подпрограмму в машинном коде, которая будет сначала переключать память в конфигурацию с ГЗУ, затем рисовать и после этого возвращаться к исходной конфигурации памяти. Пример подобной подпрограммы приведен ниже. Ее легко включить в любую программу на Бейсике, заставить картинку двигаться, после чего останутся проблемы с быстродействием других операций Бейсика, но не графических. Более того, при организации движения по экрану изображения, полученного данным способом, иногда бывает целесообразно ставить задержку из-за стробоскопического эффекта, накладываемого 50-герцевым мерцанием экрана. Подобный способ позволяет создавать "спрайты" на "Корвете", причем их количество и размеры ограничены только объемом свободной памяти. Разумеется, приводимая программа не идеальна и не оптимальна, но при наличии свободного времени ее можно доработать так, чтобы дать фору ямаховским спрайтам.
10 REM *** КОРВЕТ ***
20 REM ПОДПРОГРАММА В МАШИННОМ КОДЕ
30 DATA ЗЕ,ЗС,32,7F,FF,2А,47,В0,22,4D,B0,22,4Е,В0,2А,4В
40 DATA В0,22,51,В0,2А,49,В0,ЕВ,01,40,00,2А,51,В0,7Е,23
50 DATA 22 51,В0,2А,4D,B0,77,09,22,4D,B0,15,С2,1В,В0,ЗА
60 DATA 4А,В0,57,2А,4Е,В0,23,22,4F,B0,22,4D,B0,1D,C2,1В
70 DATA B0,3E,5C,32,7F,FF,C9,20,60,04,20,60,B0,00,00,00
80 DATA 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
90 REM ДАННЫЕ ДЛЯ РИСУНКА
100 DATA 00,00,00,00,00,00,01,01,01,0D,33,79,7B,F3,F7,F7,F7,F7,F7,7B,3В,05,11,31,3F,17,OF,07,03,03,01,00
110 DATA 20,20,20,20,FF,FE,FC,FC,FC,FC,00,FF,FF,FE,FE,FD,FD,FD,FC,FE,F6,50,50,50,F0,B8,E8,F8,FF,EF,FD,3F
120 DATA 04,04,04,1F,1F,3F,3F,3F,3F,3F,00,3F,3F,7F,FF,FF,FE,FE,FE,FE,2E,2A,2A,2A,7F,55,7F,7E,FC,FF,F0,C0
130 DATA 00,00,00,C0,80,80,00,00,80,C0,00,E0,80,80,00,00,00,00,00,00,00,00,00,00,C0,40,C0,00,00,00,00,00
140 FOR I=&HB000 TO &HB05F+128:READ A$:POKE I,VAL("&H"+AJ):NEXT:DEFUSR=&HB000: REM ЗАГРУЗКА МАШИННЫХ КОДОВ В ПАМЯТЬ
150 CLS:PCLS:COLOR 7,0:Y=USR(X):REM ЗАПУСК ПОДПРОГРАММЫ
Вместо эпилога хотелось бы поговорить о программном обеспечении "Корвета". Какими ресурсами располагает учитель? На дисках, поставляемых вместе с комплектом, прикладных программ нет, а удивительно интересный язык Форт практически невозможно изучить по тому руководству, которое вошло в комплект документации (настоятельно советую прочитать книгу Л. Броуди "Основы программирования на языке Форт"). Демонстрационные программы, поставляемые с "Корветом", тоже не потрясают. Распространяемые через учколлектор пакеты 1-3 содержат много программ с браком, а действительно профессиональными работами являются лишь RALLY и TETRIS, программы же, написанные на Бейсике, даже если и работают хорошо, то не вызывают энтузиазма своим содержанием. Одним словом, пакет собственных программ, которые можно наработать с учениками в школе, запросто составит конкуренцию пакетам учколлектора и демонстрационным программам комплекса, и если бы творческие процессы в школах находили поддержку, то проблема программного обеспечения не стояла бы так остро.
Таким образом, работая полтора года на "Корвете", мне лично приходилось рассчитывать в основном на силы свои и моих мальчишек, которых трудно выгнать из кабинета даже поздним вечером; подспорьем также служат программы, добываемые пиратскими методами. "Корвет" очень неплохая машина, посаженная на мель программного и информационного обеспечения. Вот та трагедия, которая заставила меня написать эту статью, написать в надежде на то, что голос будет услышан братьями по процессору и нашими общими усилиями "Корвет" займет должное место на пьедестале учебных компьютеров.