Чистый код типа
оптимизатором легко разгоняется процентов на 30, ценой 3-4 кратного разбухания и общей некрасивости. :tongue: И холивар это про веру...Код:mov #1000,r0
l:add r1,(r3)+
adc r2
sob r0,l
Вид для печати
Чистый код типа
оптимизатором легко разгоняется процентов на 30, ценой 3-4 кратного разбухания и общей некрасивости. :tongue: И холивар это про веру...Код:mov #1000,r0
l:add r1,(r3)+
adc r2
sob r0,l
Санта подарки разносит. :v2_dizzy_christmas2
Процентов на 25 побыстрее дожно бытьКод:mov #250,r0
l:add r1,(r3)+
adc r2
add r1,(r3)+
adc r2
add r1,(r3)+
adc r2
add r1,(r3)+
adc r2
sob r0,l
http://litwr2.atspace.eu/bk11.html
Поддерживаются (некоторые слова из бейсика БК0011):
^ \ * + - ( ) = < > <= >= =< => <> ><
? ABS AND ASC AT BIN$ BLOAD BSAVE CHR$ CLEAR CLS CSRLIN DATA DEC DEF DIM ELSE END EOF EQV FILES FIND FN FOR GET# GOSUB GOTO HEX$ IF IMP INKEY$ INP INPUT INSTR LEN LET LOCATE MID$ MOD MONIT NEXT NOT ON OR OUT PEEK POKE POS PRINT READ REM RESTORE RETURN SGN SPC STEP STR$ STRING$ SYSTEM TAB THEN TO UINT$ UPPER$ USR VAL VARPTR XOR
Не поддерживаются:
BEEP CINT COLOR KEY OCT$
CIRCLE DRAW PAINT POINT PRESET PSET
/ ATN CDBL COS EXP INT FIX LOG PI RND SIN SQR TAN CSNG
. AUTO CALL CLOAD CONT CSAVE DELETE LIST LLIST LOAD LPOS MERGE NEW RENUM RUN SAVE STOP TROFF TRON
SCREEN
Новые возможности:
+ Имена переменных могут быть любой длины.
+ Можно использовать ':' для разделения операторов. Длина строки не ограничена.
+ Новый оператор GET# позволяет получать данные из файла символ за символом, т.е. GET#a$ вводит один знак или пусто в a$ из открытого для чтения файла. Это файловый эквивалент INKEY$.
+ Новая функция DEC переводит 16-ю строку в целое, т.e., dec("a0A")=2570.
+ INSTR можно использовать с двумя аргументами, т.е., instr("abcdef", "cd") = instr(1, "abcdef", "cd").
+ Новая функция UPPER$ переводит маленькую латинскую букву в большую.
+ Новая функция UINT$ перевоит в беззнаковое целое в виде строки, т.е. UINT$(-1) gives "65535".
Неподдерживаемые или поддерживаемые ограничено возможности бейсика БК:
- Поддерживаются только целые (в диапазоне -32768..32767) и строковые (длиной до 255 знаков) типы.
- DIM нужно использовать с любым массивом (даже меньшим 10) и его числовой аргумент должен быть целой константой. Поддерживаются только массивы с одной размерностью. После DIM можно описывать только одну переменную-массив. Виртуальные массивы не поддерживаются (это верно и для VARPTR).
- Только некоторые ошибки синтаксиса обнаруживаются.
Особые замечания:
* Размер генерируемых исполнимых файлов до 32256 байт. 16384 дополнительных байт используются для строк и машинного кода. Программа стартует с адреса 512. Код использует вызовы АнДОС, которые эмулируют ПЗУ БК0010. Код не использует вызовы ПЗУ БК0011.
* Память по адресам 532-565 свободна для любого использования. Память выше адреса 16384 может переключаться, поэтому она имеет ограничения для прямого использования для машинных кодов и данных.
* Прерывания клавиатуры используются для автоповтора нажатия клавиши. Это меняет стандартную схему работы с кириллицей -- используйте AP2.
* Необходимо ставить пробелы между склеивающимися лексемами, например, 'if a<3 goto 10' требует пробелов между 'if' и 'a', а также между 'goto' и '10'.
* Страницы памяти 2, 3 и 6 используются для программ и данных. Страница 0 -- это буфер ввода-вывода. Страница 4 содержит AnDOS. Другие страницы свободны для любого использования.
* CLEAR требует в точности двух аргументов, но 1-й игнорируется, т.к. вся свободная память используется для строк. CLEAR вызывает сначала уборщик мусора. Второй аргумент устанавливает верхнюю границу памяти для бейсика. Начальное значение этой границы -- 49152.
* INPUT работает нестандартно, если использует несколько переменных для ввода. Например, 'INPUT A,B' требует ввести значения для А и затем нажатия клавиши Ввод, затем ввeсти значения для B и нажатия на Ввод.
* CSRLIN и POS игнорируют аргументы.
* FRE показывает размер всей свободной памяти. Уборщик мусора вызывается только если у аргумента строковый тип. Поэтому в случае целого или отсутствующего аргумента показанный результат может быть меньше действительного.
* FIND должен использовать какой-нибудь файловый шаблон MS-DOS. Так FIND "*.TXT" покажет все файлы с расширением TXT, а FIND "?." покажет файлы с именами, состоящими из одного знака и без расширения. Шаблоны чувствительны к регистру знаков.
* BLOAD всегдa требует 3-х аргументов, например, BLOAD "MC",,32768 или BLOAD "MC.BIN",R,47*1024.
* BLOAD и BSAVE не работают с файлом более 16 KБ.
* USRn(X) вызов кладет X в R5 и затем использует CALL. Поэтому вернуться из такой ассемблерной функции можно по инструкции RETURN. Результат следует помещать в R5.
* SYSTEM и MONIT работают как END.
* FILES идентична FIND.
* \-операция может правильно делить -32768, но игнорирует деление на 0 и переполнение.
* %-суффикс для целых переменных необязателен.
* Служебные слова нужно писать полностью, без сокращений.
Общая информация:
@ Используйте PEEK(208) and -256 для проверки состояния файла после попытки открытия. Значение должно быть 0, если операция прошла успешно.
@ Будьте осторожны с PEEK и POKE -- они игнорируют младший (четность) бит.
@ Компилятор распространяется по лицензии GNU General Public License, версии 2 или, по вашему усмотрению, более поздней версии. Эта лицензия доступна через сеть по адресу <http://www.gnu.org/copyleft/gpl.html>. GPL устроена так, что позволяет вам менять содержимое пакета и распространять его по другой схеме до тех пор, пока вы не лишаете такой свободы других.
@ Это свободный, быстрый и сделанный как попало компилятор, созданный преимущественно для компиляции программы Notepad-BK. Это не Visual Studio...
Наверное в эту тему.
За пару часов наваял пакет для редактора Atom -- простейшую подсветку синтаксиса для языка MACRO-11. Не то чтобы сильно нужно было, просто интересно было пройти этот квест -- с нуля до публикации пакета.
https://atom.io/packages/language-macro11
Реализация там собственно -- одна регулярка. Но вдруг кому пригодится.
Изучаю кросс-ассемблер Macro-11 для Windows.
Не могу разобраться с командой "JMP 200".
В описании на процессор ВМ3 написано следующее:
000167 JMP 200 R7 001024 +4 + R7 000200
177150
ПАМЯТЬ ПАМЯТЬ
0! ! 0! !
! ! ! !
000200! ХХХХХХ ! 000200! ХХХХХХ !
! ! ! !
001024! 000167 ! 001024! 000167 !
001026! 177150 ! 001024! 177150 !
001030! ХХХХХХ ! 001030! ХХХХХХ !
! ! ! !
177776! ! 177776! !
При ассемблировании в Macro-11 получаю следующее:
1 .TITLE test_jmp
2 .ASECT
3 001024 .=001024
4 001024 000167 000200' JMP 200;
4
Почему при относительном способе адресации Macro-11 во второе
слово команды подставляет 000200' со штрихом?
По описанию на ВМ3 сложение адреса 001030 (следующего за командой
JMP) со вторым словом 177150 дает 200, что на мой взгляд правильно.
Может штрих что-то означает? Тогда что?
Николай.
Именно 200 и означает. Штрих указывает, что величину надо расчитать при компoновке. Например, если jmp 200 при загрузке окажется на адресе 400, то операнд у jmp будет один, а если на адресе 500, то на другой, с разницей в 100.
Спасибо, понял.
К Macro-11 прилагается dumpobj, который выдает .bin файл.
Но в .bin файле тоже не пересчитывается адрес.
Получается, что без компоновщика нельзя писать программы с
относительной адресацией?
А для Windows есть кросс-компоновщик?
Николай.
bin после dumpobj - это неисполнимый файл, даже если не использовать относительной адресации. Это файл для дальнейшей компoновки. Выше в теме есть ссылка на кросс-компоновщик, который делает исполнимые файлы. Сам не использую относительную адресацию, а сделать её поддержку как и перемещаемость с нечетными адресами несложно. Утилитка маленькая, если кому надо, то дело сделается - небольшое.
Скомпилировал obj2bin в Visual Studio 2015.
Пока не понял как работает.
Подставляю .obj файл - пишет стандартную фразу:
"Run this program without arguments, e.g., obj2bin <IN >OUT\n".
Запускаю отдельно - могу писать текст, но и только.
С исходником тоже не могу разобраться (по образованию не программист).
Николай.
Вы примерчик - текстовый файл bkcompile.sh посмотрите. Там все операции: 1) macro11; 2) dumpobj; 3) bkobj2bin.
Написал по аналогии .bat файл:
только сразу подставляю .obj файл.
rem bkcompile FILENAME.asm
rem F=${1%%asm}
rem macro11 -yus -ysl 16 -o $a.obj -l $a.lst $1
dumpobj a.obj a.dump
bkobj2bin <a.dump >a.bin
pause
При запуске висит. После принудительного закрытия a.bin нулевой.
Николай.
P.S.
А вот исходный файл:
.TITLE testpdp11
.ASECT
.=0000
MOV #111111, R1;x9249
MOVB #222, R2;x92
MOV #133333, R3;
MOV #144444, R4;
BR 000102;
halt;
.=0102
BR 000000;
MOV #111111, R1;
MOV #122222, R2;
MOV #133333, R3;
MOV #144444, R4;
NOP;
halt;
Перед a.dump поставьте знак "больше". И попробуйте запускать команды по одной, сценарий - когда всё заработает. У меня ваш примерчик успешно собрался, но загружать в эмулятор его не стал. :wink:
Оставил одну строчку, убрал pause.
Тоже самое.
При bkobj2bin <a.dump >a.bin пишет:
bkobj2bin 0<a.dump 1>a.bin
При bkobj2bin >a.dump >a.bin пишет:
bkobj2bin 1>a.bin
В обоих случаях висит.
Файл a.dump нормальный.
---------- Post added at 22:36 ---------- Previous post was at 22:28 ----------
У меня Windows8.1 64р.
Visual Studio пишет следующее при компиляции:
All packages are already installed and there is nothing to restore.
NuGet package restore finished.
1>------ Rebuild All started: Project: bkobj2bin, Configuration: Debug Win32 ------
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.Cp pBuild.targets(392,5): warning MSB8028: The intermediate directory (Debug\) contains files shared from another project (bklinker.vcxproj). This can lead to incorrect clean and rebuild behavior.
1> bkobj2bin.c
1>c:\vc6prj\bklinker\bkobj2bin.c(18): warning C4996: 'sscanf': This function or variable may be unsafe. Consider using sscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files (x86)\windows kits\10\include\10.0.10056.0\ucrt\stdio.h(2254): note: see declaration of 'sscanf'
1>c:\vc6prj\bklinker\bkobj2bin.c(31): warning C4996: 'sscanf': This function or variable may be unsafe. Consider using sscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files (x86)\windows kits\10\include\10.0.10056.0\ucrt\stdio.h(2254): note: see declaration of 'sscanf'
1>c:\vc6prj\bklinker\bkobj2bin.c(33): warning C4996: 'sscanf': This function or variable may be unsafe. Consider using sscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files (x86)\windows kits\10\include\10.0.10056.0\ucrt\stdio.h(2254): note: see declaration of 'sscanf'
1>c:\vc6prj\bklinker\bkobj2bin.c(41): warning C4996: 'sscanf': This function or variable may be unsafe. Consider using sscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files (x86)\windows kits\10\include\10.0.10056.0\ucrt\stdio.h(2254): note: see declaration of 'sscanf'
1> bklinker.vcxproj -> C:\VC6prj\bklinker\Debug\bkobj2bin.exe
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
Cкорее всего у вас компоновщик неправильно собирается. Под Виндуз вроде бы надо указывать где-то, что программа компилируется для консольного режима. Выложил exe - попробуйте. Команда bkobj2bin <a.dump >a.bin должна сделать дело, если a.dump правильный. И, конечно, лучше запускайте с консоли.
1. MACRO.SAV не предоставляет никакой автоматизации кода - т.е. надо предполагать, что набор идет непосредственно в машкоде - т.е. восьмеричными циферками - тогда всё будет абсолютно понятно.
2. Для случая с ДП 1801ВМ3 кодер MACRO.SAV должен сам рассчитывать все режимы - см. п.1.
3. Настоятельно рекомендуется кодить в эмуле ДВК на родных средствах разработки - тогда изрядная часть вопросов отпадет. Родными для ассемблера ДВК считаются :
3.1. Экранный текстовый редактор. ( EDIK.SAV )
3.2. Компиллятор ассемблера MACRO.SAV
3.3. Линковщик LINK.SAV
3.4. Средство коррекции файлов DESS.SAV
3.5. ( Отладочные файлы пользователя - для серьезных проектов )
*
Изучать ЭВМ по эмуляторам - не очень верное решение.
Если есть СЕРЬЕЗНАЯ необходимось в изучении - добудте рабочую ДВК/БК11М - при работе с натуральным железом возникнет сильно меньше вопросов.
*
Рекомендую перед работой со средствами RT-11 изучить документацию на :
1. Процессор М-ЭВМ
2. ТО на М-ЭВМ
3. Описание работы в среде RT-11, в т.ч. языка MACRO.
Это, кстати, вовсе не тоненькие брошурки...
To MM:
А можно использовать эмулятор БК001Х с теми же средствами разработки?
To litwr:
bkobj2bin делаю для консоли.
Понял где зависает, на for(;;).
Подставляю "for (int i=0;i<1000;i++)", пишет:
@cccccccc fffff060>=0 lines=2000
Possible wrong relocation!
Для чего мне это все нужно.
Хочу на FPGA сделать БК0010. Ресурсов платы хватит только на него.
Для моделирования нужен файл с программой. Можно текстовый или двоичный.
Цикл тут не причем. Данные у вас не читаются входные. Попробуйте запустить программку
Получится после компиляции, например, prog.exe, запускаемКод:/* prog.c */
#include<stdio.h>
main() {
char s[100];
while (!feof(stdin)) {
gets(s);
printf("%s\n", s);
}
}
prog <prog.c
это должно распечатать текст программки - если это заработает, то должен почти наверняка заработать и компоновщик. Тестировал с древним ХР Виндуз - там всё работает, до нового раньше пн не доберусь.
Работает. Вот что пишет в консоли:
C:\VC6prj\prog>prog 0<prog.c
/* prog.c */
#include<stdio.h>
main() {
char s[100];
while (!feof(stdin)) {
gets(s);
printf("%s\n", s);
}
}
}
C:\VC6prj\prog>pause
Для продолжения нажмите любую клавишу . . .
To litwr:
Может выложите свой .dump файл, я до понедельника попробую с ним.
Николай.
Похоже у нас ситуация непонимания. Какой это мой dump-файл? Кстати, протестировал компоновщик под Виндуз 8.1 - отлично работает. Вы использовали готовый EXE, выложенный на сайте? Должен работать, если у вас именно Виндуз. Скачайте, распакуйте, запускайте... Если опять не пойдет, то публикуйте снимки экрана, по которым можно будет понять, что вы не так делаете.
Вы в примере писали prog 0<prog.c - обычно 0 не пишут, это идёт по умолчанию, но может ваши очень особенные настройки этого требуют, пишите этот 0 и при запуске компоновщика. Такой 0 обычно только в Униксах использует, под старыми виндами так было нельзя писать совсем.
Использую Ваш bk-obj2bin.exe.
Сделал bat файл следующего содержания:
rem bkcompile FILENAME.asm
rem F=${1%%asm}
rem macro11 -yus -ysl 16 -o $a.obj -l $a.lst $1
macro11.exe -yus -ysl 16 hello.asm -o a.obj -l a.lst
dumpobj a.obj a.dump
bk-obj2bin <a.dump >a.bin
pause
При запуске пишет следующее:
D:\DOWNLOAD\CPU\pdp-11\Litwr\bklinker>rem bkcompile FILENAME.asm
D:\DOWNLOAD\CPU\pdp-11\Litwr\bklinker>rem F=${1%asm}
D:\DOWNLOAD\CPU\pdp-11\Litwr\bklinker>rem macro11 -yus -ysl 16 -o $a.obj -l $a.l
st $1
D:\DOWNLOAD\CPU\pdp-11\Litwr\bklinker>macro11.exe -yus -ysl 16 hello.asm -o a.obj -l a.lst
D:\DOWNLOAD\CPU\pdp-11\Litwr\bklinker>dumpobj a.obj a.dump
GSD:
MODNAME =0 flags=0
PSECT =0 flags=40
PSECT . ABS.=1057 flags=104
XFER . ABS.=1 flags=10
ENDGSD
RLD
Location counter definition . ABS.+1000
TEXT ADDR=1000 LEN=57
001000: 012701 000012 012702 000020 ........
001010: 104024 012701 001030 012702 ........
001020: 000036 104020 104006 000000 ........
001030: 111233 042510 046114 020117 ..HELLO
001040: 042120 026520 030461 053440 PDP-11 W
001050: 051117 042114 005041 000 ORLD!..
ENDMOD
D:\DOWNLOAD\CPU\pdp-11\Litwr\bklinker>bk-obj2bin 0<a.dump 1>a.bin
И висит.
0 и 1 не пишу, хотя в консоли они есть.
http://img.radiokot.ru/files/102181/nkzjchoxe.jpg
Теперь понятно. Вы бы посмотрели на файл a.dump - он же нетекстовый. Нужно
dumpobj a.obj >a.dump
Hy и морокa из-за одного значка.
Ура, заработало!
Спасибо за терпение.
Николай.
To litwr:
Извините за назойливость, а не могли бы Вы сделать утилитку
для формирования .rom файлов (типа bkobj2rom) без первых 4 байтов в .bin? И выложить на своем сайте. Может кому-нибудь тоже пригодится?
Николай.
Это будет тогда неведомо какой формат, вместо стандартного BIN, который можно сразу грузить в любой эмулятор. Давайте лучше напишем утилитку BIN2HEX. Например так
Если считаете ее полезной для кого-то еще, то можете где-нибудь и разместить.Код:#include<stdio.h>
main() {
getchar();
getchar();
getchar();
getchar();
for(;;){
int c = getchar();
if (c == EOF) break;
putchar(c);
}
}
Я так понял эта утилита убирает 4 байта из bin файла?
Я пишу тесты для модели процессора ВМ1 и эти байты мне мешают.
Попробую сделать.
Спасибо.
---------- Post added at 20:59 ---------- Previous post was at 20:31 ----------
Сделал так, работает.
#include<stdio.h>
int main(int argc, char *argv[]) {
FILE *binfile;
FILE *romfile;
char c;
if (argv[1])
{
binfile = fopen(argv[1], "rb");
if (binfile == NULL) return 1;
}
if (argv[2])
{
romfile = fopen(argv[2], "wb");
if (romfile == NULL) return 1;
}
c = fgetc(binfile);
c = fgetc(binfile);
c = fgetc(binfile);
c = fgetc(binfile);
for(;;){
c = fgetc(binfile);
if (c == EOF) break;
fputc(c,romfile);
}
fclose(binfile);
fclose(romfile);
return 0;
}
---------- Post added at 21:03 ---------- Previous post was at 20:59 ----------
Еще один вопрос.
А те .rom файлы, которые есть к некоторым эмуляторам с содержимым ПЗУ
разве имеют другой формат?
Не любите знаков < и >? Ту программку, что приведена надо запускать
А ещё лучше поставьте себе древнюю всем известную для таких нужд утилиту dd, которая быстренько решает такие и подобные вопросы, наш, например, такКод:bin2hex <binfile >hexfile
Код:dd if=binfile of=hexfile bs=1 skip=4
To litwr:
Написал простенький тест для моделирования ВМ1.
.TITLE testpdp11
.ASECT
.=0000
;;;;;;;;;;;;;;;;;;;;;;;;; tst_bcc.asm
BR 000022;
L1: MOV #1, R1;
MOV #2, R2;
BR L2;
HALT;
.=0022
BR L1;
L2: MOV R1, R3;
ADD R2, R3;
CMP #3, R3;
BEQ L3;
HALT;
.=0040
L3: CLR R3;
CMP #0, R3;
BEQ L4;
HALT;
L4: MOV #1, R3;
CMP #0, R3;
BNE LJ1;
HALT;
LJ1:
CMP #0, R3;
BEQ L5;
BLT L5+2;
L5:
HALT;
CMP #0, R3;
BLE LJ2;
HALT;
LJ2:
CMP R3, #0;
BGT LJ3;
HALT;
LJ3:
;;;;;;;;;;;;;;;;;;;;;;;;; tst_alu.asm
MOV #0177400, R4;
MOV #0007007, R5;
BIS R4, R5 ; OR
CMP #0177407, R5;
BEQ LA1;
HALT;
LA1:
MOV #0000370, R4;
; MOV #0177407, R5;
BIT R4, R5 ; AND
BEQ LA2;
HALT;
LA2:
MOV #0177407, R4;
; MOV #0177407, R5;
BIC R4, R5 ; RD AND not RS
CMP #0, R5;
BEQ LA3;
HALT;
LA3:
MOV #0000777, R4;
MOV #0177000, R5;
ADD R4, R5 ; ADD
CMP #0177777, R5;
BEQ LA4;
HALT;
LA4:
MOV #0000377, R4;
MOV #0177400, R5;
ADD R4, R5 ; ADD
CMP R5, #0177777;
BEQ LA5;
HALT;
LA5:
MOV R3, @#1000;
MOV R1, @#2000;
MOV #100, @#4000;
MOV #2, R2;
MOV #200, @#10000;
NOP;
WAIT;
.END
Использовал Ваш компоновщик.
Долго не мог понять, почему не работает.
Оказывается, .bin файл не соответствует файлу .dump.
В инструкцию вклинивается символ 0xD и все сдвигается на 1 байт.
Скрин прилагаю.
Николай.
http://img.radiokot.ru/files/102181/nup6eefno.jpg
Извините что вмешиваюсь.
И для компиляции и для линковки можно использовать "RT-11 в командной строке" от Patron: http://zx-pk.ru/showthread.php?t=24755
Собственно я его успешно использовал, написал батник для компиляции:
И для компоновки:Код:C:\bin\rt11\rt11.exe MACRO LEVELS.MAC
C:\bin\rt11\rt11.exe MACRO/LIST:DK: MAIN.MAC+SYSMAC.SML/LIBRARY
И главное это родные MACRO и LINK, проверенные десятилетиями.Код:C:\bin\rt11\rt11.exe LINK MAIN,LEVELS /MAP:OUTPUT.MAP
Проблемка в Виндуз. Она очень простая: fwrite в текстовый файл Виндуз автоматически добавляет код 0d перед каждым кодом 0a. Получается, что из Виндуз bk-obj2bin использовать нельзя. Собираюсь обновить сайт и убрать оттуда сборку для Виндуз. Решить проблемку не сложно - надо лишь не использовать стандартные потоки, а открывать файлы в бинарном режиме и не использовать перенаправлений при вызове. Это то, что вы сделали для удаления 4-х байт, добавив argv, fopen, fclose, ... Сам под Виндуз почти ничего не запускаю и могу только удивляться как далекие от офисного планктона могут.
Учитывая, что решение предложено, ничего по изменению кода делать не буду. Код под GNU - каждый может взять и подправить.
Жаль, что эмулятор консоли RT-11 без исходников.
Спасибо, пока получается с RT-11.
Проверяю дальше.
Николай.
Ну офигеть проблемка, и пачка холивара в придачу.
Вот тут http://stackoverflow.com/questions/2...to-binary-mode
советуют так:
Код:#ifdef _WIN32
#include <io.h>
#include <fcntl.h>
#endif
...
#ifdef _WIN32
setmode(fileno(stdout),O_BINARY);
setmode(fileno(stdin),O_BINARY);
#endif
Вот ещё один toolchain для компиляции PDP-11 программ на PC, от Сергея Вакуленко:
https://github.com/sergev/bk0012/tree/master/toolchain
(мопед не мой, ездить пока не пробовал)
Я сейчас занят созданием среды для кросс разработки на Macro-11 в Sublime-Text.
Хотел "подсмотреть", но там, увы, уже ничего нет :(
Поэтому у меня вопрос: не сохранились ли регексы от этого проекта, не хочется изобретать велосипед, если nzeemin не против, конечно, что я их буду использовать в своем проекте.
Процентов 60 подсветки у меня уже работает, но написание регексов мне дается с трудом.
Проект в аттаче.
Никаких ограничений на использование я не накладываю.
Вот ещё один похожий проект: https://github.com/guywald1/pdp11-grammar
Проект дошел до стадии, когда его уже можно показывать :)
Собственно вот
Критика и пожелания приветствуются.
Прошу прощения, если я что-то пропустил. Если ли какие-то новости и истории успеха в использовании pdp11-aout-gcc для вм1? Я собрал его с newlib-ом на макосе. Все собирается, тестовый "хелло вролд" линкуется в a.out размером 2кб. Как и у всех до этого, у меня проблема с тем, что gcc генерирует инструкции EIS: ashc/mul/div. Знаю про драйвер EM.SYS для RT-11, но у меня голый металл и для него мне придется делать адское варево из потрохов этого драйвера, кастомного линкер скрипта, ну и еще мало ли чего.
Может быть кто-то уже решил этот вопрос более серьезно и хочет поделиться своими реализациями интринсиков без EIS, pdp11.md может быть?
Правильное и четкое решение вопроса - использование Оригинальных ( правильных, из комплекта поставки ДВК ) программных средств RT-11, например
в эмуляторе ДВК господина Патрона.
Это Вам любой военпред подтвердит - "к/с софта совпадают" ----> "решение правильное". А тип используемого процессора ( i3, например, вместо 1801ВМх ) - дело глубоко вторичное, не всем это будет вообще понятно :v2_dizzy_army:
MM, спасибо, про средства RT-11 я в курсе. Но я ищу вменяемый компилятор Си.