Вход

Просмотр полной версии : БК-0010/0011: Разное



CD-Inc
02.08.2011, 00:12
Раскопанная в Тырнете схема на БП МС9016, по простому "педалька", плохо читалась и содержала залепухи, как выяснилось.

то что нарисовал по плате, перепроверил, поэтому ошибок вроде нет.

Atari1974
10.11.2011, 22:40
А мне самое обидное что в далеких 90х продал мой родной и первый комп с которым познакомился еще в 87м году лично. Мы с отцом купили его с монитором в комплекте родным. Очень жаль сейчас что за безценок почти отдал. Теперь не отдал бы вообще.
Клад до сих пор считаю шедевром на БК.
На эмуле иногда запускаю его чтоб вспомнить

CD-Inc
11.01.2012, 00:02
Вот знакомый подарил на Новый год, вкусный дисковод.
Когда-то давно на него слюни пускал, но бабла не хватило.

CD-Inc
11.01.2012, 00:17
Не так давно, плёнка в клаве начала глючить, пока разбирался зарисовал, для себя на бумагу, шелкографию на ней и сделал сетку подключения, если в электронный вид перерисую, надо будет ещё кому?
А то рисовать там прилично, чисто для себя, вроде как и лень.

Mad Killer/PG
11.01.2012, 01:02
CD-Inc, думаю надо,возможно кто-то умный реализует контроллер бк\пс2 клавы.

Woland
11.01.2012, 02:36
Не так давно, плёнка в клаве начала глючить, пока разбирался зарисовал, для себя на бумагу, шелкографию на ней и сделал сетку подключения, если в электронный вид перерисую, надо будет ещё кому?
А то рисовать там прилично, чисто для себя, вроде как и лень.

Я думаю что надо. Нужно иметь материалы для воссоздания нехватающих комплектующих в любой момент. Пленка еще полбеды, а вот как саму клавиатуру воспроизвести..
и 1801ВП1-128 закончилась в продаже, а это уже беда.

CD-Inc
20.01.2012, 00:06
3.069.008 "Блок ПЗУ"

CodeMaster
29.01.2012, 19:02
коричневый "кирпич"

По чём?

CodeMaster
30.01.2012, 09:30
На морде +5 и +12, на разъём заведена куча проводов, на 2-м точно масса, на всех(?) остальных +5

dk_spb
30.01.2012, 11:58
На нем же написано.
Такие тоже были, иногда в комплекте с БК шли.

А про коричневый кирпич я не понял вопроса.

CodeMaster
30.01.2012, 12:00
На нем же написано.

Написано одно, по факту другое, где +12 вольт? И нафига столько проводов из разных мест подведено, если на всех +5 В?


А про коричневый кирпич я не понял вопроса.

Есть вариант надыбать, интересует цена вопроса.

