Занимательно.. Не помню, что бы такие заморочки были на СМ1420...
Вид для печати
Когда с BYTEMAN запускали СМку, наткнулись на проблему работы со скриптами и успешно обошли ее. На тот момент пришли к выводу (хотя особо не проверяли), что в момент S делается RESET из-за которого в сторону PC шлется BREAK, а USBшный адаптер от него на какое-то время задумывается. Когда вставили вначале код задержки - все заработало. Пару нопов вставляли - было мало :)
Дык, давно уже. Каталог /boot. Собирается в оригинальный 4-х страничный ROM, комментарии взяты из документации.
Помнится, на БК-0010 написал дизассемблер на тамошнем Бейсике. Что бы биос декодировать. Вот чего я потом с декодированным сделал...
Но точно помню, что было дальше - соединил БК и УКНЦ - и перелил все ПЗУ-хи, до которых дотянулся. И потом с ними уже на УКНЦ, а потом на ДВК развлекался :)
- - - Добавлено - - -
Vslav, спасибо тебе, добрый человек :)
Сам удивился - может с кодом ПЗУ что-то не так, но при выполнении команды S стартовый адрес сначала увеличивается на 4 и только потом на него передаётся управление.
Поэтому, если ввести в пульте такой код:
Код:000000
?L 1000
?D 001000 240
?D 001002 241
?D 001004 242
?D 001006 243
?D 001010 244
?D 001012 775
?L 1000
?S
То выполнится он так:
Код:173252 [000344] MOV @#177560, SP ; 177560:000200 -> R6
173256 [000340] BIC #-129., SP ; 173260:177577 -> R6 :000200
173262 [000340] BEQ 173252
173264 [000340] MOV @#177562, R2 ; 177562:000015 -> R2
173270 [000340] BIC #-128., R2 ; 173272:177600 -> R2 :000015
173274 [000340] MOV @#177564, SP ; 177564:000200 -> R6
173300 [000340] BIC #-129., SP ; 173302:177577 -> R6 :000200
173304 [000340] BEQ 173274
173306 [000340] MOV R2, @#177566 ; R2 :000015 -> 177566
173312 [000340] ADD #2, R3 ; 173314:000002 -> R3 :173074
173316 [000350] MOV R3, PC ; R3 :173076 -> R7
173076 [000350] ADD R1, R2 ; R1 :051400 -> R2 :000015
173100 [000340] MOV R4, R1 ; R4 :000000 -> R1
173102 [000344] CMP #19488., R2 ; 173104:046040 -> R2 :051415
173106 [000351] BEQ 173170
173110 [000351] CMP R4, R2 ; R4 :000000 -> R2 :051415
173112 [000351] BNE 173120
173120 [000351] MOV R2, R4 ; R2 :051415 -> R4
173122 [000341] CMP #17696., R2 ; 173124:042440 -> R2 :051415
173126 [000351] BNE 173144
173144 [000351] CMP #17440., R2 ; 173146:042040 -> R2 :051415
173150 [000351] BEQ 173202
173152 [000351] CMP #21261., R2 ; 173154:051415 -> R2 :051415
173156 [000344] BNE 173164
173160 [000344] MOV #-2052., PC ; 173162:173774 -> R7
173774 [000350] RESET
173776 [000350] BNE 173652
173652 [000350] MOV #64., @#173024 ; 173654:000100 -> 173024
173660 [000340] MOV R0, R4 ; R0 :001000 -> R4
173662 [000340] BIC #-8., R4 ; 173664:177770 -> R4 :001000
173666 [000344] MOV R0, R1 ; R0 :001000 -> R1
173670 [000340] BIC R4, R1 ; R4 :000000 -> R1 :001000
173672 [000340] BEQ 173714
173674 [000340] ADD #4, R5 ; 173676:000004 -> R5 :001000
173700 [000340] BNE 173714
173714 [000340] MOV R4, R3 ; R4 :000000 -> R3
173716 [000344] ADD R3, R3 ; R3 :000000 -> R3 :000000
173720 [000344] ADD R3, R3 ; R3 :000000 -> R3 :000000
173722 [000344] ADD R3, R3 ; R3 :000000 -> R3 :000000
173724 [000344] MOV #-2134., PC ; 173726:173652 -> R7
173652 [000350] MOV #0, @#173024 ; 173654:000000 -> 173024
173660 [000344] ADD R3, R3 ; R3 :000000 -> R3 :000000
173662 [000344] ADD R3, R3 ; R3 :000000 -> R3 :000000
173664 [000344] ADD R3, R3 ; R3 :000000 -> R3 :000000
173666 [000344] ADD R3, R3 ; R3 :000000 -> R3 :000000
173670 [000344] ADD R3, R3 ; R3 :000000 -> R3 :000000
173672 [000344] MOV R5, PC ; R5 :001004 -> R7
001004 [000340] CLV
001006 [000340] BIC_PSW ^b0011
001010 [000340] CLZ
001012 [000340] BR 001006
001006 [000340] BIC_PSW ^b0011
001010 [000340] CLZ
001012 [000340] BR 001006
001006 [000340] BIC_PSW ^b0011
001010 [000340] CLZ
001012 [000340] BR 001006
Как такое ПЗУ может работать без заморочек - сложно представить.
Прикольно. ПЗУ-а пытается работать так, как будто ОЗУ вообще нет :) И код старта, а так же загрузки с устройств (такое впечатление), что общий - поэтому даже в команде S предполагается, что в R5 адрес некоего начального регистра устройства (а в случае S - откуда хотим стартовать) и перед переходом на собственно загрузчик (или адрес старта в S) этот адрес уводится на CSR (в предположении что он на +4 от этого начального регистра), что и даёт старт с адрес +4 от указанного в S. Это если я правильно пробежался по коду...