Spectrum Expert #02
31 марта 1998
  Софт  

 Для нелюбителей ассемблера мы публикуем
описания двух  незаслуженно  забытых  на
Спектруме языков программирования - Пас-
каля и Си. В первый момент  может  пока-
заться, что эти языки  так  и  останутся
невостребованными  по  причине  несовер-
шенства спектрумовских версий.          
 Несовершенство - да,  это  плохо,  хотя
даже такие простенькие версии дают хоро-
шую возможность для оперативного написа-
ния различных программ, например, вычис-
лений, рассчетов,  а  также  оперативных
проверок сложных алгоритмов, которые по-
том можно будет с большей легкостью  ре-
ализовать на ассемблере, и т.п. Паскаль,
по нашему мнению, можно достать везде, а
вот небитый работоспособный Си есть  да-
леко не везде, поэтому мы его включили в
приложение.                             
                                        
(c) Д. Рудовский.             
                              
     Компиляторы языков Pascal и C      
          для ZX-SPECTRUM.              
                                        
 В России ходят только компиляторы  Пас-
каля и Си фирмы Hisoft,  выпущенные  еще
в 83-84 годах.  Как следствие,  ни  один
из компиляторов не поддерживает 128К,  а
интерфейс и редактор  практически  иден-
тичны друг другу и ассемблеру GENS,  вы-
пущенному той же фирмой. Различия наблю-
даются лишь  в местах,  специфичных  для
базовых языков.                         
                                        
 Ну, начнем по порядку: Pascal.         
 Речь пойдет  о  самой  распространенной
версии Hisoft Pascal HP4D.              
 Как всегда,  начинаем с загрузки. После
запуска Бейсик-загрузчика и загрузки ко-
дового блока, на  экран  будет  выведена
надпись:                                
 ТОР OF RAM?                            
 Набрав здесь число, вы установите верх-
нюю границу памяти, доступную компилято-
ру.  Если сразу нажали <ЕNТЕR>, то верх-
няя граница будет установлена равной на-
чалу   области   символов   пользователя
(UDG).                                  
 Далее на экране появится:              
 ТОР OF RAM FOR 'Т'?                    
 Здесь необходимо ввести верхнюю границу
памяти для вашей программы  ( аналогично
CLEAR в Бейсике). Последним запросом пе-
ред запуском редактора будет:           
 TABLE SIZE?                            
 Число, введенное  здесь, задаст  размер
таблицы меток, т.е. объем памяти,  кото-
рый будет выделен  компилятором  для ин-
формации об именах  используемых в прог-
рамме. По  умолчанию  берется  величина,
равная 1/16 свободной памяти.           
 Перед тем,  как  перейти к описанию ре-
дактора и компилятора, надо сказать нес-
колько слов о распределении памяти.     
 Компилятор занимает 12К,  редактор  -  
около 2К, плюс выделяется место под таб-
лицу меток в соответствии со  значением,
заданным в начале.  Компилятор  распола-
гается с адреса 24600, следовательно, на
программу и объектный код остается около
21К, правда, надо учитывать, что объект-
ный код, выгружаемый на диск,  не совпа-
дает с объектным кодом,  запускаемым  из
компилятора.                            
                                        
 Редактор.                              
                                        
 Сигналом того, что редактор готов к ра-
боте, является символ  ">" и  курсор  за
ним. Как и в стандартном Спектрум-Бейси-
ке, в НР каждая строка имеет свой номер,
хотя, в отличие от Бейсика, здесь нельзя
оперировать с номерами строк в  програм-
ме.  Общие правила набора строк в  прог-
рамме идентичны  правилам  набора  прог-
раммы в стандартном  Бейсике.  Для  про-
смотра   и  редактирования  используются
следующие команды:                      
 I[n][,m] - автонумерация строк.   После
ввода этой команды появляется  начальный
номер n ( по умолчанию n=10 ),  а  после
нажатия   <ЕNТЕR>  появится  n+m,  затем
n+2*m и т.д. Для выхода из набора нажать
<ЕDIТ>.                                 
 D[n,m] - удаление группы строк.  Удаля-
ются строки с номера n до номера m вклю-
чительно.                               
                                        
 М[n,m] - перемещение строки  n  в стро-
