-
Похоже у нас ситуация непонимания. Какой это мой 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 файлы, которые есть к некоторым эмуляторам с содержимым ПЗУ
разве имеют другой формат?
-
Не любите знаков < и >? Ту программку, что приведена надо запускать
Код:
bin2hex <binfile >hexfile
А ещё лучше поставьте себе древнюю всем известную для таких нужд утилиту dd, которая быстренько решает такие и подобные вопросы, наш, например, так
Код:
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
И для компоновки:
Код:
C:\bin\rt11\rt11.exe LINK MAIN,LEVELS /MAP:OUTPUT.MAP
И главное это родные MACRO и LINK, проверенные десятилетиями.