Я про то, что Никита сделал утилиту, чтобы патчить .mac-файл после компиляции Паскалем именно в плане искажения строк на русском (обнуляется старший бит символов). Если Паскаль берёт русские строки и так, то зачем бы он стал это делать?
Вид для печати
Я про то, что Никита сделал утилиту, чтобы патчить .mac-файл после компиляции Паскалем именно в плане искажения строк на русском (обнуляется старший бит символов). Если Паскаль берёт русские строки и так, то зачем бы он стал это делать?
Код:
HD7>TY OLEG.PAS
/* ПРОГРАММА "ПРИВЕТ, ОЛЕГ!" */
PROGRAM HO;
BEGIN
WRITELN('ПРИВЕТ, ОЛЕГ!');
END.
HD7>PASDWK OLEG,TT:=OLEG
.MAIN. OMSI PASCAL-1 RT11 V1.1G 21- -89 Page 1
Univ. Tasmania, Info. Sciences, Physics Bldg, Hobart 7001, site #72-12
LINE STMT LEVEL NEST SOURCE STATEMENT
1 /* ПРОГРАММА "ПРИВЕТ, ОЛЕГ!" */
2 PROGRAM HO;
3 BEGIN
4 1 1 1 WRITELN('ПРИВЕТ, ОЛЕГ!');
5 2 1 1 END.
ERRORS DETECTED: 0
FREE MEMORY: 11510 WORDS
ERRORS DETECTED: 0
FREE MEMORY: 11510 WORDS
HD7>TY OLEG.MAC
.GLOBL $RESR6,$RESR5,$KORE,$SAV10,$VER
.GLOBL $BEGIN,FILE,$TTY,$END
.RADIX 10
$VER=59.
$BEGIN:
JSR %7,$B127
.GLOBL $B127
MOV #L0,-(6)
MOV #17,-(6)
CLR -(6)
JSR %7,$B32
.GLOBL $B32
JSR %7,$B36
.GLOBL $B36
JMP $END
L0: .WORD 28686
.WORD 26994
.WORD 25975
.WORD 3956
.WORD 8236
.WORD 28430
.WORD 25964
.WORD 3943
.WORD 33
.END
HD7>MAC OLEG
HD7>LIN OLEG,PASDWK
HD7>RU OLEG
ПРИВЕТ, ОЛЕГ!
HD7>
- - - Добавлено - - -Цитата:
КОИ-7 - семибитная кодировка для русского языка и обмена информацией, основанная на ASCII. КОИ-7 описана в ГОСТ 13052-67, 13052-74 и 27463-87. КОИ-7 включает в себя 3 "набора" - Н0, Н1, Н2. Н0 - это просто US-ASCII ; в Н1 все латинские буквы заменены на русские; в Н2 заглавные латинские буквы оставлены, а строчные заменены на заглавные русские.
На практике использовался либо набор Н2 сам по себе, либо Н0/Н1 с переключением: для перехода в русский режим Н1 использовался управляющий символ 0xE SO, РУС, а для возврата в латинский Н0 - символ 0xF SI, ЛАТ. Иногда смена набора, используемого устройством, осуществлялась ручным переключателем.
Буквы Ё не было; отсутствовала также заглавная буква Ъ для избежания потенциального конфликта с управляющим символом DELETE 0x7F. Поскольку русские буквы были размещены на позициях аналогичных латинских букв, текст оставался более-менее понятным даже при неправильно выбранном режиме.
КОИ-7 использовалась в основном на машинах серии СМ ЭВМ и ДВК; КОИ-7 Н2 использовалась на машинно-ориентированном языке в микроЭВМ Электроника Д3-28 в виде четырёхзначного шестнадцатеричного кода, также на БЭСМ-6 там она называлась ВКД, внутренний код данных; при этом вместо части русских букв использовались совпадающие по начертанию латинские.
да в этом была причина, убрал, собралось сразу в OBJ, но SAV в итоге всё равно не запустился - ругнулся "замысловато" )
В общем буду экспериментировать (по мимо прочего) с Pascal-2 - вещь занятная )
БОЛЬШОЕ СПАСИБО!!! В данном архиве оказался полный комплект OMSI Pascal v1.2G, ну естественно "адаптированный" под наши ЭВМ. Включает компиляторы с поддержкой как FIS (PASSIM.SAV), так и FPP (PASFPP.SAV). Ну и четыре версии стандартной библиотеки - PASFPP (поддержка FPP), PASFIS (поддержка аппаратных FIS и EIS, эмулятора FIS нет), PASEIS (поддержка аппаратного EIS, эмулятор FIS присутствует), PASSIM (отсутствует аппаратная поддержка EIS и FIS, эмулятор FIS присутствует).
Знатоки Macro-11, подскажите, пожалуйста, каков стандарт обработки локальных меток в случае если указанная метка не встречается между глобальными метками.
Куда Macro-11 сделает переход - на метку L1$ выше FIRST или ниже SECON? Или выдаст ошибку?Код:L1$: NOP
FIRST: MOV R0,R1
BR L1$
SECON: MOV R2,R3
L1$: WAIT
Если код, как приведённый - ошибка - дубль метки, потому как L1$ - это отнюдь не локальная метка
Если правильная локальная метка, возможны три сценарии.
- ошибка - дубль метки
- ошибка - метка не определена
- нет ошибки - переход на одну из меток
Ищем в документации и читаем про понятие - блок локальных меток
Да, ошибка - не должно быть буквы "L" в метке.
Это понятно, что три случая возможны:
1. между глобальными метками есть локальные с одинаковыми именами
2. указанной локальной метки вообще нет в программе
3. локальная метка есть, но после и/или до глобальной метки.
Интересует, конечно, третий случай. Я именно про него спрашивал.
Ясно, "RTFM". Всё понял, спасибо большое, ты очень помог!Цитата:
Ищем в документации и читаем про понятие - блок локальных меток
Мои лекции стоят ОЧЕНЬ дорого, но всё это можно RTFM. Не за что
- - - Добавлено - - -
Нет, она может и быть. И не одна. И тем не менее, MACRO-11 выдаст указанную ошибку
И в этом варианте возможны всё три случая
Если бы можно было RTFM, то я бы уже. В реальности хвалёная DECовская документация составлена так, что в ней многое не описано. Например, в "PDP-11 MACRO-11 Language Reference Manual" нет формулировок типа "область видимости" и нет даже самого описания локальных меток (зато сразу с места в карьер "7.3.5 Creating Local Symbols Automatically").
Моё время тоже стоит очень дорого, но я трачу его на бесплатное написание новых программ для БК и Союз-Неона. Если я буду тратить его на чтение чудовищно составленной DECовской документации, то на новые программы для БК и Союз-Неона времени не останется.
Странно, конечно, что ты знаешь ответ на вопрос и мог бы ответить "да" или "нет", но вместо этого предпочитаешь писать нравоучения, а знание своё собираешься унести с собой в могилу. Ну да ладно, у каждого свои мотивы.
Вспомнился анекдот:
Скрытый текст
Клиент спрашивает в банке:
-А вы даёте кредиты под честное слово?
-Без проблем.
-А если я не верну кредит?
-Тогда вам будет стыдно перед всевышним, когда предстанете.
-Ну, это когда ещё будет.
-Вот, если пятого не вернёте, то шестого предстанете.
[свернуть]
Надеюсь Вы про могилу не в этом ключе? ;-)
Аха. Конечно.
"Local symbols are specially formatted symbols used as labels within a block of coding that has been delimited as a local symbol block. Local symbols are of the form n$, where n is a decimal integer from 1 to 65535, inclusive.
...
A local symbol block is delimited in one of three ways:"
Так и пиши - Не умею искать. Будет честнее.
Это то, которое в общедоступной документации? Да, точно, унесу с собой в могилу. Что бы современные горе-"программисты" научились с документацией работать.
- - - Добавлено - - -
Если мой ответ не устраивает - это не значит, что я его не дал. Просто уровень знаний не тот - для понимания ответа.
Честнее будет так: в документе используется старая терминология, поэтому поиск затруднён. Чтобы выучить старую терминологию, надо прочитать всю книгу. А это вовсе не поиск.
Нет никакого смысла давать ответ, понимание которого требует уровня знаний выше того, который обозначен в вопросе. Если только ты не ставишь цель похвастаться уровнем знаний и запросить денег за консультацию
:)
Нормальным ответом было бы:
"L1$ - это отнюдь не локальная метка. Если правильная локальная метка, то ассемблер выдаст ошибку, поскольку нет специальных директив".
Вообще, вопрос возник из-за этого кода (никаких директив Macro-11 в начале нет):
Код:;процедура обработки перехода через сегмент и зацикливания
MOV #1,R4 ;МАСКА ДЛЯ ОПОЗНАНИЯ КОНЦА ИНСТР.
VL0: MOV #0,R5
BEQ 10$
ADD R5,VOL0+2
VLL0: CMP #0,VOL0+2
BLO 10$
MOV VLL0+2,VOL0+2
CLR VL0+2
10$: CMP R0,#ADINS1+10000
BLO 20$
SUB #10000,R0
ADD #10,@#UR1
20$: BITB R4,@R0
BNE 40$
CL0: SUB #0,@#UR1
ADD #0,R0
30$: TSTB @R0
BNE 40$
CLR QQ0
MOV #111004,INC0
CLR R0
40$:
VL1: MOV #0,R5
BEQ 10$
ADD R5,VOL1+2
VLL1: CMP #0,VOL1+2
BLO 10$
MOV VLL1+2,VOL1+2
CLR VL1+2
10$: CMP R1,#ADINS2+10000
BLO 20$
SUB #10000,R1
ADD #10,@#UR2
20$: BITB R4,@R1
BNE 40$
CL1: SUB #0,@#UR2
ADD #0,R1
30$: TSTB @R1
BNE 40$
CLR QQ1
MOV #111104,INC1
CLR R1
40$:
Спасибо!
Значит, исходник, который я разбираю, не из Macro-11, а из БКшной Turbo8. Там такие трюки (или глюки) прокатывают, переход вперёд произойдёт.
Это исходник проигрывателя трекерной музыки для Союз-Неона, переделанный для БК 0011М. Видимо, при портировании что-то пострадало - играет музыку неправильно. Сижу разбираюсь.
В продолжение, по коду KINGOM - про работу с файлами.
Этот Паскаль позволяет работать с файлами как со списками элементов заданного типа.
Для примера см. https://github.com/nzeemin/uknc-vari...CAL/KINGM6.PAS
Открытие файлов через RESET либо REWRITE, переход к заданной записи SEEK, закрытие файла - CLOSE.Код:type FArray = array [1..12] of integer;
var D,E: file of FArray; F:FArray;
...
F := D^; { Берём (копируем) текущий элемент файла D }
if D^[1] = 1 then ... { Обращаемся к текущему элементу файла D, без копирования }
GET(D); { Переходим к следующему элементу файла D }
...
E^ = F; { Копируем в текущий элемент файла E }
PUT(E); { Сохраняем элемент в файл E }
Вот это несколько более геморойно (он на диске в формате RSX), попробую до выходных выцарапть, но не обещаю - в выходные точно смогу
- - - Добавлено - - -
И эта, вдогонку :) Если до субботы второй половины дня не выложу - можно смело меня пнуть-напомнить :) Работа началась, голова теперь не только DE10 занята - легко могу забыть :)
- - - Добавлено - - -
А вот обманул :) Не знаю, в каком смысле этого слова :) 2.0K
Да, я помню, одно дело доделаю (минут 30 - час) и займусь :)
- - - Добавлено - - -
Пардон, потребовалось больше времени, чем предполагал :)
Переключился на паскаль :)
- - - Добавлено - - -
Вытащил всё, что было Pascal Omsi RT11 2.0K Changed
Комментарии:
- До дистра добрались шаловливые советские ручки
- Выложен в том виде, который у меня
- Вроде как LIB*.OBJ - не библиотеки, а просто конкатенированные *.OBJ файлы - думаю, стоит на их основе создать библиотеки
- PASCAL.SAV у меня запустился только под XM и только в варианте VRUN PASCAL. Ну, никто не мешает выдать SET RUN VBGEXE
- Файл-образ диска можно сделать и поменьше - но это образ минимального размера, который оказался под рукой и учитывая его размер - не стал сильно париться на этот счёт :)