Автор |
Сообщение |
|
Дата: 16 Ноя 2013 16:42:50 · Поправил: hs_19 (16 Ноя 2013 16:43:41)
#
darkstar
Может получится отключить штатный ЦП и память, а рулить ардуиной.
А смысл?
Чем штатный плох? Жрет конечно, как не в себя, но с задачей, на мой взгляд, справляется.
Им тоже управлять от компа несложно, - набор команд известен.
|
|
Дата: 16 Ноя 2013 22:21:06 · Поправил: darkstar (17 Ноя 2013 07:22:36)
#
|
Реклама Google
|
|
|
Дата: 18 Ноя 2013 13:17:55 · Поправил: darkstar (18 Ноя 2013 13:18:08)
#
|
|
Дата: 22 Ноя 2013 18:33:29 · Поправил: darkstar (22 Ноя 2013 19:41:13)
#
Ну вот, процессор сбрасывается, вроде как результат в большинстве случаев повторяется.
Но быстродействия не хватает. Иногда захват происходит уже при смене состояния на шине...
http://www.radioscanner.ru/uploader/2013/b02.zip
Теперь есть три варианта:
- написать то же самое на ассемблере, чтобы было побыстрее,
- взять пошустрее чип, лучше сразу 16-разрядный или выше, а то Атмеловские 8 бит на 16 мегагерцах не успевают.
- затормозить тактовую частоту проца на Б10-37.
Ну или же купить нормальный анализатор :)
P.S.
Нашёл у себя в закромах отладочную плату K-LM4F120XL с 32-разрядным ядром Cortex M4.
Работает на 80 МГц. Должно хватить :)
Программу напишу в Energia http://energia.nu/
Это тоже самое, что и Arduino http://arduino.cc/ , но работает с K-LM4F120XL. |
|
Дата: 27 Ноя 2013 16:48:23
#
Подниму. Подзаглохла тема.
darkstar некогда?
|
|
Дата: 27 Ноя 2013 20:25:25
#
Подзаглохла тема. darkstar некогда?
hs_19
Разбираться с ассемблером КМ1801ВМ1 ("Электроника-60") почти через 30 лет после выпуска изделия, да еще на уровне прошивок ПЗУ - "удовольствие" еще то :) Не торопите автора. Респект ему просто за то, что взялся за это все.
|
|
Дата: 27 Ноя 2013 21:14:52 · Поправил: hs_19 (27 Ноя 2013 21:19:33)
#
AVIAAMATOR
Разбираться с ассемблером КМ1801ВМ1 ("Электроника-60") почти через 30 лет после выпуска изделия, да еще на уровне прошивок ПЗУ - "удовольствие" еще то :)
Дык, я отлично это понимаю)
Я пытался своих знакомцев предпенсионного возраста, имеющих опыт работы еще с PDP_11, расшевелить на эту тему,-получил четкий, быстрый и однозначный отказ, равнозначный посылу в известные места.
Цели торопить не было, просто интересно, есть ли новости.
|
|
Дата: 29 Ноя 2013 06:23:12 · Поправил: darkstar (29 Ноя 2013 06:23:52)
#
Спасибо всем за интерес к этой теме :)
Хобби оно на то и хобби, что на него выделяется только свободное время.
В связи с рождением сына (25.11) и командировкой (26.11-28.11) тема немного подзастопорилась, но это не навсегда.
Код портируется с ардуины на энергию без проблем, это тот же Processing, надо только заново распаять жгут проводов...
В крайнем случае, даже если я не смогу продолжить эту работу, то приведённые выше материалы сильно облегчат жизнь следующему.
Всё будет, но не сразу :)
|
|
Дата: 29 Ноя 2013 10:39:36
#
В связи с рождением сына (25.11)
Это намного важнее, Поздравляю!
|
|
Дата: 02 Дек 2013 01:08:32 · Поправил: nikifor_r (02 Дек 2013 01:09:09)
#
darkstar
Поздравляю!
|
|
Дата: 03 Дек 2013 01:01:25 · Поправил: Конкурс (03 Дек 2013 01:03:13)
#
Наконец-то удалось составить окончательную картину формата передачи данных между РПУ и ПДУ. Подробности на этой странице:
http://www.brigantina-rpu.ru/page5.html
Далее дело за малым: наладить конвертер и сделать программу для ПК. |
|
Дата: 03 Дек 2013 01:03:58
#
В связи с рождением сына (25.11)
Поздравляю!
|
|
Дата: 10 Дек 2013 11:15:26 · Поправил: darkstar (10 Дек 2013 11:16:50)
#
Спасибо всем!
Принялся опять за LM4F120, а он оказывается на 16 МГц работает... Блин!
Мало того, там полноценных портов как таковых-то и нет - всего один восьми-битый, а остальные огрызки по 5...6 бит на порт. Дольше цифру собирать. Нафик!
Буду писать в ASM-е под Мегу. Хорошо, что не распаял :)
|
|
Дата: 19 Дек 2013 11:45:10 · Поправил: darkstar (19 Дек 2013 11:52:46)
#
Что-то не движится работа с анализатором, поковыряю код...
Так, разобрал работу диспетчера.
Алгоритм прилагаю.
При вызовах TRAP 0... TRAP 10 получим указание на адрес в таблице 004 646, т.е. переход на 037 366. при этом в стеке будет лежать число 200.
команда - адрес в таблице -> адрес перехода - SP
TRAP 11 - 004 650 -> 011 264 - 201
TRAP 12 - 004 652 -> 011 100 - 202
TRAP 13 - 004 654 -> 016 620 - 203
TRAP 20 - 004 666 -> 005 064 - 210
TRAP 22 - 004 672 -> 004 352 - 212
TRAP 23 - 004 674 -> 004 362 - 213
TRAP 25 - 004 700 -> 011 112 - 215
TRAP 27 - 004 704 -> 007 576 - 217
TRAP 32 - 004 712 -> 005 016 - 222
TRAP 33 - 004 714 -> 005 026 - 223
TRAP 36 - 004 722 -> 004 002 - 226
TRAP 44 - 004 736 -> 004 404 - 234
TRAP 50 - 004 746 -> 005 110 - 240
TRAP 53 - 004 754 -> 031 514 - 243
TRAP 55 - 004 760 -> 002 610 - 245 |
|
Дата: 19 Дек 2013 12:26:46 · Поправил: darkstar (20 Дек 2013 05:31:33)
#
Вот у нас случился вызов функции TRAP 044:
034 432: TRAP 044
Трап-диспетчер отработал и отправил нас на адрес 004 404 со значением 234 в стеке (следующим числом там лежит агрумет TRAP, а именно 044, ещё дальше - сохранённое содержимое R4 и R3).
Естественно, самое ближее содержимое стека - это 004 562 - адрес возврата из подпрограммы.
Странно - сразу же следующая функция...
004 404: TRAP 033
Ладно, переходим на 005 026.
005 026: MOV #000 001,@#060 200 ; пишем число 000 001 по адресу 060 200.
Тем самым загружаем в регистр управления блочной магистралью "1".
То есть, команда TRAP 033 подключает системную магистраль к блочной.
005 034: RTS PC ; возврат из подпрограммы
Возвращаемся:
004 406: MOV #000 000,@#060 023 ; пишем число 000 000 по адресу 060 023.
Это адрес платы управления блоком Б2-114 (плата 5931).
004 414 MOV #000 000,@#072 400 ; пишем число 000 000 по адресу 072 400.
Похоже, это один из адресов блока Б10-58, связан с управлением или контролем блока защиты Э10-28.1 |
|
Дата: 19 Дек 2013 12:42:09
#
Станислав доброго, подскажи .
кишки бригантин видеть не доводилось, так только что в нете.
на каждом модуле стоит 580вв55? вот что интересно
с уважением Лев
|
|
Дата: 19 Дек 2013 12:47:26 · Поправил: darkstar (19 Дек 2013 12:59:10)
#
Похоже, 580вв55 в Бригантине не содержится :)
Это же микросхема программируемого контроллера параллельного ввода-вывода.
Там такого нет. Есть последовательный ввод-вывод и там стоит 1002ХЛ1.
В каждом модуле стоят микросборки И160-035. А что там внутри - загадка :)
|
|
Дата: 19 Дек 2013 13:02:42
#
понял / отталкиваюсь просто от 309го /пасиб за разъяснения
|
|
Дата: 20 Дек 2013 06:07:12 · Поправил: darkstar (20 Дек 2013 06:20:42)
#
004 422: MOV #000 000,@#060 027 ; пишем число 000 000 по адресу 060 027.
Это обращение к блоку Б4-35 (демодулятор телефонных видов работ).
004 430: MOV #000 000,@#060 030 ; пишем число 000 000 по адресу 060 030.
Это обращение к блоку Б5-96 (демодулятор телеграфных видов работ).
004 436: MOV #000 000,@#060 031 ; пишем число 000 000 по адресу 060 031.
Это обращение к блоку Б1-29 (местная несущая и тональный гетеродин).
004 444: MOV #000 000,@#060 021 ; пишем число 000 000 по адресу 060 021.
Это обращение к блоку Б1-25 (мелкая сетка первого гетеродина).
004 452: MOV #000 000,@#074 000 ; пишем число 000 000 по адресу 074 000.
Это обращение к блоку Б1-28 (второй гетеродин и опорная частота).
004 460: MOV #000 000,@#060 022 ; пишем число 000 000 по адресу 060 022.
Это обращение к блоку Б1-24 (первый гетеродин).
004 466: MOV #000 000,@#060 026 ; пишем число 000 000 по адресу 060 026.
Это обращение к блоку Б2-59.2 (блок основной избирательности и усиления).
Похоже, функция TRAP 044 обнуляет все регистры в блоках. Что-то вроде инициализации.
004 474: TRAP 032; переходим на 005 016.
005 016: MOV #000 000,@#060 200 ; пишем число 000 000 по адресу 060 200.
Тем самым загружаем в регистр управления блочной магистралью "0".
То есть, команда TRAP 032 отключает системную магистраль от блочной.
005 024: RTS PC ; возврат на 004 476.
004 476: TRAP 022; переходим на 004 352. |
|
Дата: 20 Дек 2013 06:29:20 · Поправил: darkstar (20 Дек 2013 07:29:23)
#
Функция TRAP 022:
004 352: MOV (R4),R4; прочитать число (адрес в регистре R4) и положить его в регистр R4
004 354: BIS R4,@#110 436; установить в "1" биты регистра R4. Маску взять по адресу 110 436
(единицы в маске указывают на изменяемый бит)
004 360: BR 004 370; переход на 004 370
004 362: MOV (R4),R4; прочитать число (адрес в регистре R4) и положить его в регистр R4
004 364: BIC R4,@#110 436; установить в "0" биты регистра R4. Маску взять по адресу 110 436
004 370: MOV @#110 436,R4 ; прочитать число по адресу 110 436 и положить его в регистр R4
004 374: COM R4; произвести инверсию битов регистра R4
004 376: MOV R4,@#060 240 ; записали число из регистра R4 в регистр 060 240 (управление панелью индикации)
Тут видимо прошла какая-то подготовка индикаторной панели, видимо зажглись или погасли лампочки "ГОТОВ", и прочее. Может инфа о том, какие именно лампы зажигать, хранится по адресу 110 436?
004 402: RTS PC ; возврат на 004 500.
004 500: BPT ; командное прерывание для отладки?...
очень странная команда.
Точно не знаю, но похоже она вызывает переход по вектору 000 014:
000 016 -> в РСП (регистр состояния процессора)
000 014 -> в СК (счётчик команд)
У нас в ПЗУ по этому адресу - нули...
Возможно тут есть какая-то хитрость, программная или аппаратная.
Оставим пока...
004 502: RTS PC ; возврат на 034 434. |
|
Дата: 20 Дек 2013 07:21:45 · Поправил: darkstar (20 Дек 2013 07:30:36)
#
034 434: TRAP 023 ; переходим на 004 362.
То же, что и TRAP 022, но биты не устанавливаются, а обнуляются. См. сообщение выше.
034 436: RTS R3; вернуться из подпрограммы по адресу, хранящемуся в регистре R3
|
|
Дата: 20 Дек 2013 08:01:40 · Поправил: darkstar (20 Дек 2013 12:16:33)
#
|
|
Дата: 20 Дек 2013 08:09:36 · Поправил: darkstar (20 Дек 2013 11:46:53)
#
Посмотрим в прошивке от hs_19, куда приведёт прерывание по адресу 100:
000 100: 034 414
000 102: 000 200
034 414: TRAP 012
034 416: MOV #000 000,@#060 340
Так. Видимо я неправильно расшифровал машинный код и забыл, что по адресу 034 414 и в прошивке Конкурса есть команда TRAP 012.
Так что сначала выполним функцию TRAP 012 по адресу 011 100.
Функция TRAP 012:
011 100: JSR PC,@#002 672 ; перейти к подпрограмме на 002 672
011 104: .WORD 000 260 ; видимо, это агрумент для подпрограммы
011 106: ROR (SP) ; ячейку памяти, по адресу из SP, сдвинуть вправо через С (С->15-ый бит, 0-ой бит->С)
011 110: RTS PC ; возврат |
|
Дата: 20 Дек 2013 08:46:55
#
darkstar
Да, я думаю изменений и оптимизаций было много. Прошивки будут отличаться.
|
|
Дата: 20 Дек 2013 12:01:38 · Поправил: darkstar (20 Дек 2013 12:17:01)
#
Подпрограмма 002 672:
002 672: MOV R0,-(SP) ; сохраняем регистры R0, R1, R2, R3, R5 в стеке
002 674: MOV R1,-(SP)
002 676: MOV R2,-(SP)
002 700: MOV R3,-(SP)
002 702: MOV R5,-(SP)
002 704: MOV @#110 344,-(SP) ; сохраняем число, находящееся по адресу 110 344, в стек
002 710: MOV 000 014(SP),R1 ; кладём в R1 адрес возврата из подпрограммы
002 714: MOV (R1)+,R0 ; кладём в R0 аргумент вызова подпрограммы
(число, идущее вслед за командой вызова) в нашем случае = 000 260
002 716: MOV R0,R5
002 720: MOV R0,R3
002 722: BIC #177 740,R3
002 726: BIT #020 000,R0
002 732: BEQ 002 754
002 734: CMP @#110 440,R3
002 740: BEQ 003 126
002 742: MOV #000 060,R0
002 746: SUB @#110 440,R3
002 752: BR 003 042
002 754: BIT #040 000,R0
002 760: BEQ 002 776
002 762: MOV 110 304,R2
002 766: ADD #000 002,000 014(SP)
002 774: BR 003 006
002 776: MOV (R1),R2
003 000: ADD #000 004,000 014(SP)
003 006: MOV R0,@#110 344
003 012: BIC #170 377,@#110 344
003 020: BIT #000 100,R0
003 024: BEQ 003 034
003 026: MOV #000 001,@#111 166
003 034: MOVB (R2)+,R0
003 036: BIC #177 400,R0
003 042: TRAP 055; вызов функции TRAP 055
003 044: DEC R3
003 046: BEQ 003 070
003 050: BIT #000 200,R5
003 054: BNE 003 042
003 056: BIT #010 000,R5
003 062: BEQ 003 034
003 064: INC R2
003 066: BR 003 034
003 070: BIT #000 040,R5
003 074: BEQ 003 126
003 076: BIT #100 000,R5
003 102: BEQ 003 112
003 104: MOV #140 000,R3
003 110: BR 003 116
003 112: MOV #100 000,R3; R3 = 100 000
003 116: MOV R3,@#060 100 ; отправить R3 на индикаторы
003 122: MOV R3,@#111 160 ; отправить R3 в ячейку с адресом 111 160
003 126: MOV (SP)+,@#110 344 ; восстановить из стека число по адресу 110 344
003 132: MOV (SP)+,R5 ; восстанавливаем регистры R5 R3, R2, R1, R0 из стека
003 134: MOV (SP)+,R3
003 136: MOV (SP)+,R2
003 140: MOV (SP)+,R1
003 142: MOV (SP)+,R0
003 144: RTS PC ; возврат
Выглядит прям как фирмварь третьего терминатора :) |
|
Дата: 20 Дек 2013 15:15:04
#
darkstar
Выглядит прям как фирмварь третьего терминатора :)
После перезагрузки?)
|
|
Дата: 23 Дек 2013 07:12:43 · Поправил: darkstar (23 Дек 2013 11:04:35)
#
Функция TRAP 055:
002 610: MOV R0,-(SP) ; сохраняем регистр R0 в стеке
002 612: CMP @#110 344,#004 400 ; сравниваем число в ячейке памяти 110 344 с числом 004 400
002 620: BMI 002 626 ; если число по адресу 110 344 меньше чем 004 400, то перейти на 002 626
002 622: CLR @#111 012 ; очистить ячейку по адресу 111 012
002 626: CMP #000 011,R0 ; сравнить R0 с числом 000 011
002 632: BMI 002 640 ; если R0 больше чем 000 011, то перейти на 002 640
002 634: ADD #000 060,R0 ; R0 = R0 + 000 060
002 640: BIS @#110 344,R0 ; установить в единицу биты R0 по маске из ячейки 110 344
002 644: MOV R0,@#060 100 ; положить содержимое R0 в регистр индикации по адресу 060 100
Эта информация будет отображаться на индикаторах
002 650: ADD #000 400,@#110 344 ; прибавить 000 400 к содержимому ячейки по адресу 110 344
002 656: MOV (SP)+,R0 ; восстановить значение R0 из стека
002 660: JSR PC,@#016 374 ; см. выше
002 664: .WORD 000 077
002 666: WAIT ; ожидаем прерывание
002 670: RTS PC ; возврат
Интересно, что же за число такое хранится в ячейке 110 344 ? |
|
Дата: 23 Дек 2013 07:33:34 · Поправил: darkstar (23 Дек 2013 12:26:18)
#
Может попробовать с другого конца?
Например, мы повернули валкодер и ...
Блок Б10-38 формирует сигнал "VIRQ кпн", который получает блок Б10-82, и сам формирует запрос на прерывание для ЦП (сигнал "VIRQ").
Если прерывание разрешено, то ЦП отвечает сигналами "IAKO" и "DIN".
При поступлении этих сигналов, блок Б10-82 выставляет адрес прерывания 000 340.
Итак, прерывание 000 340.
000 340: 001 142
000 342: 000 200
Переходим на обработчик прерывания 340 по адресу 001 142:
001 142: MOV @#060 040,R0 ; читаем регистр 060 040 в R0 (чтение столбцов при сканировании клавиатуры)
001 146: BIT #100 200,R0 ; проверка последних битов младшего и старшего байтов слова (т.е. маска 1000 0000 1000 0000) это линии KDA7 и KDA15, при повороте валкодера изменяются именно они.
001 152: BEQ 001 234 ; если ни один из этих битов не установлен, то перейти на 001 234
001 154: BIC #077 577,R0 ; если же какой-то из битов (или оба) установлены, то сбросить все остальные биты, кроме 7 и 15 (маска 0111 1111 0111 1111)
001 160: CMP R0,#100 200 ; сравнить результат с 1000 0000 1000 0000
001 164: BEQ 001 230 ; если установлены оба бита, то перейти на 001 230
Если установлен только один из битов, то:
001 166: TST @#110 766 ; проверить, что за число лежит в ячейке 110 766
001 172: BNE 001 230 ; если это число не равно нулю, то перейти на 001 230
001 174: TST @#110 674 ; проверить, что за число лежит в ячейке 110 764
001 200: BNE 001 230 ; если это число не равно нулю, то перейти на 001 230
001 202: TST @#110 710 ; проверить, что за число лежит в ячейке 110 710
001 206: BNE 001 230 ; если это число не равно нулю, то перейти на 001 230
Если же все эти числа не равны нулю, то:
001 210: MOV @#110 570,R4 ; положить число из ячейки 110 570 в регистр R4
001 214: CMP #000 004,R4 ; сравнить это число с числом 000 004
001 220: BMI 001 230 ; если R4 больше 004, то перейти на 001 230
001 222: ASL R4 ; если же R4 меньше или равно 004, то сдвинуть влево через С (умножить на 2)
001 224: JSR PC,@011 340(R4) ; перейти к подпрограмме по адресу 011 340, адрес возврата (001 230) сохранить в регистре R4, а PSW - в стеке
001 230: JMP @#001 010 ; переход на 001 010
Процедура выхода из прерывания клавиатура/валкодер:
001 010: MOV #000 377,@#060 040 ; вписать в регистр клавиатуры 060 040 число 000 377 (0000 0000 1111 1111)
001 016: RTI ; выход из прерывания |
|
Дата: 23 Дек 2013 08:21:12 · Поправил: darkstar (23 Дек 2013 11:52:23)
#
011 340: MOV -(R1),@(SP)+ ; R1=R1-2, число из ячейки с адресом R1 скопировать ячейку по адресу, который указан в ячейке с адресом из стека, SP=SP+2
011 342: MOV @-(R3),013 300(R4) ; R3=R3-2, число из ячейки, адрес которой указан в ячейке с адресом R3 скопировать в ячейку по адресу 013 300+R4
011 346: MOV @(R0)+,(SP) ; число из ячейки, адрес которой указан в ячейке с адресом R0 скопировать ячейку по адресу из стека, R0=R0+2
011 350: MOV (R3),@020 037(SP) ; число из ячейки по адресу R3 скопировать в ячейку по адресу 020 037+(SP)
011 354: MOVB -(R3),(R4)+ ; R3=R3-2, число из ячейки по адресу R3 скопировать в ячейку по адресу R4, для приёмника все биты старшего байта устанавливаются равными старшему биту младшего байта, R4=R4+2
011 356: BEQ 011 370 ; если Z=1, то перейти на 011 370
011 360: MOV R0,@#114 324 ; положить содержимое регистра R0 в ячейку по адресу 114 324
011 364: CLR @#110 574 ; очистить ячейку по адресу 110 574
011 370: INC @#110 574 ; число в ячейке по адресу 110 574 увеличить на 1
011 374: RTS PC; возврат из подпрограммы |
|
Дата: 23 Дек 2013 08:37:43 · Поправил: darkstar (23 Дек 2013 12:41:15)
#
001 234: JSR PC,@#001 612 ; перейти к подпрограмме по адресу 001 612
001 240: TST R5 ; проверить R5
001 242: BNE 001 520 ; если R5 не равен нулю, то перейти на 001 520
001 244: MOV #000 377,@#060 040 ; записать в регистр 060 040 число 000 377 (0000 0000 1111 1111)
001 252: TST @#117 262 ; проверить ячейку по адресу 117 262
001 256: BEQ 001 270 ; если это число равно нулю, то перейти на 001 270
001 260: JSR PC,@#010 644; вызов подпрограммы по адресу 010 644
001 264: JMP 000 764; переход на 000 764 ?
001 270: TST @#110 766 ; проверить ячейку по адресу 110 766
001 274: BNE 001 520 ; если это число не равен нулю, то перейти на 001 520
001 276: TST @#110 674 ; проверить ячейку по адресу 110 674
001 302: BEQ 001 326 ; если это число равно нулю, то перейти на 001 326
001 304: CMP R0,#000 117 ; сравнить R0 и число 000 117
001 310: BNE 001 520 ; если R0 не равен 000 117, то перейти на 001 520
001 312: TRAP 050 ; вызов функции TRAP 050
001 314: CLR @#110 674 ; очистить ячейку по адресу 110 674
001 320: TRAP 023 ; вызов функции TRAP 023
001 322: BGE 001 324 ; если результат сравнения ? больше или равно, перейти на 001 324
001 324: BR 001 520 ; переход на 001 520
001 326: TST @#110 710 ; проверить ячейку по адресу 110 710
001 332: BEQ 001 344 ; если это число равно нулю, то перейти на 001 344
001 334: CMP R0,#000 132 ; сравнить R0 и число 000 132
001 340: BNE 001 520 ; если R0 не равен 000 132, то перейти на 001 520
001 342: BEQ 001 440 ; если R0 = 000 132, то перейти на 001 440
001 344: TST @#114 330 ; проверить ячейку по адресу 114 330
001 350: BEQ 001 440 ; если это число равно нулю, то перейти на 001 440
001 352: CMP R0,#000 106 ; сравнить R0 и число 000 106
001 356: BEQ 001 440 ; если R0 = 000 106, то перейти на 001 440
001 360: CMP R0,#000 127 ; сравнить R0 и число 000 127
001 364: BEQ 001 440 ; если R0 = 000 127, то перейти на 001 440
001 366: CMP R0,#000 130 ; сравнить R0 и число 000 130
001 372: BEQ 001 440 ; если R0 = 000 130, то перейти на 001 440
001 374: CMP R0,#000 072 ; сравнить R0 и число 000 072
001 400: BMI 001 440 ; если R0 меньше 000 072, то перейти на 001 440
001 402: TST @#114 322 ; проверить ячейку по адресу 114 322
001 406: BEQ 001 520 ; если это число равно нулю, то перейти на 001 520
001 410: CMP R0,#000 107 ; сравнить R0 и число 000 107
001 414: BEQ 001 440 ; если R0 = 000 107, то перейти на 001 440
001 416: CMP R0,#000 113 ; сравнить R0 и число 000 113
001 422: BEQ 001 440 ; если R0 = 000 113, то перейти на 001 440
001 424: CMP R0,#000 114 ; сравнить R0 и число 000 114
001 430: BEQ 001 440 ; если R0 = 000 114, то перейти на 001 440
001 432: CMP R0,#000 125 ; сравнить R0 и число 000 115
001 436: BNE 001 520 ; если R0 не равен 000 125, то перейти на 001 520
001 440: CMP R0,#000 060 ; сравнить R0 и число 000 060
001 444: BMI 001 520 ; если R0 меньше 000 060, то перейти на 001 520
001 446: CMP #000 071,R0 ; сравнить R0 и число 000 071
001 452: BMI 001 466 ; если R0 больше 000 071, то перейти на 001 466
001 454: SUB #000 060,R0 ; R0 = R0 - 000 060
001 460: JSR PC,@#005 176 ; вызов подпрограммы по адресу 005 176
001 464: BR 001 520 ; перейти на 001 520
001 466: CMP #000 132,R0 ; сравнить R0 и число 000 132
001 472: BMI 001 520 ; если R0 больше 000 132, то перейти на 001 520
001 474: JSR PC,@#030 132 ; вызов подпрограммы по адресу 030 132
001 500: JSR PC,@#030 162 ; вызов подпрограммы по адресу 030 162
001 504: MOV R0,R4 ; R4 = R0
001 506: SUB #000 100,R4 ; R4 = R4 - 000 100
001 512: ASL R4 ; сдвинуть R4 влево через С (R4 = R4 * 2)
001 514: JSR PC,@001 524(R4) ; вызов подпрограммы по адресу 001 524, адрес возврата хранится в R4
001 520: JMP @#001 010 ; перейти на 001 010 |
Реклама Google |
|