ку m.                                   
 N[n,m] - перенумерация строк.  Эта  ко-
манда применяется тогда, когда возникает
необходимость вставить строку.          
                                        
Пример:                                 
                                        
 1 PROGRAM DEMO;                        
 2 VAR I,S : INTEGER;                   
 3 BEGIN                                
 4 FOR I:=1 ТО 30 DO                    
 5 S:=S+1; WRITELN(I);                  
 6 END;                                 
 7 WRITELN(S)                           
 8 END.                                 
                                        
 Нам надо вставить BEGIN между строками 
4 и 5.  Используем команду  N10,10      
                                        
 Получаем:                              
                                        
 10 PROGRAM DEMO;                       
 20 VAR I,S : INTEGER;                  
 30 BEGIN                               
 40 FOR I:=1 ТО 30 DO                   
 50 S:=S+1; WRITELN(I);                 
 60 END;                                
 70 WRITELN(S)                          
 80 END.                                
                                        
 Теперь мы можем смело  вставлять  новую
строку под номером,  допустим, 45.      
                                        
 Теперь перейдем к самому  языку.  Заре-
зервированы следующие слова:            
                                        
 AND                                    
 ARRAY                                  
 BEGIN                                  
 CASE                                   
 CONST                                  
 DIV                                    
 DO                                     
 DOWNTO                                 
 ELSE                                   
 END                                    
 FORWARD                                
 FUNCTION                               
 GOTO                                   
 IF                                     
 IN                                     
 LABEL                                  
 MOD                                    
 NIL                                    
 NOT                                    
 OF                                     
 OR                                     
 PACKED                                 
 PROCEDURE                              
 PROGRAM                                
 RECORD                                 
 REPEAT                                 
 SET                                    
 THEN                                   
 ТО                                     
 ТУРЕ                                   
 UNTIL                                  
 VAR                                    
 WHILE                                  
 WITH                                   
                                        
 Hisoft Pascal  допускает  использование
следующих типов данных:                 
┌--------┬---------------------------┐  
│  Тип           Интервал         
├--------┼---------------------------┤  
│boolean │        True, False        │  
│ char   │          0 - 255          │  
│integer │      -32768 - 32767       │  
│ real   │ -9.99999e38 - 9.99999e38  │  
│string  │      строка символов      │  
│ word   │          ????             │  
│        │                           │  
│record  │      ------------         │  
└--------┴---------------------------┘  
                                        
 Стандартные процедуры паскаля:         
                                        
 WRITE                                  
 WRITELN                                
 READ                                   
 READLN                                 
 PAGE                                   
 HALT                                   
 USER                                   
 РОКЕ                                   
 INLINE                                 
 OUT                                    
 NEW                                    
 MARK                                   
 RELEASE                                
 TIN                                    
 TOUT                                   
                                        
 Функции:                               
                                        
 ABS                                    
 SQR                                    
 ODD                                    
 RANDOM                                 
 ORD                                    
 SUCC                                   
 PRED                                   
 INCH                                   
 EQLN                                   
 РЕЕК                                   
 CHR                                    
 SQRT                                   
 ENTER                                  
 ROUND                                  
 TRUNC                                  
 FRAC                                   
 SIN                                    
 COS                                    
 TAN                                    
 ARCTAN                                 
 EXP                                    
 LN                                     
 ADDR                                   
 SIZE                                   
 INP                                    
                                        
 Комментарии к  некоторым  процедурам  и
функциям:                               
                                        
 INLINE - позволяет  вставлять  машинные
коды в   текст    Pascal-программы,  при
этом на момент выполнения программы  ре-
гистры не сохраняются  и  местоположение
кода, введенного командой INLINE, не оп-
ределено. Вышесказанное означает, что не
рекомендуется вводить  в  строку  inline
подпрограммы, имеющие абсолютные перехо-
ды или вызовы подпрограмм в  поле основ-
ной программы.                          
                                        
 INCH - аналог функции бейсика inkey$,  
однако, в отличие  от  нее, ждет нажатия
на клавишу.                             
                                        
 SIZE - эта  функция  возвращает  размер
переменной, заданной  в  качестве  пара-
метра.                                  
                                        
 Как видно из приведенного  выше списка,
