Последний раз редактировалось Vslav; 09.10.2020 в 21:29.
hobot(09.10.2020)
Прям какие-то 80-е... видик показывает китайскую фильму про две разные школы Кунг-Фу ))
в итоге побеждает дружба против японской школы каратЭ![]()
Не волнуйтесь, моя бабушка водила трактор и пожарную машину (С)
Перевел на похожий на человеческий язык PLM предварительного декодера команд.
Условные обозначения:Код:Instruction NA ___ MOP FEDCBA9876543210 543210 01 RTT BYTE IX2 00: 0000000000000110 000000 00 1 RTT 12: 000000001.000... 110000 00 1 RTS, SWAB R0? 34: 00000000.1...... 010000 00 1 JMP, SWAB? 36: .000110111...... 010000 00 1 MFPS, SXT? 30: 1000110100...... 010000 01 1 MTPS 37: 0000100......... 010000 11 1 JSR 33: .0001100........ 010000 00 1 ASR(B), ASL(B), ROR(B), ROL(B) 42: .000101......... 010000 00 1 CLR(B), COM(B), INC(B), DEC(B), NEG(B), TST(B), ADC(B), SBC(B) 38: 1.0............. 000000 00 1 Группы команд с байтовым доступом (установленный бит 15, кроме команды SUB и дополнительных команд 17xxxx) 44: 10.............. 000000 00 1 Группы команд с байтовым доступом (установленный бит 15, кроме команды SUB и дополнительных команд 17xxxx) 32: .0000..00....... 000000 11 ??? 13: 0000.0.000...... 000000 10 ??? 26: 0001............ 000000 10 MOV 28: 0000..01........ 000000 10 BR, BLT, JSR?, MARK, SXT? 43: 01110........... 101100 01 MUL, DIV, ASH, ASHC 16: .000101111...... 000000 01 TST(B) 47: .01............. 001000 01 BIT(B), CMP(B) 01: 1000110100000... 100000 00 MTPS Rn 08: .000110111000... 100000 00 MFPS Rn, SXT Rn 11: .0001100..000... 100000 00 ASR(B) Rn, ASL(B) Rn, ROR(B) Rn, ROL(B) Rn 25: .000101...000... 100000 00 CLR(B) Rn, COM(B) Rn, INC(B) Rn, DEC(B) Rn, NEG(B) Rn, TST(B) Rn, ADC(B) Rn, SBC(B) Rn 06: 0111100...000... 010000 00 XOR Rn,Rm 04: 01110.....000... 010000 00 MUL Rn,Rm; DIV Rn,Rm; ASH Rn,Rm; ASCH Rn,Rm 09: .0.1000...000... 010000 00 MOV(B) Rn,Rm; BIT(B) Rn,Rm 14: .10.000...000... 010000 00 BIC(B) Rn,Rm; BIS(B) Rn,Rm 23: ..10000...000... 010000 00 CMP(B) Rn,Rm; ADD Rn,Rm; SUB Rn,Rm 15: 0000000000000011 000010 00 BPT 17: 0000000000000.01 000010 00 WAIT, RESET 10: 0000000000001... 000010 00 START, STEP 03: 000000000001.... 000010 00 WCPS, WCPC 02: 0000110100...... 000010 00 MARK 05: 00000000101..... 000010 00 Clear/Set flags (CLC and e.t.c.) 07: 01111010000..... 000010 00 CIS? 45: ..01............ 001000 00 MOV(B), BIS(B) 46: .1.0............ 001000 00 BIC(B), ADD, SUB 21: .0000..0000....0 000010 00 Branch? 18: 10000000........ 000001 00 BPL 24: 1000.00......... 000010 00 BPL, BMI, EMT, TRAP 22: .0000001........ 000011 00 BR, BMI 29: .000001......... 000011 00 BNE, BEQ, BHI, BLOS 31: .00001.......... 000011 00 BVC, BVS, BCC, BCS, BGE, BLT, BGT, BLE 19: 0000100...000... 100111 00 JSR Rn,Rm 20: 0000000001000... 100111 00 JMP Rn 27: 0111111......... 001010 00 SOB 39: 0111100......... 101100 00 XOR 35: .10.000......... 100100 00 BIC(B), BIS(B) 40: .0.1000......... 100100 00 MOV(B), BIT(B) 41: ..10000......... 100100 00 CMP(B), ADD, SUB
Instruction - это код команды (0 - это 0, 1 - это 1, а точка - это любое значение).
NA - это 6-битный адрес микрокоманды с которого начнется исполнение микропрограммы для данной инструкции
MOP 0 и 1 - это какой-то модификатор, значение которого я пока не знаю.
RTT - модификатор для команды RTT.
BYTE - это означает, что команда байтовая.
IX2 - тоже какой-то модификатор, значение которого я пока не знаю.
Не очень понятными оказались несколько записей, а именно:
Пока не смог подобрать для них, на какие же группы команд ссылаются эти коды операций.Код:32: .0000..00....... 000000 11 ??? 13: 0000.0.000...... 000000 10 ??? 07: 01111010000..... 000010 00 CIS? 21: .0000..0000....0 000010 00 Branch?
Скорее вопрос к опытным PDP-шникам.
Alex_K(17.10.2020)
Titus(17.10.2020)
Это номер столбца в ПЛМ. 0..47. Они не имеют значения.
В общем, пока не могу идентифицировать закономерность этих 4-х записей. Оно как бы попадает и в категорию и условных переходов, и специальных команд. Но логики единой не вижу.
- - - Добавлено - - -
Хорошо бы список команд PDP отсортированный по коду инструкции, а не по мнемонике или еще каким-то группам.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Скрытый текст
000000 HALT
000001 WAIT
000002 RTI
000003 BPT
000004 IOT
000005 RESET
000006 RTT
000007 TRAP10
000010 000013 START
000014 000017 STEP
000020 000020 RSEL
000021 000021 MFUS
000022 000023 RCPC
000024 000027 RCPS
000030 000030 CODE030
000031 000031 MTUS
000032 000033 WCPC
000034 000037 WCPS
000040 000077 TRAP10
000100 000177 JMP
000200 000207 RTS
000210 000237 TRAP10
000240 000257 CLx
000260 000277 SEx
000300 000377 SWAB
000400 000777 BR
001000 001377 BNE
001400 001777 BEQ
002000 002377 BGE
002400 002777 BLT
003000 003377 BGT
003400 003777 BLE
004000 004777 JSR
005000 005077 CLR
005100 005177 COM
005200 005277 INC
005300 005377 DEC
005400 005477 NEG
005500 005577 ADC
005600 005677 SBC
005700 005777 TST
006000 006077 ROR
006100 006177 ROL
006200 006277 ASR
006300 006377 ASL
006400 006477 MARK
006500 006677 TRAP10
006700 006777 SXT
007000 007777 TRAP10
010000 017777 MOV
020000 027777 CMP
030000 037777 BIT
040000 047777 BIC
050000 057777 BIS
060000 067777 ADD
070000 070777 MUL
071000 071777 DIV
072000 072777 ASH
073000 073777 ASHC
074000 074777 XOR
075000 075037 FIS
075040 076777 TRAP10
077000 077777 SOB
100000 100377 BPL
100400 100777 BMI
101000 101377 BHI
101400 101777 BLOS
102000 102377 BVC
102400 102777 BVS
103000 103377 BCC/BHIS
103400 103777 BCS/BLO
104000 104377 EMT
104400 104777 TRAP
105000 105077 CLRB
105100 105177 COMB
105200 105277 INCB
105300 105377 DECB
105400 105477 NEGB
105500 105577 ADCB
105600 105677 SBCB
105700 105777 TSTB
106000 106077 RORB
106100 106177 ROLB
106200 106277 ASRB
106300 106377 ASLB
106400 106477 MTPS
106500 106677 TRAP10
106700 106777 MFPS
107000 107777 TRAP10
110000 117777 MOVB
120000 127777 CMPB
130000 137777 BITB
140000 147777 BICB
150000 157777 BISB
160000 167777 SUB
170000 177777 TRAP10[свернуть]
В общем, остались три подозрительные записи:
Нет ничего общего, чтобы могло обьединить команды внутри каждой записи.Код:21: .0000..0000....0 000010 00 ??? 32: .0000..00....... 000000 11 JMP, BNE+, BPL+, BVC+, BCC+, BGE+, BGT+, BHI+, HALT-TRAP10? 13: 0000.0.000...... 000000 10 HALT-TRAP10? BNE? JSR? CLC? ???
Вариантов ответов несколько:
1. Ошибка в реверсе у @Vslav'а.
2. Ошибка в реверсе у меня (нет, я проверил).
3. Ошибка у разработчиков, которая принципиально не повлияла на работу.
4. Чего-то я не понимаю.
5. Хрен знает еще что)
- - - Добавлено - - -
p.s.: Захотел проверить оригинальную матрицу по фотке ВМ2, а оказалось, что там ряды идут в другой последовательности, а какие где это только @Vslav'у известно)
hobot(17.10.2020)
Благодаря таблице с диапзаонами кодов команд от @Alex_К, я написал абсолютно программный генератор всех комбинаций команд преддекодера, и наконец-то все более менее встало на свои места:
Пояснения в мнемониках команд:Код:Instruction NA ___ MOP FEDCBA9876543210 543210 01 RTT BYTE IX2 00: 0000000000000110 000000 00 1 RTT 12: 000000001.000... 110000 00 1 RTS, SWAB Rn 34: 00000000.1...... 010000 00 1 JMP, SWAB 36: .000110111...... 010000 00 1 SXT, MFPS 30: 1000110100...... 010000 01 1 MTPS 37: 0000100......... 010000 11 1 JSR 33: .0001100........ 010000 00 1 ROR(B), ROL(B), ASR(B), ASL(B) 42: .000101......... 010000 00 1 CLR(B), COM(B), INC(B), DEC(B), NEG(B), ADC(B), SBC(B), TST(B) 26: 0001............ 000000 10 MOV 28: 0000..01........ 000000 10 BR, BLT, MARK, TRAP10_6500, TRAP10_6600, SXT 16: .000101111...... 000000 01 TST(B) 47: .01............. 001000 01 CMP(B), BIT(B) 43: 01110........... 101100 01 MUL, DIV, ASH, ASHC 01: 1000110100000... 100000 00 MTPS Rn 08: .000110111000... 100000 00 SXT Rn, MFPS Rn 11: .0001100..000... 100000 00 ROR(B) Rn, ROL(B) Rn, ASR(B) Rn, ASL(B) Rn 25: .000101...000... 100000 00 CLR(B) Rn, COM(B) Rn, INC(B) Rn, DEC(B) Rn, NEG(B) Rn, ADC(B) Rn, SBC(B) Rn, TST(B) Rn 06: 0111100...000... 010000 00 XOR Rs,Rd 04: 01110.....000... 010000 00 MUL Rs,Rd, DIV Rs,Rd, ASH Rs,Rd, ASHC Rs,Rd 09: .0.1000...000... 010000 00 MOV(B) Rs,Rd, BIT(B) Rs,Rd 14: .10.000...000... 010000 00 BIC(B) Rs,Rd, BIS(B) Rs,Rd 23: ..10000...000... 010000 00 CMP(B) Rs,Rd, ADD Rs,Rd, SUB Rs,Rd 15: 0000000000000011 000010 00 BPT 17: 0000000000000.01 000010 00 WAIT, RESET 10: 0000000000001... 000010 00 START, STEP 03: 000000000001.... 000010 00 RSEL, MFUS, RCPC, RCPS, CODE30, MTUS, WCPC, WCPS 02: 0000110100...... 000010 00 MARK 07: 01111010000..... 000010 00 FIS 05: 00000000101..... 000010 00 CLx, SEx 45: ..01............ 001000 00 MOV(B), BIS(B) 46: .1.0............ 001000 00 BIC(B), ADD, SUB 18: 10000000........ 000001 00 BPL 24: 1000.00......... 000010 00 BPL, BMI, EMT, TRAP 22: .0000001........ 000011 00 BR, BMI 29: .000001......... 000011 00 BNE, BEQ, BHI, BLOS 31: .00001.......... 000011 00 BGE, BLT, BGT, BLE, BVC, BVS, BCC, BCS 19: 0000100...000... 100111 00 JSR Rs,Rd 20: 0000000001000... 100111 00 JMP Rn 27: 0111111......... 001010 00 SOB 39: 0111100......... 101100 00 XOR 35: .10.000......... 100100 00 BIC(B) Rs,dd, BIS(B) Rs,dd 40: .0.1000......... 100100 00 MOV(B) Rs,dd, BIT(B) Rs,dd 41: ..10000......... 100100 00 CMP(B) Rs,dd, ADD Rs,dd, SUB Rs,dd 21: .0000..0000....0 000010 00 HALT, RTI, IOT, RTT, START(!), STEP(!), RSEL, RCPC(!), RCPS(!), CODE30, WCPC(!), WCPS(!), BNE(!), BGE(!), BGT(!), BPL(!), BHI(!), BVC(!), BCC(!) 32: .0000..00....... 000000 11 HALT, WAIT, RTI, BPT, IOT, RESET, RTT, TRAP10_7, START, STEP, RSEL, MFUS, RCPC, RCPS, CODE30, MTUS, WCPC, WCPS, TRAP10_40, JMP, BNE(!), BGE(!), BGT(!), BPL(!), BHI(!), BVC(!), BCC(!) 13: 0000.0.000...... 000000 10 HALT, WAIT, RTI, BPT, IOT, RESET, RTT, TRAP10_7, START, STEP, RSEL, MFUS, RCPC, RCPS, CODE30, MTUS, WCPC, WCPS, TRAP10_40, BNE(!), JSR(!), CLR Флаг байтовой операции, кроме команд XOR, ADD и SUB, а так же побочные: 38: 1.0............. 000000 00 1 BPL, BMI, BHI, BLOS, BVC, BVS, BCC, BCS, EMT, TRAP, MTPS, TRAP10_106500, TRAP10_106600, MFPS, TRAP10_107000 44: 10.............. 000000 00 1 BPL, BMI, BHI, BLOS, BVC, BVS, BCC, BCS, EMT, TRAP, MTPS, TRAP10_106500, TRAP10_106600, MFPS, TRAP10_107000
(B) - это означает, что команда может быть как байтовой, так и словной.
(!) - это означает, что декодирование команды неполное. А именно - часть команд с этим знаком будет декодированна данной записью, а часть нет, в зависимости от дополнительных бит.
Вот как раз знак (!) - это самое интересное. Он сразу дает понять, на какие команды ориентированна данная запись в таблице преддекодера. А именно, команды, помеченные (!) скорее всего являются просто побочным эффектом декодирования.
- - - Добавлено - - -
А теперь уже по этому списку прошелся руками, и обьединил то, что надо, выкинул повторения, и получилось прекрасно и гладенько.
На колонку с кодом инструкции уже можно не смотреть. Значимым является только адрес микропрограммы, параметры MOP0,1 (отвечающее за то, надо ли записывать операнды обратно, и прочее действие с операндами. Еще не анализировал точно), и остальные параметры.
- - - Добавлено - - -Код:Instruction NA ___ MOP FEDCBA9876543210 543210 01 RTT BYTE IX2 Флаг байтовой операции, кроме команд XOR, ADD и SUB, а так же побочные: 38: 1.0............. 000000 00 1 BPL, BMI, BHI, BLOS, BVC, BVS, BCC, BCS, EMT, TRAP, MTPS, TRAP10_106500, TRAP10_106600, MFPS, TRAP10_107000 44: 10.............. 000000 00 1 BPL, BMI, BHI, BLOS, BVC, BVS, BCC, BCS, EMT, TRAP, MTPS, TRAP10_106500, TRAP10_106600, MFPS, TRAP10_107000 00: 0000000000000110 000000 00 1 RTT 28: 0000..01........ 000000 10 TRAP10_6500, TRAP10_6600 000000 11 TRAP10_7, TRAP10_40 000010 00 FIS, CLx, SEx, EMT, TRAP 000010 10 MARK 000010 11 HALT, WAIT, RTI, BPT, IOT, RESET, RTT, START, STEP, RSEL, MFUS, RCPC, RCPS, CODE30, MTUS, WCPC, WCPS, 000011 00 BPL, BR, BMI, BNE, BEQ, BHI, BLOS, BGE, BLT, BGT, BLE, BVC, BVS, BCC, BCS 000011 10 BR, BLT 000011 11 BNE(!), BGE(!), BGT(!), BPL(!), BHI(!), BVC(!), BCC(!) 45: ..01............ 001000 00 MOVB, BIS(B), BIC(B), ADD, SUB 47: .01............. 001000 01 CMP(B), BIT(B) 001000 10 MOV 27: 0111111......... 001010 00 SOB 011000 00 MOVB Rs,Rd, BIS(B) Rs,Rd, BIC(B) Rs,Rd, ADD Rs,Rd, SUB Rs,Rd 09: .0.1000...000... 011000 01 CMP(B) Rs,Rd, BIT(B) Rs,Rd 011000 10 MOV Rs,Rd 34: 00000000.1...... 010000 00 1 SWAB, MFPS 33: .0001100........ 010000 00 1 ROR(B), ROL(B), ASR(B), ASL(B) 42: .000101......... 010000 00 1 CLRB, COM(B), INC(B), DEC(B), NEG(B), ADC(B), SBC(B) 30: 1000110100...... 010000 01 1 MTPS, TST(B) 010000 10 1 CLR, SXT 37: 0000100......... 010000 11 1 JMP, JSR 11: .0001100..000... 110000 00 1 ROR(B) Rn, ROL(B) Rn, ASR(B) Rn, ASL(B) Rn 25: .000101...000... 110000 00 1 CLRB Rn, COM(B) Rn, INC(B) Rn, DEC(B) Rn, NEG(B) Rn, ADC(B) Rn, SBC(B) Rn 110000 01 1 MTPS Rn, TST(B) Rn 110000 10 1 CLR Rn, SXT Rn 35: .10.000......... 101100 00 MOVB Rs,dd, BIS(B) Rs,dd, BIC(B) Rs,dd, ADD Rs,dd, SUB Rs,dd 101100 01 CMP(B) Rs,dd, BIT(B) Rs,dd 101100 10 MOV Rs,dd 39: 0111100......... 101100 00 XOR 43: 01110........... 101100 01 MUL, DIV, ASH, ASHC 19: 0000100...000... 101111 11 1 JMP Rn, JSR Rs,Rd 12: 000000001.000... 110000 00 1 RTS, SWAB Rn, MFPS Rn 06: 0111100...000... 111100 00 XOR Rs,Rd 111100 01 MUL Rs,Rd, DIV Rs,Rd, ASH Rs,Rd, ASHC Rs,Rd Reset by ACLO 111000 Abort by Timer 111001
Предварительно могу предположить, что IX2 - это флаг однооперандной команды.
- - - Добавлено - - -
Предварительное значение поля MOP01:
Код:00 - цикл чтения и записи 01 - цикл чтения 10 - цикл записи 11 - ни чтения, ни записи
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)