Difference between revisions of "Uknc notes"
(Перенес сюда старые новости с главной страницы) |
|||
Line 1: | Line 1: | ||
+ | == [[User:Nzeemin|NZeemin]] 13:57, 23 March 2007 (EDT) == | ||
+ | Если вставить в эмулятор НЕзагрузочный диск (а вставить его можно командой Emulator|Floppy0) и выбрать в начальном меню пункт <code>1 - диск</code>, то спустя несколько секунд мы увидим вот такую картинку: | ||
+ | |||
+ | [[Image:UKNC-NoBootOnVolume.png]] | ||
+ | |||
+ | Это всё уже достижения Феликса, моих знаний для отладки таких чудес давно уже не хватает. | ||
+ | Зато я делал для него отладчик :) | ||
+ | Но об отладчике — в другой раз, вернёмся к надписи на экране. По крайней мере, я могу объяснить вам откуда она взялась. | ||
+ | |||
+ | С диска был запрошен на чтение сектор 1 дорожки 0. Эти данные прочитались в память ЦПУ с адреса 000000 и выглядят они вот так: | ||
+ | 000000 000240 000005 000404 000000 000000 041420 116020 000400 =··········C·°·· | ||
+ | 000020 004067 000044 000015 000000 005000 041077 047517 026524 7·$·······?BOOT- | ||
+ | 000040 026525 067516 061040 067557 020164 067157 073040 066157 U-No boot on vol | ||
+ | 000060 066565 006545 005012 000200 105737 177564 100375 112037 ume···-·ъ-tЪЩ-·¦ | ||
+ | 000100 177566 100372 000777 000000 000000 000000 000000 000000 vЪЗ-Ъ··········· | ||
+ | 000120 000000 000000 000000 000000 000000 000000 000000 000000 ················ | ||
+ | 000140 000000 000000 000000 000000 000000 000000 000000 000000 ················ | ||
+ | 000160 000000 000000 000000 000000 000000 000000 000000 000000 ················ | ||
+ | Этому соответствует вот такой код: | ||
+ | 000020 004067 JSR R0, 000070 | ||
+ | 000022 000044 | ||
+ | --- | ||
+ | 000024 ; Тут собственно последовательность байт для передачи на терминал | ||
+ | --- | ||
+ | 000070 105737 TSTB @#177564 ; Проверяем слово состояния терминала | ||
+ | 000072 177564 | ||
+ | 000074 100375 BPL 000070 ; Терминал готов принять очередной символ? | ||
+ | 000076 112037 MOVB (R0)+, @#177566 ; Отправляем символ на терминал | ||
+ | 000100 177566 | ||
+ | 000102 100372 BPL 000070 ; Появился не-символ - значит все выдали | ||
+ | 000104 000777 BR 000104 ; Зацикливание | ||
+ | При переходе на адрес 000070, в регистр R0 попадает значение 000024, по которому находится серия символов для терминала. После конца последовательности находится НЕ-символ, отличающийся наличием верхнего бита, и этот НЕ-символ по совместительству является командой по адресу 000070. | ||
+ | |||
+ | P.S. Кстати, приведённый здесь дамп и код — это copy/paste из консоли нашего отладчика. Ну, кроме комментариев, конечно… | ||
+ | |||
== [[User:Felix|Felix]] 01:10, 23 March 2007 (EDT): == | == [[User:Felix|Felix]] 01:10, 23 March 2007 (EDT): == | ||
Revision as of 05:15, 27 March 2007
Contents
NZeemin 13:57, 23 March 2007 (EDT)
Если вставить в эмулятор НЕзагрузочный диск (а вставить его можно командой Emulator|Floppy0) и выбрать в начальном меню пункт 1 - диск
, то спустя несколько секунд мы увидим вот такую картинку:
Это всё уже достижения Феликса, моих знаний для отладки таких чудес давно уже не хватает. Зато я делал для него отладчик :) Но об отладчике — в другой раз, вернёмся к надписи на экране. По крайней мере, я могу объяснить вам откуда она взялась.
С диска был запрошен на чтение сектор 1 дорожки 0. Эти данные прочитались в память ЦПУ с адреса 000000 и выглядят они вот так:
000000 000240 000005 000404 000000 000000 041420 116020 000400 =··········C·°·· 000020 004067 000044 000015 000000 005000 041077 047517 026524 7·$·······?BOOT- 000040 026525 067516 061040 067557 020164 067157 073040 066157 U-No boot on vol 000060 066565 006545 005012 000200 105737 177564 100375 112037 ume···-·ъ-tЪЩ-·¦ 000100 177566 100372 000777 000000 000000 000000 000000 000000 vЪЗ-Ъ··········· 000120 000000 000000 000000 000000 000000 000000 000000 000000 ················ 000140 000000 000000 000000 000000 000000 000000 000000 000000 ················ 000160 000000 000000 000000 000000 000000 000000 000000 000000 ················
Этому соответствует вот такой код:
000020 004067 JSR R0, 000070 000022 000044 --- 000024 ; Тут собственно последовательность байт для передачи на терминал --- 000070 105737 TSTB @#177564 ; Проверяем слово состояния терминала 000072 177564 000074 100375 BPL 000070 ; Терминал готов принять очередной символ? 000076 112037 MOVB (R0)+, @#177566 ; Отправляем символ на терминал 000100 177566 000102 100372 BPL 000070 ; Появился не-символ - значит все выдали 000104 000777 BR 000104 ; Зацикливание
При переходе на адрес 000070, в регистр R0 попадает значение 000024, по которому находится серия символов для терминала. После конца последовательности находится НЕ-символ, отличающийся наличием верхнего бита, и этот НЕ-символ по совместительству является командой по адресу 000070.
P.S. Кстати, приведённый здесь дамп и код — это copy/paste из консоли нашего отладчика. Ну, кроме комментариев, конечно…
Felix 01:10, 23 March 2007 (EDT):
А мы в загрузчике RT11 :) -- ему пока, правда, что-то не живется, но тем-не менее.... Уфф -- ну и намучался я с контроллером дисковёрта...
Felix 22:52, 20 March 2007 (EDT):
Ну вот мы и подошли к плотной работе с внешними устройствами -- ибо внутренние, согласно комплексному самотесту -- уже в порядке (не забудте -- что там тестируется все -- даже математика процессора)...
P.S. Оказывается эмулятор лучше чем настоящее железо -- у меня на машине -- на 3м проходе уже ошибки памяти появлялись
NZeemin 16:00, 20 March 2007 (EDT):
Сделал в меню команду сохранения скриншота, так что уже без лишних рамочек:
За кадром остаётся огромное количество работы, которую проделывает Феликс для того, чтобы вся эта радость заработала как надо…
2007/03/20
Сегодня УКНЦ полностью ожил -- тест показывает 0 ошибок и мы готовы к загрузке реального софта :
2007/03/15
Третья запись за сегодня
УРА!!! исправил страааашную ошибку в процессоре --- заработало всё :) теперь видно -- что-же печаталось
Проблема была в адресации -- не учитывалась байтовая адресация!
Смотрим сюда --
--Felix 19:04, 15 March 2007 (EDT)
2007/03/15
Вторая запись за сегодня --
по адресу 14142 - таблица адресов символов в фонте
sub_111272 - печать символа R0
--Felix 16:52, 15 March 2007 (EDT)
2007/03/15
Пример работы советских кодописателей == спагетти а не код
ROM:111112 ; --------------------------------------------------------------------------- ROM:111112 ROM:111112 loc_111112: ; CODE XREF: ROM:111132 ROM:111112 add @#22546, PC ROM:111116 return ROM:111120 ; --------------------------------------------------------------------------- ROM:111120 trap 4 ROM:111122 inc @#7064 ROM:111126 dec @#7064 ROM:111132 beq loc_111112 ROM:111134 tst @#7060 ROM:111140 beq loc_111204 ROM:111142 return ROM:111144 ; --------------------------------------------------------------------------- ROM:111144 inc @#7066 ROM:111150 mov @#23150, R5 ROM:111154 mov 34(R5), @#177016 ROM:111162 mov 40(R5), @#177020 ROM:111170 mov 40(R5), @#177022 ROM:111176 movb 70(R5), @64(R5) ROM:111204 ROM:111204 loc_111204: ; CODE XREF: ROM:111140 ROM:111204 movb @22542, R0 ROM:111210 inc @#22542 ROM:111214 bic #200, @#22542 ; 'A' ROM:111222 mov #-66652, -(SP) ROM:111226 bic #-400, R0 ROM:111232 cmp R0, #40 ; ' ' ROM:111236 bcc loc_111260 ROM:111240 tstb @#22552 ROM:111244 beq loc_111252 ROM:111246 jmp loc_111730 ROM:111252 ; --------------------------------------------------------------------------- ROM:111252 ROM:111252 loc_111252: ; CODE XREF: ROM:111244 ROM:111252 asl R0 ROM:111254 jmp @13142(R0) ROM:111260 ; --------------------------------------------------------------------------- ROM:111260 ROM:111260 loc_111260: ; CODE XREF: ROM:111236 ROM:111260 cmpb R0, #77 ; '?' ROM:111264 blos sub_111272 ROM:111266 bis @#22556, R0 ROM:111272 ; --------------- S U B R O U T I N E --------------------------------------- ROM:111272 ROM:111272 ROM:111272 sub_111272: ; CODE XREF: ROM:111264�j ROM:111272 ; ROM:111744�P ... ROM:111272 asl R0 ROM:111274 mov 14142(R0), R1 ROM:111300 mov 10(R5), R0 ROM:111304 mov #-770, R2 ROM:111310 mov #-754, R3 ROM:111314 mov @R5, @R2 ROM:111316 add 56(R5), PC ROM:111322 movb (R1)+, R4 ROM:111324 mov R4, @R3 ROM:111326 add R0, @R2 ROM:111330 movb (R1)+, R4 ROM:111332 mov R4, @R3 ROM:111334 add R0, @R2 ROM:111336 movb (R1)+, R4 ROM:111340 mov R4, @R3 ROM:111342 add R0, @R2 ROM:111344 movb (R1)+, R4 ROM:111346 mov R4, @R3 ROM:111350 add R0, @R2 ROM:111352 movb (R1)+, R4 ROM:111354 mov R4, @R3 ROM:111356 add R0, @R2 ROM:111360 movb (R1)+, R4 ROM:111362 mov R4, @R3 ROM:111364 add R0, @R2 ROM:111366 movb (R1)+, R4 ROM:111370 mov R4, @R3 ROM:111372 add R0, @R2 ROM:111374 movb (R1)+, R4 ROM:111376 mov R4, @R3 ROM:111400 add R0, @R2 ROM:111402 movb (R1)+, R4 ROM:111404 mov R4, @R3 ROM:111406 add R0, @R2 ROM:111410 movb (R1)+, R4 ROM:111412 mov R4, @R3 ROM:111414 add R0, @R2 ROM:111416 movb (R1)+, R4 ROM:111420 mov R4, @R3 ROM:111422 inc @R5 ROM:111424 dec 16(R5) ROM:111430 bne locret_111624 ROM:111432 mov 22(R5), @R5 ROM:111436 mov 4(R5), 16(R5) ROM:111444 ROM:111444 loc_111444: ; CODE XREF: ROM:114222�J ROM:111444 add #54, 32(R5) ; ',' ROM:111452 cmp 32(R5), 26(R5) ROM:111460 bne loc_111470 ROM:111462 mov 24(R5), 32(R5) ROM:111470 ROM:111470 loc_111470: ; CODE XREF: sub_111272+166�j ROM:111470 add @32(R5), @R5 ROM:111474 dec 20(R5) ROM:111500 bne locret_111624 ROM:111502 add 74(R5), PC ROM:111506 br loc_111626 ROM:111510 ; --------------------------------------------------------------------------- ROM:111510 inc 20(R5) ROM:111514 mov #13, -(SP) ROM:111520 add #54, 30(R5) ; ',' ROM:111526 cmp 30(R5), #4670 ROM:111534 bne loc_111544 ROM:111536 mov #2500, 30(R5) ROM:111544 ROM:111544 loc_111544: ; CODE XREF: sub_111272+242�j ROM:111544 ; sub_111272+300�j ROM:111544 mov @#23170, R0 ROM:111550 beq loc_111574 ROM:111552 bpl loc_111556 ROM:111554 neg R0 ROM:111556 ROM:111556 loc_111556: ; CODE XREF: sub_111272+260�j ROM:111556 cmp R0, #14 ROM:111562 blos loc_111614 ROM:111564 trap 0 ROM:111566 mov @#23150, R5 ROM:111572 br loc_111544 ROM:111574 ; --------------------------------------------------------------------------- ROM:111574 ROM:111574 loc_111574: ; CODE XREF: sub_111272+256�j ROM:111574 clr @#23164 ROM:111600 mov #2, @#7134 ROM:111606 movb #177, @23160 ; '?' ROM:111614 ROM:111614 loc_111614: ; CODE XREF: sub_111272+270�j ROM:111614 call sub_113344 ROM:111620 add (SP)+, @#23170 ROM:111624 ROM:111624 locret_111624: ; CODE XREF: sub_111272+136�j ROM:111624 ; sub_111272+206�j ROM:111624 return ROM:111626 ; --------------------------------------------------------------------------- ROM:111626 ROM:111626 loc_111626: ; CODE XREF: sub_111272+214�j ROM:111626 jmp loc_114316 ROM:114316 ; --------------------------------------------------------------------------- ROM:114316 ROM:114316 loc_114316: ; CODE XREF: sub_111272+334�J ROM:114316 clr R0 ROM:114320 jmp loc_115720 ROM:115720 ; --------------------------------------------------------------------------- ROM:115720 ROM:115720 loc_115720: ; CODE XREF: ROM:114320�J ROM:115720 sub @32(R5), @R5 ROM:115724 mov 12(R5), 20(R5) ROM:115732 sub R0, 20(R5) ROM:115736 mul #54, R0 ; ',' ROM:115742 add 30(R5), R1 ROM:115746 add 74(R5), PC ROM:115752 br loc_115766 ROM:115766 ; --------------------------------------------------------------------------- ROM:115766 ROM:115766 loc_115766: ; CODE XREF: ROM:115752�j ROM:115766 mov R1, 32(R5) ROM:115772 add @R1, @R5 ROM:115774 return ROM:114216 ; --------------------------------------------------------------------------- ROM:114216 ROM:114216 loc_114216: ; CODE XREF: sub_114310+4�j ROM:114216 sub @32(R5), @R5 ROM:114222 jmp loc_111444 ROM:114222 ; --------------------------------------------------------------------------- ROM:114310 ; --------------- S U B R O U T I N E --------------------------------------- ROM:114310 ROM:114310 ROM:114310 sub_114310: ; CODE XREF: ROM:112030�P ROM:114310 call sub_114336 ROM:114314 br loc_114216
--Felix 10:10, 15 March 2007 (EDT)
2007/03/14
Сегодня сделал спрайтовый вывод, так-же известный как символьный вывод. Где-то побита математика -- явно не правильно рассчитывается начало символа в фонте (не только смещено на половину но и не правильный символ). Причем судя по цвету -- сообщение об ошибке тестирования.
смотри картинку:
--Felix 23:33, 14 March 2007 (EDT)