набор   встроенных  процедур  и  функций
крайне ограничен и вряд ли  удовлетворит
взыскательного пользователя. К  счастью,
вместе с компилятором  были  выпущены  и
несколько библиотек к нему. К сожалению,
мне не удалось разыскать дисковой версии
компилятора с этими библиотеками.       
                                        
 Несколько слов надо сказать об  ошибках
компиляции.  Код  ошибки указывается при
выводе листинга  компиляции  под местом,
вызвавшем ошибку или сразу  за ним.  Вот
список ошибок периода компиляции:       
                                        
 1. Отсутствует "."                     
 2. Отсутствует параметр                
 3. Отсутствует константа               
 4. Этот идентификатор не является кон- 
    стантой                             
 5. Отсутствует "THEN"                  
 6. Отсутствует "DO"                    
 7. Отсутствует "ТО" или "DOWNTO"       
 8. Отсутствует ")"                     
 9. Невозможно вывести этот тип         
 20. Отсутствует "OF"                   
 21. Отсутствует ","                    
 22. Отсутствует ":"                    
 23. Отсутствует "PROGRAM"              
 24. Отсутствует переменная-параметр    
 25. Отсутствует "BEGIN"                
 26. Переменная отсутствует в вызове для
     чтения                             
 27. Не могу сравнить значения этого ти-
     па                                 
 28. Должен быть целый или  вещественный
     тип                                
 29. Невозможно ввести переменную  этого
     типа                               
 30. Этот идентификатор не является  ти-
     пом                                
 31. Отсутствует экспонента в веществен-
     ном числе                          
 32. Cкалярное значение отсутствует     
 33. Нулевая строка не определена       
 34. Отсутствует "("                    
 35. Отсутствует ")"                    
 36. Индекс массива не является  скаляр-
     ной величиной                      
 37. Отсутствует ".."                   
 38. В описании массива отсутствует  ")"
     или ","                            
 39. Нижняя граница больше верхней      
 40. Установка слишком большая          
 41. Тип результата не совпадает с  объ-
     явленным типом функции             
 42. В определении не хватает ".." или  
     ")"                                
 43. В определении не хватает  "..",    
     ",",   ")"                         
 44. Тип идентификатора должен совпадать
     с типом параметра                  
 45. Нулевая  установка  не должна  быть
     первым условием в неопределенном   
     определении                        
 46. Отсутствует    скалярное   (включая
     действительные) значение           
 47. Отсутствует скалярное (кроме дейст-
     вительных) значение                
 48. Установки несовместимы             
 49. "AND" не должно использоваться  при
     сравнении установок                
 50. Отсутствует   "FORWARD",   "LABEL",
     "CONST", "VAR", "ТУРЕ", или "BEGIN"
 51. Отсутствует шестнадцатиричный  фор-
     мат                                
 52. Отсутствует установка              
 53. Массив слишком большой             
 54. В  определении  записи  отсутствует
    "END" или ";"                       
 55. Отсутствует поле идентификатора    
 56. Отсутствует переменная после "WITH"
 57. Переменная в  "WITH"  должна  иметь
     тип "RECORD"                       
 58. Поле идентификатора совпадает с оп-
 ределением процедуры                   
 59. После "LABEL" отсутствует номер    
     строки                             
 60. После "GOTO" отсутствует номер     
     строки                             
 61. Ошибочная метка                    
 62. Метка не определена                
 63. Параметр должен быть переменной    
 64. Указатели можно только сравнивать  
 65. Форматированный вывод возможен     
     только для целых                   
 66. Строка не является строкой символов
 67. Параметр для "NEW",  "MARK", "RELE-
     ASE" должен иметь тип указателя    
 68. Параметр адреса должен быть пере-  
     менной                             
                                        
 В завершение, как резюме, хочу сказать,
что, несмотря на  очевидные  недостатки,
компилятор Паскаля вполне  подходит  для
написания  программ обработки  данных  и
решения задач вычислительной математики.
                                        
                                        
                                        



Other articles:


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

Similar articles:
Advertising - Advertisements and announcements ...
System Software - Pro Tracker bugs! Several glyuchkov in ProTracker'ah.

В этот день...   23 November