CD-Inc
30.01.2012, 12:56
такие видел только со старыми БК, с плоской клавой.
насчёт 12в в кирпиче не в курсе, схема кирпича (http://forum.maxiol.com/index.php?act=Attach&type=post&id=4135)
по 5 вольт распиновка у всех БП БК одинаковая.
я в свой, для 12в, кренку паял.

CodeMaster
30.01.2012, 13:06
по 5 вольт распиновка у всех БП БК одинаковая.

Да как бы не совсем. Вот (http://bk0010.narod.ru/images/BK-0010-interfaces.jpg)схема проводов. Я понимаю, что если будут запаяны 2 и 4, то кризиса в соответствии со схемой не случится. Хотя непонятно (и не видно), что выведено на 1-й пин по схеме?

dk_spb
30.01.2012, 13:26
Есть вариант надыбать, интересует цена вопроса.
Опять не понял. Цена вопроса в принципе от 10 до 1000 руб в зависимости от состояния и консенсуса между продавцом и покупателем.

CD-Inc
30.01.2012, 14:08
Да как бы не совсем. Вот (http://bk0010.narod.ru/images/BK-0010-interfaces.jpg)схема проводов. Я понимаю, что если будут запаяны 2 и 4, то кризиса в соответствии со схемой не случится. Хотя непонятно (и не видно), что выведено на 1-й пин по схеме?

посмотрите повнимательней, как раз всё сходиться 3,5 +5в; 2,4 - земля
1 нога Обр. Связь на ШИМ.
у меня, во всяком случае, на всех "кирпичах" так.

А вот на БП БК МС9016 "педалька" на 1 ногу разьёма БП заведено +12В с кренки которая питает микросх. ШИМ, скорее для контроля на заводе, но которую можно пользовать, но с оглядкой на небольшой радиатор на крен"е в БП.

CodeMaster
30.01.2012, 15:22
Опять не понял.

Какой ты непонятливый ;-) Надыбать я его могу не за бесплатно, по этому и спрашиваю цену, стОит ли заморачиваться.

---------- Post added at 14:22 ---------- Previous post was at 14:21 ----------


1 нога Обр. Связь на ШИМ.

А поподробней можно, что это ОС и для чего?

CD-Inc
30.01.2012, 16:24
А поподробней можно, что это ОС и для чего?

схема БП типа "кирпич" (http://forum.maxiol.com/index.php?act=Attach&type=post&id=4135)

цепь:
выход +5в - 2р36 - вых.конт.1 (зачем? - хз) - делитель 2р19(уст.5в) 2р20 - кт6 - вх.12нога.2д2
цель:
неизменная поддержка 5в на выходе, вне зависимости от питающего напряжения и тока нагрузки.

CodeMaster
30.01.2012, 16:39
цель: неизменная поддержка 5в на выходе


вых.конт.1 (зачем? - хз)

Вот именно это меня и интересовало. А про назначение ОС я в курсе.

CodeMaster
02.02.2012, 11:04
по 5 вольт распиновка у всех БП БК одинаковая.

Распиновка может быть, но исполнено по разному. Вот классическая разводка кирпича (который выставил на молотке)

CD-Inc
14.02.2012, 03:20
Эскиз платы стандартного КНГМД с монтажными отверстиями.

Mad Killer/PG
14.02.2012, 13:44
CD-Inc, если будет возможность опиши пожалуйста доводку БК0011 до стандарта БК0011М,спасибо.

CD-Inc
16.02.2012, 02:28
Переделка БК0011 в БК0011м,
11 - 11м

CD-Inc
19.02.2012, 13:38
Вот на днях разжился
плата БК-0010-01 под старую клаву

http://s40.radikal.ru/i088/1202/12/b63efbaa9c8dt.jpg (http://radikal.ru/F/s40.radikal.ru/i088/1202/12/b63efbaa9c8d.jpg.html)

SKcorp.
19.02.2012, 13:55
Вот на днях разжился
плата БК-0010


Это 0010-01.

CD-Inc
19.02.2012, 14:08
Это 0010-01.
А конкретно? где отличие.

SKcorp.
19.02.2012, 14:35
А конкретно? где отличие.

В резюке отключения ПЗУ.

CodeMaster
19.02.2012, 17:36
плата БК-0010-01 под старую клаву

Отсканируй в TIFFе от 600 dpi с LZW сжатием и выложи на файлообменник.

Patron
21.02.2012, 20:10
Здесь (http://bk0010.org/forum/?id=7782) можно скачать исходники программы просмотра образов любых дисков БК. (Поддерживаются форматы: RT-11, MicroDOS (из них опознаёт MKDOS, AO-DOS, Nord), Andos, HC-DOS, CsiDOS3).

Прямая ссылка: http://files.mail.ru/RPO00B

CD-Inc
27.02.2012, 05:23
Андос 3.30 + Прогр. для ХДД:

/AltPRO
ReadMY.edp - читаем внимательно, особенно в конце про прошивки 2.00 и выше.
Servis2 - последняя версия.
SetMBR - программа необходимая для инициализации ХДД для Сервис2.

CD-Inc
01.03.2012, 05:06
решил доковырять одну из плат:

был изготовлен переходник с плёночной клавы на плату для старой клавы.

http://s001.radikal.ru/i195/1203/62/1442f852cf38t.jpg (http://radikal.ru/F/s001.radikal.ru/i195/1203/62/1442f852cf38.jpg.html)

Засунул в корыто, На платах под старую клаву пьезо - динамик стоит на плате самих клавиш, а здоровую ЗП"уху пихать не хотелось, установил через ключ динамик с писишной матери, в районе гнезда МГ (справа отладочный валяется)

http://i018.radikal.ru/1203/8e/1dd05725d50ct.jpg (http://radikal.ru/F/i018.radikal.ru/1203/8e/1dd05725d50c.jpg.html)

ну и собрали энто дело - но к сожалению чуда не произошло (выкатили глюки)

http://i045.radikal.ru/1203/c0/179ad3781808t.jpg (http://radikal.ru/F/i045.radikal.ru/1203/c0/179ad3781808.jpg.html)

МКДос грузится- работает, а вот АнДос после заставки виснет, Тест МСТД после заставки глючит и сразу автоматом втыкает тест памяти, успешно его проходит, а дальше отказывается из него выходить. Хрень какая. Плюс выяснилось, что первая строка экрана отображается в качестве последней. ВП"ху на этой плате менял до этого (т.к. плата досталась с дохлой-глючной 37й).

Как-то так.

CD-Inc
06.03.2012, 03:57
СМК64-512. Режимы работы и распределение памяти.

vinxru
06.03.2012, 15:24
А я игрушку для БК написал.

http://s018.radikal.ru/i508/1203/fe/80d686483b9d.jpg

ROM-файл (http://tmaplatform.ru/media/bk0010_miner.bin)
Исходники на ассемблере (http://tmaplatform.ru/media/bk0010_miner.asm) (О системе команд 1801ВМ1 узнал только два дня назад, поэтому стиль такой)

...

И еще написал компилятор PDP11 => ROM-файл, по образу sjasm. Который и скомпилировал эту игру. Но компилятор еще надо допиливать. Там есть ляпы и макросов нет. Потом выложу, а пока только кусочек исходников (http://vinxru.livejournal.com/88374.html).

vinxru
06.03.2012, 21:28
На плате БК0010 (не -01) то же есть цветной видеовыход? Только не впаяны детали, да?

UPD: Точнее... существуют ли платы без цветного выхода вообще?

vinxru
07.03.2012, 14:36
Еще есть идея оконный интерфейс с мышкой на БК сделать. Воссоздать Windows 3 (возможно с панелью ПУСК от Windows 95+) на БК0010/11.

P.S. У меня еще висит проект переноса Zeliard на Радио-86РК, но это дизассемблирование - это такая скучная задача, что я засыпаю. Меня никто не торопит, до смерти успею :)

dmluk
07.03.2012, 19:15
На плате БК0010 (не -01) то же есть цветной видеовыход? Только не впаяны детали, да?

UPD: Точнее... существуют ли платы без цветного выхода вообще?

да.

в одном из номеров "В помощь радиолюбителю" №108 доработка описана.

svofski
08.03.2012, 17:42
vinxru, ты в курсе, что есть pdp11-gcc, который работает и которым можно писать для БК? Это, конечно, не так компактно, как на ассемблере, но имеет свои преимущества. Если у тебя есть что-то юниксоподобное, то все тулзы собираются одним скриптом.

vinxru
08.03.2012, 17:59
Я подозреваю, что существуют компиляторы для PDP-11. Лично я искал компиляторы ассемблера. (В компьютере всего 16 Кб ОЗУ, не разбежишься).
Компилятор Си мне лениво писать (хотя реально).

Найденные мной компиляторы создавали OBJ файлы (в лучшем случае). И я не нашел линкера, для превращения OBJ в ROM (или что то подобное).

Я спрашивал фанатов, как мне поступить, и все они говорили пиши прямо на PDP-11 в эмуляторе, там софт есть.

---------- Post added at 16:59 ---------- Previous post was at 16:55 ----------

У меня есть идея, добавить в ассемблер конструкции

if(R0>R4) {
..do {
..} while(--R4>0)
}

Строка "} while(--R4>0)" это команда SOB R4, ptr
Строка "if(R0>R4) {" это команды CMP R0, R4 / BGT ptr

svofski
08.03.2012, 18:01
Я говорю про кросс-компиляторы, ибо иначе практичность под вопросом. Их существует не так много. Один —*pcc, которым vak делал bkunix. Им же я пользовался для биоса своего БК-ФПГА. Он работает но безбожно глючный и ему нужна 32-битная система, на 64 не соберется. И есть pdp11-gcc, который стараниями felix-а снова генерит вполне адекватный код. И то и другое может делать bin-ы пригодные для БК.

vinxru
08.03.2012, 18:08
А что именно делать переносимым?

svofski
08.03.2012, 18:10
Прости, не понял вопрос?

vinxru
08.03.2012, 18:31
Я подумал, что речь идет о возможности компиляции одной и той же программы Си для разных процессоров.

Вот оконный интерфейс можно было бы написать на Си. Программа была бы понятнее и её можно было бы перенести на другой компьютер. Но 90% кода это работа с графикой (рисование с отсечением, это когда одно окно закрывает другое), на Си писать максимально производительные алгоритмы неудобно.

---------- Post added at 17:31 ---------- Previous post was at 17:29 ----------

Кстати, целью написания этой игры и ассемблера было как раз изучение ассемблера. :)

svofski
08.03.2012, 18:35
Код на Си, конечно же, можно компилировать для разных процессоров. Преимущества в том, что можно использовать уже написанный другими код и не обязательно для PDP-11, в том, что новый код писать сильно быстрее и в том, что другим людям потом его понимать и исправлять будет проще.

Можно делать графику на ассемблере, а высокоуровневые вещи на си, например. Если писать для БК, без ассемблера по-любому никак не обойтись.

vinxru
08.03.2012, 18:56
Посмотрю. А где скачать можно?

А C# нет? (стебусь)

svofski
08.03.2012, 18:59
Наверное можно сделать маленькую JVM, почему нет? =)

Patron
10.03.2012, 12:47
У меня есть идея, добавить в ассемблер конструкции

if(R0>R4) {
..do {
..} while(--R4>0)
}
Обычный макроассемблер RT-11 ( MACRO-11 ) позволяет модифицировать синтаксические конструкции при помощи макросов.

Вот пример реализации конструкций IF, CASE и других:


.MACRO MACSP L,I
.IF B,I
.MCALL IF,IFB,IFC,ELSE,FI,CALL,PROC,BEGIN,END
.MCALL LOOP,LOOPB,EXLOOP,REPEAT,CASE
.MCALL $20,$22,$90,$91,$92,$93,$94
$10=0
.IIF NB,L,$10=1
$11=1000
.ENDC
$0=20
$1=1
$2=0
$3=0
$4=0
$8=0
$9=1
$12=77777
.ENDM
.MACRO IF S,Q,D,T
$20 ,<S>,<Q>,<D>
IFC <Q>,<T>
.ENDM
.MACRO IFB S,Q,D,T
$20 B,<S>,<Q>,<D>
IFC <Q>,<T>
.ENDM
.MACRO $20 V,S,Q,D
.IF DIF,<Q>,<IN>
.IF DIF,<Q>,<NI>
.IF IDN,<D>,<#0>
$93 <TST'V S>
.IFF
$93 <CMP'V S,D>
.ENDC
.MEXIT
.ENDC
.ENDC
$93 <BIT'V S,D>
.ENDM
.MACRO IFC Q,T
.IF IDN,<T>,<THEN>
.IIF NE,$4,.ERROR ;U
.IIF EQ,$2,$92 $2
$90 $2*2,4,\$0
$22 F,<Q>,\$2
$2=0
.IIF NE,$3,$94 \$3,$:
$3=0
.MEXIT
.ENDC
.IF B,T
.IIF EQ,$4,.ERROR ;U
$4=0
$22 ,<Q>,\$3
$3=0
.IIF NE,$2,$94 \$2,$:
$2=0
.MEXIT
.ENDC
.IF IDN <T>,<AND>
.IIF EQ,$2,$92 $2
$22 F,<Q>,\$2
.MEXIT
.ENDC
.IF IDN,<T>,<OR>
.IIF EQ,$3,$92 $3
$22 ,<Q>,\$3
.MEXIT
.ENDC
.ERROR ;U
.ENDM
.MACRO $22 F,Q,L
$6=0
.IIF IDN,<Q>,<SLT>,$6=BLT
.IIF IDN,<Q>,<SLE>,$6=BLE
.IIF IDN,<Q>,<SGE>,$6=BGE
.IIF IDN,<Q>,<SGT>,$6=BGT
.IIF IDN,<Q>,<ULT>,$6=BLO
.IIF IDN,<Q>,<ULE>,$6=BLOS
.IIF IDN,<Q>,<UGE>,$6=BHIS
.IIF IDN,<Q>,<UGT>,$6=BHI
.IIF IDN,<Q>,<IN>,$6=BNE
.IIF IDN,<Q>,<NI>,$6=BEQ
.IIF EQ,$6,$6=B'Q
.IIF NE,$6&74377,.ERROR ;U
$6=$6/400&377
.IIF NB,F,$6=$6!1-<$6&1>
$93 BR,L
$94 .=.-1
$93 <.BYTE $6>
.ENDM
.MACRO ELSE
$91 $6,4,\$0-1
.IIF NE,$6&1,.ERROR ;N
$93 BR,\$1
$90 $1*2+1,4,\$0
$92
$94 \$6/2,$:
.ENDM
.MACRO FI
$91 $6,4,\$0-1
$94 \$6/2,$:
.ENDM
.MACRO CALL L
$93 <JSR %7,L>
.ENDM
.MACRO PROC L,S,B,C,T
;IF 'T' BLANK - FOR PDP-11, IF 'T' LSI - FOR LSI-11
$6=0
.IF NB,L
.IIF NE,$0-20,.ERROR ;N
MACSP ,I
$6=4
$90 7,0,\$0
$94 L:
.ENDC
$5=-1
.IRP R,<S>
.NTYPE $5,R
.IIF GT,$5-5,.ERROR ;T
$6=$6+4
$90 $5,0,\$0
$93 <MOV R,-(%6)>
.ENDR
.IF NB,B
.IIF LT,$5,.ERROR ;P
.IIF LE,B,.ERROR ;V
$7=B+1/2*2
.IIF GT,$7-7776,.ERROR ;V
$93 <SUB #$7,%6>
$93\10600+$5
$90 $7,0,\$0
$6=$6+2
.ENDC
.IF NB,C
.IIF DIF,<C>,<CRITICAL>,.ERROR ;U
$6=$6+1
.IF B,T
$93 <MOV @#-2,-(%6)>
$93 <MOV #340,@#-2>
$13=0
.IFF
.IIF DIF,<T>,<LSI>,.ERROR ;U
$93 <MFPS -(%6)>
$93 <MTPS #340>
$13=1
.ENDC
.ENDC
$90 $6,1,\$0
$9=$9+1
.ENDM
.MACRO BEGIN S,B,C
PROC ,<S>,<B>,<C>
.ENDM
.MACRO END
$9=$9-1
$91 $6,1,\$0-1
;.IIF NE,$6&1,$93 <MOV (%6)+,@#-2>
.IF NE,$6&1
.IF EQ,$13
$93 <MOV (%6)+,@#-2>
.IFF
$93 <MTPS (%6)+>
.ENDC
.ENDC
.IF NE,$6&2
$91 $7,0,\$0-1
$93 <ADD #$7,%6>
.ENDC
.REPT $6/4
$91 $5,0,\$0-1
$93 \12600+$5
.ENDR
.ENDM
.MACRO LOOP S
$90 $8,0,\$0
$8=0
$90 $9,0,\$0
$9=0
$5=0
.IF NB,S
.NTYPE $5,S
.IF EQ,$5-26
$93 <TST @%6>
.IFF
.IIF NE,$5-47,$93 <MOV S,-(%6)>
.ENDC
.IF EQ,$5-27
$94 <$94 $5=,^>,S,#
.IIF EQ,$5,.ERROR ;Z
.IFF
$92 $8
$93 BEQ,\$8
.ENDC
$5=1
.ENDC
$90 $1*2+$5,2,\$0
$94 \$1,$:
$92
.ENDM
.MACRO LOOPB S
.NTYPE $5,S
.IF EQ,$5&7-6
.IIF NE,$5-26,$93 <MOVB S,-(%6)>
$93 <BIC #177400,@%6>
.IFF
$93 <CLR -(%6)>
$93 <MOVB S,@%6>
.ENDC
LOOP -(%7)
.ENDM
.MACRO EXLOOP I,S,Q,D,T
.IIF NE,$9,.ERROR ;N
.IIF EQ,$8,$92 $8
.IF B,I
$93 BR,\$8
.IFF
$4=1
$3=$8
I S Q D T
.ENDC
.ENDM
.MACRO REPEAT
$91 $6,2,\$0-1
.IF NE,$6&1
$93 <DEC @%6>
$93 BNE,\$6/2
.IFF
$93 BR,\$6/2
.IFTF
.IIF NE,$8,$94 \$8,$:
.IFT
$93 <TST (%6)+>
.ENDC
$91 $9,0,\$0-1
$91 $8,0,\$0-1
.ENDM
.MACRO CASE R,L,P
.MCALL $24,VALUE,CASEND
$24 <R>,<L>,<P>
.ENDM
.MACRO $24 R,L,P
.IIF LE,L,.ERROR ;V
.IIF GT,L-7777,.ERROR ;V
$93 <CMP R,#L>
$5=$11*2
.IF B,P
.IF LE,L-172
$93 <BHI L+6*2+.>
.IFF
$93 <BLOS .+6>
$93 <JMP L+7*2+.>
.ENDC
$93 <ASL R>
$93 <ADD %7,R>
$93 <ADD 4(R),%7>
$94 $,\$11,=.
$94 $6=$,\$11+1,-.
.REPT L+1
$93 <.WORD $6>
.ENDR
.IFF
.IIF DIF,<P>,<PACKED>,.ERROR ;U
.IF LE,L-357
$93 <BHI L/2+11*2+.>
.IFF
$93 <BLOS .+6>
$93 <JMP L/2+12*2+.>
.ENDC
$93 <ADD %7,R>
$93 <MOVB 14(R),R>
$93 <BIC #177400,R>
$93 <ASL R>
$93 <ADD R,%7>
$94 $,\$11,=.
$94 $6=$,\$11+1,-.
.REPT L+1
$93 <.BYTE $6/2>
.ENDR
.EVEN
$5=$5+1
.ENDC
$94 $,\$11+1,=.
$90 <L>,0,\$0
$90 $5,3,\$0
$11=$11+3
.ENDM
.MACRO VALUE L
$91 $5,3,\$0-1
$94 $6=$,\$5/2+2
$93 <JMP $6>
.IF IDN,<L>,<>
$0=$0+1
$94 $,\$5/2+1,=.
.IFF
$91 $7,0,\$0-1
$0=$0+2
$94 $6=.-$,\$5/2
.IRP V,<L>
.IF GE,V
.IIF GT,V-$7,.ERROR ;R
.IF EQ,$5&1
$94 .=V*2+$,\$5/2
$93 <.WORD $6>
.IFF
$94 .=V+$,\$5/2
$93 <.BYTE $6/2>
.ENDC
$12=V
.IFF
.IIF GT,-<V>-$7,.ERROR ;R
.IIF LE,-<V>-$12,.ERROR ;R
.REPT -<V>-$12
.IF EQ,$5&1
$93 <.WORD $6>
.IFF
$93 <.BYTE $6/2>
.ENDC
.ENDR
$12=77777
.ENDC
.ENDR
$12=77777
$94 .=$6+$,\$5/2
.ENDC
.ENDM
.MACRO CASEND
$91 $5,3,\$0-1
$94 $,\$5/2+2,=.
$0=$0-1
.ENDM
.MACRO $90 V,T,X
$'X=V*10+T
$0=$0+1
.ENDM
.MACRO $91 V,T,X
$0=$0-1
.IIF LT,$0-20,.ERROR ;N
.IIF NE,$'X&7-T,.ERROR ;N
V=$'X/10
.ENDM
.MACRO $92 D
.IIF NB,D,D=$1
$1=$1+1
.ENDM
.MACRO $93 I,L
.IIF NE,$10,.LIST MEB
.IF B,L
I
.IFF
I L'$
.ENDC
.IIF NE,$10,.NLIST MEB
.ENDM
.MACRO $94 L,M,R
.IIF NE,$10,.LIST ME
L''M''R
.IIF NE,$10,.NLIST ME
.ENDM

vinxru
10.03.2012, 14:46
Понятно, но хочется Си. Только вот Си - это стековый язык, то есть слегка тормозной. В примере ниже используются некоторые конструкции Си, но есть только 6 регистров.

Обращаю внимание, что язык ниже - это асемблер. Только MOV заменено на = и т.п.



// Вывод меню
R0 = #txtMenu;
print();

do {
// Инициализируем генератор случайных чисел.
R1 = #256;
rand();

// Обрабатываем клавиши
R0 = @#0177662;

// Анализ клавиши
R5 = #menuItems;
do {
R1 = (R5)+;
if(R1 == #0) break;
if(R1 == R0) goto startGame;
R5 += #8;
};
};

//----------------------------------------------------------------------------
// ИГРА

startGame: // Параметры игрового поля
gameWidth = (R5)+;
gameHeight = (R5)+;
bombsCnt = (R5)+;
playfieldVA = (R5)+;

// Очистка экрана
clearScreen();
fillBlocks();

// Устанавливаем курсор в центр поля
cursorX = gameWidth >> #1;
cursorY = gameHeight >> #1;

// Очистка основных переменных
bombsPutted = #0;
gameOverFlag = #0;
time = #0;

// Очистка игрового поля
R0 = #0;
R1 = #254;
do {
playfield(R0b) = R1b;
userMarks(R0b) = #0;
} while(R0b++);

// Вывод смайлика
R0 = #bmpGood;
drawSmile();

// Рисование игрового поля
drawPlayField();

// Вывод чисел
leftNumber();
rightNumber();


mainLoop: do {
do {
// Время
...
// Ждем, пока не нажмут клавишу
} while(#128 & @#0177660 == #0);

// Стираем курсора
hideCursor();

// Код нажатой клавиши
R0 = @#0177662;

if(R0==#8 ) {
if(cursorX != #0) cursorX--;
} else
if(R0==#1Ah) {
if(cursorY != #0) cursorY--; } else
if(R0==#19h) {
cursorX++; if(cursorX == gameWidth) cursorX--;
} else
if(R0==#1Bh) {
cursorY++; if(cursorY == gameHeight) cursorY--;
} else
if(R0==#' ') {
leftClick();
} else {
rightClick();
hideCursor();
};

// Рисуем курсор
showCursor();
};

//----------------------------------------------------------------------------
// ЛЕВАЯ КНОПКА МЫШИ

leftClick: // Если бомбы не установлены, установить бомбы
if(bombsPutted == #0) goto putBombs;

// Если игра завершена, то выйти в меню
putBombsRet: if(gameOverFlag != #0) goto MenuFar;

// Попали в бомбу?
R0 = cursorX;
R1 = cursorY;
mul01();
if(playfield(R2b) == #255) goto die;

// Открыть клетку и все клетки вокруг
open();

// Проверить, выиграли ли мы
checkWin();

// Основной цикл игры
return;

//----------------------------------------------------------------------------
// ИГРОК УМЕР

die: // Вывод смайлика
R0 = #bmpBad;
drawSmile();
goto gameOver;

//----------------------------------------------------------------------------
// ЛЮБАЯ КНОПКА КЛАВИАТУРЫ - УСТАНОВКА ФЛАГА

rightClick: // Если игра завершена, то ничего не делать
if(gameOverFlag != #0) goto rightClickRet;

// Меняем флажки
R0 = cursorX;
R1 = cursorY;
mul01();
userMarks(R2b)++;
if(userMarks(R2b) == #3) userMarks(R2b) = #0;

// Пересчитать левое число
leftNumber();

rightClickRet: return;

//----------------------------------------------------------------------------
// ПОМЕСТИТЬ БОМБЫ НА ПОЛЕ

putBombs: bombsPutted++;

// Цикл
R4 = bombsCnt;
do {
putBombs2: // Координата Y
R1 = gameHeight;
rand(); // R1->R0, R1=R2=?
R3 = R0;

// Координата X
R1 = gameWidth;
rand(); // R1->R0, R1=R2=?
R1 = R3;

// Бомба не должна быть под крсором
if(cursorX==R0) if(cursorY==R1) goto putBombs2;

// Расчет адреса в массиве
mul01(); // R0,R1->R2

// Бомба в этой клетке уже есть
if(playfield(R2b) == #255) goto putBombs2;

// Ставим бомбу
playfield(R2b) = #255;
} while(R4--);

goto putBombsRet;

//----------------------------------------------------------------------------
// ПЕРЕРИСОВАТЬ КЛЕТКУ (СТЕРЕТЬ КУРСОР)

hideCursor: R0 = cursorX;
R1 = cursorY;
mul01(); // R0+R1*16 -> R2
calcCell2(); // R0,R1 -> R1
R0b = playfield(R2b);
getBitmap(); // R0 -> R0
if(R0b==#bmpUn) {
R5b = userMarks(R2b);
if(R5 == #1) R0 = #bmpF;
if(R5 == #2) R0 = #bmpQ;
};
drawCursor5: drawImage(); // R0=R1=R2=?
return;

//----------------------------------------------------------------------------
// НАРИСОВАТЬ КУРСОР ПОВЕРХ КЛЕТКИ

showCursor: R0 = cursorX;
R1 = cursorY;
calcCell2(); // R0,R1 -> R1
R0 = #bmpCursor;
goto drawTransImage;

//----------------------------------------------------------------------------
// РАСЧЕТ АДРЕСА В ВИДЕОПАМЯТИ ЯЧЕЙКИ ИГРОВОГО ПОЛЯ
// R0,R1 - Координаты => R1 - адрес

calcCell2: ASM SWAB R1;
R1 = R1 << #2 + R0 + R0 + R0 + R0 + playfieldVA;
return;

//----------------------------------------------------------------------------
// ЛОГИКА ИГРЫ
// R0,R1 - координаты. R3 - счетчик => R2 - портит

check: if(unsigned R0 >= gameWidth ) goto checkRet;
if(unsigned R1 >= gameHeight) goto checkRet;
mul01();
if(playfield(R2b) == #255) R3++;
checkRet: return;

//----------------------------------------------------------------------------
// ЛОГИКА ИГРЫ

call8: R1--; call81();
R0--; R1++; (R5)();
R0++; R0++; (R5)();
R0--; R1++; call81();
R1--;
return;

//----------------------------------------------------------------------------
// ЛОГИКА ИГРЫ

call81: R0--; (R5)();
R0++; (R5)();
R0++; (R5)();
R0--;
return;

//----------------------------------------------------------------------------
// R0+R1*16 => R2

mul01: R2 = R1 << #4 + R0;
return;

//----------------------------------------------------------------------------
// ЛОГИКА ИГРЫ

// Да, я вижу что тут все можно оптимизировать :)

open: if(unsigned R0 >= gameWidth ) goto openRet;
if(unsigned R1 >= gameHeight) goto openRet;
mul01();
if(userMarks(R2b) != #0) goto openRet;
if(playfield(R2b) != #254) goto openRet;
// Посчитать колво бомб вокруг. Результат в R3
R5 = #check;
R3 = #0;
call8();
R5 = #open;

// Записываем результат
mul01();
playfield(R2b) = R3b;

// Перерисовываем ячейку
push R0, R1 {
calcCell2(); // R0,R1 -> R1
R0 = R3;
getBitmap(); // R0 -> R0
drawImage(); // R0=R1=R2=?
};

// Если в ячейке 0, то открываем соседние ячейки
if(R3 == #0) call8();

openRet: return;

Остальное в аттаче


Команды этого языка:

break - выйти из цикла (1 команда BR)
return - выйти из подпрограммы (1 команда RTS PC)
push A, B; - сохранить в стек (1 команда MOV -(SP))
pop A, B; - извлечь из стека (1 команда MOV +(SP))
push A,B {команды } - сохранить и извлечь из стека
emt N; - прерывание (1 команда EMT)
trap N; - прерывание (1 команда TRAP)
goto A; - пейти на метку (1 команда BR)
do {} - бесконечный цикл (1 команда BR)
do {} while(A--); - цикл (1 команда SOB)
do {} while(условие); - цикл (2 команды. арифметическая+переход. Например INCB R0 / BNE или CMP R0, R1 / BGT)
if(A > B) goto C; - перейти по условию (две команды ассемблера)
if(A > B) {команды } - то же
if(A > B) {команды } else { команды } - то же, но 3 команды

И вычисления

A = B + #2 << 1 ^ R4;

Каждйы оператор - это одна команда ассемблера.

MOV B, A
ADD #2, A
ASL A
XOR R4, A

А вызов функции ().

redraw();
@#160000();
(R0) ();

Когда команда работает с байтами, то к имени регистра прибавляется b. То есть R0b, R1b, (SPb)+.

---

В архиве компилятор и исходники игры. Можно вносить в игру изменения, компилировать и получить собственную игру. А еще можно BMP файлы перерисовывать, из которых состоит интерфейс.

Patron
10.03.2012, 15:29
Понятно, но хочется Си.Есть у меня давняя идея сделать для PDP-11 пару [ операционная система + оптимизирующий кросскомпилятор C/C++ PC -> PDP-11 ]. Наверное, писать новые компиляторы под PDP-11 неправильно, поэтому кросскомпиляторы - единственное адекватное решение.

В приниципе - можно ввести в C и С++ небольшие расширения, которые будут выглядеть, как функции библиотеки, а именно [ BCS, BCC, BVS, BVC, SEC, CLC, SEV, CLV ] и использоваться, например, так:


if( BCS() ) { Error(); }
else { SEV(); }

но при генерации кода для PDP-11 будут компилироваться не в вызовы библиотеки, а в соответствующие команды ассемблера PDP-11.

...


Си - это стековый язык, то есть слегка тормозной.Но ведь никто не заставляет всегда использовать именно стек. Есть известный метод оптимизации, когда часть регистров используются компилятором, как верхушка стека, поэтому код функции, имеющей пару аргументов вызова и использующей пару временных переменных - может быть скомпилирован вообще без использования стека.

Кстати, Visual С++ (насколько мне показалось) в режиме полной оптимизации именно так и поступает - в результате реализации некоторых простых функций используют только регистры и не содержат кода пролога и эпилога.

vinxru
10.03.2012, 16:04
Кстати, Visual С++ (насколько мне показалось) в режиме полной оптимизации именно так и поступает - в результате реализации некоторых простых функций используют только регистры и не содержат кода пролога и эпилога.

Да, только при вызове функции из функции всё равно придется сохранять в стек регистры. И выхлоп от этого не большой.

Компилятор должен был расчитать дерево вызовов. И определить в какие моменты времени значения лучше хранить в регистрах. Например в одной функции, сначала лучше регистры использоваться под одну переменную, а потом под другую. В общем, ни один компилятор этого не делает.

А еще конструкция. В ней Print будет выполняться 1% времени:

if(A==1) print();

Компилируется в инструкцию

CMP A, #1
BNE Ptr1
JSR PC, Print
Ptr1:

То есть 1% времени безусловный переход не будет выполняться, а 99% будет. Это не оптимально. Надо бы компилировать:

CMP A, #1
BEQ Ptr1
Ptr2:
;-----
; Где то в другом месте
Ptr:
Mov Ptr2, (SP)-
Jmp Print

Но так так же не делает ни один компилятор.

P.S. Если модераторам не лень, то можно поделить тему пополам.

---------- Post added at 15:04 ---------- Previous post was at 14:54 ----------

Такой оптимизатор легко на Прологе можно написать (тупо перебором всех возможных вариантов), но будет ли он работать за допустимое время...

Patron
10.03.2012, 16:08
А еще конструкция. В ней Print будет выполняться 1% времени: if(A==1) print();Вероятность того, что A == 1 известна во время компиляции только в том случае, если A константа. Нельзя требовать от компилятора делать предсказания, которые он не может проверить на этапе компиляции.


1% времени безусловный переход не будет выполняться, а 99% будетДля 1801ВМ1 это без разницы - обе ветви перехода выполняются у него за одинаковое время.

vinxru
10.03.2012, 16:09
Для 1801ВМ1 это без разницы - обе ветви перехода выполняются у него за одинаковое время.

Суровый процессор.

Patron
10.03.2012, 16:16
Суровый процессор.И главное - это может легко проверить каждый.

Берём такой фрагмент кода:


bcsS:
Mov #0, R1
LL:
BCS 1$
6$: BCS 2$
8$: BCS 3$
7$: BCS 4$
3$: BCS 5$
4$: BCS 6$
5$: BCS 7$
1$: BCS 8$
2$:
SOB R1, LL


И засекаем время его выполнения при установленном и сброшенном бите C.

Mad Killer/PG
25.03.2012, 15:04
с позволения CD-Inc cхема БП STS-15 -http://rghost.ru/37211019/thumb.png
http://rghost.ru/download/37211019/33592963379f487341315e75f0068725b8810de1/%D0%91%D0%9A0010-01_STS-15.jpg

13joe
02.04.2012, 08:31
Подскажите пожалуйста,
БК-0011 от АТ-шного БП будет нормально работать (в том числе и с НГМД и прочими девайсами) или ей для нормальной работы нужет только её родной БП ?

Mad Killer/PG
02.04.2012, 08:55
Тa будeт рaботaть конeчно,eй плюс 5в нaдо от чeго угодно.
У мeня от АТшного рaботaлa.

13joe
02.04.2012, 09:50
Еще один неумный вопрос (Извините, я в БК-0011 очень сильно новичок).
БК-0011 вообще без КМ-ок будет работать или есть какие-то обязательные КМ, которые нужно обязательно впаять, иначе ни о какой работе компа не может быть и речи ?

13joe
02.04.2012, 13:54
Если у кого-нибудь есть монтажка БК-0011 с расположением и обозначением всех конденсаторов, то выложите пожалуйста :)

P.S. Было бы просто замечательно если бы в разделе БК было выложено нечто вроде пошагового руководства по диагностике и/или ремонту БК-0011.

Mad Killer/PG
02.04.2012, 14:12
Бeз КМ рaботaть нe будeт,eсть вaжныe,монтaжки нe видeл в природe,инструкция очeнь большaя будeт,но подходит тeмa по рeмонту 0010-01.

13joe
03.04.2012, 13:50
Имею еще один очень ламерский вопрос по ПЗУ БК-0011.
В плату впаяны 2 ПЗУ и есть панельки еще для двух. Что записано в впаянные ПЗУ и какие ПЗУ вставляются в панельки ?

SKcorp.
03.04.2012, 13:52
Имею еще один очень ламерский вопрос по ПЗУ БК-0011.
В плату впаяны 2 ПЗУ и есть панельки еще для двух. Что записано в впаянные ПЗУ и какие ПЗУ вставляются в панельки ?

БСВВ.
Школьная локалка или программа пользователя.

13joe
03.04.2012, 14:33
Подскажите пожалуйста расположение и номиналы КМ-ок на плате БК-0011.

bigral
06.04.2012, 01:31
Неплохо было бы перенести посты касающиеся компиляторов gcc/macro11/самодельного из сообщений в этой теме в спец тему - "Современный компилятор для PDP-11"

vinxru
07.04.2012, 21:35
Интересно. 1801ВМ1 реализованный на AVR насколько будет быстрее оригинала?

Mick
07.04.2012, 21:48
Интересно. 1801ВМ1 реализованный на AVR насколько будет быстрее оригинала?

Я вот дико извиняюсь конечно, но ты определись что тебе интересно делать. То ты игру на Апогей собрался писать, то ты контроллер PS2 клавы для Ориона делаешь, то для БК еще что там, то магнитофон ана AVR - уже всего не уследишь. Либо ты действительно многозадачный и многорукий человек, либо уж не знаю что и думать. Короче везде ты.

Спасибо что закончил для Апогей ром диск, но после этого тебя куда то унесло.

vinxru
07.04.2012, 22:28
Я вот дико извиняюсь конечно, но ты определись что тебе интересно делать. То ты игру на Апогей собрался писать, то ты контроллер PS2 клавы для Ориона делаешь, то для БК еще что там, то магнитофон ана AVR - уже всего не уследишь. Либо ты действительно многозадачный и многорукий человек, либо уж не знаю что и думать. Короче везде ты.

Спасибо что закончил для Апогей ром диск, но после этого тебя куда то унесло.

Многое из перечисленного вами, это были просто мои мысли, мои вопросы. Мне внезапно стало интересно, а делал ли кто нибудь магнитофон на AVR? Я спросил, получил ответ и всё. Так же с 1801ВМ1 на AVR. Это лишь вопрос.

Я думаю, что может быть мои мысли помогут кому нибудь. По поводу магнитофона, у меня родилась шикарная идея сделать видеовыход. То есть выбирать программу прямо на ТВ. Не надо лепить гигантский, дорогой и неудобный ЖК экран. Всё устройство будет размером меньше спичечного коробка.

Это про то что я пишу.

А занимаюсь я обычно двумя делами параллельно. Одно программирование - долгое, от месяца до нескольких лет. Сейчас это оконный интерфейс для БК. Я им неспешно занимаюсь все свободное время.

А еще есть быстрые железные проекты (от 30 минут до дня). Вот та же клавиатура для Ориона заняла ~5 часов разработки и уже закончена. Она спаяна, проверена и лежит на полке. В ветку форума я лишь пишу свои мысли, ничего не делая по этому проекту. Потом была схема Искры 1080, которую я уже перерисовал.

В данную секунду я травлю отладочную плату с ATMega8. То есть я треплюсь на форуме, а плата плавает в растворе FeCl3. С помощью этой платы я проверю, как работает моя прошивка клавиатуры Ориона на ATMega8. Это максимум час времени. А потом на основе этой же платы я буду делать Эмулятор флоповода и контроллер мыши для БК0010.

И в этот момент проекты объединяются. Эмулятор флоповода и контроллер мыши для БК0010 позволит запустить мою программу на реале!

P.S. Игрушку я только хочу сделать... очень хочу... но в этом году её не будет...

---------- Post added at 22:28 ---------- Previous post was at 22:22 ----------

Я кстати предвидел такой вопрос. Что я везде и ничего не сделал.

Поэтому на своей странице http://zx.pk.ru/member.php?u=6677 я уже давно отмечаю, что сделал, что делаю и что буду делать.

Mick
07.04.2012, 22:37
Я кстати предвидел такой вопрос. Что я везде и ничего не сделал.

Я и говорю значит многозадачный ты человек. Что же ответ понятен и вопросов больше не имею. :)

vinxru
07.04.2012, 23:05
Все проще.

Иногда хочется поработать руками, выпилить ножовкой кусок текстолита, перевести утюгом ЛУТ, вдохнуть облачко канифоли.

А иногда устаешь от кривизны своих рук. От того, что из за одной ошибки приходится всё переделывать заново. Что бы я не делал, у китайцев будет лучше и дешевле.

Программы никогда не сгорают, не взрываются и в редакторе всегда есть сохранение и откат. :) Это другой мир.

Woland
08.04.2012, 14:29
vinxru, а нет ли желания/возможности в интеллектуальном плане помочь по проблемам с mp3-модулем в рамках проекта БК-0012 ?
Вкратце проблему сформулировал тут, в последнем сообщении:
http://zx.pk.ru/showthread.php?t=17159&page=3

vinxru
08.04.2012, 14:45
vinxru, а нет ли желания/возможности в интеллектуальном плане помочь по проблемам с mp3-модулем в рамках проекта БК-0012 ?
Вкратце проблему сформулировал тут, в последнем сообщении:
http://zx.pk.ru/showthread.php?t=17159&page=3

К сожалению я вообще ничего не знаю про аппаратный MP3, FPGA и современные микросхемы.

vinxru
13.04.2012, 00:06
А что находится в 1801РЕ1-054?

и кому нужна золотая 1801ВП1-038 (вроде как таймер)

dk_spb
13.04.2012, 00:27
vinxru, Если 038 новая - мне нужна.
По первому вопросу ответ здесь http://fincoins.spb.ru/oldpc/re2/1801PE2.html

vinxru
13.04.2012, 00:36
Новая, выводы еще не отформованы (но уже немножко погнуты пальцами).

Розовая керамика, позолоченные выводы.

http://s15.radikal.ru/i188/1204/8c/eebd21360bda.jpg
http://s55.radikal.ru/i148/1204/2b/6e778d848c64.jpg

dk_spb
13.04.2012, 07:07
vinxru, Интересно, отшите, пожалуйста, в личку цену вопроса.

GARNIZON
05.05.2012, 00:58
Случайно наткнулся перебирая старые журналы "За рулем"
http://i021.radikal.ru/1205/69/0cbd41ca22b2t.jpg (http://radikal.ru/F/i021.radikal.ru/1205/69/0cbd41ca22b2.jpg.html)

13joe
30.07.2012, 16:58
Уважаемые БК-Профи !
Подскажите по ремонту бк-0011. Симптомы убойные - на экране полная тишина (даже никакого намека хоть на какое-то изображение - только релюшка щелкает при включении или выключении). вп1-037 поменял на новую (грелась как процессор) - никаких изменений (по прежнему греется как процессор и никакого намека на изображение). Процессор менять ?