Вход

Просмотр полной версии : Особенности процессоров и устройств архитектуры PDP-11. Тесты. Диагностика.



Страницы : 1 2 [3] 4 5 6 7 8 9 10

form
15.03.2013, 21:10
Первая попытка помучить DELQA не через драйвер.
Заодно RSXLIB пригодился :)

.TITLE NQT
.IDENT /V01.00/

;DEVICE REGISTER AND VECTOR DEFINITIONS

QNREG == 174440 ;DEVICE REGISTER ADDRESS
QNVEC == 120 ;DEVICE VECTOR ADDRESS

;DEVICE REGISTER OFFSET DEFINITIONS

QN$SAR == 0 ;STATION ADDRESS PROM
QN$RAL == 4 ;RECEIVER BDL ADDRESS LO
QN$RAH == 6 ;RECEIVER BDL ADDRESS HI
QN$TAL == 10 ;TRANSMIT BDL ADDRESS LO
QN$TAH == 12 ;TRANSMIT BDL ADDRESS HI
QN$VEC == 14 ;VECTOR ADDRESS
QN$CSR == 16 ;CONTROL/STATUS REGISTER

;CONTROL/STATUS REGISTER BIT DEFINITIONS

CS.RI == 100000 ;RECEIVE INTERRUPT REQUEST
CS.CA == 20000 ;CARRIER
CS.OK == 10000 ;FUSE OK
CS.SE == 2000 ;SANITY TIMER ENABLE
CS.EL == 1000 ;EXTERNAL LOOPBACK ENABLE
CS.ILD == 400 ;INTERNAL LOOPBACK DISABLE
CS.XI == 200 ;TRANSMIT INTERRUPT REQUEST
CS.IE == 100 ;INTERRUPT ENABLE
CS.RLI == 40 ;RECEIVE LIST INVALID
CS.XLI == 20 ;TRANSMIT LIST INVALID
CS.BD == 10 ;BOOT/DIAGNOSTIC ROM DUMP
CS.NXM == 4 ;NON-EXISTENT MEMORY INTERRUPT
CS.SR == 2 ;SOFTWARE RESET
CS.REN == 1 ;RECEIVER ENABLE

;VECTOR REGISTER BIT DEFINITIONS

VC.MS == 100000 ;MODE SELECT (0 = QNA, 1 = LQA)
VC.OS == 40000 ;REMOTE BOOT OPTION SWITCH
VC.RS == 20000 ;REQUEST SELF-TEST
VC.SSM == 16000 ;SELF-TEST STATUS MASK
VC.IVM == 1774 ;INTERRUPT VECTOR MASK
VC.ID == 1 ;IDENTIFY TEST BIT (Q = QNA, 1 = LQA)

;BUFFER DESCRIPTOR LIST OFFSETS

BD.FLG == 0 ;FLAG
BD.ADH == 2 ;ADDRESS DESCRIPTOR BITS (HI-ORDER)
BD.ADL == 4 ;ADDRESS DESCRIPTOR BITS (LO-ORDER)
BD.LEN == 6 ;BUFFER LENGTH
BD.SW1 == 10 ;STATUS WORD 1
BD.SW2 == 12 ;STATUS WORD 2
BD.ESZ == 14 ;SIZE OF BUFFER DESCRIPTOR

;FLAG WORD DEFINITIONS

FL.INI == 100000 ;INITIALIZATION VALUE
FL.USE == 40000 ;DEQNA IS USING THE BUFFER

;ADDRESS DESCRIPTOR BIT DEFINITIONS

AH.VLD == 100000 ;DESCRIPTOR IS VALIED
AH.CHN == 40000 ;CHAIN DESCRIPTOR
AH.EOM == 20000 ;END OF MESSAGE (XMIT ONLY)
AH.SET == 10000 ;SETUP (XMIT ONLY)
AH.TER == 200 ;LO BYTE ONLY TERMINATION (XMIT ONLY)
AH.STA == 100 ;HI BYTE ONLY START (XMIT ONLY)
AH.HOM == 77 ;HI-ORDER ADDRESS MASK

;STATUS WORD 1 BIT DEFINITIONS

S1.LN == 100000 ;LAST/NOT
S1.ERU == 40000 ;ERROR/USED

; FOR TRANSMIT

S1.LOC == 10000 ;LOSS OF CARRIER
S1.NOC == 4000 ;NO CARRIER
S1.STE == 2000 ;SANITY TIMER WAS ENABLED AT POWER-UP
S1.ABO == 1000 ;TRANSMISSION WAS ABORTED
S1.FAI == 400 ;HEARTBEAT COLLISION CHECK FAILURE
S1.CCM == 360 ;COLLISION COUNT MASK

; FOR RECEIVE

S1.ESE == 20000 ;SETUP, ELOOP, IELOOP PACKET
S1.DIS == 10000 ;DISCARD (OR OVF, CRCERR, SHORT)
S1.RNT == 4000 ;PACKET IS RUNT
S1.RBL == 3400 ;RECEIVE BUFFER LENGTH
S1.FE == 4 ;FRAMING ERROR
S1.CRC == 2 ;CRC ERROR
S1.OV == 1 ;OVERFLOW

.MCALL .DEVICE,.EXIT,.PRINT ;SYSTEM MACRO CALLS

.PSECT DATA,D,RW

DESC:: .WORD 0 ;FLAG WORD
.WORD AH.VLD!AH.EOM ;DESCRIPTOR BITS
.WORD BUFF ;ADDRESS OF TRANSMIT BUFFER
.WORD -WCNT ;2S COMP WORD COUNT
.WORD 0,0 ;STATUS WORDS

.WORD 0 ;FLAG WORD
.WORD 0 ;DESCRIPTOR BITS
.WORD 0,0 ;DUMMY BUFFER ADDRESS, LENGTH

BUFF:: .BYTE -1,-1,-1,-1,-1,-1 ;DESTINATION ADDRESS
ADDR:: .BYTE 0,0,0,0,0,0 ;SOURCE ADDRESS
.WORD 123456 ;PROTOCOL

.REPT 32.
.BYTE 252,125 ;DATA
.ENDR

WCNT == <.-BUFF>/2

AREA: .BLKW 2 ;EMT AREA
LIST: .WORD QNREG+QN$CSR,CS.SR ;DEVICE LIST
.WORD QNREG+QN$CSR,0 ;
.WORD 0 ;

.PSECT CODE,I,RO

START:: .DEVICE #AREA,#LIST ;RESET DEVICE ON EXIT
MOV #QNREG,R5 ;SET DEVICE REGISTER
BIS #CS.SR,QN$CSR(R5) ;PERFORM SOFTWARE RESET
BIC #CS.SR,QN$CSR(R5) ;

MOV R5,R0 ;COPY SOURCE ADDRESS TO PACKET
MOV #ADDR,R1 ;
MOV #6,R2 ;
10$: MOV (R0)+,-(SP) ;
MOVB (SP)+,(R1)+ ;
SOB R2,10$ ;

BIS #CS.ILD,QN$CSR(R5) ;DISABLE INTERNAL LOOPBACK
MOV #DESC,QN$TAL(R5) ;SET BDL ADDRESS
CLR QN$TAH(R5) ;START THE TRANSMISSION

20$: TSTB QN$CSR(R5) ;TRANMISSION DONE?
BPL 20$ ;NO
BIC #CS.RI,QN$CSR(R5) ;RESET XI (BY WRITING 1 TO IT)

MOV #BUFF,R0 ;SET OUTPUT BUFFER ADDRESS
MOV #FMTS,R1 ;SET FORMAT STRING
MOV #DESC,R2 ;SET ARGUMENT BLOCK
CALL $EDMSG ;FORMAT OUTPUT STRING
CLRB @R0 ;MAKE IT ASCIZ

.PRINT #BUFF ;PRINT DESCRIPTOR DATA
.EXIT ;EXIT

.PSECT RODATA,D,RO

FMTS:: .ASCII /FLAG: %P%N/
.ASCII /BITS: %P%N/
.ASCII /BUFF: %P%N/
.ASCII /WCNT: %P%N/
.ASCII /STAT: %P %P/
.BYTE 0

.END START
.RU NQT
FLAG: 177777
BITS: 120000
BUFF: 001024
WCNT: 177731
STAT: 020010 000002

.
pdp-11:/home/form# tcpdump -pni re0 ether src 08:00:2b:31:47:b4
tcpdump: listening on re0, link-type EN10MB
00:09:55.518540 08:00:2b:31:47:b4 ff:ff:ff:ff:ff:ff 2ea7 78:
aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55
aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55
aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55
aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55

form
17.03.2013, 12:29
О пользе TSX...
Сборка параллельно SB+FB и XM+ZM :)


TSX-Plus SYSMON Utility
17-Mar-2013 15:28:11

***** Process Execution Status *****

Job Line Pri Program User Name Size Pos Run State
--- ---- --- ------- --------- ---- --- --- -----
1 1(0) 50 SYSMON ROOT 62 117 I TT input done
2 2(0) 50 MACRO ROOT 62 179 C CPU bound process
7 Det. 50 MACRO ROOT 62 277 C CPU bound process
8 Det. 50 WINPRT Window print 30 Swp Wait-.SPND/.RSUM
9 Det. 50 TCPIP TCP/IP stack 62 56 Wait-.SPND/.RSUM
15 2(1) 40 ROOT 37 240 Wait-TT input

form
30.03.2013, 22:20
Заказал DHV11. Можно готовить новые тесты на тему сериал портов.
DHV11 - 8-портовый мультиплексор с громадным FIFO, поддеркой скоростей до 38400 и DMA для отправки блоков данных...

form
02.04.2013, 23:02
Приложение из документации по PDP-11/94 по различиям в поведении инструкций на разных процессорах.

Titus
02.04.2013, 23:05
Приложение из документации по PDP-11/94 по различиям в поведении инструкций на разных процессорах.
А можно еще таблицу, какой из отечественных процов, является точным клоном какого-то из буржуйских PDP, а какие отечественные процы не имеют точных клонов.

form
02.04.2013, 23:11
А можно еще таблицу, какой из отечественных процов, является точным клоном какого-то из буржуйских PDP, а какие отечественные процы не имеют точных клонов.

Если бы знать точно эту таблицу :)
На досуге наваяю тест который проверяет разные фичи, можно будет посмотреть.
В общем случае ВМ1 и ВМ2 наиболее близки к 11/03 видимо, ВМ3 затруднительно с чем-то сопоставить: с одной стороны 22бит, с другой - нет ни разделения I/D ни supervisor mode. RSXовский ACF его определяет как LSI-11/73, что сответствует KDJ11-A, но у KDJ11-A есть и разделение I/D и supervisor mode.

Titus
02.04.2013, 23:15
Если бы знать точно эту таблицу :)
На досуге наваяю тест который проверяет разные фичи, можно будет посмотреть.
В общем случае ВМ1 и ВМ2 наиболее близки к 11/03 видимо, ВМ3 затруднительно с чем-то сопоставить: с одной стороны 22бит, с другой - нет ни разделения I/D ни supervisor mode. RSXовский ACF его определяет как LSI-11/73, что сответствует KDJ11-A, но у KDJ11-A есть и разделение I/D и supervisor mode.

А КМ1811ВМ1, КМ1831ВМ1, КР1807ВМ1, МДП БИС серии К581, микропроцессорный комплект 588?

form
02.04.2013, 23:16
А КМ1811ВМ1, КМ1831ВМ1, КР1807ВМ1, МДП БИС серии К581, микропроцессорный комплект 588?

Про эти ничего не знаю.
Было бы на чем проверить - выяснили бы.

form
03.04.2013, 12:55
Пока готовлю БП с полным управлением с передней панели, чтоб не потерялось, закину сюда (выдержка из описания KDJ11-B)...

Power-Up - The timing diagram for the power-up/power-down sequence is shown in Figure 6-13. The following events occur during a power-up sequence.

Logic associated with the power supply negates BDCOK H during power-up and asserts BDCOK H 3 ms (minimum) after dc power is restored to voltages within specification.
The processor asserts BINIT L after receiving nominal power and negates BINIT L 0 ns (minimum) after the assertion of BDCOK H.
Logic associated with the power supply negates BPOK H during power-up and asserts BPOK H 70 ms (minimum) after the assertion of BDCOK H. If power does not remain stable for 70 ms, BDCOK H is negated. Therefore, devices must suspend critical actions until BPOK H is asserted.
BPOK H must remain asserted for a minumum of 3 ms. BDCOK H must remain asserted 4 ms (minimum) after the negation of BPOK H.

Power-Down - The following events occur during a power-down sequence.

If the ac voltage to a power supply drops below 75% of the nominal voltage for one full line cycle (15 to 24 ms), BPOK H is negated by the power supply. Once BPOK H is negated, the entire power-down sequence must be completed.
A device that requested bus mastership before the power failure that has not become bus master must maintain the request until BINIT L is asserted or the request is acknowledged (in which case regular bus protocol is followed).
Processor software must execute a RESET instruction 3 ms (minimum) after the negation of BPOK H. This asserts BINIT L for 8 to 20 us. Processor software executes a HALT instruction immediately following the RESET instruction.
BDCOK H must be negated a minimum of 4 ms after the negation of BPOK H. This 4 ms allows mass storage and similar devices to protect themselves against erasures and erroneous writes during a power failure.

Patron
03.04.2013, 14:29
Написал тест расширенных команд 1-й системы команд ( которая 0-я ) терминала 15ИЭ-00-013: 15IE.BAS (http://zx.pk.ru/attachment.php?attachmentid=40759)

После завершения теста - текст на экране должен выглядеть так:

http://emulator.pdp-11.org.ru/misc/15IE_test.png

По идее - на УКНЦ должно работать правильно.

...

form
03.04.2013, 14:48
Вопрос уже собственно поднимался, но тогда чисто теоретически. Сейчас возникли практические мысли :)
Итак вопрос - как однозначно определить ВМ1?
С ВМ3 все просто, проблем нет, с ВМ2 более-менее известно куда копать, с ВМ1 пока не знаю что делать.

Titus
03.04.2013, 15:01
Вопрос уже собственно поднимался, но тогда чисто теоретически. Сейчас возникли практические мысли :)
Итак вопрос - как однозначно определить ВМ1?
Ваще-та у ВМ1 есть таймер, а так же отсутствуют несколько команд, имеющихся у ВМ2. Как то циклический сдвиг на n позиций, деление, и т.д.

form
03.04.2013, 15:04
Ваще-та у ВМ1 есть таймер, а так же отсутствуют несколько команд, имеющихся у ВМ2. Как то циклический сдвиг на n позиций, деление, и т.д.

"Ваще-та" таймер есть везде. А остальное никак не поможет опознать ВМ1 (задача - опознать, а не отличить от ВМ2).

Titus
03.04.2013, 15:07
"Ваще-та" таймер есть везде, а несколько команд - какие?
Причем интерес отличть не от ВМ2, а в принципе определить, что это ВМ1.

---------- Post added at 18:04 ---------- Previous post was at 18:03 ----------

Хотя собственно в свете требований вопрос риторический ибо отсутствие команд которые отсутствуют не только у ВМ2 не помогут определить ВМ1 :)

Не знаю, не спец по ВМ1. Но говорили, что остался рудимент от предыдущего микропроцессора в виде таймера какого-то хитрого.

На ВМ2 нет таймера, так что не везде.

form
03.04.2013, 15:09
Не знаю, не спец по ВМ1. Но говорили, что остался рудимент от предыдущего микропроцессора в виде таймера какого-то хитрого.

На ВМ2 нет таймера, так что не везде.

В каком месте его там нет?
Или если речь не про LTC, то как бы его добыть в ВМ1 :)

Titus
03.04.2013, 15:10
В каком месте его там нет?
Или если речь не про LTC, то как бы его добыть в ВМ1 :)

Ни в каком нет. В ВМ2 нет никаких встроенных таймеров.
А что такое LTC - я не знаю.

form
03.04.2013, 15:12
Ни в каком нет. В ВМ2 нет никаких встроенных таймеров.
А что такое LTC - я не знаю.

LTC - таймер который дает прерывания с частотой сети.
На УКНЦ этот таймер успешно работает.
Так или иначе, мне не известна ни одна модель компьютера где не был бы реализован сетевой таймер кроме извращений вроде DEC Professional. Но это в любом случае не помогает так как невозможно отличить отсутствие таймера от выключенного таймера LSI :)

Patron
03.04.2013, 15:17
У ВМ1 есть ВЕ-таймер по адресам 177706..177712
Работа этого таймера описана здесь (http://zx.pk.ru/showthread.php?t=15090).

form
03.04.2013, 15:20
У ВМ1 есть ВЕ-таймер по адресам 177706..177712
Работа этого таймера описана здесь (http://zx.pk.ru/showthread.php?t=15090).

Теперь понял. Годится.

---------- Post added at 18:20 ---------- Previous post was at 18:19 ----------

Значит ВМ1 и ВМ3 уже определяем 100%.
Осталось внимательно поковырять ВМ2, там вроде регистры окна есть всегда?

Titus
03.04.2013, 15:22
Теперь понял. Годится.

---------- Post added at 18:20 ---------- Previous post was at 18:19 ----------

Значит ВМ1 и ВМ3 уже определяем 100%.
Осталось внимательно поковырять ВМ2, там вроде регистры окна есть всегда?
Сетевой таймер не входит в состав ВМ2.

Нет у ВМ2 регистров окна. Хотя, по описанию Alex_K, на ВМ2 есть какая-то уникальная левая команда, видимо, реализованная по ошибке. Может по ней?

form
03.04.2013, 15:24
Сетевой таймер не входит в состав ВМ2.

Нет у ВМ2 регистров окна. Хотя, по описанию Alex_K, на ВМ2 есть какая-то уникальная левая команда, видимо, реализованная по ошибке. Может по ней?

Не важно входит он или нет, важно, что он работает. А работает ли он внутри проца или получает BEVNT совершенно пофигу.

Что впрочем все-таки неважно так как ничего не помогает определить.
Насчет окна помню из описания процессора что-то, но давно не смотрел.
Насчет команды с ошибкой - это как я понимаю переход в HALT режим, но там нет 100% гарантии перехода так как оно вроде зависило от того реализован FIS или нет.

Titus
03.04.2013, 15:28
Что впрочем все-таки неважно так как ничего не помогает определить.
Насчет окна помню из описания процессора что-то, но давно не смотрел.
Насчет команды с ошибкой - это как я понимаю переход в HALT режим, но там нет 100% гарантии перехода так как оно вроде зависило от того реализован FIS или нет.

Нет, это команда:


?????? 000030

НЕИЗВЕСТНАЯ КОМАНДА

0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
Алгоритм: R0:=0;
while ((R0[7]==0) || (R2[7]==0))
{
R1:=R1<<1 | 0; R2[07:00]:=R2[07:00]<<1 | C;
R2[15:08]:=R2[7]; R3:=R3<<1 | C; R0++;
}
N:=0; Z:=(R0==0); V:=0; C:=0
Описание: По этой команде сперва очищается регистр R0. Далее исполняется цикл, окончанием которого является установка в разряде 07 R0 или R2 единицы. В цикле над регистрами проводятся следующие действия: регистры с R1 по R3 сдвигаются влево, при этом в R1 в младший разряд вдвигается ноль, а в R2 и R3 – содержимое разряда C, при этом старшая часть R2 расширяется знаковым разрядом младшей части, R0 инкрементируется. Так как останов исполнения команды производится при наличии единицы в разряде 7 в R0 или R2, то после исполнения команды R0 может принимать значения от 0 до 108 или 2008. Значение 2008 получается в том случае, если до исполнения операции младшая часть R2 была равна нулю и был сброшен бит С.
Признаки: N – очищается, Z – устанавливается, если значение в R0 равно нулю, в противном случае очищается, V – очищается, C – очищается.

form
03.04.2013, 15:29
Нет, это команда:

А она работает в обычном режиме проца?

Titus
03.04.2013, 15:31
А она работает в обычном режиме проца?
Спросите у Alex_K. Я вообще ее никогда не пробовал)

form
03.04.2013, 15:34
Спросите у Alex_K. Я вообще ее никогда не пробовал)

Ладно, попробую вечером если не напьюсь :)
Если сработает - можно будет однозначно определить все модели PDP-11, M и 1801 :)

Patron
03.04.2013, 15:46
Все доп-команды ВМ2 работают только в режиме HALT.

Настоящий ВМ2 можно определить по мега-глюку команд типа MOV (PC), R0



START:
Mov (PC), R0
Inc R0
Jmp @#NotVM2
.Word VM2

NotVM2:
.Print #.NotVM2
.Exit
VM2:
.Print #.VM2
.Exit

form
03.04.2013, 15:47
Настоящий ВМ2 можно определить по мега-глюку команд типа MOV (PC), R0

А этот глюк 100% проявляется с одной попытки или требует долго мучить?

Patron
03.04.2013, 15:54
А этот глюк 100% проявляется с одной попытки или требует долго мучить?Глюк проявляется всегда. Проблема в том, что он недостаточно изучен и (вроде бы) иногда пропускает следующее слово после MOV. Возможно, сразу после MOV есть смысл добавить NOP.

Но в любом случае - надо проверить "определялку" на реальном ВМ2.

form
03.04.2013, 15:55
Глюк проявляется всегда. Проблема в том, что он недостаточно изучен и (вроде бы) иногда пропускает следующее слово после MOV. Возможно, сразу после MOV есть смысл добавить NOP.

Но в любом случае - надо проверить "определялку" на реальном ВМ2.

Это можно - пульт у меня работает, а там глидишь, hobot полностью рабочую плату пришлет.

Patron
03.04.2013, 15:59
Хотя, встретив там NOP - ВМ2 (вроде бы) иногда вылетает по вектору 24.
Лучше, наверное, добавить INC R0.

form
03.04.2013, 16:04
Я в армии помню хотел поиграться со всякими @PC на УКНЦе, но руки не дошли. Вот всякие бегунки 14747 или чистки 4747 запускал, но это другой случай.
А теперь вот на моем 11/83 нельзя красивую чистку сделать:


MOV #160000,SP
MOV #4747,@#0
CLR PC

:)

Patron
03.04.2013, 16:13
Кроме Alex_K никто ещё обсуждаемый мега-глюк на реальном ВМ2 не проверял.
Тогда поведение глюка зависело от количества команд MOV (PC), R0 подряд.

Начиная с какого-то количества - добавление в конце последовательности пары NOPов начинало приводить к трапу ВМ2 на первом же NOPе. На одной УКНЦ по вектору 4, а на другой - по вектору 24 (!).

form
03.04.2013, 16:14
Ну большие тесты буду делать как живая плата придет. Пока могу только мелкие руками набирать.

Patron
03.04.2013, 16:19
Ну большие тесты буду делать как живая плата придет. Пока могу только мелкие руками набирать.Чтобы размножить код команды в памяти, дописать в конец пару NOPов и передать управлние на начало последовательности - достаточно вбить в пульте строк 5..6

hobot
03.04.2013, 18:30
Настоящий ВМ2 можно определить по мега-глюку


http://savepic.org/3193207.jpg

Patron
03.04.2013, 19:47
А как будет выглядеть экран, если на реальной УКНЦ запустить 15IE.BAS (http://zx.pk.ru/attachment.php?attachmentid=40759) ?

hobot
03.04.2013, 20:43
А как будет выглядеть экран, если на реальной УКНЦ запустить 15IE.BAS ?
Извиняюсь, что не сразу ответил - вылетела сеть по непонятным причинам

Мне самому очень интересно, в каком бейсике только его запускать? У меня там пока только ВИЛЬНЮС стоит. А программа явно не для него )
--------------------------------------------------------------------------------
А может лучше что-нибудь из этого прогнать прямо сейчас с харда УК-НЦшного?


http://savepic.org/3178646.jpg

Patron
03.04.2013, 20:50
Мне самому очень интересно, в каком бейсике только его запускать?Для начала можно провести тренировку в эмуляторе ДВК, запустив BASIC командой BASIC и затем введя команду RUN 15IE.


А может лучше что-нибудь из этого прогнать прямо сейчас с харда УК-НЦшного?MOVPC.SAV можно запустить - там будет видно влияние мега-глюка.

Остальное - из темы про тайминги.

hobot
03.04.2013, 21:14
Для начала можно провести тренировку в эмуляторе ДВК, запустив BASIC командой BASIC и затем введя команду RUN 15IE.

Так - я понял что мне надо этот бейсик вместе с программой на УК-НЦ перекинуть )
Вот это потребует гибкости ) И тренированности )

MOVPC.SAV - какую версию уточните? У меня их там три ! )
http://savepic.org/3186860.jpg
и у всех исходников разные заголовки ) тот который Y здоровый исходник )

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

в эмуляторе то все понятно работает! Красивая программа )
http://savepic.org/3158190.jpg

Alex_K
03.04.2013, 22:01
Мне самому очень интересно, в каком бейсике только его запускать? У меня там пока только ВИЛЬНЮС стоит. А программа явно не для него )
В эмуляторе UKNCBTL должен быть диск BASIC.DSK. Там кроме вильнюсского бейсика DBAS.SAV есть и обычный бейсик BASIC.SAV. Вот его и надо запустить, ответить ALL, потом с помощью команды OLD загрузить программу.

---------- Post added at 22:01 ---------- Previous post was at 21:57 ----------


А как будет выглядеть экран, если на реальной УКНЦ запустить 15IE.BAS (http://zx.pk.ru/attachment.php?attachmentid=40759) ?
Не так, так как в эмуляторе ДВК неправильно обрабатываются управляющие коды сдвига экрана вверх (СУ+R) и вниз (СУ+V). У 15ИЭ буфер экрана вмещает 48 строк, и при употреблении этих управляющих кодов отображаемая часть (24 строки) просто двигается по кольцу по этому буферу без всякого стирания, в отличии от LF и ESC I. Этими кодами в игре СТАЛКЕР(ПИКНИК) была реализована функция "Начальник идет !!!".

hobot
03.04.2013, 22:35
Этими кодами в игре СТАЛКЕР(ПИКНИК) была реализована функция "Начальник идет !!!".
Так и есть! Сейчас в этот пост выложу картинки, подождите пожалуйста ! )


------------------------

Влияние глюка?

http://savepic.org/3152053.jpg

А дальше всё как написал Alex_K
Я сделал видео, а из него уже кадры поэтому качество заметно хуже, хотел в динамике показать, но слишком
громоздкие AVI файлы получились, поэтому кадры :

Начало теста

http://savepic.org/3197111.jpg

По кольцу - всё что уползло вниз вылезло сверху!

http://savepic.org/3202231.jpg

Ради этого момента и делал видео )

http://savepic.org/3187895.jpg

Приглашение READY от бейсика видно?

http://savepic.org/3172535.jpg


И ещё момент ) В принципе без комментариев )

Смена установки сразу после первого запуска
http://savepic.org/3155127.jpg

Повторный RUN
http://savepic.org/3147959.jpg

http://savepic.org/3193014.jpg

http://savepic.org/3184822.jpg

http://savepic.org/3174582.jpg

Время перед появлением приглашения проходит
там видимо эти не отображённые строки по X
перемещаются )

http://savepic.org/3155126.jpg





Остальные тесты в теме про тайминги я буду выкладывать.
Только не сегодня уже.
Ура!

Patron
03.04.2013, 23:27
У 15ИЭ буфер экрана вмещает 48 строк, и при употреблении этих управляющих кодов отображаемая часть (24 строки) просто двигается по кольцу по этому буферу без всякого стиранияПри смыкании/размыкании строки данные копируются, а при смыкании/размыкании экрана разве не должны?

Мне казалось, что в экранных редакторах для 15ИЭ-00-013 ( типа SCREEN.SAV ) смыкание/размыкание экрана используется с теми же целями, что и смыкание/размыкание строки. Я даже в 80-х вроде демы для ДВК делал с этими эффектами.

Неужели у 15ИЭ-00-013 при смыкании/размыкании экрана просто весь буфер текста крутится туда-сюда..

hobot
03.04.2013, 23:35
Неужели у 15ИЭ-00-013 при смыкании/размыкании экрана просто весь буфер текста крутится туда-сюда..
Зато его удобно на печать весь целиком отправить всегда ! )

Titus
03.04.2013, 23:42
На EmuStudio:


УКНЦ (VT-52):
http://s44.radikal.ru/i104/1304/94/9c9d93fbac64.png

УКНЦ (15ИЭ)
http://s020.radikal.ru/i720/1304/f6/71a61946501f.png

КСМ:
http://s017.radikal.ru/i409/1304/13/bd7a48f952a5.png

КЦГД:
http://s020.radikal.ru/i707/1304/fd/7d50fe64e044.png

КЦГД (Прошивка 182):
http://s017.radikal.ru/i420/1304/ac/42cdf9329466.png

Patron
04.04.2013, 00:03
На EmuStudioУ КСМ другие ( насколько понимаю ) команды смыкания/размыкания строки и экрана:

Esc R - вверх
Esc S - вниз
Esc Q - вправо
Esc P - влево

А у КЦГД команд смыкания/размыкания нет вообще.

Titus
04.04.2013, 00:09
У КСМ другие ( насколько понимаю ) команды смыкания/размыкания строки и экрана:

Esc R - вверх
Esc S - вниз
Esc Q - вправо
Esc P - влево

А у КЦГД команд смыкания/размыкания нет вообще.

На КСМ и КЦГД выглядело абсолютно идентично.

А на КЦГД со 182-й прошивкой иначе.

Patron
04.04.2013, 00:17
На КСМ и КЦГД выглядело абсолютно идентично.Чтобы проверить команды смыкания/размыкания КСМ нужен другой тест, т.к. команды не те, что у 15ИЭ-00-013.


А на КЦГД со 182-й прошивкой иначе.Это потому что выводится 80 символов, а потом 010 ( BS ) и CrLf - правильный терминал должен отреагировать как КЦГД-182 ( или не переводить строку при выводе в 80-й колонке, или разрешить курсору вернуться в конец предыдущей строки при выдаче BS в начале следующей ) - именно так реагирует большинство терминалов.

form
04.04.2013, 00:19
разрешить курсору вернуться в конец предыдущей строки при выдаче BS в начале следующей ) - именно так реагирует большинство терминалов.

Нет.
Большинство как раз не даст вернуться на предыдущую строку :)

---------- Post added at 03:19 ---------- Previous post was at 03:18 ----------

Причем даже если не считать бумажные - все-равно большинство :)

Patron
04.04.2013, 00:42
Нет.
Большинство как раз не даст вернуться на предыдущую строку Т.е. вывести на Бейсике десять строк по 80 символов без промежуточных пустых строк на такие терминалы не просто ?

Alex_K
04.04.2013, 00:43
При смыкании/размыкании строки данные копируются, а при смыкании/размыкании экрана разве не должны?

Мне казалось, что в экранных редакторах для 15ИЭ-00-013 ( типа SCREEN.SAV ) смыкание/размыкание экрана используется с теми же целями, что и смыкание/размыкание строки. Я даже в 80-х вроде демы для ДВК делал с этими эффектами.

Неужели у 15ИЭ-00-013 при смыкании/размыкании экрана просто весь буфер текста крутится туда-сюда..

У 15ИЭ, так же, как и у КСМ, есть только смыкание/размыкание строки. А про СУ+R и СУ+V сказано, что это сдвиг текста вверх/вниз на одну строку.

form
04.04.2013, 00:45
Т.е. вывести на Бейсике десять строк по 80 символов без промежуточных пустых строк на такие терминалы невозможно ?

Большинство терминалов опять таки не переводит строку по достижении правой границы. У 15ИЭ это настраивается, в ANSI терминалах наверное тоже можно включить перевод. Плюс если вывод делается средствами системы - там может быть настройка: в RSX SET /[NO]WRAP, в RT-11 - SET TT [NO]CRLF. В BASICе вроде была SYS функция для переключения параметра, но возможно только в MU/BASIC - не помню точно.

Patron
04.04.2013, 00:46
У 15ИЭ, так же, как и у КСМ, есть только смыкание/размыкание строки. А про СУ+R и СУ+V сказано, что это сдвиг текста вверх/вниз на одну строку.Тогда сделаю как в УКНЦ - в пределах экрана.

Alex_K
04.04.2013, 00:47
Тогда сделаю как в УКНЦ - в пределах экрана.

Надо в пределах буфера на 48 строк, вот тогда нормально будет. Можно в СТАЛКЕРЕ проверить.

Patron
04.04.2013, 00:50
Большинство терминалов опять таки не переводит строку по достижении правой границы.Проблема обратная - как несколько раз подряд вывести [ 80 символов + CrLf ] без пропуска строк.

Если терминал не перескакивает сам на следующую строку - проблемы нет. Но если перескакивает - по BS должен возвращаться назад.

form
04.04.2013, 00:52
Проблема обратная - как несколько раз подряд вывести [ 80 символов + CrLf ] без пропуска строк.

Если терминал не перескакивает сам на следующую строку - проблемы нет. Но если перескакивает - по BS должен возвращаться назад.

Тут ничего не могу сказать. Стандартные VT* такой возможности не дают. В 15ИЭ не помню как дело обстоит.

---------- Post added at 03:52 ---------- Previous post was at 03:51 ----------

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

Patron
04.04.2013, 00:56
Надо в пределах буфера на 48 строк, вот тогда нормально будет. Можно в СТАЛКЕРЕ проверить.Можно и так - всё равно это редко используется ( у универсального эмулятора терминала в буфере 20 экранов - придётся портить один предыдущий ).

---------- Post added at 23:56 ---------- Previous post was at 23:52 ----------


Стандартные VT* такой возможности не дают.Это странно. Когда в RT-11 на ДВК можно было ввести в командную строку KMON 130 символов, а потом удалить их все забоем, вернувшись в исходную точку - это выглядело логично.

form
04.04.2013, 00:59
Это странно. Когда в RT-11 на ДВК можно было ввести в командную строку KMON 130 символов, а потом удалить их все забоем, вернувшись в исходную точку - это выглядело логично.

Тем не менее конкретно ситуация с длинными строками описана во всех доках по системе что вернуться назад нельзя, можно только нажать CTRL/R и перепечатать что получилось :)

---------- Post added at 03:58 ---------- Previous post was at 03:57 ----------

Кстати напрямую командную строку такой длины в RT-11 нельзя вроде ввести в силу ограничений макровызовов?

---------- Post added at 03:59 ---------- Previous post was at 03:58 ----------

Вернее ввести можно, но будет ошибка :)

Хотя в 5.7 попробовал - KMON вводит.

Titus
04.04.2013, 01:02
Добавил сюда (http://zx.pk.ru/showpost.php?p=589119&postcount=549) еще тест на УКНЦ в системе 15ИЭ.

Patron
04.04.2013, 01:10
Добавил сюда (http://zx.pk.ru/showpost.php?p=589119&postcount=549) еще тест на УКНЦ в системе 15ИЭ.Беда лишь в том, что тест УКНЦ (VT-52) - это режим 15ИЭ-00-013:

http://img-fotki.yandex.ru/get/5636/264743.2/0_8b709_f5e0873d_XL.png.jpg

Titus
04.04.2013, 01:12
Беда лишь в том, что тест УКНЦ (VT-52) - это режим 15ИЭ-00-013:
Я специально в меню выбрал VT-52 в первом случае, и 15ИЭ во втором.

Patron
04.04.2013, 01:16
Я специально в меню выбрал VT-52 в первом случае, и 15ИЭ во втором.Значит ошибку сделали авторы ПЗУ.

Titus
04.04.2013, 01:20
Значит ошибку сделали авторы ПЗУ.
Тут уж ничего не могу сказать. Знаю, что когда на УКНЦ выбираешь режим 15ИЭ, то забой в RT-11 не стирает символ, а перескакивает в верхний левый угол экрана.

Patron
04.04.2013, 01:26
Тут уж ничего не могу сказать. Знаю, что когда на УКНЦ выбираешь режим 15ИЭ, то забой в RT-11 не стирает символ, а перескакивает в верхний левый угол экрана.Тогда всё понятно - это просто переключение в 1-ю ( 15ИЭ ) и 2-ю ( VT52 ) системы команд 15ИЭ.

---------- Post added at 00:26 ---------- Previous post was at 00:24 ----------

Т.е. 15ИЭ эмулируется в УКНЦ в обоих этих режимах (и режимы в обоих случаях могут переключаться программно).

Titus
04.04.2013, 01:27
Тогда всё понятно - это просто переключение в 1-ю ( 15ИЭ ) и 2-ю ( VT52 ) системы команд 15ИЭ.

---------- Post added at 00:26 ---------- Previous post was at 00:24 ----------

Т.е. 15ИЭ эмулируется в УКНЦ в обоих этих режимах (и режимы в обоих случаях могут переключаться программно).

Режим 2 более правильный?

Alex_K
04.04.2013, 01:30
Тут уж ничего не могу сказать. Знаю, что когда на УКНЦ выбираешь режим 15ИЭ, то забой в RT-11 не стирает символ, а перескакивает в верхний левый угол экрана.


Тогда всё понятно - это просто переключение в 1-ю ( 15ИЭ ) и 2-ю ( VT52 ) системы команд 15ИЭ.Т.е. 15ИЭ эмулируется в УКНЦ в обоих этих режимах (и режимы в обоих случаях могут переключаться программно).

http://felixl.com/Uknc_RAM_description_app

Patron
04.04.2013, 01:31
Режим 2 более правильный?Именно такой начальный режим рассчитывают иметь большинство программ для 15ИЭ ( хотя после включения устанавливается 1-й режим - в нём SL работать не будет, поэтому все и всегда переключались во 2-й режим ещё до загрузки RT-11 ).

form
04.04.2013, 01:34
Именно такой начальный режим рассчитывают иметь большинство программ для 15ИЭ ( хотя после включения устанавливается 1-й режим - в нём SL работать не будет, поэтому все и всегда переключались во 2-й режим ещё до загрузки RT-11 ).

А многие, включая меня, еще спичку в ВР втыкали :)

---------- Post added at 04:34 ---------- Previous post was at 04:32 ----------

Кстати помню был у нас какой-то редактор под RT-11, экранный, с командами в стиле TECO как раз для 15ИЭ.

Titus
04.04.2013, 01:35
Именно такой начальный режим рассчитывают иметь большинство программ для 15ИЭ ( хотя после включения устанавливается 1-й режим - в нём SL работать не будет, поэтому все и всегда переключались во 2-й режим ещё до загрузки RT-11 ).

А буржуйские программы в каком режиме работают? С чем он наиболее совместим?

form
04.04.2013, 01:36
А буржуйские программы в каком режиме работают? С чем он наиболее совместим?

VT52 и VT100 в основном.
Некоторые и то и другое умеют одновременно.

Titus
04.04.2013, 01:37
VT52 и VT100 в основном.
Некоторые и то и другое умеют одновременно.
А КСМ, 15ИЭ 1, 2, КЦГД1, 2 как классифицировать по-буржуйски?

form
04.04.2013, 01:38
А КСМ, 15ИЭ 1, 2, КЦГД1, 2 как классифицировать по-буржуйски?

Как VT52 при установке соответствующего режима.

Patron
04.04.2013, 01:38
Кстати помню был у нас какой-то редактор под RT-11, экранный, с командами в стиле TECO как раз для 15ИЭ.На дисках от anasana нашлась одна копия легендарного экранного редактора SCREEN.SAV (http://zx.pk.ru/attachment.php?attachmentid=40772), который поставлялся в комплекте ДВК и работал в 1-й системе команд, но он похоже битый - передаёт управление внутрь команды и вылетает по Trap_To_10.

...

form
04.04.2013, 01:41
На дисках от anasana нашлась одна копия легендарного экранного редактора SCREEN.SAV (http://zx.pk.ru/attachment.php?attachmentid=40772), который поставлялся в комплекте ДВК и работал в 1-й системе команд, но он похоже битый - передаёт управление внутрь команды и вылетает по Trap_To_10.

...

Тот про который я говорю был когда ДВК еще не было :)

form
04.04.2013, 01:49
Да, похоже битый.
MFPT - не самая обычная команда для редактора :)

Patron
04.04.2013, 02:11
MFPT - не самая обычная команда для редактораНа самом деле там MOV #7,R0 и управление передаётся на второе слово команды. Явно при каком-то из копирований была ошибка чтения и содержимое одного блока заменилось содержимым другого.

form
04.04.2013, 02:15
На самом деле там MOV #7,R0 и управление передаётся на второе слово команды. Явно при каком-то из копирований была ошибка чтения и содержимое одного блока заменилось содержимым другого.

Ох, не надо о грустном :)
Большая часть образов лент на сервере simh убита таким образом - блоки/eofы переставлены местами. С BRU лентами особых проблем нет, там легко автоматизировать восстановление, а вот со всякими DOS-11 хреново. Я уже давно бьюсь, пытаясь восстановить BP2 V2.7 :)

Последствия чтения программой в режиме чтения кучи блоков за раз.

Patron
04.04.2013, 13:03
Исправил работу команд вертикальной прокрутки изображения в 1-й системе команд терминала 15ИЭ-00-013 - теперь по этим командам циклически прокручиваются последние 48 строк в буфере вывода.

Новый вариант дистрибутива "эмулятора ДВК" ЗДЕСЬ (http://zx.pk.ru/showthread.php?postid=588958).

Теперь тест 15IE.BAS (http://zx.pk.ru/attachment.php?attachmentid=40759) даёт такой результат:

http://emulator.pdp-11.org.ru/misc/15IE_test2.png

Patron
04.04.2013, 20:18
А может лучше что-нибудь из этого прогнать прямо сейчас с харда УК-НЦшного?Для более вдумчивого тестирования мега-глюка ВМ2 - можно запустить MOVPCY.SAV (http://zx.pk.ru/attachment.php?attachmentid=40170)



.RU MOVPCY
MovPCy - v1.1
Mem Top: 137564
Max Row: 11000
CPU KHz: 5300 >
MTPS : 000000 >
Command: 011700 >
Row Len: 1000 >
Grow : 0 >
R1 : 000000 >
R2 : 000000 >
R3 : 000000 >
Addons : 3 >
W1 : 000240 >
W2 : 000240 >
W3 : 000240 >
Loops : 106 >


задав вручную параметры:



Row Len: 1000 > 100
Grow : 0 > 100

hobot
05.04.2013, 10:39
Для более вдумчивого тестирования мега-глюка ВМ2
принято - сейчас прогоню )

---------- Post added at 10:00 ---------- Previous post was at 08:43 ----------

Получилось как-то так?

http://savepic.org/3166172.jpg

Какую всё таки герцовку для ВМ2 вбивать в тестах где требуется.
Сегодня тогда начну гнать все тесты по соседней теме наверное?
Если что то в первую очередь интересней пишите же )
Если в этом надо параметры изменить на "правильные" прогоню ещё раз.

---------- Post added at 10:15 ---------- Previous post was at 10:00 ----------


Loops : 106 >
уже вижу - проглядел ( Критично?

---------- Post added at 10:39 ---------- Previous post was at 10:15 ----------

Поправил герцовку на 8013 и вбил Loop=106
Row Len: 1000 > 100
Grow : 0 > 100

результаты 1 в 1 даже не стал делать снимок.
Изучаю соседнюю тему, буду уже в ней выкладывать.

Patron
05.04.2013, 12:24
Получилось как-то такЛюбопытно, что тест ни разу не вылетел.

Возможно, играет роль блок питания.

Чтобы проверить более тщательно - можно задать такие параметры:



Row Len: 100 > 9000
Grow : 100 > 1

hobot
05.04.2013, 13:16
Любопытно, что тест ни разу не вылетел.
Не знаю что подразумевается под вылетом, но после прогрева выдал совершенно другие данные в результатах! А именно :


http://savepic.org/3189758.jpg


это при
Поправил герцовку на 8013 и вбил Loop=106
Row Len: 1000 > 100
Grow : 0 > 100

---------- Post added at 13:16 ---------- Previous post was at 13:15 ----------

Начинаю в другую тему выкладывать по тестовой плате№1 (она же на снимках тут)

form
05.04.2013, 13:23
под вылетом

Какой бы хитрый тест для DJ11 придумать :)

---------- Post added at 16:23 ---------- Previous post was at 16:23 ----------

Одна мысль правда есть - опробовать режим голого кэша - когда память совсем отключается, но пока не готов.

Patron
05.04.2013, 14:03
Не знаю что подразумевается под вылетом, но после прогрева выдал совершенно другие данные в результатах!Когда плата прогрелась - вылет произошёл при длине цепочки последовательных команд MOV (PC),R0 = 7700.

Когда до прогрева не вылетает, а после прогрева вылетает - "питательная" теория получает ещё одно подтверждение.


вбил Loop=106параметр Loops рассчитывается автоматически на основе заданной частоты процессора, а в режиме Grow - вообще не используется.

Режим Grow нужен для того, чтобы более точно определить, начиная с какого количества команд MOV (PC),R0 подряд - начинаются вылеты. При этом Row Len задаёт начальное значение, а Grow - приращение длины цепочки команд.

Подбирая Row Len и уменьшая Grow - нужно ( в смысле - надо бы ) в результате серии последовательных прогонов теста максимально точно определить ту длину цепочки команд, начиная с которой появляются вылеты.

Titus
05.04.2013, 14:14
Когда до прогрева не вылетает, а после прогрева вылетает - "питательная" теория получает ещё одно подтверждение.
Да не может влиять питание)

В крайнем случае, смена характеристик какой-либо части схемы при ее разогреве.

form
05.04.2013, 14:23
В крайнем случае, смена характеристик какой-либо части схемы при ее разогреве.

Ну БП в УКНЦ как раз очень сильно разогревается под нагрузкой :)

Patron
05.04.2013, 14:25
Да не может влиять питание)Единственное, что зависит от длины цепочки одинаковых команд - профиль энергопотребления.

Если частота вылетов зависит от температуры, но не зависит от профиля энергопотребления - вероятность вылета для цепочки команд должна быть прямо пропорциональна её длине ( и отличаться от нуля даже для "цепочки" из одной единственной команды ).

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

Titus
05.04.2013, 14:30
Если же выяснится, что при любой температуре есть такая длина цепочки команд, при которой вылет не происходит вообще - решающая роль профиля потребления будет доказана.

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

И то, это у КМОП-структур, а проц по другой технологии сделан, на сколько я помню.

hobot
05.04.2013, 14:33
Подбирая Row Len и уменьшая Grow - нужно ( в смысле - надо бы ) в результате серии последовательных прогонов теста максимально точно определить ту длину цепочки команд, начиная с которой появляются вылеты.
ага! уже меньше чувствую себя просто мартышкой тыкающей кнопки (
В принципе ничто не мешает погонять этот тест в процессе эксплуатации УК_НЦ )



"питательная" теория получает ещё одно подтверждение.
По моей личной практике - может влиять. По поводу конкретного питания
вот нагрузка: системная плата №1 (у неё СА висит на проводках) + КГМД + КЖМД
с флеш-драйвом.
А вот блок питания
http://savepic.org/3156751.jpg

Patron
05.04.2013, 14:37
Не докажете)Критерий истины - практика.

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

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

Какое ещё физическое влияние на плату может иметь ДЛИНА цепочки команд ?

Alex_K
05.04.2013, 14:46
Уважаемые господа! Глюк с вылетом, а точнее с непредсказуемым выполнением команд, существует если после MOV @PC,R0 в цепочке команд, не нарушающих предвыборку, встречаются команды установки/снятия признаков (коды с 240 по 277). При исполнении других команд поведение предсказуемо (двойное исполнение или пропуск), никаких левых вылетов не наблюдается.

P.S. Извиняюсь! Пока забросил тестирование, т.к. нет времени. Появится, продолжу. А так про особенности исполнения я уже писал.

form
05.04.2013, 14:47
Глюк с вылетом, а точнее с непредсказуемым выполнением команд, существует если после MOV @PC,R0 в цепочке команд, не нарушающих предвыборку, встречаются команды установки/снятия признаков (коды с 240 по 277).

Он стабильный? - всмысле что срабатывает с первого раза всегда или надо помучить?

Titus
05.04.2013, 14:48
Критерий истины - практика.

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

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

Какое ещё физическое влияние на плату может иметь ДЛИНА цепочки команд ?

Критерий истины - четкое понимание вопроса. А у тут гадание на кофейной гуще. Раз кроме разогрева никаких параметров не известно, то пусть это будет... ПРОФИЛЬ ПИТАНИЯ! Ничего, что ни на каких других программах, режимах работы и т.д. он не сказывается. Но пусть будет.
Мы не знаем структуры процессора изнутри, и процессы, происходящие в нем могут быть какими угодно сложными и непонятными (и в частности нестабильными с точки зрения известных данных). Но к профилю питания это явно не относится никаким боком.

Patron
05.04.2013, 14:59
Глюк с вылетом, а точнее с непредсказуемым выполнением команд, существует если после MOV @PC,R0 в цепочке команд, не нарушающих предвыборку, встречаются команды установки/снятия признаков (коды с 240 по 277)Питательной теории это не противоречит.

Если бы была принципиально важна лишь "несовместимость" двух типов команд - ДЛИНА предшествующей цепочки никакой роли не играла бы.

Допустим ( т.к. тесты ещё не завершены и как обстоят дела можно лишь гадать ), что при длине цепочки 100 - не вылетает никогда, при длине 700 - тоже никогда, а при длине 800 - всегда.

У микропрограммы ВМ2 слишком маленькое пространство состояний, чтобы после выполнения 700 команд иметь какое-то другое внутреннее состояние, чем после выполнения 800 команд.

Если бы при одной команде никогда не вылетало, а при двух всегда - я бы первый сказал, что проблема в микропрограмме. Но когда задействованы СОТНИ команд - причина явно в другом.

---------- Post added at 13:59 ---------- Previous post was at 13:56 ----------


гадание на кофейной гуще.Вот и не надо гадать на кофейной гуще.

Вопрос элементарно прост - какое физическое влияние оказывает на плату ДЛИНА цепочки одинаковых команд ( кроме влияния на профиль питания, которое очевидно ).

Titus
05.04.2013, 15:08
У микропрограммы ВМ2 слишком маленькое пространство состояний, чтобы после выполнения 700 команд иметь какое-то другое внутреннее состояние, чем после выполнения 800 команд.

Если бы при одной команде никогда не вылетало, а при двух всегда - я бы первый сказал, что проблема в микропрограмме. Но когда задействованы СОТНИ команд - причина явно в другом.

1. Влияние прерываний. (надо запрещать все)
2. Влияние несинхронности шины данных. (так же необходимо останавливать ПП)

Patron
05.04.2013, 15:30
1. Влияние прерываний. (надо запрещать все)Такая настройка в тесте есть.


2. Влияние несинхронности шины данных. (так же необходимо останавливать ПП)Ничто из этого не может иметь чёткой зависимости от длины цепочки команд.

Если 700 ( и меньше ) команд никогда не вылетают, а 800 ( и больше ) всегда вылетают - несинхронность шины данных, ПП и все остальные нефизические причины очевидно непричём.

Titus
05.04.2013, 15:37
Если 700 ( и меньше ) команд никогда не вылетают, а 800 ( и больше ) всегда вылетают - несинхронность шины данных, ПП и все остальные нефизические причины очевидно непричём.

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

Patron
05.04.2013, 16:06
Начало выполнения цепочки команд с чем-нибудь да синхронно, с таймером или с чем-то еще. Следовательно вполне возможно, что через какой-то промежуток времени на последовательность выполнение команд влияют дополнительно появившиеся условия.При включенном таймере (т.е. при разрешённых прерываниях) начало выполнения цепочки команд синхронно с таймером, при выключенном - только с тактовой частотой ( каждая команда начинает выполняться в начале такта ) и эта синхронность одинакова для каждой команды в цепочке.
Большие никаких синхронностей быть не может.

form
09.04.2013, 15:22
Ради интереса померял время компиляции KMON для RT-11ZM в обычном варианте и с выключенным кэшем...

.TIM
10:00:31

.MAC/OB:OBJ:KMZM SRC:(ZM+FORMZX.CND+EDTG+KMON+KMOVLY)

.TIM
10:09:58

.TIM
10:10:16

.MAC/OB:OBJ:KMZM SRC:(ZM+FORMZX.CND+EDTG+KMON+KMOVLY)

.TIM
10:34:32

hobot
09.04.2013, 15:49
и с выключенным кэшем...
да существенно! А кэш - это дисковая память или ОЗУ?

Patron
09.04.2013, 17:35
А кэш - это дисковая память или ОЗУ?Кэш ОЗУ.

Patron
14.04.2013, 13:03
Тест VM2T1.SAV (http://zx.pk.ru/attachment.php?attachmentid=40972) первый в серии тестов мега-глюка процессора 1801ВМ2 - предназначен для проверки качества воссоздания этого глюка в эмуляторах.

В системах не имеющих/не эмулирующих мега-глюк ВМ2 - результат запуска такой:



.RU VM2T1

1801VM2 MegaBUG test #1

TST (PC) | INC R0 | INC R1 | INC R2 | TST (PC) | INC R3 | INC R4 | INC R5
R0: 1 R1: 1 R2: 1 R3: 1 R4: 1 R5: 1

TST (PC) | INC R0 | INC R1 | TST (PC) | INC R2 | INC R3 | TST (PC) | INC R4 |
R0: 1 R1: 1 R2: 1 R3: 1 R4: 1 R5: 1

TST (PC) | INC R0 | TST (PC) | INC R1 | TST (PC) | INC R2 | TST (PC) | INC R3
R0: 1 R1: 1 R2: 1 R3: 1 R4: 1 R5: 1

CMP (PC),(PC) | INC R0 | INC R1 | INC R2 | CMP (PC),(PC) | INC R3 | INC R4 |
R0: 1 R1: 1 R2: 1 R3: 1 R4: 1 R5: 1

CMP (PC),(PC) | INC R0 | INC R1 | CMP (PC),(PC) | INC R2 | INC R3 | CMP (PC),
R0: 1 R1: 1 R2: 1 R3: 1 R4: 1 R5: 1

CMP (PC),(PC) | INC R0 | CMP (PC),(PC) | INC R1 | CMP (PC),(PC) | INC R2 | CM
R0: 1 R1: 1 R2: 1 R3: 1 R4: 1 R5: 1


.

Alex_K
14.04.2013, 13:14
Тест VM2T1.SAV (http://zx.pk.ru/attachment.php?attachmentid=40972) первый в серии тестов мега-глюка процессора 1801ВМ2 - предназначен для проверки качества воссоздания этого глюка в эмуляторах.
По поводу TST @PC можно даже не заморачиваться. Этот глюк проявляется при адресации 17, которая стоит в битах 11-6 кода команды, т.е. при командах типа MOV @PC,..., CMP @PC,....

Patron
14.04.2013, 13:38
По поводу TST @PC можно даже не заморачиваться. Этот глюк проявляется при адресации 17, которая стоит в битах 11-6 кода команды, т.е. при командах типа MOV @PC,..., CMP @PC,....Т.е. команда TST (PC) глюк не вызывает.
Тем важнее, чтобы этот аспект правильной эмуляции мега-глюка можно было легко проверить.

Patron
14.04.2013, 13:56
Тест VM2T2.SAV (http://zx.pk.ru/attachment.php?attachmentid=40974) - второй тест мега-глюка процессора 1801ВМ2 - предназначен для проверки качества воссоздания этого глюка в эмуляторах.

В системах не имеющих/не эмулирующих мега-глюк ВМ2 - результат запуска такой:



.RU VM2T2

1801VM2 MegaBUG test #2

MOV (PC),R0 | 240 | 241 | 242 | MOV (PC),R1 | 240 | 241 | 242 | MOV (PC),R2 |
R0: 240 R1: 240 R2: 240 R3: 240 R4: 240 R5: 240

MOV (PC),R0 | 240 | 241 | MOV (PC),R1 | 240 | 241 | MOV (PC),R2 | 240 | 241 |
R0: 240 R1: 240 R2: 240 R3: 240 R4: 240 R5: 240

CMP (PC),R0 | 240 | 241 | 242 | MOV (PC)+,R0 | 240 | 241 | 242 | MOV (PC)+,
R0: 240 R1: 240 R2: 240 R3: 240 R4: 240 R5: 240

CMP (PC),R0 | 240 | 241 | MOV (PC)+,R0 | 240 | 241 | MOV (PC)+,R1 | 240 |
R0: 240 R1: 240 R2: 240 R3: 240 R4: 240 R5: 240

CMP (PC),R0 .. MOV (PC)+,R0 .. MOV (PC)+,R1 .. CMP (PC),R0 .. MOV (PC)+,R2 ..
R0: 240 R1: 240 R2: 240 R3: 240 R4: 240 R5: 240

Program completed.

.

Alex_K
14.04.2013, 15:52
По поводу TST @PC можно даже не заморачиваться. Этот глюк проявляется при адресации 17, которая стоит в битах 11-6 кода команды, т.е. при командах типа MOV @PC,..., CMP @PC,....

Т.е. команда TST (PC) глюк не вызывает.
Тем важнее, чтобы этот аспект правильной эмуляции мега-глюка можно было легко проверить.
Скажу еще, что глюк вызывают команды MOV/MOVB, CMP/CMPB, BIT/BITB, BIC/BICB, BIS/BISB, ADD, SUB только со способом адресации CMD @PC,Rx. Если в приемнике(dst) используется способ адресации, отличный от регистрового, то глюка нет.

---------- Post added at 15:15 ---------- Previous post was at 15:12 ----------

Глюка нет и на командах CMD @PC,PC

---------- Post added at 15:52 ---------- Previous post was at 15:15 ----------


Тест VM2T2.SAV (http://zx.pk.ru/attachment.php?attachmentid=40974) - второй тест мега-глюка процессора 1801ВМ2 - предназначен для проверки качества воссоздания этого глюка в эмуляторах.
Patron, наслаждайтесь! Я говорил, что поведение процессора после команд снятия/установки признаков непредсказуемо. Собственно и результат:

http://kisly-alexey.pisem.net/VM2/T2/1/VM2T2_01.jpg
http://kisly-alexey.pisem.net/VM2/T2/1/VM2T2_02.jpg
http://kisly-alexey.pisem.net/VM2/T2/1/VM2T2_03.jpg
http://kisly-alexey.pisem.net/VM2/T2/1/VM2T2_04.jpg
http://kisly-alexey.pisem.net/VM2/T2/1/VM2T2_05.jpg
http://kisly-alexey.pisem.net/VM2/T2/1/VM2T2_06.jpg

Patron
14.04.2013, 15:58
Тест VM2T3.SAV (http://zx.pk.ru/attachment.php?attachmentid=40978) - третий тест мега-глюка процессора 1801ВМ2 - предназначен для проверки качества воссоздания этого глюка в эмуляторах.

В системах не имеющих/не эмулирующих мега-глюк ВМ2 - результат запуска такой:



.RU VM2T3

1801VM2 MegaBUG test #3

CMP (PC),PC | INC R0 | INC R1 | INC R2 | CMP (PC),PC | INC R3 | INC R4 | INC
R0: 1 R1: 1 R2: 1 R3: 1 R4: 1 R5: 1

CMP (PC),R0 | INC R0 | INC R1 | INC R2 | CMP (PC),R0 | INC R3 | INC R4 | INC
R0: 1 R1: 1 R2: 1 R3: 1 R4: 1 R5: 1

CMP (PC),R0 | INC R0 | INC R1 | CMP (PC),R0 | INC R2 | INC R3 | CMP (PC),R0 |
R0: 1 R1: 1 R2: 1 R3: 1 R4: 1 R5: 1

CMP (PC),R0 | INC R0 | CMP (PC),R0 | INC R1 | CMP (PC),R0 | INC R2 | CMP ...
R0: 1 R1: 1 R2: 1 R3: 1 R4: 1 R5: 1

Program completed.

.

Patron
14.04.2013, 16:12
Собственно и результатВ следующем тесте попробую добавить в начало каждого фрагмента тестового кода явный сброс предвыборки командой BR .+2.

---------- Post added at 15:12 ---------- Previous post was at 15:07 ----------

И в конец каждого фрагмента тестового кода тоже - чтобы не сбивалось сохранение результатов.

Alex_K
14.04.2013, 16:18
В следующем тесте попробую добавить в начало каждого фрагмента тестового кода явный сброс предвыборки командой BR .+2.

---------- Post added at 15:12 ---------- Previous post was at 15:07 ----------

И в конец каждого фрагмента тестового кода тоже - чтобы не сбивалось сохранение результатов.
А лучше сразу три команды друг за другом, а то при таком глюке иногда команды пропускаются. А уж из трех какая-нибудь исполнится.

Patron
14.04.2013, 16:20
Тест VM2T4.SAV (http://zx.pk.ru/attachment.php?attachmentid=40979) - 4-й тест мега-глюка процессора 1801ВМ2 - предназначен для проверки качества воссоздания этого глюка в эмуляторах.

Это вариант теста VM2T2 со сбросом предвыборки перед сохранением результатов каждого этапа теста:



Br .+2.
Nop

Mov R0, $R0
Mov R1, $R1
Mov R2, $R2
Mov R3, $R3
Mov R4, $R4
Mov R5, $R5

Call PrintRegs

Alex_K
14.04.2013, 16:24
Тест VM2T3.SAV (http://zx.pk.ru/attachment.php?attachmentid=40978) - третий тест мега-глюка процессора 1801ВМ2 - предназначен для проверки качества воссоздания этого глюка в эмуляторах.
Да, действительно, предвыборку надо сбрасывать, а то адрес останова очень нехороший получается:
http://kisly-alexey.pisem.net/VM2/T3/1/VM2T3_01.jpg

Patron
14.04.2013, 16:28
Тест VM2T5.SAV (http://zx.pk.ru/attachment.php?attachmentid=40980) - 5-й тест мега-глюка процессора 1801ВМ2 - предназначен для проверки качества воссоздания этого глюка в эмуляторах.

Это вариант теста VM2T3 со сбросом предвыборки перед сохранением результатов каждого этапа теста:



Br .+2.
Br .+2.
Br .+2.
Nop

Mov R0, $R0
Mov R1, $R1
Mov R2, $R2
Mov R3, $R3
Mov R4, $R4
Mov R5, $R5

Call PrintRegs

Patron
14.04.2013, 16:31
Да, действительно, предвыборку надо сбрасывать, а то адрес останова очень нехороший получаетсяНо и такой тест ценен, т.к. правильный эмулятор должен выдать тот же адрес останова.

Alex_K
14.04.2013, 17:03
Тест VM2T4.SAV (http://zx.pk.ru/attachment.php?attachmentid=40979) - 4-й тест мега-глюка процессора 1801ВМ2 - предназначен для проверки качества воссоздания этого глюка в эмуляторах.

Это вариант теста VM2T2 со сбросом предвыборки перед сохранением результатов каждого этапа теста:
Ну вот собственно непредсказуемый результат, но уже без вылетов в пультовый отладчик, хотя и с одним BR:

http://kisly-alexey.pisem.net/VM2/T4/1/VM2T4_01.jpg
http://kisly-alexey.pisem.net/VM2/T4/1/VM2T4_02.jpg
http://kisly-alexey.pisem.net/VM2/T4/1/VM2T4_03.jpg
http://kisly-alexey.pisem.net/VM2/T4/1/VM2T4_04.jpg
http://kisly-alexey.pisem.net/VM2/T4/1/VM2T4_05.jpg
http://kisly-alexey.pisem.net/VM2/T4/1/VM2T4_06.jpg


---------- Post added at 17:03 ---------- Previous post was at 16:50 ----------


Тест VM2T5.SAV (http://zx.pk.ru/attachment.php?attachmentid=40980) - 5-й тест мега-глюка процессора 1801ВМ2 - предназначен для проверки качества воссоздания этого глюка в эмуляторах.

Это вариант теста VM2T3 со сбросом предвыборки перед сохранением результатов каждого этапа теста:
Здесь достаточно одного скриншота, т.к. команды с предсказуемым поведением, да и результат все время получается один и тот же:
http://kisly-alexey.pisem.net/VM2/T5/1/VM2T5_01.jpg

Patron
14.04.2013, 17:20
Тест VM2T6.SAV (http://zx.pk.ru/attachment.php?attachmentid=40981) - 6-й тест мега-глюка процессора 1801ВМ2 - предназначен для проверки качества воссоздания этого глюка в эмуляторах.

Это изменённый вариант теста VM2T4, дающий при отсутствии мега-глюка такие результаты:



.RU VM2T6

1801VM2 MegaBUG test #6

MOV (PC),R0 | 240 | 241 | 242 | MOV (PC),R1 | 243 | 244 | 245 | MOV (PC),R2 |
R0/000240 R1/000243 R2/000246 R3/000251 R4/000254 R5/000257

MOV (PC),R0 | 240 | 241 | MOV (PC),R1 | 242 | 243 | MOV (PC),R2 | 244 | 245 |
R0/000240 R1/000242 R2/000244 R3/000246 R4/000250 R5/000252

CMP (PC),R0 | 240 | 241 | 242 | MOV (PC)+,R0 | 243 | 244 | 245 | MOV (PC)+,
R0/000243 R1/000246 R2/000251 R3/000254 R4/000257 R5/000262

CMP (PC),R0 | 240 | 241 | MOV (PC)+,R0 | 242 | 243 | MOV (PC)+,R1 | 244 |
R0/000242 R1/000244 R2/000246 R3/000250 R4/000252 R5/000254

CMP (PC),R0 .. MOV (PC)+,R0 .. MOV (PC)+,R1 .. CMP (PC),R0 .. MOV (PC)+,R2 ..
R0/000242 R1/000244 R2/000250 R3/000252 R4/000256 R5/000260

Program completed.

.

Alex_K
14.04.2013, 17:33
Тест VM2T6.SAV (http://zx.pk.ru/attachment.php?attachmentid=40981) - 6-й тест мега-глюка процессора 1801ВМ2 - предназначен для проверки качества воссоздания этого глюка в эмуляторах.

Это изменённый вариант теста VM2T4, дающий при отсутствии мега-глюка такие результаты:

http://kisly-alexey.pisem.net/VM2/T6/1/VM2T6_01.jpg
http://kisly-alexey.pisem.net/VM2/T6/1/VM2T6_02.jpg
http://kisly-alexey.pisem.net/VM2/T6/1/VM2T6_03.jpg
http://kisly-alexey.pisem.net/VM2/T6/1/VM2T6_04.jpg
http://kisly-alexey.pisem.net/VM2/T6/1/VM2T6_05.jpg
http://kisly-alexey.pisem.net/VM2/T6/1/VM2T6_06.jpg

Patron
14.04.2013, 17:42
Вот оно как..
Складывается впечатление, будто какой-то из "испорченных указателей" BR не сбрасывает ( и вообще ничто не сбрасывает ), но этот указатель используется так редко, что влияет только на прогоны "глюкометрических" тестов.
Если так, то после сброса по DCLO и нескольких прогонов теста - "глобальные" результаты должны каждый раз совпадать.

Alex_K
14.04.2013, 17:47
Вот оно как..
Складывается впечатление, будто какой-то из "испорченных указателей" BR не сбрасывает ( и вообще ничто не сбрасывает ), но этот указатель используется так редко, что влияет только на прогоны "глюкометрических" тестов.
Если так, то после сброса по DCLO и нескольких прогонов теста - "глобальные" результаты должны каждый раз совпадать.
BR все замечательно сбрасывает. Если это про тесты T4 и T6 (и T2 с ними), то это особенности команд установки/снятия признаков. Такие же результаты получаются, если программы набивать в пультовом отладчике и смотреть состояние регистров по командам Rn.

Patron
14.04.2013, 17:56
Тест VM2T7.SAV (http://zx.pk.ru/attachment.php?attachmentid=40983) - 7-й тест мега-глюка процессора 1801ВМ2 - предназначен для проверки качества воссоздания этого глюка в эмуляторах.

Это изменённый вариант теста VM2T6 "без NOPов", дающий при отсутствии мега-глюка такие результаты:



.RU VM2T7

1801VM2 MegaBUG test #7.1

MOV (PC),R0 | TST R0 | TST R1 | TST R2 | MOV (PC),R1 | TST R0 | TST R1 |
R0/005700 R1/005700 R2/005700 R3/005700 R4/005700 R5/005700

MOV (PC),R0 | TST R0 | TST R1 | MOV (PC),R1 | TST R0 | TST R1 | MOV (PC),R2
R0/005700 R1/005700 R2/005700 R3/005700 R4/005700 R5/005700

CMP (PC),R0 | TST R0 | TST R1 | TST R2 | MOV (PC)+,R0 | TST R0 | TST R1 |
R0/005700 R1/005700 R2/005700 R3/005700 R4/005700 R5/005700

CMP (PC),R0 | TST R0 | TST R1 | MOV (PC)+,R0 | TST R0 | TST R1 | MOV (PC)+,R1
R0/005700 R1/005700 R2/005700 R3/005700 R4/005700 R5/005700

CMP (PC),R0 .. MOV (PC)+,R0 .. MOV (PC)+,R1 .. CMP (PC),R0 .. MOV (PC)+,R2 ..
R0/005700 R1/005700 R2/005700 R3/005700 R4/005700 R5/005700

Program completed.

.

Alex_K
14.04.2013, 18:14
Тест VM2T7.SAV (http://zx.pk.ru/attachment.php?attachmentid=40983) - 7-й тест мега-глюка процессора 1801ВМ2 - предназначен для проверки качества воссоздания этого глюка в эмуляторах.

Это изменённый вариант теста VM2T6 "без NOPов", дающий при отсутствии мега-глюка такие результаты:
А у нас вот так:
http://kisly-alexey.pisem.net/VM2/T7/1/VM2T7_01.jpg

Patron
14.04.2013, 18:38
А у нас вот такИ так каждый раз ?
Т.е. именно NOPы вносят в мега-глюк "новое непознаваемое измерение".

Patron
14.04.2013, 19:11
Тест VM2T8.SAV (http://zx.pk.ru/attachment.php?attachmentid=40989) - 8-й тест мега-глюка процессора 1801ВМ2 - предназначен для проверки качества воссоздания этого глюка в эмуляторах.

Этот изменённый вариант теста VM2T6, в котором NOPы заменены на команды MTPS - даёт при отсутствии мега-глюка такие результаты:



.RU VM2T8

1801VM2 MegaBUG test #8.1

MOV (PC),R0 | MTPS R0 | MTPS R1 | MTPS R2 | MOV (PC),R1 | MTPS R0 | MTPS R1 |
R0/106400 R1/106400 R2/106400 R3/106400 R4/106400 R5/106400

MOV (PC),R0 | MTPS R0 | MTPS R1 | MOV (PC),R1 | MTPS R0 | MTPS R1 | MOV (PC),
R0/106400 R1/106400 R2/106400 R3/106400 R4/106400 R5/106400

CMP (PC),R0 | MTPS R0 | MTPS R1 | MTPS R2 | MOV (PC)+,R0 | MTPS R0 | MTPS R1
R0/106400 R1/106400 R2/106400 R3/106400 R4/106400 R5/106400

CMP (PC),R0 | MTPS R0 | MTPS R1 | MOV (PC)+,R0 | MTPS R0 | MTPS R1 |
R0/106400 R1/106400 R2/106400 R3/106400 R4/106400 R5/106400

CMP (PC),R0 .. MOV (PC)+,R0 .. MOV (PC)+,R1 .. CMP (PC),R0 .. MOV (PC)+,R2 ..
R0/106400 R1/106400 R2/106400 R3/106400 R4/106400 R5/106400

Program completed.

.

Alex_K
14.04.2013, 19:52
И так каждый раз ?
Т.е. именно NOPы вносят в мега-глюк "новое непознаваемое измерение".
Ну я уже неоднократно писал, что процессор неадекватно себя ведет если после CMD @PC,Rx употребляются команды установки/снятия признаков (коды от 240 до 277), при условии ненарушения предвыборки, т.е. необязательно после MOV @PC,R0 давать сразу NOP, можно сначала INC R0, а потом NOP.

---------- Post added at 19:52 ---------- Previous post was at 19:38 ----------


Тест VM2T8.SAV (http://zx.pk.ru/attachment.php?attachmentid=40989) - 8-й тест мега-глюка процессора 1801ВМ2 - предназначен для проверки качества воссоздания этого глюка в эмуляторах.

Этот изменённый вариант теста VM2T6, в котором NOPы заменены на команды MTPS - даёт при отсутствии мега-глюка такие результаты:
Скриншот выкладывать нету смысла, т.к. результаты одинаковые.

hobot
14.04.2013, 22:01
предназначен для проверки качества воссоздания этого глюка в эмуляторах.

В системах не имеющих/не эмулирующих мега-глюк ВМ2 - результат запуска такой:


Кхм. Я слегка мягко скажем запутался - это для эмуляторов тест? А скрины вроде с живой машинки? У меня сейчас плата№2 подцеплена могу на ней прогнать, но какой именно, последний? И надо ли вообще )

---------- Post added at 22:01 ---------- Previous post was at 21:52 ----------


Если так, то после сброса по DCLO и нескольких прогонов теста - "глобальные" результаты должны каждый раз совпадать.
А моё видео не подтверждает это? Я его ещё не удалил > http://archive.pdp-11.org.ru/vid/MVI_4098.avi (6мб, AVI).

Patron
14.04.2013, 23:13
какой именно, последний?Да, для последнего теста фотки экрана нет, а посмотреть интересно.

Alex_K
14.04.2013, 23:53
Да, для последнего теста фотки экрана нет, а посмотреть интересно.
Если для последнего считается VM2T8, то результаты такие же, как у Patron-а в эмуляторе, т.е. никаких глюков.

Patron
15.04.2013, 00:20
никаких глюков.Получается, что команда MTPS Rx сбрасывает глюк.
Это важный результат.

Patron
15.04.2013, 14:15
Тест VM2T9.SAV (http://zx.pk.ru/attachment.php?attachmentid=41015) - 9-й тест мега-глюка процессора 1801ВМ2 - предназначен для проверки качества воссоздания этого глюка в эмуляторах.

При отсутствии мега-глюка результаты такие:



.RU VM2T9

1801VM2 MegaBUG test #9

R0 = R1 = R2 = R3 = R4 = R5 = 7
MOV (PC),R0 | ASL R0 | MOV (PC),R1 | ASL R1 | MOV (PC),R2 | ASL R2 | MOV (PC)
R0/014600 R1/014602 R2/014604 R3/014606 R4/014610 R5/014612

MOV (PC),R0 | MOV (PC),R1 | MOV (PC),R2 | MOV (PC),R3 | MOV (PC),R4 | MOV
R0/011701 R1/011702 R2/011703 R3/011704 R4/011705 R5/000400

MOV (PC),R0 | NOP | TST R0 | MOV (PC),R1 | NOP | TST R0 | MOV (PC),R2 | NOP |
R0/000240 R1/000240 R2/000240 R3/000240 R4/000240 R5/000240

MOV (PC),R0 | NOP | TST PC | MOV (PC),R1 | NOP | TST PC | MOV (PC),R2 | NOP |
R0/000240 R1/000240 R2/000240 R3/000240 R4/000240 R5/000240

MOV (PC),R0 | NOP | MTPS R5 | MOV (PC),R1 | NOP | MTPS R5 | MOV (PC),R2 | NOP
R0/000240 R1/000240 R2/000240 R3/000240 R4/000240 R5/000240

MOV (PC),R0 | NOP | MOV PC,R5 | MOV (PC),R1 | NOP | MOV PC,R5 | MOV (PC),R2 |
R0/000240 R1/000240 R2/000240 R3/000240 R4/000240 R5/000240

.

Patron
15.04.2013, 14:59
Тест VM2T10.SAV (http://zx.pk.ru/attachment.php?attachmentid=41017) - 10-й тест мега-глюка процессора 1801ВМ2 - предназначен для проверки качества воссоздания этого глюка в эмуляторах.

При отсутствии мега-глюка результаты такие:



.RU VM2T10

1801VM2 MegaBUG test #10

MOV (PC),R0 | TST R0 | TST R1 | MOV (PC),R1 | TST R0 | TST R2 | MOV (PC),R2 |
R0/005700 R1/005700 R2/005700 R3/005700 R4/005700 R5/005700

R1 = R2 = R3 = R4 = R5 = 0
MOV (PC),R0 | TST R0 | TST (R1) | MOV (PC),R1 | TST R0 | TST (R2) | MOV (PC),
R0/005700 R1/005700 R2/005700 R3/005700 R4/005700 R5/005700

R1 = R2 = R3 = R4 = R5 = Good PC
MOV (PC),R0 | TST R0 | TST (R1) | MOV (PC),R1 | TST R0 | TST (R2) | MOV (PC),
R0/005700 R1/005700 R2/005700 R3/005700 R4/005700 R5/005700

R1 = R2 = R3 = R4 = R5 = Bad PC
MOV (PC),R0 | TST R0 | TST (R1) | MOV (PC),R1 | TST R0 | TST (R2) | MOV (PC),
R0/005700 R1/005700 R2/005700 R3/005700 R4/005700 R5/005700

Program completed.

.

Alex_K
15.04.2013, 19:27
Тест VM2T9.SAV (http://zx.pk.ru/attachment.php?attachmentid=41015) - 9-й тест мега-глюка процессора 1801ВМ2 - предназначен для проверки качества воссоздания этого глюка в эмуляторах.
А вот и результаты:

http://kisly-alexey.pisem.net/VM2/T9/1/VM2T9_01.jpg
http://kisly-alexey.pisem.net/VM2/T9/1/VM2T9_02.jpg
http://kisly-alexey.pisem.net/VM2/T9/1/VM2T9_03.jpg
http://kisly-alexey.pisem.net/VM2/T9/1/VM2T9_04.jpg
http://kisly-alexey.pisem.net/VM2/T9/1/VM2T9_05.jpg
http://kisly-alexey.pisem.net/VM2/T9/1/VM2T9_06.jpg


---------- Post added at 19:27 ---------- Previous post was at 19:23 ----------


Тест VM2T10.SAV (http://zx.pk.ru/attachment.php?attachmentid=41017) - 10-й тест мега-глюка процессора 1801ВМ2 - предназначен для проверки качества воссоздания этого глюка в эмуляторах.
Так как NOP-ов нет, то результат стабильный:
http://kisly-alexey.pisem.net/VM2/T10/1/VM2T10_01.jpg

Patron
15.04.2013, 20:42
Пока точно ясно одно - адрес обращения к памяти в команде TST (Rx) роли не играет - в любом случае следующая команда не выполняется.

Patron
16.04.2013, 17:37
Тест VM2T11.SAV (http://zx.pk.ru/attachment.php?attachmentid=41027) - 11-й тест мега-глюка процессора 1801ВМ2 - предназначен для его дальнейшего изучения.

При отсутствии мега-глюка результаты такие:



.RU VM2T11

1801VM2 MegaBUG test #11

MOV (PC),R0 | TST R0 | NOP | ASL R0 | TST R1 | MOV (PC),R1 | TST R0 | NOP |
R0/013600 R1/013600 R2/013600 R3/013600 R4/013600 R5/013600

MOV (PC),R0 | TST R0 | NOP | ASL R0 | BR .+2 | MOV (PC),R1 | TST R0 | NOP |
R0/013600 R1/013600 R2/013600 R3/013600 R4/013600 R5/013600

MOV (PC),R0 | TST R0 | NOP | ASL R0 | TST PC | MOV (PC),R1 | TST R0 | NOP |
R0/013600 R1/013600 R2/013600 R3/013600 R4/013600 R5/013600

MOV (PC),R0 | TST R0 | NOP | ASL R0 | MTPS R5 | MOV (PC),R1 | TST R0 | NOP |
R0/013600 R1/013600 R2/013600 R3/013600 R4/013600 R5/013600

MOV (PC),R0 | TST R0 | NOP | ASL R0 | MOV PC,R5 | MOV (PC),R1 | TST R0 | NOP
R0/013600 R1/013600 R2/013600 R3/013600 R4/013600 R5/013600

Program completed.

.

Patron
16.04.2013, 17:53
Тест VM2T12.SAV (http://zx.pk.ru/attachment.php?attachmentid=41029) - 12-й тест мега-глюка процессора 1801ВМ2 - предназначен для его дальнейшего изучения.

При отсутствии мега-глюка результаты такие:



.RU VM2T12

1801VM2 MegaBUG test #12

R1 = R2 = R3 = R4 = R5 = 2

MOV (PC),R0 | TST R0 | TST R1 | ASL R1 | ASL R2 | ASL R3 | ASL R4 | ASL R5
R0/005700 R1/000004 R2/000004 R3/000004 R4/000004 R5/000004

MOV (PC),R0 | TST R0 | TST (R1) | ASL R1 | ASL R2 | ASL R3 | ASL R4 | ASL R5
R0/005700 R1/000004 R2/000004 R3/000004 R4/000004 R5/000004

MOV (PC),R0 | TST R0 | MOV (PC)+,R1 | ASL R1 | ASL R2 | ASL R3 | ASL R4 | ASL
R0/005700 R1/006301 R2/000004 R3/000004 R4/000004 R5/000004

Program completed.

.

Alex_K
16.04.2013, 20:19
Тест VM2T11.SAV (http://zx.pk.ru/attachment.php?attachmentid=41027) - 11-й тест мега-глюка процессора 1801ВМ2 - предназначен для его дальнейшего изучения
Ну так как тест содержит NOP-ы, то и скриншотов шесть:

http://kisly-alexey.pisem.net/VM2/T11/1/VM2T11_01.jpg
http://kisly-alexey.pisem.net/VM2/T11/1/VM2T11_02.jpg
http://kisly-alexey.pisem.net/VM2/T11/1/VM2T11_03.jpg
http://kisly-alexey.pisem.net/VM2/T11/1/VM2T11_04.jpg
http://kisly-alexey.pisem.net/VM2/T11/1/VM2T11_05.jpg
http://kisly-alexey.pisem.net/VM2/T11/1/VM2T11_06.jpg


---------- Post added at 20:19 ---------- Previous post was at 20:15 ----------


Тест VM2T12.SAV (http://zx.pk.ru/attachment.php?attachmentid=41029) - 12-й тест мега-глюка процессора 1801ВМ2 - предназначен для его дальнейшего изучения
Результат:
http://kisly-alexey.pisem.net/VM2/T12/1/VM2T12_01.jpg

Patron
16.04.2013, 20:38
1. Следующая команда после NOP иногда не выполняется.
2. Хотя BR стоит через команду после NOP - глюк не всегда сбрасывается. Возможно, что и вторая команда после NOP иногда не выполняется.

---------- Post added at 19:38 ---------- Previous post was at 19:32 ----------

3. Любое обращение к памяти сбрасывает глюк, но следующая команда выполняется не всегда. Надо будет проверить на этом месте двусловную команду - не передастся ли управление на второе слово команды.

Alex_K
16.04.2013, 20:40
1. Следующая команда после NOP иногда не выполняется.
2. Хотя BR стоит через команду после NOP - глюк не всегда сбрасывается. Возможно, что и вторая команда после NOP иногда не выполняется.
Если команда, следующая за NOP, не исполнилась, то BR нормально отрабатывает. А вот если команда за NOP исполнилась, то BR отрабатывает со значением PC не после команды, а на 2 большим, потому и пропускается команда после BR.

Patron
16.04.2013, 21:24
Тест VM2T13.SAV (http://zx.pk.ru/attachment.php?attachmentid=41035) - 13-й тест мега-глюка процессора 1801ВМ2 - предназначен для его дальнейшего изучения.

При отсутствии мега-глюка результаты такие:



.RU VM2T13

1801VM2 MegaBUG test #13

MOV (PC),R0 | TST R0 | NOP | ASL R0 | TST R1 | COM R0 | MOV (PC),R1 | TST R0
R0/164177 R1/164177 R2/164177 R3/164177 R4/164177 R5/164177

MOV (PC),R0 | TST R0 | NOP | ASL R0 | BR .+2 | COM R0 | MOV (PC),R1 | TST R0
R0/164177 R1/164177 R2/164177 R3/164177 R4/164177 R5/164177

MOV (PC),R0 | TST R0 | NOP | ASL R0 | TST PC | COM R0 | MOV (PC),R1 | TST R0
R0/164177 R1/164177 R2/164177 R3/164177 R4/164177 R5/164177

MOV (PC),R0 | TST R0 | NOP | ASL R0 | MTPS R5 | COM R0 | MOV (PC),R1 | TST R0
R0/164177 R1/164177 R2/164177 R3/164177 R4/164177 R5/164177

MOV (PC),R0 | TST R0 | NOP | ASL R0 | MOV PC,R5 | COM R0 | MOV (PC),R1 | TST
R0/164177 R1/164177 R2/164177 R3/164177 R4/164177 R5/164177

Program completed.

.

Alex_K
16.04.2013, 22:40
Тест VM2T13.SAV (http://zx.pk.ru/attachment.php?attachmentid=410359) - 13-й тест мега-глюка процессора 1801ВМ2 - предназначен для его дальнейшего изучения

http://kisly-alexey.pisem.net/VM2/T13/1/VM2T13_01.jpg
http://kisly-alexey.pisem.net/VM2/T13/1/VM2T13_02.jpg
http://kisly-alexey.pisem.net/VM2/T13/1/VM2T13_03.jpg
http://kisly-alexey.pisem.net/VM2/T13/1/VM2T13_04.jpg
http://kisly-alexey.pisem.net/VM2/T13/1/VM2T13_05.jpg
http://kisly-alexey.pisem.net/VM2/T13/1/VM2T13_06.jpg

Patron
16.04.2013, 23:09
Тест VM2T14.SAV (http://zx.pk.ru/attachment.php?attachmentid=41044) - 14-й тест мега-глюка процессора 1801ВМ2 - предназначен для его дальнейшего изучения.

При отсутствии мега-глюка результаты такие:



.RU VM2T14

1801VM2 MegaBUG test #14

MOV (PC),R0 | TST R0 | TST R1 | ASL R1 | ASL R2 | ASL R3 | ASL R4 | ASL R5
R0/005700 R1/000004 R2/000004 R3/000004 R4/000004 R5/000004

MOV (PC),R0 | TST R0 | TST (R1) | MOV #ASL,R0 | ASL R1 | ASL R2 | ASL R3 |
R0/006300 R1/000004 R2/000004 R3/000004 R4/000004 R5/000004

MOV (PC),R0 | TST R0 | MOV (PC)+,R1 | ASL R1 | MOV #ASL,R0 | ASL R2 | ASL
R0/006300 R1/006301 R2/000004 R3/000004 R4/000004 R5/000004

MOV (PC),R0 | TST R0 | NOP | ASL R1 | ASL R2 | TST (R1) | ASL R3 | ASL R4 |
R0/005700 R1/000004 R2/000004 R3/000004 R4/000004 R5/000004

MOV (PC),R0 | TST R0 | TST PC | ASL R1 | ASL R2 | TST (R1) | ASL R3 | ASL R4
R0/005700 R1/000004 R2/000004 R3/000004 R4/000004 R5/000004

MOV (PC),R0 | TST R0 | MTPS R5 | ASL R1 | ASL R2 | TST (R1) | ASL R3 | ASL R4
R0/005700 R1/000004 R2/000004 R3/000004 R4/000004 R5/000004

MOV (PC),R0 | TST R0 | MOV PC,R5 | ASL R1 | ASL R2 | TST (R1) | ASL R3 | ASL
R0/005700 R1/000004 R2/000004 R3/000004 R4/000004 R5/004370

.

Alex_K
16.04.2013, 23:40
Тест VM2T14.SAV (http://zx.pk.ru/attachment.php?attachmentid=41044) - 14-й тест мега-глюка процессора 1801ВМ2 - предназначен для его дальнейшего изучения

http://kisly-alexey.pisem.net/VM2/T14/1/VM2T14_01.jpg
http://kisly-alexey.pisem.net/VM2/T14/1/VM2T14_02.jpg
http://kisly-alexey.pisem.net/VM2/T14/1/VM2T14_03.jpg
http://kisly-alexey.pisem.net/VM2/T14/1/VM2T14_04.jpg
http://kisly-alexey.pisem.net/VM2/T14/1/VM2T14_05.jpg
http://kisly-alexey.pisem.net/VM2/T14/1/VM2T14_06.jpg

Patron
17.04.2013, 00:14
Как выяснилось - сброс глюка может быть двух типов:

1. Обычный сброс глюка ( происходит при любом обращении к памяти, а также по командам TST PC, BR и т.п. ) при котором пропускается слово, идущее за словом кода команды или два слова, если в источнике использовалась адресация (PC)+ ( надо будет проверить (PC)+ и в источнике, и в приёмнике ).

2. Чистый сброс глюка - иногда по командам NOP и MTPS Rx

...

Команды NOP и MTPS Rx ( x = 0..6 ) могут вызвать:

1. Обычный сброс глюка.
2. Чистый сброс глюка.
3. Никакого эффекта.

...

Команды TST Rx и MOV PC, Rx ( x = 0..6 ) не вызывают никакого эффекта.

---------- Post added at 23:14 ---------- Previous post was at 23:09 ----------

При наличии глюка - команда MOV PC, Rx сохраняет искажённое ( увеличенное на 2 ) значение PC.

Это даёт принципиальную возможность определить наличие глюка до его сброса.

Patron
17.04.2013, 17:24
Тест VM2T15.SAV (http://zx.pk.ru/attachment.php?attachmentid=41057) - 15-й тест мега-глюка процессора 1801ВМ2 - предназначен для его дальнейшего изучения.

При отсутствии мега-глюка результаты такие:



.RU VM2T15

1801VM2 MegaBUG test #15

CMP (PC),R0 | TST R0 | MOV PC,R4 | TST R1 | ASL R1 | MOV PC,R5 | ASL R2 | ASL
R0/000002 R1/000004 R2/000004 R3/000004 R4/001056 R5/001064

CMP (PC),R0 | TST R0 | MOV PC,R4 | TST (R1) | MOV #ASL,R0 | ASL R1 | MOV PC,
R0/006300 R1/000004 R2/000004 R3/000004 R4/001216 R5/001230

CMP (PC),R0 | TST R0 | MOV PC,R4 | CMP (PC)+,(PC)+ | ASL R1 | MOV #ASL,R0 |
R0/000004 R1/000002 R2/000004 R3/000004 R4/001362 R5/001374

CMP (PC),R0 | TST R0 | MOV PC,R4 | NOP | ASL R1 | MOV PC,R5 | ASL R2 | ASL
R0/000002 R1/000004 R2/000004 R3/000004 R4/001526 R5/001534

CMP (PC),R0 | TST R0 | MOV PC,R4 | TST PC | ASL R1 | MOV PC,R5 | ASL R2 |
R0/000002 R1/000004 R2/000004 R3/000004 R4/001666 R5/001674

CMP (PC),R0 | TST R0 | MOV PC,R4 | MTPS R5 | ASL R1 | MOV PC,R5 | ASL R2 |
R0/000002 R1/000004 R2/000004 R3/000004 R4/002026 R5/002034

Program completed.

.

Patron
17.04.2013, 17:56
Тест VM2T16.SAV (http://zx.pk.ru/attachment.php?attachmentid=41058) - 16-й тест мега-глюка процессора 1801ВМ2 - предназначен для его дальнейшего изучения.

При отсутствии мега-глюка результаты такие:



.RU VM2T16

1801VM2 MegaBUG test #16

CMP (PC),R0 | ASL R0 | ASL R1 | MOV PC,R4 | MOV PC,R5 | ASL R2 | ASL R3
R0/000200 R1/000004 R2/000004 R3/000004 R4/001060 R5/001062

CMP (PC),R0 | ADD R0,(R5) | ASL R1 | MOV PC,R4 | MOV PC,R5 | ASL R2
R0/000100 R1/000004 R2/000004 R3/000100 R4/001230 R5/001232

CMP (PC),R0 | MOV (PC)+,(R5)+ | ASL R1 | ASL R2 | MOV PC,R5
R0/000100 R1/000002 R2/000004 R3/006301 R4/000000 R5/001402

CMP (PC),R0 | NOP | ASL R1 | MOV PC,R4 | MOV PC,R5 | ASL R2 | ASL R3
R0/000100 R1/000004 R2/000004 R3/000004 R4/001522 R5/001524

CMP (PC),R0 | TST PC | ASL R1 | MOV PC,R4 | MOV PC,R5 | ASL R2 | ASL R3
R0/000100 R1/000004 R2/000004 R3/000004 R4/001660 R5/001662

CMP (PC),R0 | MTPS R5 | ASL R1 | MOV PC,R4 | MOV PC,R5 | ASL R2 | ASL R3
R0/000100 R1/000004 R2/000004 R3/000004 R4/002016 R5/002020

CMP (PC),R0 | MOV PC,(R5)+ | ASL R1 | ASL R2 | MOV PC,R5
R0/000100 R1/000004 R2/000004 R3/002170 R4/000000 R5/002176

.

Alex_K
17.04.2013, 20:27
Тест VM2T15.SAV (http://zx.pk.ru/attachment.php?attachmentid=41057) - 15-й тест мега-глюка процессора 1801ВМ2 - предназначен для его дальнейшего изучения
Весьма интересные результаты и неоднозначности:

http://kisly-alexey.pisem.net/VM2/T15/1/VM2T15_01.jpg
http://kisly-alexey.pisem.net/VM2/T15/1/VM2T15_02.jpg
http://kisly-alexey.pisem.net/VM2/T15/1/VM2T15_03.jpg
http://kisly-alexey.pisem.net/VM2/T15/1/VM2T15_04.jpg
http://kisly-alexey.pisem.net/VM2/T15/1/VM2T15_05.jpg
http://kisly-alexey.pisem.net/VM2/T15/1/VM2T15_06.jpg


---------- Post added at 20:27 ---------- Previous post was at 20:18 ----------


Тест VM2T16.SAV (http://zx.pk.ru/attachment.php?attachmentid=41058) - 16-й тест мега-глюка процессора 1801ВМ2 - предназначен для его дальнейшего изучения
Неоднозначности, как и в предыдущем тесте:

http://kisly-alexey.pisem.net/VM2/T16/1/VM2T16_01.jpg
http://kisly-alexey.pisem.net/VM2/T16/1/VM2T16_02.jpg
http://kisly-alexey.pisem.net/VM2/T16/1/VM2T16_03.jpg
http://kisly-alexey.pisem.net/VM2/T16/1/VM2T16_04.jpg
http://kisly-alexey.pisem.net/VM2/T16/1/VM2T16_05.jpg
http://kisly-alexey.pisem.net/VM2/T16/1/VM2T16_06.jpg

Patron
17.04.2013, 20:40
Весьма интересные результаты и неоднозначностиКакие ?
На мой взгляд - по тесту №15 - полностью подтвердились вчерашние выводы.

UPD. То что вчера было названо "чистым сбросом глюка" - на самом деле оказалось "непоявлением глюка".


---------- Post added at 19:37 ---------- Previous post was at 19:32 ----------

По тесту №16:

1. Команда CMP (PC),R0 не каждый раз приводила к глюку.

2. Команда ADD R0,(R5) в "первой позиции" - каждый раз выполнялась только один раз и каждый раз чисто сбрасывала глюк.
3. Команда MOV (PC)+,(R5)+ в "первой позиции" - каждый раз выполнялась только один раз и каждый раз чисто сбрасывала глюк.

4. Команда TST PC в "первой позиции" - каждый раз чисто сбрасывала глюк.
5. Команда MTPS R5 в "первой позиции" - каждый раз чисто сбрасывала глюк.

6. Команда MOV PC,(R5)+ в "первой позиции" - каждый раз выполнялась только один раз и каждый раз чисто сбрасывала глюк.
Сохранялось правильное значение PC - можно предположить, что глюк был сброшен на этапе получения первого операнда.

Alex_K
17.04.2013, 20:55
Погонял несколько раз тесты 7, 10 и 12. Иногда (редко) появляются другие результаты (и это без NOP). Попозже сделаю скриншоты отличий.

---------- Post added at 20:55 ---------- Previous post was at 20:43 ----------


Какие ?
На мой взгляд - по тесту №15 - полностью подтвердились вчерашние выводы.
Получаются разные результаты при отсутствии NOP-ов.

Patron
17.04.2013, 20:58
Получаются разные результаты при отсутствии NOP-ов.Глюк срабатывает не каждый раз - это хорошо видно, если в тесте №15 сравнить значения R4 с прогоном в эмуляторе.
Там должен сохраняться испорченный PC, но иногда сохраняется правильный PC, а значит глюка НЕ БЫЛО !!!

Alex_K
17.04.2013, 21:15
Глюк срабатывает не каждый раз - это хорошо видно, если в тесте №15 сравнить значения R4 с прогоном в эмуляторе.
Там должен сохраняться испорченный PC, но иногда сохраняется правильный PC, а значит глюка НЕ БЫЛО !!!
Вот именно, что иногда не было. Никакой стройной теории не получается. Если хороший катализатор в виде команд снятия/установки признаков, есть команды, которые после CMD @PC,Rx выполняются дважды, есть расхождение СК1 и СК2, когда по предвыборке команды вроде выбираются нормально, а вот по адресации по счетчику команд адрес получается большим на два, ну и пропуск команд.

Patron
17.04.2013, 23:06
Тест VM2T17.SAV (http://zx.pk.ru/attachment.php?attachmentid=41061) - 17-й тест мега-глюка процессора 1801ВМ2 - предназначен для его дальнейшего изучения.

Тест осуществляет циклический подсчёт глюков по следующему алгоритму:


Mov #10000., R5
Clr R2
3$:
Cmp (PC), R0
Inc R1
Jmp @#2$
.Word 1$
1$:
Inc R2
2$:
SOB R5, 3$

При отсутствии мега-глюка результаты такие:



.RU VM2T17

1801VM2 MegaBUG test #17.1

CMP (PC),R0 Loops: 10000 Bugs: 0
MOV (PC),R0 Loops: 10000 Bugs: 0
ADD (PC),R0 Loops: 10000 Bugs: 0

Program completed.

.

Alex_K
18.04.2013, 18:59
Погонял несколько раз тесты 7, 10 и 12. Иногда (редко) появляются другие результаты (и это без NOP). Попозже сделаю скриншоты отличий.
Погонял несколько десятков раз VM2T7, три раза вылезли немного отличающиеся результаты, первоисточник здесь (http://zx.pk.ru/showpost.php?p=592815&postcount=624):

http://kisly-alexey.pisem.net/VM2/T7/2/VM2_T7_02.jpg
http://kisly-alexey.pisem.net/VM2/T7/2/VM2_T7_03.jpg
http://kisly-alexey.pisem.net/VM2/T7/2/VM2_T7_04.jpg

Alex_K
18.04.2013, 19:20
Погонял несколько раз тесты 7, 10 и 12. Иногда (редко) появляются другие результаты (и это без NOP). Попозже сделаю скриншоты отличий.
А вот в VM2T10 побольше отличий от оригинала (http://zx.pk.ru/showpost.php?p=593193&postcount=634):

http://kisly-alexey.pisem.net/VM2/T10/2/VM2T10_02.jpg
http://kisly-alexey.pisem.net/VM2/T10/2/VM2T10_03.jpg
http://kisly-alexey.pisem.net/VM2/T10/2/VM2T10_04.jpg
http://kisly-alexey.pisem.net/VM2/T10/2/VM2T10_05.jpg
http://kisly-alexey.pisem.net/VM2/T10/2/VM2T10_06.jpg
http://kisly-alexey.pisem.net/VM2/T10/2/VM2T10_07.jpg

Patron
18.04.2013, 19:57
А вот в VM2T10 побольше отличий от оригиналаЯ нового не приметил.

1. Глючная команда всегда выполняется, но не всегда вызывает глюк.
2. Если был глюк - следующее слово после сброса глюка пропускается.
3. Если глюка не было - ничего не пропускается.

---------- Post added at 18:57 ---------- Previous post was at 18:31 ----------


Погонял несколько десятков раз VM2T7Тест VM2T17 (http://zx.pk.ru/attachment.php?attachmentid=41061) делает практически то же самое, но на автомате - по 10000 прогонов (за один запуск) каждой глючной команды со сбором статистики результатов.

Alex_K
18.04.2013, 20:14
Погонял несколько раз тесты 7, 10 и 12. Иногда (редко) появляются другие результаты (и это без NOP). Попозже сделаю скриншоты отличий.
А вот в VM2T12 после многократных запусков проскочило одно отличие от оригинала (http://zx.pk.ru/showpost.php?p=593646&postcount=638):
http://kisly-alexey.pisem.net/VM2/T12/2/VM2T12_02.jpg

---------- Post added at 20:14 ---------- Previous post was at 20:13 ----------


Я нового не приметил.

1. Глючная команда всегда выполняется, но не всегда вызывает глюк.
2. Если был глюк - следующее слово после сброса глюка пропускается.
3. Если глюка не было - ничего не пропускается.
А новое - это различие в результатах при относительной стабильности получаемых результатов.

Patron
18.04.2013, 20:21
в VM2T12 после многократных запусков проскочило одно отличие от оригиналаВозможно фотка не та - я различий не нашёл.


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

Alex_K
18.04.2013, 20:22
Тест VM2T17.SAV (http://zx.pk.ru/attachment.php?attachmentid=41061) - 17-й тест мега-глюка процессора 1801ВМ2 - предназначен для его дальнейшего изучения

Тест VM2T17 (http://zx.pk.ru/attachment.php?attachmentid=41061) делает практически то же самое, но на автомате - по 10000 прогонов (за один запуск) каждой глючной команды со сбором статистики результатов.
Ну вот и дошло дело до VM2T17. Результатов при различных запусках получается три:

http://kisly-alexey.pisem.net/VM2/T17/1/VM2T17_01.jpg
http://kisly-alexey.pisem.net/VM2/T17/1/VM2T17_02.jpg
http://kisly-alexey.pisem.net/VM2/T17/1/VM2T17_03.jpg

Был один случай, когда подвисло в подпрограмме DIG, при равенстве ячейки OSN нулю. Крутилось бесконечно.

Patron
18.04.2013, 20:27
Возможно, дело в том, что не были запрещены прерывания.

Сейчас сделаю вариант с запросом значений для MTPS и числа повторений цикла.

Alex_K
18.04.2013, 20:49
Возможно, дело в том, что не были запрещены прерывания.

Сейчас сделаю вариант с запросом значений для MTPS и числа повторений цикла.
Верная мысль, но зачем запрещать прерывания, когда можно выключить таймер. И вот:

http://kisly-alexey.pisem.net/VM2/T17/2/VM2T17_04.jpg
http://kisly-alexey.pisem.net/VM2/T17/2/VM2T17_05.jpg
http://kisly-alexey.pisem.net/VM2/T17/2/VM2T17_06.jpg

Во время прерывания в стек ложится немного не то, ну и соответственно возвращается немного не туда.

Patron
18.04.2013, 21:05
Можно позапускать MovPCy_v1.1 (http://zx.pk.ru/attachment.php?attachmentid=40170) ( описание (http://zx.pk.ru/showthread.php?postid=581270) ) в режиме Grow при запрещённых прерываниях.

Если вылетов не будет - значит в вылетах были виноваты прерывания.

Alex_K
18.04.2013, 21:12
Можно позапускать MovPCy_v1.1 (http://zx.pk.ru/attachment.php?attachmentid=40170) ( описание (http://zx.pk.ru/showthread.php?postid=581270) ) в режиме Grow при запрещённых прерываниях.

Если вылетов не будет - значит в вылетах были виноваты прерывания.
Приведите конкретные параметры для запуска.

Patron
18.04.2013, 22:57
Приведите конкретные параметры для запуска.


MTPS : 000000 > 340
Row Len: 1000 > 8000
Grow : 0 > 10Остальные можно не трогать.

Patron
18.04.2013, 23:08
Тест VM2T18.SAV (http://zx.pk.ru/attachment.php?attachmentid=41084) - 18-й тест мега-глюка процессора 1801ВМ2 - предназначен для его дальнейшего изучения.

Тест осуществляет циклический подсчёт глюков. При запуске можно указать значение для MTPS и количество циклов.

При отсутствии мега-глюка запуск выглядит так:



.RU VM2T18

1801VM2 MegaBUG test #18.2

MTPS : 00340 >
Loops : 10000 >

CMP (PC),R0 Loops: 10000 Bugs: 0
CMPB (PC),R0 Loops: 10000 Bugs: 0
MOV (PC),R0 Loops: 10000 Bugs: 0
MOVB (PC),R0 Loops: 10000 Bugs: 0
ADD (PC),R0 Loops: 10000 Bugs: 0
SUB (PC),R0 Loops: 10000 Bugs: 0
BIT (PC),R0 Loops: 10000 Bugs: 0
BITB (PC),R0 Loops: 10000 Bugs: 0
BIS (PC),R0 Loops: 10000 Bugs: 0
BISB (PC),R0 Loops: 10000 Bugs: 0
BIC (PC),R0 Loops: 10000 Bugs: 0
BICB (PC),R0 Loops: 10000 Bugs: 0

Program completed.

.

Patron
19.04.2013, 15:03
На данной стадии исследований мега-глюка 1801ВМ2 его абстрактная модель представляется весьма простой:

Все команды делятся на четыре группы по отношению к глюку:
1. Инвариантные к глюку ( вроде TST R0 или MOV PC,R5 и др. ).
2. Вызывающие глюк ( вроде MOV (PC),R0 и др. ).
3. Сбрасывающие глюк ( вроде MOV (PC),R0 ; BR ; TST PC и др. ).
4. Мутные ( NOP, MTPS ), которые могут сбросить глюк, а могут и не сбросить.

Все команды, вызывающие глюк - также и сбрасывают его при его наличии. Причём, сначала происходит сброс глюка и лишь затем его активация.

Объяснение механизма глюка требует учёта двух различных указателей PC :
1. Указатель на аргумент
2. Указатель на команду

Первый указатель применяется как значение PC во всех командах, где он используется непосредственно или как база для обращения к памяти ( как в командах MOV PC,R5 ; MOV (PC),R0 ; BR и др. ).

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

В обычной ситуации при выполнении обычных команд эти указатели совпадают.

После выполнения "глючной" команды типа MOV (PC),R0 - сначала выполняется та команда, на которую смотрит указатель команды. Если эта команда относится к группе команд, сбрасывающих глюк - глюк не возникает и выполнение продолжается как обычно. То же справедливо и для нескольких "глючных" команд, идущих друг за другом - только последняя из них может вызвать глюк, если следом за ней не идёт "сбрасывающая" команда.

Если после выполнения "глючной" команды указатель команды смотрит на инвариантную команду - после её первого выполнения указатель команды не увеличивается на 2 и инвариантная команда выполняется повторно. При этом возникает состояние глюка, характеризующееся тем, что указатель аргумента опережает указатель команды на 2.

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

Если в качестве сбрасывающей команды выступает глючная - она порождает глюк по новому значению исправленного указателя команды ( т.е. не в следующем слове, а через одно слово ).

.......................

Дальнейшего исследования требуют аспекты влияния мега-глюка на обработку прерываний, статистические параметры установки и сброса глюка различными командами и вопросы "трапообразования" при появлении команды NOP вслед за большим количеством идущих подряд глючных команд.

Patron
19.04.2013, 18:58
Тест VM2T19.SAV (http://zx.pk.ru/attachment.php?attachmentid=41089) - 19-й тест мега-глюка процессора 1801ВМ2 - предназначен для его дальнейшего изучения.

Тест осуществляет циклический подсчёт глюков. При запуске можно указать значение для MTPS и количество циклов.

Тест выполнен на альтернативном "однословном" движке, поэтому его первый запуск рекомендуется проводить при разрешённых прерываниях.


Mov $Rept, R5
Clr R0
Mov #1, R1
Clr R2
Clr R3
Clr R4

MTPS $MTPS
3$:
Tst R1
Cmp (PC), R0
Tst R1

Br .+2.
Dec R2
Inc R2

Inc R3
Inc R4

Br .+2.
Tst R1
SOB R5, 3$

MTPS #0


При отсутствии мега-глюка запуск выглядит так:



.RU VM2T19

1801VM2 MegaBUG test #19

MTPS : 00000 >
Loops : 10000 >

CMP (PC),R0 Loops: 10000 Bugs: 0
CMPB (PC),R0 Loops: 10000 Bugs: 0
MOV (PC),R0 Loops: 10000 Bugs: 0
MOVB (PC),R0 Loops: 10000 Bugs: 0
ADD (PC),R0 Loops: 10000 Bugs: 0
SUB (PC),R0 Loops: 10000 Bugs: 0
BIT (PC),R0 Loops: 10000 Bugs: 0
BITB (PC),R0 Loops: 10000 Bugs: 0
BIS (PC),R0 Loops: 10000 Bugs: 0
BISB (PC),R0 Loops: 10000 Bugs: 0
BIC (PC),R0 Loops: 10000 Bugs: 0
BICB (PC),R0 Loops: 10000 Bugs: 0

Program completed.

.

form
29.04.2013, 16:59
Приехал DHV11.
Как будет время, надо будет нарисовать тестов разных...
Экий теперь монстр на табуретке с 17 терминальными портами :)


18.000 MHz
CPU Options: FPA

Memory Map
Starting Ending Size in CSR CSR Bus
Address address K Bytes address type type

00000000 - 07777776 2048 17772100 ECC PMI
10000000 - 17757776 2040 17772102 ECC PMI

I/O page Map
Starting Ending
Address address

17760100 - 17760106
17760500 - 17760516
17765000 - 17765776 CPU ROM or EEPROM
17772100 - 17772102 Memory CSR's
17772150 - 17772152
17772200 - 17772276 Supervisor I and D PDR/PAR's
17772300 - 17772376 Kernel I and D PDR/PAR's
17772516 MMR3
17773000 - 17773776 CPU ROM
17774440 - 17774456
17774500 - 17774502
17776500 - 17776536
17777514 - 17777516
17777520 - 17777524 BCSR, PCR, BCR/BDR
17777546 Clock CSR
17777560 - 17777566 Console SLU
17777572 - 17777576 MMR0,1,2
17777600 - 17777676 User I and D PDR/PAR's
17777744 - 17777752 MSER, CCR, MREG, Hit/Miss
17777766 CPU Error
17777772 PIRQ
17777776 PSW

Processor Type: 11/83 Memory Size: 2044. Kw

Options:

Floating Point Processor (FP11)
Extended Instruction Set (EIS)
Extended (22-Bit) Addressing
Cache Memory
Parity Memory

Name Vector CSR Unit Type Remark
DUA 154 172150
0 RA90
1 RA90
2 RA82
3 RA82
MUA 260 174500
0 TU81
LPA 200 177514
YLA 060 177560
YLB 300 176500
YLC 310 176510
YLD 320 176520
YLE 330 176530
YVA 350 160500
YZA 340 160100

form
30.04.2013, 08:14
Первая программка - инитит устройство, помещает в буфер строку с кодами диагностики, запускает вывод этой строки по DMA через DHV11 и печатает ее же на экран консоли программы.


.TITLE DHVT1 -- ТЕСТ DMA
.IDENT /V01.00/

LINE == 7 ;НОМЕР ЛИНИИ

DHCSR == 160500 ;РЕГИСТР СОСТОЯНИЯ/УПРАВЛЕНИЯ
DHRXB == DHCSR+2 ;РЕГИСТР БУФЕРА ПРИЕМНИКА
DHLPR == DHCSR+4 ;РЕГИСТР ПАРАМЕТРОВ ЛИНИИ
DHLBA == DHCSR+12 ;РЕГИСТР АДРЕСА БУФЕРА (МЛ)
DHHBA == DHCSR+14 ;РЕГИСТР АДРЕСА БУФЕРА (СТ)
DHCNT == DHCSR+16 ;РЕГИСТР СЧЕТЧИКА БАЙТОВ

MR == 40 ;БИТ СБРОСА
TXEN == 100000 ;БИТ РАЗРЕШЕНИЯ ПЕРЕДАТЧИКА
GO == 200 ;БИТ ЗАПУСКА ПЕРЕДАЧИ

.MCALL .EXIT,.PRINT ;СИСТЕМНЫЕ МАКРОСЫ

START:: MOV #MR,@#DHCSR ;СБРОС УСТРОЙСТВА
10$: BIT #MR,@#DHCSR ;СБРОС ЗАВЕРШЕН?
BNE 10$ ;ПОКА НЕТ

;В ЭТОМ МЕСТЕ:
; - СБРОС УСТРОЙСТВА ЗАВЕРШЕН
; - ЛИНИИ ВЫСТАВЛЕНЫ В 9600/8/N/1,
; - ВЫПОЛНЕНА ВНУТРЕННЯЯ ДИАГНОСТИКА
; - В FIFO ПРИЕМНИКА ПОМЕЩЕНЫ 8 БАЙТ КОДОВ ДИАГНОСТИКИ
; И НОМЕРА ВЕРСИИ ФИРМВАРЯ

;ВЫЧИТЫВАЕМ КОДЫ ДИАГНОСТИКИ, НОМЕР ВЕРСИИ ФИРМВАРЯ И
;ЗАПОЛНЯЕМ БЛОК АРГУМЕНТОВ ДЛЯ $EDMSG

MOV #ARGS,R0 ;БЛОК АРГУМЕНТОВ
MOV #DIAG,R1 ;БУФЕР КОДОВ
MOV #8.,R2 ;КОЛИЧЕСТВО БАЙТОВ
20$: MOV R1,(R0)+ ;АДРЕС БАЙТА -> БЛОК АРГУМЕНТОВ
MOVB @#DHRXB,(R1)+ ;ЧИТАЕМ БАЙТ
SOB R2,20$ ;...

MOV #BUFF,R0 ;АДРЕС ВЫХОДНОГО БУФЕРА
MOV #FMTS,R1 ;ФОРМАТНАЯ СТРОКА
MOV #ARGS,R2 ;БЛОК АРГУМЕНТОВ
CALL $EDMSG ;ФОРМАТИРУЕМ СТРОКУ
CLRB @R0 ;ДЕЛАЕМ ASCIZ

MOV #LINE,@#DHCSR ;ВЫБИРАЕМ НОМЕР ЛИНИИ
SUB #BUFF-2,R0 ;ВЫЧИСЛЯЕМ ДЛИНУ В БАЙТАХ
MOV R0,@#DHCNT ;УСТАНАВЛИВАЕМ ДЛИНУ
MOV #BUFF-2,@#DHLBA ;УСТАНАВЛИВАЕМ АДРЕС СТРОКИ
MOV #TXEN!GO,@#DHHBA ;ЗАПУСКАЕМ ПЕРЕДАЧУ

.PRINT #BUFF ;...И ЗДЕСЬ ЗАПУСКАЕМ

30$: TST @#DHCSR ;ПЕРЕДАЧА ЗАВЕРШЕНА?
BPL 30$ ;ПОКА НЕТ

.EXIT ;ВСЕ

ARGS:: .BLKW 8.
DIAG:: .BLKB 8.

.BYTE 15,12
BUFF:: .BLKB 80.

FMTS:: .ASCIZ /Diag codes: %8B/

.END START


.RU TEST
Diag codes: 201 201 201 201 201 201 013 011

.

Mixa64
03.06.2013, 19:11
Привет всем. Пробный пост. Зарегился тут по совету Patron. В общем, есть некий наскоро сделанный стенд для изучения 1801ВМ2. Поскольку процессор чисто статический, стенд прост до безобразия: 1801ВМ2 обвязан двумя 580ВВ55, которые программируются от маленькой машинки с CP/M-80. Весь функционал программный, ничего аппаратного (кроме ТЛ-ки aka HCT14 на CLCI для гарантии крутизны фронта). Стенд временный, и пока он есть, можно прояснить всяческие вопросы относительно того, что происходит на ногах процессора, потактово. Инструментальный софт написан наскоро, хитрой функциональности нету (хотя предел хитрости и не ограничен при таком полнейшем контроле за работой процессора). Сейчас можно запускать программу, смотреть циклы шины, смотреть, сколько тактов затрачено. Также можно регулировать задержку выдачи RPLY в ответ DIN/DOUT, но фиксированно для всех циклов данного сеанса прогона.

Mixa64
04.06.2013, 00:07
Процессор 1801ВМ2 иногда делает лишние движения на шине, которые можно было и не делать. А именно, используются циклы чтение-модификация-запись в тех случаях, когда логично было бы обойтись только записью. Читаемые данные не нужны для получения результата, но чтение происходит. Или происходит повторение цикла чтения, хотя данные уже прочитаны. Например, такой тестовый код (в синтаксисе не напутал?)

MOV #5001, R0
MOV #377, R1
MOV #123456, @#5000
BISB R1, @R0
MOVB R1, @R0
MTFS @R0
CLRB @R0
DEC R0
CLR @R0
MOVB #123456, @#5001
NOP
HALT

вызывает такую последовательность циклов шины (это скопированный экран вывода программы работы со стендом, U - user mode, H - halt mode, R/W - состояние WTBT при SYNC, адрес, направление, данные, B/W - байт или слово. Все прозрачно)

UR 001000 I 012700
UR 001002 I 005001
UR 001004 I 012701
UR 001006 I 000377
UR 001010 I 012737
UR 001012 I 123456
UR 001014 I 005000
UW 005000 O 123456W
UR 001016 I 150110
UR 001020 I 110110
UR 005001 I 123456 O 177400B
UR 001022 I 106710
UR 005001 I 177456 O 177400B
UR 001024 I 105010
UR 005001 I 177456 O 104000B
UR 001026 I 005300
UR 005001 I 104056 O 000000B
UR 001030 I 005010
UR 001032 I 112737
UR 005000 I 000056 O 000000W
UR 001034 I 123456
UR 001034 I 123456
UR 001036 I 005001
UR 005001 I 000000 O 027000B
UR 001040 I 000240
UR 001042 I 000000
UR 001044 I 044076
SEL 100000
HR 100170 I 100174
R0=005000 R1=000377 R2=157416 R3=053416 R4=153456 R5=153062 R6=001000 R7=001044
RS=000200

form
04.06.2013, 00:15
R/W - состояние WTBT

Не совсем понятно что такое R/W для сигнала, означающего запись байта (операции чтения байта на шине не бывает) :)

Vslav
04.06.2013, 07:50
Не совсем понятно что такое R/W для сигнала, означающего запись байта (операции чтения байта на шине не бывает) :)
Сигнал WTBT имеет двойное назначение - при ниспадающем SYNC низкий уровень на WTBT говорит что сейчас будет цикл записи. А уже позже, при активном (низком) DOUT, WTBT служит для различения циклов записи байта/слова.

form
04.06.2013, 08:00
Сигнал WTBT имеет двойное назначение - при ниспадающем SYNC низкий уровень на WTBT говорит что сейчас будет цикл записи. А уже позже, при активном (низком) DIN, WTBT служит для различения циклов записи байта/слова.

Это понятно. Не понятно "R/W" в этом контексте :)

Vslav
04.06.2013, 08:49
Это понятно. Не понятно "R/W" в этом контексте :)
Ну... Понятно что все всем понятно :)
Там интересно, что после CLR @R0 процессор перечитал слово 123456 по адресу 1034 дважды. Запись в память отменяет результаты опережающего чтения потока команд? Но почему дважды? И почему ранее в этом примере такого нет (есть еще предвыборка по адресу 1020).

form
04.06.2013, 10:27
Там интересно, что после CLR @R0 процессор перечитал слово 123456 по адресу 1034 дважды. Запись в память отменяет результаты опережающего чтения потока команд? Но почему дважды? И почему ранее в этом примере такого нет (есть еще предвыборка по адресу 1020).

Происки врагов не иначе :)
Тоже чтоли собрать какой-нибудь стенд на макетной плате QBUS...
Недавно в процессе раскопок выкопал кучу цифровухи которую думал что раздал давно. Среди прочего всякий 580 хлам и просто фантастическое количество ВК28 и ВК38. Даже не знал, что у меня такое было когда-то :)

Mixa64
04.06.2013, 11:56
Не совсем понятно что такое R/W для сигнала, означающего запись байта (операции чтения байта на шине не бывает) :)
1802ВМ2, как выяснилось, не умеет писать байт в единственном цикле DATOB. Он это делает при помощи DATIOB, а поскольку WTBT при фронте SYNC означает ближайшее направление передачи, то и выходит R, потому что ближайшее это чтение. :)
Получается, что у 1802ВМ2 DATOB просто не бывает.

---------- Post added at 11:56 ---------- Previous post was at 11:42 ----------


Ну... Понятно что все всем понятно :)
Там интересно, что после CLR @R0 процессор перечитал слово 123456 по адресу 1034 дважды. Запись в память отменяет результаты опережающего чтения потока команд? Но почему дважды? И почему ранее в этом примере такого нет (есть еще предвыборка по адресу 1020).
Мне вдруг стало интересно, как поведет себя 112737, похоже, что таким образом PC дважды инкрементируется. Вообще, прослеживается тенденция использования готовых подходящих (микропрограммных?) конструкций, с побочным эффектом в виде выполнения ненужных циклов шины.
Насчет посмотреть, что получится, если писать в ту же ячейку из которой читается - тоже такая мысль появилась. У 8088 если записать себе под ноги, результат чтения команды не изменится, если на лету (предвыборка не апдейтится), а в дебаггере таки да.

form
04.06.2013, 11:58
Мне вдруг стало интересно, как поведет себя 112737, похоже, что таким образом PC дважды инкрементируется.

Ну оно и по логике должно дважды инкрементиться :)

Mixa64
04.06.2013, 12:18
Ну оно и по логике должно дважды инкрементиться :)
Речь о том, что мог бы сделать это по-тихому, а не будоражить шину еще раз :)
А другие регистры при MOVB (R)+, ... инкрементируются на 1, было интересно посмотреть, как поведет себя MOVB (PC)+, ... .

form
04.06.2013, 12:19
А другие регистры при MOVB (R)+, ... инкрементируются на 1, было интересно посмотреть, как поведет себя MOVB (PC)+, ... .

Автоинкремент/автодекремент PC и SP всегда словный.
Почему - думаю понятно :)

Patron
04.06.2013, 13:12
в синтаксисе не напутал?

MTFS @R0Должно быть
MFPS @R0

...


UR 001030 I 005010
UR 001032 I 112737
UR 005000 I 000056 O 000000W
UR 001034 I 123456
UR 001034 I 123456
Теперь понятно, почему MOV (PC)+,R0 выполняется на УКНЦ за 33 такта, а MOVB (PC)+,R0 за 47 тактов.

Но насчёт CLR @R0 не вполне ясно - вроде содержимое приёмника сначала читается. Не означает ли это, что при выполнении команд MOV, CLR и SXT - содержимое приёмника может читаться или не читаться, в зависимости от "окружающих команд"..

Когда команды MOV, CLR и SXT идут друг за дружкой - они приёмник не читают:

http://kisly-alexey.pisem.net/MOV/XM1-7/OP1_1.jpg

Mixa64
05.06.2013, 00:51
Вот так выглядят циклы обмена вместе с номерами тактов, для цепочек некоторых команд. RPLY выдается сразу, т.е. скорость максимальная.

MOV R0, (R0)


SEL 100000 03/16
HR 100000 I 100004 06/14
HR 100002 I 000200 06/20
UR 100004 I 012706 06/08
UR 100006 I 001000 06/12
UR 100010 I 000137 06/08
UR 100012 I 001000 06/20
UR 001000 I 012700 06/08
UR 001002 I 005000 06/12
UR 001004 I 010010 06/08
UR 001006 I 010010 06/08
UW 005000 O 005000 12/14
UR 001010 I 010010 06/08
UW 005000 O 005000 10/12
UR 001012 I 010010 06/08
UW 005000 O 005000 10/12
UR 001014 I 000240 06/08
UW 005000 O 005000 10/12
UR 001016 I 000240 06/10
UR 001020 I 000000 06/12
UR 001022 I 000000 06/08

CLR (R0)


SEL 100000 03/16
HR 100000 I 100004 06/14
HR 100002 I 000200 06/20
UR 100004 I 012706 06/08
UR 100006 I 001000 06/12
UR 100010 I 000137 06/08
UR 100012 I 001000 06/20
UR 001000 I 012700 06/08
UR 001002 I 005000 06/12
UR 001004 I 005010 06/08
UR 001006 I 005010 06/08
UR 005000 I 020346 O 000000 16/18
UR 001010 I 005010 06/08
UR 005000 I 000000 O 000000 16/18
UR 001012 I 005010 06/08
UR 005000 I 000000 O 000000 16/18
UR 001014 I 000240 06/08
UR 005000 I 000000 O 000000 16/18
UR 001016 I 000240 06/10
UR 001020 I 000000 06/12
UR 001022 I 000000 06/08

CLRB (R0)

SEL 100000 03/16
HR 100000 I 100004 06/14
HR 100002 I 000200 06/20
UR 100004 I 012706 06/08
UR 100006 I 001000 06/12
UR 100010 I 000137 06/08
UR 100012 I 001000 06/20
UR 001000 I 012700 06/08
UR 001002 I 005000 06/12
UR 001004 I 105010 06/08
UR 001006 I 105010 06/08
UR 005000 I 005000 OB 000000 16/18
UR 001010 I 105010 06/08
UR 005000 I 005000 OB 000000 16/18
UR 001012 I 105010 06/08
UR 005000 I 005000 OB 000000 16/18
UR 001014 I 000240 06/08
UR 005000 I 005000 OB 000000 16/18
UR 001016 I 000240 06/10
UR 001020 I 000000 06/12
UR 001022 I 000000 06/08
NOP

SEL 100000 03/16
HR 100000 I 100004 06/14
HR 100002 I 000200 06/20
UR 100004 I 012706 06/08
UR 100006 I 001000 06/12
UR 100010 I 000137 06/08
UR 100012 I 001000 06/20
UR 001000 I 000240 06/08
UR 001002 I 000240 06/12
UR 001004 I 000240 06/12
UR 001006 I 000240 06/12
UR 001010 I 000240 06/12
UR 001012 I 000240 06/12
UR 001014 I 000240 06/12
UR 001016 I 000240 06/12
UR 001020 I 000000 06/12
UR 001022 I 000000 06/08

MOV R0, R0

SEL 100000 03/16
HR 100000 I 100004 06/14
HR 100002 I 000200 06/20
UR 100004 I 012706 06/08
UR 100006 I 001000 06/12
UR 100010 I 000137 06/08
UR 100012 I 001000 06/20
UR 001000 I 010000 06/08
UR 001002 I 010000 06/08
UR 001004 I 010000 06/08
UR 001006 I 010000 06/08
UR 001010 I 010000 06/08
UR 001012 I 010000 06/08
UR 001014 I 010000 06/08
UR 001016 I 010000 06/08
UR 001020 I 000240 06/08
UR 001022 I 000240 06/12
UR 001024 I 000000 06/12
UR 001026 I 000000 06/08

Patron
05.06.2013, 12:55
Возможно, у 1801ВМ2 существуют разные "степпинги". Ведь есть же ( только где? ) варианты 1801ВМ1, у которых нормально выполняется команда MUL.

...

Действительно, чтобы при байтовых командах "добить" автоинкремент PC до 2 - каждый раз производится повторное "использование байта с автоинкрементом", поэтому на УКНЦ команда CMPB (R2)+,(R2)+ выполняется за 47 тактов, а команда CMPB (PC)+,(PC)+ выполняется за 80 тактов:

http://kisly-alexey.pisem.net/MOV/XM1-7/CMPB01.jpg

http://kisly-alexey.pisem.net/MOV/XM1-7/MOVB01.jpg

http://kisly-alexey.pisem.net/MOV/XM1-7/BISB.jpgВесьма может статься, что при аналогичном использовании SP - ситуация та же. Надо будет на эту тему специальный тест написать.

Особенно интересно, каким циклом производится "добивка" в команде BISB R0, (PC)+
Неужели повторно прогоняется цикл DATIOB..


---------- Post added at 11:55 ---------- Previous post was at 11:46 ----------

И вот ещё что интересно:


MOV (PC), (PC)+ 82
MOVB (PC), (PC)+ 84

MOV R0, (PC)+ 47
MOVB R0, (PC)+ 56

При выполнении команды MOVB (PC), (PC)+ время выполнения почти не увеличивается, по сравнению с командой MOV (PC), (PC)+.

Mixa64
05.06.2013, 21:47
Это BISB R0, (PC)+
В конце сделал <такты активного SYNC>/<общее число тактов>

SEL 100000 03/16
HR 100000 I 100004 06/14
HR 100002 I 000200 06/20
UR 100004 I 012706 06/08
UR 100006 I 001000 06/12
UR 100010 I 000137 06/08
UR 100012 I 001000 06/20
UR 001000 I 005000 06/08
UR 001002 I 150027 06/08
UR 001004 I 123456 06/10
UR 001004 I 123456 OB 000056 16/18
UR 001006 I 150027 06/08
UR 001010 I 123456 06/10
UR 001010 I 123456 OB 000056 16/18
UR 001012 I 150027 06/08
UR 001014 I 123456 06/10
UR 001014 I 123456 OB 000056 16/18
UR 001016 I 150027 06/08
UR 001020 I 123456 06/10
UR 001020 I 123456 OB 000056 16/18
UR 001022 I 150027 06/08
UR 001024 I 123456 06/10
UR 001024 I 123456 OB 000056 16/18
UR 001026 I 150027 06/08
UR 001030 I 123456 06/10
UR 001030 I 123456 OB 000056 16/18
UR 001032 I 150027 06/08
UR 001034 I 123456 06/10
UR 001034 I 123456 OB 000056 16/18
UR 001036 I 150027 06/08
UR 001040 I 123456 06/10
UR 001040 I 123456 OB 000056 16/18
UR 001042 I 150027 06/08
UR 001044 I 123456 06/10
UR 001044 I 123456 OB 000056 16/18
UR 001046 I 150027 06/08
UR 001050 I 123456 06/10
UR 001050 I 123456 OB 000056 16/18
UR 001052 I 000240 06/08
UR 001054 I 000240 06/12
UR 001056 I 000240 06/12
UR 001060 I 000240 06/12
UR 001062 I 000000 06/12
UR 001064 I 000000 06/08
SEL 100000 03/16
HR 100170 I 100174 06/06
R0=000000 R1=137532 R2=157416 R3=053416 R4=153456 R5=153062 R6=001000 R7=001064
RS=000200

---------- Post added at 21:41 ---------- Previous post was at 21:33 ----------

MOV (PC), (PC)+

HR 100000 I 100004 06/14
HR 100002 I 000200 06/20
UR 100004 I 012706 06/08
UR 100006 I 001000 06/12
UR 100010 I 000137 06/08
UR 100012 I 001000 06/20
UR 001000 I 011727 06/08
UR 001002 I 123456 06/08
UR 001002 I 123456 06/12
UR 001002 I 123456 06/08
UW 001002 O 123456 10/12
UR 001004 I 011727 06/08
UR 001006 I 123456 06/08
UR 001006 I 123456 06/12
UR 001006 I 123456 06/08
UW 001006 O 123456 10/12
UR 001010 I 011727 06/08
UR 001012 I 123456 06/08
UR 001012 I 123456 06/12
UR 001012 I 123456 06/08
UW 001012 O 123456 10/12
UR 001014 I 011727 06/08
UR 001016 I 123456 06/08
UR 001016 I 123456 06/12
UR 001016 I 123456 06/08
UW 001016 O 123456 10/12
UR 001020 I 000240 06/08
UR 001022 I 000240 06/12
UR 001024 I 000240 06/12
UR 001026 I 000240 06/12
UR 001030 I 000000 06/12
UR 001032 I 000000 06/08

---------- Post added at 21:47 ---------- Previous post was at 21:41 ----------

MOVB (PC), (PC)+

SEL 100000 03/16
HR 100000 I 100004 06/14
HR 100002 I 000200 06/20
UR 100004 I 012706 06/08
UR 100006 I 001000 06/12
UR 100010 I 000137 06/08
UR 100012 I 001000 06/20
UR 001000 I 111727 06/08
UR 001002 I 123456 06/08
UR 001002 I 123456 06/12
UR 001002 I 123456 06/08
UR 001002 I 123456 OB 000056 16/18
UR 001004 I 111727 06/08
UR 001006 I 123456 06/08
UR 001006 I 123456 06/12
UR 001006 I 123456 06/08
UR 001006 I 123456 OB 000056 16/18
UR 001010 I 111727 06/08
UR 001012 I 123456 06/08
UR 001012 I 123456 06/12
UR 001012 I 123456 06/08
UR 001012 I 123456 OB 000056 16/18
UR 001014 I 111727 06/08
UR 001016 I 123456 06/08
UR 001016 I 123456 06/12
UR 001016 I 123456 06/08
UR 001016 I 123456 OB 000056 16/18
UR 001020 I 000240 06/08
UR 001022 I 000240 06/12
UR 001024 I 000240 06/12
UR 001026 I 000240 06/12
UR 001030 I 000000 06/12
UR 001032 I 000000 06/08

form
05.06.2013, 22:10
Антинаучный эксперимент пока пьется чай...
Замер тока, потребляемого корзиной по +5V (процессор только его потребляет) при запуске теста MOV.


подсказка RT-11
подсказка запроса частоты
выполнение теста

Mixa64
05.06.2013, 22:16
MOV R0, (PC)+

SEL 100000 03/16
HR 100000 I 100004 06/14
HR 100002 I 000200 06/20
UR 100004 I 012706 06/08
UR 100006 I 001000 06/12
UR 100010 I 000137 06/08
UR 100012 I 001000 06/20
UR 001000 I 012700 06/08
UR 001002 I 123456 06/12
UR 001004 I 010027 06/08
UR 001006 I 000000 06/10
UW 001006 O 123456 10/12
UR 001010 I 010027 06/08
UR 001012 I 000000 06/10
UW 001012 O 123456 10/12
UR 001014 I 010027 06/08
UR 001016 I 000000 06/10
UW 001016 O 123456 10/12
UR 001020 I 010027 06/08
UR 001022 I 000000 06/10
UW 001022 O 123456 10/12
UR 001024 I 000240 06/08
UR 001026 I 000240 06/12
UR 001030 I 000240 06/12
UR 001032 I 000240 06/12
UR 001034 I 000000 06/12
UR 001036 I 000000 06/08

---------- Post added at 22:16 ---------- Previous post was at 22:11 ----------

MOVB R0, (PC)+

SEL 100000 03/16
HR 100000 I 100004 06/14
HR 100002 I 000200 06/20
UR 100004 I 012706 06/08
UR 100006 I 001000 06/12
UR 100010 I 000137 06/08
UR 100012 I 001000 06/20
UR 001000 I 012700 06/08
UR 001002 I 123456 06/12
UR 001004 I 110027 06/08
UR 001006 I 000000 06/10
UR 001006 I 000000 OB 000056 16/18
UR 001010 I 110027 06/08
UR 001012 I 000000 06/10
UR 001012 I 000000 OB 000056 16/18
UR 001014 I 110027 06/08
UR 001016 I 000000 06/10
UR 001016 I 000000 OB 000056 16/18
UR 001020 I 110027 06/08
UR 001022 I 000000 06/10
UR 001022 I 000000 OB 000056 16/18
UR 001024 I 000240 06/08
UR 001026 I 000240 06/12
UR 001030 I 000240 06/12
UR 001032 I 000240 06/12
UR 001034 I 000000 06/12
UR 001036 I 000000 06/08

BYTEMAN
05.06.2013, 22:36
18 ампер?????? ёлыпалы....

form
05.06.2013, 22:38
18 ампер?????? ёлыпалы....

Ну так это:
MSV11-JE (две штуки)
KDJ11-BF
DELQA-M
LPV11
DLV11-J
DZQ11
DHV11
CQD-420/TM


:)

Mixa64
05.06.2013, 22:39
SXT (R0)

SEL 100000 03/16
HR 100000 I 100004 06/14
HR 100002 I 000200 06/20
UR 100004 I 012706 06/08
UR 100006 I 001000 06/12
UR 100010 I 000137 06/08
UR 100012 I 001000 06/20
UR 001000 I 012700 06/08
UR 001002 I 005000 06/12
UR 001004 I 006710 06/08
UR 001006 I 006710 06/08
UW 005000 O 000000 10/12
UR 001010 I 006710 06/08
UW 005000 O 000000 10/12
UR 001012 I 006710 06/08
UW 005000 O 000000 10/12
UR 001014 I 000240 06/08
UW 005000 O 000000 10/12
UR 001016 I 000240 06/10
UR 001020 I 000000 06/12
UR 001022 I 000000 06/08

form
05.06.2013, 23:17
Ну так это

Запустил тест KDJ11-B из XXDP+ 2.5...
Жрет поменьше чем MOV :)

Mixa64
05.06.2013, 23:54
CLR (R0) с другим 1801ВМ2. Этот КМ1801ВМ2 8812, тот был КР1801ВМ2 9011. Оба Ангстрем. Чудеса.
P.S. Проверил третий, тоже КР1801ВМ2 9011 - нормальный DATO делает. Первый - дефектный что ли? Но прикольный дефект, программы исполняются тем не менее.

SEL 100000 03/16
HR 100000 I 100004 06/14
HR 100002 I 000200 06/20
UR 100004 I 012706 06/08
UR 100006 I 001000 06/12
UR 100010 I 000137 06/08
UR 100012 I 001000 06/20
UR 001000 I 012700 06/08
UR 001002 I 005000 06/12
UR 001004 I 005010 06/08
UR 001006 I 005010 06/08
UW 005000 O 000000 10/12
UR 001010 I 005010 06/08
UW 005000 O 000000 10/12
UR 001012 I 005010 06/08
UW 005000 O 000000 10/12
UR 001014 I 000240 06/08
UW 005000 O 000000 10/12
UR 001016 I 000240 06/10
UR 001020 I 000000 06/12
UR 001022 I 000000 06/08

Patron
06.06.2013, 11:22
MOV R0, (PC)+Понятно - во всех случаях "добивка PC до +2" производится предварительным чтением приёмника.

Можно ещё проверить что-нибудь типа MOVB (SP)+,(SP)+ и BISB (SP)+,(SP)+ - там тоже должна быть "добивка".

...

Ещё один интересный момент - огромные задержки, возникающие при выполнении команд типа MOV R0, (R1)+ или MOV R0, (SP)+, когда запись идёт в ячейку следующей извлекаемой команды ( т.е. происходит сброс предвыборки ), при том что команда MOV R0, (PC) таких больших задержек не вызывает. В R0 при этом можно поместить NOP.

Можно даже сравнить ход выполнения при R1=SP=400 и R1=SP=01002

И ещё раз то и другое для MOVB R0, (R1)+ и MOVB R0, (SP)+.

Ну и на всякий случай можно проверить MOVB R0, (PC).

form
06.06.2013, 15:30
Антинаучный эксперимент пока пьется чай...
Замер тока, потребляемого корзиной по +5V (процессор только его потребляет) при запуске теста MOV.


подсказка RT-11
подсказка запроса частоты
выполнение теста


Для полноты картины - замер тока на входе.

Mixa64
07.06.2013, 22:01
Серия с автоикрементными пересылками
MOV (SP)+, (SP)+
Память до

001000: 012706 001004 012626 012626 012626 012626 000240 000000
001020: 000000 000000 000000 000240 000240 000240 000240 000240
Исполнение

SEL 100000 03/16
HR 100000 I 000400 06/14
HR 100002 I 000200 06/20
UR 000400 I 012706 06/08
UR 000402 I 001000 06/12
UR 000404 I 000137 06/08
UR 000406 I 001000 06/20
UR 001000 I 012706 06/08
UR 001002 I 001004 06/12
UR 001004 I 012626 06/08
UR 001006 I 012626 06/08
UR 001004 I 012626 06/12
UW 001006 O 012626 12/14
UR 001010 I 012626 06/22
UR 001006 I 012626 06/08
UR 001010 I 012626 06/08
UR 001010 I 012626 06/12
UW 001012 O 012626 12/14
UR 001012 I 012626 06/08
UR 001014 I 000240 06/12
UW 001016 O 000240 12/14
UR 001014 I 000240 06/08
UR 001020 I 000000 06/12
UW 001022 O 000000 12/14
UR 001016 I 000240 06/10
UR 001020 I 000000 06/12
UR 001022 I 000000 06/08
Память после

001000: 012706 001004 012626 012626 012626 012626 000240 000240
001020: 000000 000000 000000 000240 000240 000240 000240 000240

---------- Post added at 21:09 ---------- Previous post was at 21:07 ----------

MOVB (SP)+, (SP)+
Память до

001000: 012706 001004 112626 112626 112626 112626 000240 000000
001020: 000000 000000 000000 000240 000240 000240 000240 000240
Исполнение

SEL 100000 03/16
HR 100000 I 000400 06/14
HR 100002 I 000200 06/20
UR 000400 I 012706 06/08
UR 000402 I 001000 06/12
UR 000404 I 000137 06/08
UR 000406 I 001000 06/20
UR 001000 I 012706 06/08
UR 001002 I 001004 06/12
UR 001004 I 112626 06/08
UR 001006 I 112626 06/08
UR 001004 I 112626 06/12
UR 001006 I 112626 OB 000226 16/18
UR 001010 I 112626 06/22
UR 001006 I 112626 06/08
UR 001010 I 112626 06/08
UR 001010 I 112626 06/12
UR 001012 I 112626 OB 000226 16/18
UR 001012 I 112626 06/08
UR 001014 I 000240 06/12
UR 001016 I 000000 OB 000240 16/18
UR 001014 I 000240 06/08
UR 001020 I 000000 06/12
UR 001022 I 000000 OB 000000 16/18
UR 001016 I 000240 06/10
UR 001020 I 000000 06/12
UR 001022 I 000000 06/08
Память после

001000: 012706 001004 112626 112626 112626 112626 000240 000240
001020: 000000 000000 000000 000240 000240 000240 000240 000240

---------- Post added at 21:12 ---------- Previous post was at 21:09 ----------

MOV (R0)+, (R0)+
Память до

001000: 012700 001004 012020 012020 012020 012020 000240 000000
001020: 000000 000000 000000 000240 000240 000240 000240 000240
Исполнение

SEL 100000 03/16
HR 100000 I 000400 06/14
HR 100002 I 000200 06/20
UR 000400 I 012706 06/08
UR 000402 I 001000 06/12
UR 000404 I 000137 06/08
UR 000406 I 001000 06/20
UR 001000 I 012700 06/08
UR 001002 I 001004 06/12
UR 001004 I 012020 06/08
UR 001006 I 012020 06/08
UR 001004 I 012020 06/12
UW 001006 O 012020 12/14
UR 001010 I 012020 06/22
UR 001006 I 012020 06/08
UR 001010 I 012020 06/08
UR 001010 I 012020 06/12
UW 001012 O 012020 12/14
UR 001012 I 012020 06/08
UR 001014 I 000240 06/12
UW 001016 O 000240 12/14
UR 001014 I 000240 06/08
UR 001020 I 000000 06/12
UW 001022 O 000000 12/14
UR 001016 I 000240 06/10
UR 001020 I 000000 06/12
UR 001022 I 000000 06/08
Память после

001000: 012700 001004 012020 012020 012020 012020 000240 000240
001020: 000000 000000 000000 000240 000240 000240 000240 000240

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

MOVB (R0)+, (R0)+
Память до

001000: 012700 001004 112020 112020 112020 112020 000240 000000
001020: 000000 000000 000000 000240 000240 000240 000240 000240
Исполнение

SEL 100000 03/16
HR 100000 I 000400 06/14
HR 100002 I 000200 06/20
UR 000400 I 012706 06/08
UR 000402 I 001000 06/12
UR 000404 I 000137 06/08
UR 000406 I 001000 06/20
UR 001000 I 012700 06/08
UR 001002 I 001004 06/12
UR 001004 I 112020 06/08
UR 001006 I 112020 06/08
UR 001004 I 112020 06/12
UR 001005 I 112020 OB 010000 16/18
UR 001010 I 112020 06/08
UR 001006 I 112020 06/12
UR 001007 I 112020 OB 010000 16/18
UR 001012 I 112020 06/08
UR 001010 I 112020 06/12
UR 001011 I 112020 OB 010000 16/18
UR 001014 I 000240 06/08
UR 001012 I 112020 06/12
UR 001013 I 112020 OB 010000 16/18
UR 001016 I 000000 06/10
UR 001020 I 000000 06/08
Память после

001000: 012700 001004 010020 010020 010020 010020 000240 000000
001020: 000000 000000 000000 000240 000240 000240 000240 000240

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

BISB (SP)+, (SP)+

SEL 100000 03/16
HR 100000 I 000400 06/14
HR 100002 I 000200 06/20
UR 000400 I 012706 06/08
UR 000402 I 001000 06/12
UR 000404 I 000137 06/08
UR 000406 I 001000 06/20
UR 001000 I 012706 06/08
UR 001002 I 001004 06/12
UR 001004 I 152626 06/08
UR 001006 I 152626 06/08
UR 001004 I 152626 06/12
UR 001006 I 152626 OB 000226 16/18
UR 001010 I 152626 06/22
UR 001006 I 152626 06/08
UR 001010 I 152626 06/08
UR 001010 I 152626 06/12
UR 001012 I 152626 OB 000226 16/18
UR 001012 I 152626 06/08
UR 001014 I 000240 06/12
UR 001016 I 000000 OB 000240 16/18
UR 001014 I 000240 06/08
UR 001020 I 000000 06/12
UR 001022 I 000000 OB 000000 16/18
UR 001016 I 000240 06/10
UR 001020 I 000000 06/12
UR 001022 I 000000 06/08

---------- Post added at 21:25 ---------- Previous post was at 21:18 ----------

MOV R0, (R1)+ под себя
Память до

001000: 012700 000240 012701 001012 010021 000000 000000 000000
001020: 000000 000000 000000 000000 000000 000000 000000 000000
Исполнение

SEL 100000 03/16
HR 100000 I 000400 06/14
HR 100002 I 000200 06/20
UR 000400 I 012706 06/08
UR 000402 I 001000 06/12
UR 000404 I 000137 06/08
UR 000406 I 001000 06/20
UR 001000 I 012700 06/08
UR 001002 I 000240 06/12
UR 001004 I 012701 06/08
UR 001006 I 001012 06/12
UR 001010 I 010021 06/08
UR 001012 I 000000 06/08
UW 001012 O 000240 12/14
UR 001014 I 000000 06/22
UR 001012 I 000240 06/08
UR 001014 I 000000 06/12
UR 001016 I 000000 06/08
Память после

001000: 012700 000240 012701 001012 010021 000240 000000 000000
001020: 000000 000000 000000 000000 000000 000000 000000 000000

---------- Post added at 21:29 ---------- Previous post was at 21:25 ----------

Постоянное подбрасывание под себя

SEL 100000 03/16
HR 100000 I 000400 06/14
HR 100002 I 000200 06/20
UR 000400 I 012706 06/08
UR 000402 I 001000 06/12
UR 000404 I 000137 06/08
UR 000406 I 001000 06/20
UR 001000 I 012700 06/08
UR 001002 I 010021 06/12
UR 001004 I 012701 06/08
UR 001006 I 001012 06/12
UR 001010 I 010021 06/08
UR 001012 I 000000 06/08
UW 001012 O 010021 12/14
UR 001014 I 000000 06/22
UR 001012 I 010021 06/08
UR 001014 I 000000 06/08
UW 001014 O 010021 12/14
UR 001016 I 000000 06/22
UR 001014 I 010021 06/08
UR 001016 I 000000 06/08
UW 001016 O 010021 12/14
UR 001020 I 000000 06/22
UR 001016 I 010021 06/08
UR 001020 I 000000 06/08
UW 001020 O 010021 12/14
UR 001022 I 000000 06/22
UR 001020 I 010021 06/08
UR 001022 I 000000 06/08
UW 001022 O 010021 12/14
UR 001024 I 000000 06/22
UR 001022 I 010021 06/08
UR 001024 I 000000 06/08
UW 001024 O 010021 12/14
UR 001026 I 000000 06/22
UR 001024 I 010021 06/08
UR 001026 I 000000 06/08
UW 001026 O 010021 12/14
UR 001030 I 000000 06/22
UR 001026 I 010021 06/08
UR 001030 I 000000 06/08
UW 001030 O 010021 12/14
UR 001032 I 000000 06/22
UR 001030 I 010021 06/08
UR 001032 I 000000 06/08
UW 001032 O 010021 12/14
UR 001034 I 000000 06/22
UR 001032 I 010021 06/08
UR 001034 I 000000 06/08
UW 001034 O 010021 12/14
UR 001036 I 000000 06/22
UR 001034 I 010021 06/08
UR 001036 I 000000 06/08
UW 001036 O 010021 12/14
UR 001040 I 000000 06/22
UR 001036 I 010021 06/08
UR 001040 I 000000 06/08
UW 001040 O 010021 12/14
UR 001042 I 000000 06/22
UR 001040 I 010021 06/08
UR 001042 I 000000 06/08
UW 001042 O 010021 12/14
UR 001044 I 000000 06/22
UR 001042 I 010021 06/08
UR 001044 I 000000 06/08
UW 001044 O 010021 12/14
UR 001046 I 000000 06/22
UR 001044 I 010021 06/08
UR 001046 I 000000 06/08
UW 001046 O 010021 12/14
UR 001050 I 000000 06/22
UR 001046 I 010021 06/08
UR 001050 I 000000 06/08
UW 001050 O 010021 12/14
UR 001052 I 000377 06/22
...

---------- Post added at 22:01 ---------- Previous post was at 21:29 ----------

MOVB R0, (R1)+
Память до

001000: 012700 000240 012701 001012 110021 000000 110021 110021
001020: 000240 000000 000000 000000 000000 000000 000000 000000
Исполнение

SEL 100000 03/16
HR 100000 I 000400 06/14
HR 100002 I 000200 06/20
UR 000400 I 012706 06/08
UR 000402 I 001000 06/12
UR 000404 I 000137 06/08
UR 000406 I 001000 06/20
UR 001000 I 012700 06/08
UR 001002 I 000240 06/12
UR 001004 I 012701 06/08
UR 001006 I 001012 06/12
UR 001010 I 110021 06/08
UR 001012 I 000000 06/08
UR 001012 I 000000 OB 000240 16/18
UR 001014 I 110021 06/22
UR 001012 I 000240 06/08
UR 001014 I 110021 06/12
UR 001016 I 110021 06/08
UR 001013 I 000240 OB 120000 16/18
UR 001020 I 000240 06/08
UR 001014 I 110021 OB 000240 16/18
UR 001022 I 000000 06/10
UR 001024 I 000000 06/08
Память после

001000: 012700 000240 012701 001012 110021 120240 110240 110021
001020: 000240 000000 000000 000000 000000 000000 000000 000000

Mixa64
07.06.2013, 22:24
Но если из R1 адресовать другую половину того же командного слова:

001000: 012700 000240 012701 001013 110021 000000 110021 110021
001020: 000240 000000 000000 000000 000000 000000 000000 000000

SEL 100000 03/16
HR 100000 I 000400 06/14
HR 100002 I 000200 06/20
UR 000400 I 012706 06/08
UR 000402 I 001000 06/12
UR 000404 I 000137 06/08
UR 000406 I 001000 06/20
UR 001000 I 012700 06/08
UR 001002 I 000240 06/12
UR 001004 I 012701 06/08
UR 001006 I 001013 06/12
UR 001010 I 110021 06/08
UR 001012 I 000000 06/08 << HALT
UR 001013 I 000000 OB 120000 16/18
UR 001014 I 110021 06/08

001000: 012700 000240 012701 001013 110021 120000 110021 110021
001020: 000240 000000 000000 000000 000000 000000 000000 000000

---------- Post added at 22:11 ---------- Previous post was at 22:06 ----------

MOVB R0, (SP)+

001000: 012700 000240 012706 001012 110026 000000 110026 110026
001020: 000240 000000 000000 000000 000000 000000 000000 000000

SEL 100000 03/16
HR 100000 I 000400 06/14
HR 100002 I 000200 06/20
UR 000400 I 012706 06/08
UR 000402 I 001000 06/12
UR 000404 I 000137 06/08
UR 000406 I 001000 06/20
UR 001000 I 012700 06/08
UR 001002 I 000240 06/12
UR 001004 I 012706 06/08
UR 001006 I 001012 06/12
UR 001010 I 110026 06/08
UR 001012 I 000000 06/08
UR 001012 I 000000 OB 000240 16/18
UR 001014 I 110026 06/22
UR 001012 I 000240 06/08
UR 001014 I 110026 06/12
UR 001016 I 110026 06/08
UR 001014 I 110026 OB 000240 16/18
UR 001020 I 000240 06/08
UR 001016 I 110026 OB 000240 16/18
UR 001022 I 000000 06/10
UR 001024 I 000000 06/08

001000: 012700 000240 012706 001012 110026 000240 110240 110240
001020: 000240 000000 000000 000000 000000 000000 000000 000000

---------- Post added at 22:24 ---------- Previous post was at 22:11 ----------

MOV R0, (PC)

001000: 012700 010017 010017 123456 123456 123456 123456 123456
001020: 123456 123456 123456 123456 123456 123456 123456 000000

SEL 100000 03/16
HR 100000 I 000400 06/14
HR 100002 I 000200 06/20
UR 000400 I 012706 06/08
UR 000402 I 001000 06/12
UR 000404 I 000137 06/08
UR 000406 I 001000 06/20
UR 001000 I 012700 06/08
UR 001002 I 010017 06/12
UR 001004 I 010017 06/08
UR 001006 I 123456 06/08
UW 001006 O 010017 12/14
UR 001006 I 010017 06/08
UR 001010 I 123456 06/08
UW 001010 O 010017 12/14
UR 001010 I 010017 06/08
UR 001012 I 123456 06/08
UW 001012 O 010017 12/14
UR 001012 I 010017 06/08
UR 001014 I 123456 06/08
UW 001014 O 010017 12/14
UR 001014 I 010017 06/08
UR 001016 I 123456 06/08
UW 001016 O 010017 12/14
UR 001016 I 010017 06/08
UR 001020 I 123456 06/08
UW 001020 O 010017 12/14
UR 001020 I 010017 06/08
UR 001022 I 123456 06/08
UW 001022 O 010017 12/14
UR 001022 I 010017 06/08
UR 001024 I 123456 06/08
UW 001024 O 010017 12/14
UR 001024 I 010017 06/08
UR 001026 I 123456 06/08
UW 001026 O 010017 12/14
UR 001026 I 010017 06/08
UR 001030 I 123456 06/08
UW 001030 O 010017 12/14
UR 001030 I 010017 06/08
UR 001032 I 123456 06/08
UW 001032 O 010017 12/14
UR 001032 I 010017 06/08
UR 001034 I 123456 06/08
UW 001034 O 010017 12/14
UR 001034 I 010017 06/08
UR 001036 I 000000 06/08
UW 001036 O 010017 12/14
UR 001036 I 010017 06/08
UR 001040 I 000000 06/08
UW 001040 O 010017 12/14
UR 001040 I 010017 06/08
UR 001042 I 000000 06/08
UW 001042 O 010017 12/14
UR 001042 I 010017 06/08
UR 001044 I 000000 06/08
UW 001044 O 010017 12/14
UR 001044 I 010017 06/08
UR 001046 I 000000 06/08
UW 001046 O 010017 12/14
...

001000: 012700 010017 010017 010017 010017 010017 010017 010017
001020: 010017 010017 010017 010017 010017 010017 010017 010017

Patron
08.06.2013, 12:35
Первым делом, небольшая поправка - в последнем примере выполнялся код 010017, т.е. не MOVB R0, (PC), а MOV R0, (PC).

...

То, что нарушение предвыборки регистрируется только для чётных адресов - это известная особенность 1801ВМ2.

...

Прояснилась ситуация относительно огромных задержек при перезаписи следующей команды.
Вот как (на мой взгляд) работает процессор 1801ВМ2 при выполнении команд MOV R0, (R1)+ и MOV R0, (PC), когда обе эти команды пишут в следующее слово:

MOV R0, (R1)+


Загрузка Содержимое Раскодирование Выполнение Завершение

1. UR 001010 I 010021 06/08 001010 .......... ..........
2. UR 001012 I 000000 06/08 001012 .......... ..........
3. UW 001012 O 000240 12/14 .............. 001010 ..........
4. UR 001014 I 000000 06/22 001014 .......... 001010
5. UR 001012 I 000240 06/08 001012 .......... ..........



MOV R0, (PC)


Загрузка Содержимое Раскодирование Выполнение Завершение

1. UR 001004 I 010017 06/08 001004 .......... ..........
2. UR 001006 I 123456 06/08 001006 .......... ..........
3. UW 001006 O 010017 12/14 .............. 001004 ..........
4. UR 001006 I 010017 06/08 001006 .......... 001004
Теперь понятно, что имели в виду разработчики, когда утверждали, что в момент завершения текущей команды - уже раскодирована следующая и началась предвыборка ещё одной.

Т.к. факт записи в следующее слово командой MOV R0, (R1)+ становится известен только на этапе завершения - "пролетают" две предвыборки и процессору приходится выполнять микроблок JMP для перехода на изменённую команду.

Для команды MOV R0, (PC) факт записи в следующее слово становится известен на этапе раскодирования, поэтому "пролетает" только одна предвыборка и выполнение микроблока JMP не требуется.

...

Т.к. предвыборка следующего слова происходит одновременно с раскодированием текущего - команды BR и JMP (R0) должны сначала читать следующее слово и лишь затем выполнять переход - интересно в этом убедиться.

---------- Post added at 10:36 ---------- Previous post was at 10:25 ----------

Интересно, как работают команды MOV (SP)+,(SP)+ и MOVB (SP)+,(SP)+, когда они пишут не в область кода, а в обычный стек. Наверняка, это можно понять и из предыдущих примеров, но я слегка запутался.

---------- Post added at 11:35 ---------- Previous post was at 10:36 ----------

При нулевой задержке RPLY - блоки команд NOP и MOV R0,R0 выполняются (насколько я понял) так:

NOP | NOP | NOP | HALT | HALT

UR 001000 I 000240 06/08
UR 001002 I 000240 06/12
UR 001004 I 000240 06/12
UR 001006 I 000000 06/12
UR 001010 I 000000 06/08

MOV R0, R0 | MOV R0, R0 | MOV R0, R0 | HALT | HALT

UR 001000 I 010000 06/08
UR 001002 I 010000 06/08
UR 001004 I 010000 06/08
UR 001006 I 000000 06/08
UR 001010 I 000000 06/08


Интересно, как они будут выполняться при задержке RPLY в 1, 2, 4 и 6 тактов..

При нулевой задержке RPLY команда NOP выполняется за 12 тактов, а MOV R0,R0 - за 8 тактов.

Не исключено, что при задержке RPLY в 6 тактов - обе эти команды будут выполняться за 14 тактов.

Mixa64
09.06.2013, 20:29
Первым делом, небольшая поправка - в последнем примере выполнялся код 010017, т.е. не MOVB R0, (PC), а MOV R0, (PC).
Ага, исправил. Вот тут правильно:
MOVB R0, (PC)

001000: 012700 110017 110017 110000 110000 110000 110000 110000
001020: 110000 110000 110000 000000 000000 000000 000000 000000

SEL 100000 03/16
HR 100000 I 000400 06/14
HR 100002 I 000200 06/20
UR 000400 I 012706 06/08
UR 000402 I 001000 06/12
UR 000404 I 000137 06/08
UR 000406 I 001000 06/20
UR 001000 I 012700 06/08
UR 001002 I 110017 06/12
UR 001004 I 110017 06/08
UR 001006 I 110000 06/08
UR 001006 I 110000 OB 000017 16/18
UR 001006 I 110017 06/08
UR 001010 I 110000 06/08
UR 001010 I 110000 OB 000017 16/18
UR 001010 I 110017 06/08
UR 001012 I 110000 06/08
UR 001012 I 110000 OB 000017 16/18
UR 001012 I 110017 06/08
UR 001014 I 110000 06/08
UR 001014 I 110000 OB 000017 16/18
UR 001014 I 110017 06/08
UR 001016 I 110000 06/08
UR 001016 I 110000 OB 000017 16/18
UR 001016 I 110017 06/08
UR 001020 I 110000 06/08
UR 001020 I 110000 OB 000017 16/18
UR 001020 I 110017 06/08
UR 001022 I 110000 06/08
UR 001022 I 110000 OB 000017 16/18
UR 001022 I 110017 06/08
UR 001024 I 110000 06/08
UR 001024 I 110000 OB 000017 16/18
UR 001024 I 110017 06/08
UR 001026 I 000000 06/08
UR 001026 I 000000 OB 000017 16/18
UR 001026 I 000017 06/08
UR 001030 I 000000 06/08
SEL 100000 03/12
UW 000776 O 000200 10/12
UW 000774 O 001030 10/12
UR 000010 I 010026 06/14
... ушел в Trap 4

001000: 012700 110017 110017 110017 110017 110017 110017 110017
001020: 110017 110017 110017 000017 000000 000000 000000 000000

---------- Post added at 18:38 ---------- Previous post was at 18:15 ----------



Т.к. предвыборка следующего слова происходит одновременно с раскодированием текущего - команды BR и JMP (R0) должны сначала читать следующее слово и лишь затем выполнять переход - интересно в этом убедиться.

Ну да, так и есть
BR

SEL 100000 03/16
HR 100000 I 000400 06/14
HR 100002 I 000200 06/20
UR 000400 I 012706 06/08
UR 000402 I 001000 06/12
UR 000404 I 000137 06/08
UR 000406 I 001000 06/20
UR 001000 I 000240 06/08
UR 001002 I 000240 06/12
UR 001004 I 000775 06/12
UR 001006 I 123456 06/08
UR 001000 I 000240 06/08
UR 001002 I 000240 06/12
UR 001004 I 000775 06/12
UR 001006 I 123456 06/08
UR 001000 I 000240 06/08
UR 001002 I 000240 06/12
UR 001004 I 000775 06/12
UR 001006 I 123456 06/08
UR 001000 I 000240 06/08

JMP (R0)

HR 100000 I 000400 06/14
HR 100002 I 000200 06/20
UR 000400 I 012706 06/08
UR 000402 I 001000 06/12
UR 000404 I 000137 06/08
UR 000406 I 001000 06/20
UR 001000 I 012700 06/08
UR 001002 I 001004 06/12
UR 001004 I 000240 06/08
UR 001006 I 000240 06/12
UR 001010 I 000110 06/12
UR 001012 I 123456 06/18
UR 001004 I 000240 06/08
UR 001006 I 000240 06/12
UR 001010 I 000110 06/12
UR 001012 I 123456 06/18
UR 001004 I 000240 06/08
UR 001006 I 000240 06/12
UR 001010 I 000110 06/12
UR 001012 I 123456 06/18

---------- Post added at 19:11 ---------- Previous post was at 18:38 ----------


Интересно, как работают команды MOV (SP)+,(SP)+ и MOVB (SP)+,(SP)+, когда они пишут не в область кода, а в обычный стек. Наверняка, это можно понять и из предыдущих примеров, но я слегка запутался.
Из предыдущих примеров видно, для MOV (SP)+,(SP)+ запись в "область кода" происходит только здесь, и идет перечитывание команды по адресу 1006.

UR 001006 I 012626 06/08
UR 001004 I 012626 06/12
UW 001006 O 012626 12/14
UR 001010 I 012626 06/22
UR 001006 I 012626 06/08

Потом операции по адресам из SP обгоняют выборку команд и происходит просто конвейерное переписывание из ячейки в следующую. То же самое и для MOVB (SP)+, (SP)+

---------- Post added at 20:29 ---------- Previous post was at 19:11 ----------

Результаты задержки RPLY шагами по 2 такта (0 и 1 не различаются, как и остальные следующие нечетные)
MOV R0, R0
0

SEL 100000 03/16
HR 100000 I 000400 06/14
HR 100002 I 000200 06/20
UR 000400 I 012706 06/08
UR 000402 I 001000 06/12
UR 000404 I 000137 06/08
UR 000406 I 001000 06/20
UR 001000 I 010000 06/08
UR 001002 I 010000 06/08
UR 001004 I 010000 06/08
UR 001006 I 000000 06/08
UR 001010 I 000000 06/08
SEL 100000 03/16
HR 100170 I 100400 06/06
2

SEL 100000 03/16
HR 100000 I 000400 08/16
HR 100002 I 000200 08/22
UR 000400 I 012706 08/10
UR 000402 I 001000 08/14
UR 000404 I 000137 08/10
UR 000406 I 001000 08/22
UR 001000 I 010000 08/10
UR 001002 I 010000 08/10
UR 001004 I 010000 08/10
UR 001006 I 000000 08/10
UR 001010 I 000000 08/10
SEL 100000 03/16
HR 100170 I 100400 08/08
4

SEL 100000 03/16
HR 100000 I 000400 10/18
HR 100002 I 000200 10/24
UR 000400 I 012706 10/12
UR 000402 I 001000 10/16
UR 000404 I 000137 10/12
UR 000406 I 001000 10/24
UR 001000 I 010000 10/12
UR 001002 I 010000 10/12
UR 001004 I 010000 10/12
UR 001006 I 000000 10/12
UR 001010 I 000000 10/12
SEL 100000 03/16
HR 100170 I 100400 10/10
6

SEL 100000 03/16
HR 100000 I 000400 12/20
HR 100002 I 000200 12/26
UR 000400 I 012706 12/14
UR 000402 I 001000 12/18
UR 000404 I 000137 12/14
UR 000406 I 001000 12/26
UR 001000 I 010000 12/14
UR 001002 I 010000 12/14
UR 001004 I 010000 12/14
UR 001006 I 000000 12/14
UR 001010 I 000000 12/14
SEL 100000 03/16
HR 100170 I 100400 12/12
NOP
0

SEL 100000 03/16
HR 100000 I 000400 06/14
HR 100002 I 000200 06/20
UR 000400 I 012706 06/08
UR 000402 I 001000 06/12
UR 000404 I 000137 06/08
UR 000406 I 001000 06/20
UR 001000 I 000240 06/08
UR 001002 I 000240 06/12
UR 001004 I 000240 06/12
UR 001006 I 000000 06/12
UR 001010 I 000000 06/08
SEL 100000 03/16
HR 100170 I 100400 06/06
2

SEL 100000 03/16
HR 100000 I 000400 08/16
HR 100002 I 000200 08/22
UR 000400 I 012706 08/10
UR 000402 I 001000 08/14
UR 000404 I 000137 08/10
UR 000406 I 001000 08/22
UR 001000 I 000240 08/10
UR 001002 I 000240 08/12
UR 001004 I 000240 08/12
UR 001006 I 000000 08/12
UR 001010 I 000000 08/10
SEL 100000 03/16
HR 100170 I 100400 08/08
4

SEL 100000 03/16
HR 100000 I 000400 10/18
HR 100002 I 000200 10/24
UR 000400 I 012706 10/12
UR 000402 I 001000 10/16
UR 000404 I 000137 10/12
UR 000406 I 001000 10/24
UR 001000 I 000240 10/12
UR 001002 I 000240 10/12
UR 001004 I 000240 10/12
UR 001006 I 000000 10/12
UR 001010 I 000000 10/12
SEL 100000 03/16
HR 100170 I 100400 10/10
6

SEL 100000 03/16
HR 100000 I 000400 12/20
HR 100002 I 000200 12/26
UR 000400 I 012706 12/14
UR 000402 I 001000 12/18
UR 000404 I 000137 12/14
UR 000406 I 001000 12/26
UR 001000 I 000240 12/14
UR 001002 I 000240 12/14
UR 001004 I 000240 12/14
UR 001006 I 000000 12/14
UR 001010 I 000000 12/14
SEL 100000 03/16
HR 100170 I 100400 12/12

Mixa64
09.06.2013, 23:39
То, как работает глюк, на примере отсюда (http://zx.pk.ru/showthread.php?t=14702&page=24)

...
Итак, начальные аргументы - R0 = R1 = R2 = R3 = R4 = 0. PSW = 0200. Ячейка 02000 = 0 (команда HALT).
А вот и код:


1000:011700 MOV @PC,R0
1002:005201 INC R1
1004:005202 INC R2
1006:005203 INC R3
1010:005204 INC R4
1012:000137 JMP @#1000
1014:001000 .WORD 2000
1016:002000



В код добавил начальную очистку регистров.
При задержке RPLY 0

SEL 100000 03/16
HR 100000 I 000400 06/14
HR 100002 I 000200 06/20
UR 000400 I 012706 06/08
UR 000402 I 001000 06/12
UR 000404 I 000137 06/08
UR 000406 I 001000 06/20
UR 001000 I 005000 06/08
UR 001002 I 005001 06/08
UR 001004 I 005002 06/08
UR 001006 I 005003 06/08
UR 001010 I 005004 06/08
UR 001012 I 011700 06/08
UR 001014 I 005201 06/08
UR 001014 I 005201 06/12
UR 001014 I 005201 06/08
UR 001016 I 005202 06/08
UR 001020 I 005203 06/08
UR 001022 I 005204 06/08
UR 001024 I 000137 06/08
UR 001026 I 001000 06/20
UR 001000 I 005000 06/08
UR 001002 I 005001 06/08

Задержка 2

SEL 100000 03/16
HR 100000 I 000400 08/16
HR 100002 I 000200 08/22
UR 000400 I 012706 08/10
UR 000402 I 001000 08/14
UR 000404 I 000137 08/10
UR 000406 I 001000 08/22
UR 001000 I 005000 08/10
UR 001002 I 005001 08/10
UR 001004 I 005002 08/10
UR 001006 I 005003 08/10
UR 001010 I 005004 08/10
UR 001012 I 011700 08/10
UR 001014 I 005201 08/10
UR 001014 I 005201 08/14
UR 001014 I 005201 08/10
UR 001016 I 005202 08/10
UR 001020 I 005203 08/10
UR 001022 I 005204 08/10
UR 001024 I 000137 08/10
UR 001026 I 001000 08/22
UR 001000 I 005000 08/10
UR 001002 I 005001 08/10
UR 001004 I 005002 08/10

Задержка 4. Ячейка 1030 читается как src для JMP

SEL 100000 03/16
HR 100000 I 000400 10/18
HR 100002 I 000200 10/24
UR 000400 I 012706 10/12
UR 000402 I 001000 10/16
UR 000404 I 000137 10/12
UR 000406 I 001000 10/24
UR 001000 I 005000 10/12
UR 001002 I 005001 10/12
UR 001004 I 005002 10/12
UR 001006 I 005003 10/12
UR 001010 I 005004 10/12
UR 001012 I 011700 10/12
UR 001014 I 005201 10/12
UR 001014 I 005201 10/16
UR 001014 I 005201 10/12
UR 001016 I 005202 10/12
UR 001020 I 005203 10/12
UR 001022 I 005204 10/12
UR 001024 I 000137 10/12
UR 001026 I 001000 10/12
UR 001030 I 002000 10/24
UR 002000 I 000000 10/12
UR 002002 I 000377 10/12
SEL 100000 03/16
HR 100170 I 100400 10/10
R0=005201 R1=000002 R2=000001 R3=000001 R4=000001 R5=111100 R6=001000 R7=002002
RS=000200
Далее везде задержка равна 4
Если вместо INC R4 вставить NOP, то ячейка 1030 прочитается как команда, в качестве ловушки туда HALT можно положить

SEL 100000 03/16
HR 100000 I 000400 10/18
HR 100002 I 000200 10/24
UR 000400 I 012706 10/12
UR 000402 I 001000 10/16
UR 000404 I 000137 10/12
UR 000406 I 001000 10/24
UR 001000 I 005000 10/12
UR 001002 I 005001 10/12
UR 001004 I 005002 10/12
UR 001006 I 005003 10/12
UR 001010 I 005004 10/12
UR 001012 I 011700 10/12
UR 001014 I 005201 10/12
UR 001014 I 005201 10/16
UR 001014 I 005201 10/12
UR 001016 I 005202 10/12
UR 001020 I 005203 10/12
UR 001022 I 000240 10/12
UR 001024 I 000137 10/12
UR 001026 I 001000 10/12
UR 001030 I 000000 10/12
UR 001032 I 000000 10/12
SEL 100000 03/16
HR 100170 I 100400 10/10
R0=005201 R1=000002 R2=000001 R3=000001 R4=000000 R5=111100 R6=001000 R7=001032
RS=000200
Если NOP поставить вместо INC R3, то JMP прочитает свой src таким образом, проигнорировав при этом INC R4

SEL 100000 03/16
HR 100000 I 000400 10/18
HR 100002 I 000200 10/24
UR 000400 I 012706 10/12
UR 000402 I 001000 10/16
UR 000404 I 000137 10/12
UR 000406 I 001000 10/24
UR 001000 I 005000 10/12
UR 001002 I 005001 10/12
UR 001004 I 005002 10/12
UR 001006 I 005003 10/12
UR 001010 I 005004 10/12
UR 001012 I 011700 10/12
UR 001014 I 005201 10/12
UR 001014 I 005201 10/16
UR 001014 I 005201 10/12
UR 001016 I 005202 10/12
UR 001020 I 000240 10/12
UR 001022 I 005204 10/12
UR 001024 I 000137 10/12
UR 001026 I 002000 10/12
UR 001026 I 002000 10/24
UR 002000 I 000000 10/12
UR 002002 I 000377 10/12
SEL 100000 03/16
HR 100170 I 100400 10/10
R0=005201 R1=000002 R2=000001 R3=000000 R4=000000 R5=111100 R6=001000 R7=002002
RS=000200
а если NOP поставить вместо INC R2, то получится так

SEL 100000 03/16
HR 100000 I 000400 10/18
HR 100002 I 000200 10/24
UR 000400 I 012706 10/12
UR 000402 I 001000 10/16
UR 000404 I 000137 10/12
UR 000406 I 001000 10/24
UR 001000 I 005000 10/12
UR 001002 I 005001 10/12
UR 001004 I 005002 10/12
UR 001006 I 005003 10/12
UR 001010 I 005004 10/12
UR 001012 I 011700 10/12
UR 001014 I 005201 10/12
UR 001014 I 005201 10/16
UR 001014 I 005201 10/12
UR 001016 I 000240 10/12
UR 001020 I 005203 10/12
UR 001022 I 005204 10/12
UR 001024 I 000137 10/12
UR 001026 I 002000 10/24
UR 002000 I 000000 10/12
UR 002002 I 000377 10/12
SEL 100000 03/16
HR 100170 I 100400 10/10
R0=005201 R1=000002 R2=000000 R3=000000 R4=000001 R5=111100 R6=001000 R7=002002
RS=000200

Patron
10.06.2013, 00:12
Результаты задержки RPLY шагами по 2 тактаПроцессор 1801ВМ2 "вычисляет" одновременно с предвыборкой следующего слова, поэтому, чем дольше идёт обмен по шине - тем больше выравниваются продолжительности выполнения команд ( любопытно, что у 1801ВМ1 - NOP при нулевой задержке RPLY тоже выполняется дольше, чем MOV R0,R0, а с ростом задержки RPLY эта разница пропадает - значит и у ВМ1 тоже есть какая-то простейшая предвыборка ).

Для соответствия стандарту Q-Bus (насколько я понимаю) SYNC-пауза у 1801ВМ2 составляет 2 такта, поэтому, при нулевой задержке RPLY - минимальная продолжительность команды 8 тактов. Всё что больше - "алгоритмическая задержка", разная для разных команд.

Есть смысл определить алгоритмическую задержку для всех команд и способов адресации ( дополнительная задержка способов адресации от команды не зависит, поэтому вариантов для тестирования не очень много ). Иногда имеет место позиционная зависимость задержки адресации - так на УКНЦ команда CMP (R2)+,-(R1) занимает 50 тактов, а команда CMP -(R1),(R2)+ занимает 47 тактов.

По тестам выходит, что у ВМ1 автодекрементная адресация { TST -(R0) ; TST @-(R0) } занимает на один такт больше, чем автоинкрементная. На УКНЦ у ВМ2 этого не видно, но проверить есть смысл. Кроме того, при способах адресации разной косвенности { TST (R0) ; TST 2(R0) ; TST @2(R0) } - последовательные чтения смещений на УКНЦ не всегда занимают одинаковое время. Интересно, как это выглядит "в чистом виде"..

Alex_K
10.06.2013, 01:04
То, как работает глюк, на примере отсюда (http://zx.pk.ru/showthread.php?t=14702&page=24)

Mixa64, видно, что при любых задержках RPLY команда INC R1 читается три раза (один раз по предвыборке, а два раза из-за сбоя предвыборки). Ясно, что при задержке четыре и более такта она исполниться два раза, а вот как при нуле и двух тактах?

Mixa64
10.06.2013, 11:43
Mixa64, видно, что при любых задержках RPLY команда INC R1 читается три раза (один раз по предвыборке, а два раза из-за сбоя предвыборки). Ясно, что при задержке четыре и более такта она исполниться два раза, а вот как при нуле и двух тактах?
Дампа регистров нету, потому что по циклу идет. Был бы линейный фрагмент с HALT в конце, было бы видно, что INC R1 исполняется правильно, т.е. 1 раз. Вечером добавлю для наглядности.

-= Добавление =-

Задержка RPLY 0

SEL 100000 03/16
HR 100000 I 000400 06/14
HR 100002 I 000200 06/20
UR 000400 I 012706 06/08
UR 000402 I 001000 06/12
UR 000404 I 000137 06/08
UR 000406 I 001000 06/20
UR 001000 I 005000 06/08
UR 001002 I 005001 06/08
UR 001004 I 005002 06/08
UR 001006 I 005003 06/08
UR 001010 I 005004 06/08
UR 001012 I 011700 06/08
UR 001014 I 005201 06/08
UR 001014 I 005201 06/12
UR 001014 I 005201 06/08
UR 001016 I 005202 06/08
UR 001020 I 005203 06/08
UR 001022 I 005204 06/08
UR 001024 I 000240 06/08
UR 001026 I 000240 06/12
UR 001030 I 000000 06/12
UR 001032 I 000000 06/08
SEL 100000 03/16
HR 100170 I 100400 06/06
R0=005201 R1=000001 R2=000001 R3=000001 R4=000001 R5=111100 R6=001000 R7=001032
RS=000200

Задержка RPLY 2

SEL 100000 03/16
HR 100000 I 000400 08/16
HR 100002 I 000200 08/22
UR 000400 I 012706 08/10
UR 000402 I 001000 08/14
UR 000404 I 000137 08/10
UR 000406 I 001000 08/22
UR 001000 I 005000 08/10
UR 001002 I 005001 08/10
UR 001004 I 005002 08/10
UR 001006 I 005003 08/10
UR 001010 I 005004 08/10
UR 001012 I 011700 08/10
UR 001014 I 005201 08/10
UR 001014 I 005201 08/14
UR 001014 I 005201 08/10
UR 001016 I 005202 08/10
UR 001020 I 005203 08/10
UR 001022 I 005204 08/10
UR 001024 I 000240 08/10
UR 001026 I 000240 08/12
UR 001030 I 000000 08/12
UR 001032 I 000000 08/10
SEL 100000 03/16
HR 100170 I 100400 08/08
R0=005201 R1=000001 R2=000001 R3=000001 R4=000001 R5=111100 R6=001000 R7=001032
RS=000200

Задержка RPLY 4

SEL 100000 03/16
HR 100000 I 000400 10/18
HR 100002 I 000200 10/24
UR 000400 I 012706 10/12
UR 000402 I 001000 10/16
UR 000404 I 000137 10/12
UR 000406 I 001000 10/24
UR 001000 I 005000 10/12
UR 001002 I 005001 10/12
UR 001004 I 005002 10/12
UR 001006 I 005003 10/12
UR 001010 I 005004 10/12
UR 001012 I 011700 10/12
UR 001014 I 005201 10/12
UR 001014 I 005201 10/16
UR 001014 I 005201 10/12
UR 001016 I 005202 10/12
UR 001020 I 005203 10/12
UR 001022 I 005204 10/12
UR 001024 I 000240 10/12
UR 001026 I 000240 10/12
UR 001030 I 000000 10/12
UR 001032 I 000000 10/12
SEL 100000 03/16
HR 100170 I 100400 10/10
R0=005201 R1=000002 R2=000001 R3=000001 R4=000001 R5=111100 R6=001000 R7=001032
RS=000200

Patron
11.06.2013, 15:01
Результаты задержки RPLY шагами по 2 такта (0 и 1 не различаются, как и остальные следующие нечетные)Точно, ведь процессор 1801ВМ2 делит тактовую частоту на 2, поэтому синхронная проверка RPLY возможна не ранее, чем через один такт.

Но что если подать копию RPLY на AR ( приёмник асинхронного RPLY - ножка 23 ) - не появится ли разница в быстродействии при нулевой задержке и задержке в 1 такт..

Alex_K
11.06.2013, 21:24
Но что если подать копию RPLY на AR ( приёмник асинхронного RPLY - ножка 23 ) - не появится ли разница в быстродействии при нулевой задержке и задержке в 1 такт..
Вообще-то AR - это подтверждение адреса, что-то типа аналогии RPLY, но ответ на SYNC. Поэтому на этот вход подают сигнал SYNC, ну может быть с задержкой, если часть устройств находится за буферами, и надо учитывать задержку при распространении адреса. В УКНЦ в магистрали ПП так и реализована задержка SYNC на AR через цепочку логических элементов с конденсаторами между входами и землей. Соответственно в зависимости от емкости конденсаторов с разной задержкой приходит сигнал на AR, и разные модели УКНЦ немного различаются по быстродействию в магистрали ПП.

Patron
12.06.2013, 03:03
Вообще-то AR - это подтверждение адреса, что-то типа аналогии RPLY, но ответ на SYNC.Точно, это я конкретно глюканул ( т.к. перед написанием исходного сообщения не поленился заглянуть в справочник и убедиться, что сигнал AR - это подтверждение адреса ).

Использование AR позволяет сделать задержку между SYNC и DIN/DOUT меньше, чем требует стандарт Q-Bus.

---------- Post added at 02:03 ---------- Previous post was at 01:50 ----------

Сигнал RPLY - сам по себе асинхронный, поэтому "приёмник асинхронного RPLY" на ножке AR - это супер!

Mixa64
12.06.2013, 17:42
По тестам выходит, что у ВМ1 автодекрементная адресация { TST -(R0) ; TST @-(R0) } занимает на один такт больше, чем автоинкрементная. На УКНЦ у ВМ2 этого не видно, но проверить есть смысл.

У ВМ2 в этом смысле разницы действительно нет.
TST -(R0)

SEL 100000 03/16
HR 100000 I 000400 06/14
HR 100002 I 000200 06/20
UR 000400 I 012706 06/08
UR 000402 I 001000 06/12
UR 000404 I 000137 06/08
UR 000406 I 001000 06/20
UR 001000 I 012700 06/08
UR 001002 I 004000 06/12
UR 001004 I 005740 06/08
UR 001006 I 005740 06/08
UR 003776 I 000377 06/12
UR 001010 I 005740 06/08
UR 003774 I 177500 06/12
UR 001012 I 005740 06/08
UR 003772 I 000377 06/12
UR 001014 I 005740 06/08
UR 003770 I 172404 06/12
UR 001016 I 000240 06/08
UR 003766 I 000377 06/12
UR 001020 I 000240 06/12
UR 001022 I 000240 06/12
UR 001024 I 000000 06/12
UR 001026 I 000000 06/08
TST @-(R0)


SEL 100000 03/16
HR 100000 I 000400 06/14
HR 100002 I 000200 06/20
UR 000400 I 012706 06/08
UR 000402 I 001000 06/12
UR 000404 I 000137 06/08
UR 000406 I 001000 06/20
UR 001000 I 012700 06/08
UR 001002 I 004000 06/12
UR 001004 I 005750 06/08
UR 001006 I 005750 06/08
UR 003776 I 000377 06/10
UR 000377 I 074733 06/12
UR 001010 I 005750 06/08
UR 003774 I 177500 06/10
UR 177500 I 042715 06/12
UR 001012 I 005750 06/08
UR 003772 I 000377 06/10
UR 000377 I 074733 06/12
UR 001014 I 005750 06/08
UR 003770 I 172404 06/10
UR 172404 I 177671 06/12
UR 001016 I 000240 06/08
UR 003766 I 000377 06/10
UR 000377 I 074733 06/12
UR 001020 I 000240 06/12
UR 001022 I 000240 06/12
UR 001024 I 000000 06/12
UR 001026 I 000000 06/08
TST (R0)+


SEL 100000 03/16
HR 100000 I 000400 06/14
HR 100002 I 000200 06/20
UR 000400 I 012706 06/08
UR 000402 I 001000 06/12
UR 000404 I 000137 06/08
UR 000406 I 001000 06/20
UR 001000 I 012700 06/08
UR 001002 I 004000 06/12
UR 001004 I 005720 06/08
UR 001006 I 005720 06/08
UR 004000 I 177400 06/12
UR 001010 I 005720 06/08
UR 004002 I 000377 06/12
UR 001012 I 005720 06/08
UR 004004 I 177500 06/12
UR 001014 I 005720 06/08
UR 004006 I 000377 06/12
UR 001016 I 000240 06/08
UR 004010 I 177400 06/12
UR 001020 I 000240 06/12
UR 001022 I 000240 06/12
UR 001024 I 000000 06/12
UR 001026 I 000000 06/08
TST @(R0)+


SEL 100000 03/16
HR 100000 I 000400 06/14
HR 100002 I 000200 06/20
UR 000400 I 012706 06/08
UR 000402 I 001000 06/12
UR 000404 I 000137 06/08
UR 000406 I 001000 06/20
UR 001000 I 012700 06/08
UR 001002 I 004000 06/12
UR 001004 I 005730 06/08
UR 001006 I 005730 06/08
UR 004000 I 177400 06/10
UR 177400 I 010637 06/12
UR 001010 I 005730 06/08
UR 004002 I 000377 06/10
UR 000377 I 074733 06/12
UR 001012 I 005730 06/08
UR 004004 I 177500 06/10
UR 177500 I 042715 06/12
UR 001014 I 005730 06/08
UR 004006 I 000377 06/10
UR 000377 I 074733 06/12
UR 001016 I 000240 06/08
UR 004010 I 177400 06/10
UR 177400 I 010637 06/12
UR 001020 I 000240 06/12
UR 001022 I 000240 06/12
UR 001024 I 000000 06/12
UR 001026 I 000000 06/08

---------- Post added at 17:42 ---------- Previous post was at 16:25 ----------


Кроме того, при способах адресации разной косвенности { TST (R0) ; TST 2(R0) ; TST @2(R0) } - последовательные чтения смещений на УКНЦ не всегда занимают одинаковое время. Интересно, как это выглядит "в чистом виде"..

А выглядит вот так (R0 = 4012):

TST (R0)

SEL 100000 03/16
HR 100000 I 000400 06/14
HR 100002 I 000200 06/20
UR 000400 I 012706 06/08
UR 000402 I 001000 06/12
UR 000404 I 000137 06/08
UR 000406 I 001000 06/20
UR 001000 I 005710 06/08
UR 001002 I 005710 06/08
UR 004012 I 000377 06/12
UR 001004 I 005710 06/08
UR 004012 I 000377 06/12
UR 001006 I 005710 06/08
UR 004012 I 000377 06/12
UR 001010 I 005710 06/08
UR 004012 I 000377 06/12
UR 001012 I 000240 06/08
UR 004012 I 000377 06/12
UR 001014 I 000240 06/12
UR 001016 I 000240 06/12
UR 001020 I 000000 06/12
UR 001022 I 000000 06/08
TST 2(R0)


SEL 100000 03/16
HR 100000 I 000400 06/14
HR 100002 I 000200 06/20
UR 000400 I 012706 06/08
UR 000402 I 001000 06/12
UR 000404 I 000137 06/08
UR 000406 I 001000 06/20
UR 001000 I 005760 06/08
UR 001002 I 000002 06/10
UR 004014 I 177500 06/12
UR 001004 I 005760 06/08
UR 001006 I 000002 06/10
UR 004014 I 177500 06/12
UR 001010 I 005760 06/08
UR 001012 I 000002 06/10
UR 004014 I 177500 06/12
UR 001014 I 005760 06/08
UR 001016 I 000002 06/10
UR 004014 I 177500 06/12
UR 001020 I 005760 06/08
UR 001022 I 000002 06/10
UR 004014 I 177500 06/12
UR 001024 I 000240 06/08
UR 001026 I 000240 06/12
UR 001030 I 000240 06/12
UR 001032 I 000000 06/12
UR 001034 I 000000 06/08
TST @2(R0)


SEL 100000 03/16
HR 100000 I 000400 06/14
HR 100002 I 000200 06/20
UR 000400 I 012706 06/08
UR 000402 I 001000 06/12
UR 000404 I 000137 06/08
UR 000406 I 001000 06/20
UR 001000 I 005770 06/08
UR 001002 I 000002 06/10
UR 004014 I 177500 06/10
UR 177500 I 042715 06/12
UR 001004 I 005770 06/08
UR 001006 I 000002 06/10
UR 004014 I 177500 06/10
UR 177500 I 042715 06/12
UR 001010 I 005770 06/08
UR 001012 I 000002 06/10
UR 004014 I 177500 06/10
UR 177500 I 042715 06/12
UR 001014 I 005770 06/08
UR 001016 I 000002 06/10
UR 004014 I 177500 06/10
UR 177500 I 042715 06/12
UR 001020 I 005770 06/08
UR 001022 I 000002 06/10
UR 004014 I 177500 06/10
UR 177500 I 042715 06/12
UR 001024 I 000240 06/08
UR 001026 I 000240 06/12
UR 001030 I 000240 06/12
UR 001032 I 000000 06/12
UR 001034 I 000000 06/08

Mixa64
12.06.2013, 18:38
Сменил подопытного на 1806ВМ2.
Отличия:
- исполнение команд занимает большее время
- мега-глюк отсутствует
- сбрасывает предвыборку при изменении нечетного байта команды

В остальном, в смысле "лишних" SEL и DATIOB вместо DATOB, такой же, как и 1801ВМ2.

Дальше примеры, длительность в полутактах CLCI (у 1806 частота пополам не делится).
Сброс предвыборки при записи нечетного байта

SEL 100000 04/33
HR 100000 I 000400 06/22
HR 100002 I 000200 06/34
UR 000400 I 012706 06/08
UR 000402 I 001000 06/18
UR 000404 I 000137 06/08
UR 000406 I 001000 06/34
UR 001000 I 012706 06/08
UR 001002 I 001005 06/18
UR 001004 I 112626 06/08
UR 001006 I 112626 06/10
UR 001005 I 112626 06/18
UR 001007 I 112626 OB 112400 18/48
UR 001006 I 112626 06/08
UR 001010 I 112626 06/10
UR 001011 I 112626 06/18
UR 001013 I 112626 OB 112400 18/20
UR 001012 I 112626 06/08
UR 001015 I 000240 06/18
UR 001017 I 000240 OB 000000 18/20
UR 001014 I 000240 06/08
UR 001021 I 000000 06/18
UR 001023 I 000000 OB 000000 18/20
UR 001016 I 000240 06/12
UR 001020 I 000000 06/16
UR 001022 I 000000 06/19

Цепочка MOV R0, R0

SEL 100000 04/33
HR 100000 I 000400 06/22
HR 100002 I 000200 06/34
UR 000400 I 012706 06/08
UR 000402 I 001000 06/18
UR 000404 I 000137 06/08
UR 000406 I 001000 06/34
UR 001000 I 010000 06/08
UR 001002 I 010000 06/10
UR 001004 I 010000 06/08
UR 001006 I 010000 06/10
UR 001010 I 010000 06/08
UR 001012 I 010000 06/10
UR 001014 I 010000 06/08
UR 001016 I 010000 06/10
UR 001020 I 000240 06/08
UR 001022 I 000240 06/18
UR 001024 I 000000 06/16
UR 001026 I 000000 06/19
SEL 100000 04/33
HR 100170 I 100400 06/06
Цепочка NOP

SEL 100000 04/33
HR 100000 I 000400 06/22
HR 100002 I 000200 06/34
UR 000400 I 012706 06/08
UR 000402 I 001000 06/18
UR 000404 I 000137 06/08
UR 000406 I 001000 06/34
UR 001000 I 000240 06/08
UR 001002 I 000240 06/18
UR 001004 I 000240 06/16
UR 001006 I 000240 06/16
UR 001010 I 000240 06/16
UR 001012 I 000240 06/16
UR 001014 I 000240 06/16
UR 001016 I 000240 06/16
UR 001020 I 000000 06/16
UR 001022 I 000000 06/19
SEL 100000 04/33
HR 100170 I 100400 06/06
Код, у 1801ВМ2 вызывающий мега-глюк при задержанном RPLY. Здесь RPLY не задержан, но при задержанном все точно так же, кроме удлинения циклов.

SEL 100000 04/33
HR 100000 I 000400 06/22
HR 100002 I 000200 06/34
UR 000400 I 012706 06/08
UR 000402 I 001000 06/18
UR 000404 I 000137 06/08
UR 000406 I 001000 06/34
UR 001000 I 005000 06/08
UR 001002 I 005001 06/10
UR 001004 I 005002 06/08
UR 001006 I 005003 06/10
UR 001010 I 005004 06/08
UR 001012 I 011700 06/10
UR 001014 I 005201 06/12
UR 001014 I 005201 06/10
UR 001016 I 005202 06/08
UR 001020 I 005203 06/10
UR 001022 I 005204 06/08
UR 001024 I 000240 06/10
UR 001026 I 000240 06/16
UR 001030 I 000000 06/16
UR 001032 I 000000 06/19
SEL 100000 04/33
HR 100170 I 100400 06/06
R0=005201 R1=000001 R2=000001 R3=000001 R4=000001 R5=000025 R6=001000 R7=001032
RS=000200

Patron
12.06.2013, 18:53
Дампа регистров нету, потому что по циклу идет. Был бы линейный фрагмент с HALT в конце, было бы видно, что INC R1 исполняется правильно, т.е. 1 раз. Вечером добавлю для наглядности.

-= Добавление =-
Получается, что после MOV (PC),R0 следующая команда считывается три раза ( причём, второе считывание из трёх занимает на 4 такта дольше ), но выполняется только один раз.

А что насчёт других аспектов мега-глюка..
Куда, например, после блока: MOV (PC),R0 | INC R0 переходит последовательность команд: JMP @(PC)+ | .Word GOOD | | .Word BAD ?

...


А выглядит вот такПонятно - команда считывается с алгоритмической задержкой 0, все смещения считываются с задержкой 2 и [ источник + выполнение ] - с задержкой 4.

Не помню, мы уже проверяли команду TST R0, какая там алгоритмическая задержка ( в смысле - на сколько дольше 8 тактов занимает выполнение ) ?

---------- Post added at 17:53 ---------- Previous post was at 17:43 ----------

И что насчёт команд CMP (R2)+,-(R1) и CMP -(R1),(R2)+, которые выполняются на УКНЦ за серьёзно разное время ?

Mixa64
26.12.2013, 23:48
Привет всем. Стенд покрылся пылью, решил разобрать, но тут остались вопросы без ответа, отвечаю. :)

Куда, например, после блока: MOV (PC),R0 | INC R0 переходит последовательность команд: JMP @(PC)+ | .Word GOOD | | .Word BAD ?


Всегда переходит на GOOD. Различаются тем, что оказывается в R0. Блок и 8-ми MOV | INC, RPLY без задержки:

SEL 100000 03/16
HR 100000 I 000400 06/14
HR 100002 I 000200 06/20
UR 000400 I 012706 06/08
UR 000402 I 001000 06/12
UR 000404 I 000137 06/08
UR 000406 I 001000 06/20
UR 001000 I 005000 06/08
UR 001002 I 005001 06/08
UR 001004 I 011700 06/08
UR 001006 I 005200 06/08
UR 001006 I 005200 06/12
UR 001006 I 005200 06/08
UR 001010 I 011700 06/08
UR 001012 I 005200 06/08
UR 001012 I 005200 06/12
UR 001012 I 005200 06/08
UR 001014 I 011700 06/08
UR 001016 I 005200 06/08
UR 001016 I 005200 06/12
UR 001016 I 005200 06/08
UR 001020 I 011700 06/08
UR 001022 I 005200 06/08
UR 001022 I 005200 06/12
UR 001022 I 005200 06/08
UR 001024 I 011700 06/08
UR 001026 I 005200 06/08
UR 001026 I 005200 06/12
UR 001026 I 005200 06/08
UR 001030 I 011700 06/08
UR 001032 I 005200 06/08
UR 001032 I 005200 06/12
UR 001032 I 005200 06/08
UR 001034 I 011700 06/08
UR 001036 I 005200 06/08
UR 001036 I 005200 06/12
UR 001036 I 005200 06/08
UR 001040 I 011700 06/08
UR 001042 I 005200 06/08
UR 001042 I 005200 06/12
UR 001042 I 005200 06/08
UR 001044 I 000137 06/08
UR 001046 I 002000 06/20
UR 002000 I 000000 06/08
UR 002002 I 000000 06/08
SEL 100000 03/16
HR 100170 I 100400 06/06
R0=005201 R1=000000 R2=067572 R3=176203 R4=027677 R5=111100 R6=001000 R7=002002
RS=000200
RPLY с задержкой:

SEL 100000 03/16
HR 100000 I 000400 12/20
HR 100002 I 000200 12/26
UR 000400 I 012706 12/14
UR 000402 I 001000 12/18
UR 000404 I 000137 12/14
UR 000406 I 001000 12/26
UR 001000 I 005000 12/14
UR 001002 I 005001 12/14
UR 001004 I 011700 12/14
UR 001006 I 005200 12/14
UR 001006 I 005200 12/18
UR 001006 I 005200 12/14
UR 001010 I 011700 12/14
UR 001012 I 005200 12/14
UR 001014 I 011700 12/14
UR 001014 I 011700 12/18
UR 001014 I 011700 12/14
UR 001016 I 005200 12/14
UR 001016 I 005200 12/18
UR 001016 I 005200 12/14
UR 001020 I 011700 12/14
UR 001022 I 005200 12/14
UR 001024 I 011700 12/14
UR 001024 I 011700 12/18
UR 001024 I 011700 12/14
UR 001026 I 005200 12/14
UR 001026 I 005200 12/18
UR 001026 I 005200 12/14
UR 001030 I 011700 12/14
UR 001032 I 005200 12/14
UR 001034 I 011700 12/14
UR 001034 I 011700 12/18
UR 001034 I 011700 12/14
UR 001036 I 005200 12/14
UR 001036 I 005200 12/18
UR 001036 I 005200 12/14
UR 001040 I 011700 12/14
UR 001042 I 005200 12/14
UR 001044 I 000137 12/14
UR 001044 I 000137 12/18
UR 001044 I 000137 12/14
UR 001046 I 002000 12/26
UR 002000 I 000000 12/14
UR 002002 I 000000 12/14
SEL 100000 03/16
HR 100170 I 100400 12/12
R0=000137 R1=000000 R2=067572 R3=176203 R4=027677 R5=111100 R6=001000 R7=002002
RS=000200


Не помню, мы уже проверяли команду TST R0, какая там алгоритмическая задержка ( в смысле - на сколько дольше 8 тактов занимает выполнение ) ?
Вот:

SEL 100000 03/16
HR 100000 I 000400 06/14
HR 100002 I 000200 06/20
UR 000400 I 012706 06/08
UR 000402 I 001000 06/12
UR 000404 I 000137 06/08
UR 000406 I 001000 06/20
UR 001000 I 005700 06/08
UR 001002 I 005700 06/08
UR 001004 I 005700 06/08
UR 001006 I 005700 06/08
UR 001010 I 005700 06/08
UR 001012 I 005700 06/08
UR 001014 I 005700 06/08
UR 001016 I 000240 06/08
UR 001020 I 000240 06/12
UR 001022 I 000240 06/12
UR 001024 I 000000 06/12
UR 001026 I 000000 06/08
SEL 100000 03/16
HR 100170 I 100400 06/06
R0=000137 R1=000000 R2=067572 R3=176203 R4=027677 R5=111100 R6=001000 R7=001026
RS=000200


И что насчёт команд CMP (R2)+,-(R1) и CMP -(R1),(R2)+, которые выполняются на УКНЦ за серьёзно разное время ?
Соответственно, CMP (R2)+,-(R1):

SEL 100000 03/16
HR 100000 I 000400 06/14
HR 100002 I 000200 06/20
UR 000400 I 012706 06/08
UR 000402 I 001000 06/12
UR 000404 I 000137 06/08
UR 000406 I 001000 06/20
UR 001000 I 012701 06/08
UR 001002 I 005000 06/12
UR 001004 I 012702 06/08
UR 001006 I 004000 06/12
UR 001010 I 022241 06/08
UR 001012 I 022241 06/08
UR 004000 I 177400 06/14
UR 004776 I 000377 06/12
UR 001014 I 022241 06/08
UR 004002 I 000377 06/14
UR 004774 I 177500 06/12
UR 001016 I 022241 06/08
UR 004004 I 177500 06/14
UR 004772 I 000377 06/12
UR 001020 I 022241 06/08
UR 004006 I 000377 06/14
UR 004770 I 172404 06/12
UR 001022 I 000240 06/08
UR 004010 I 177400 06/14
UR 004766 I 000377 06/12
UR 001024 I 000240 06/12
UR 001026 I 000000 06/12
UR 001030 I 000000 06/08
SEL 100000 03/16
HR 100170 I 100400 06/06
R0=000137 R1=004766 R2=004012 R3=176203 R4=027677 R5=111100 R6=001000 R7=001030
RS=000210
и CMP -(R1),(R2)+

SEL 100000 03/16
HR 100000 I 000400 06/14
HR 100002 I 000200 06/20
UR 000400 I 012706 06/08
UR 000402 I 001000 06/12
UR 000404 I 000137 06/08
UR 000406 I 001000 06/20
UR 001000 I 012701 06/08
UR 001002 I 005000 06/12
UR 001004 I 012702 06/08
UR 001006 I 004000 06/12
UR 001010 I 024122 06/08
UR 001012 I 024122 06/08
UR 004776 I 000377 06/12
UR 004000 I 177400 06/12
UR 001014 I 024122 06/08
UR 004774 I 177500 06/12
UR 004002 I 000377 06/12
UR 001016 I 024122 06/08
UR 004772 I 000377 06/12
UR 004004 I 177500 06/12
UR 001020 I 024122 06/08
UR 004770 I 172404 06/12
UR 004006 I 000377 06/12
UR 001022 I 000240 06/08
UR 004766 I 000377 06/12
UR 004010 I 177400 06/12
UR 001024 I 000240 06/12
UR 001026 I 000000 06/12
UR 001030 I 000000 06/08
SEL 100000 03/16
HR 100170 I 100400 06/06
R0=000137 R1=004766 R2=004012 R3=176203 R4=027677 R5=111100 R6=001000 R7=001030
RS=000201

Patron
29.12.2013, 23:53
В ходе эмуляции контроллера КМД ( MY ) выяснилось, что программа тестирования КМД: TESTMY.SAV содержит ошибку.

Дорожка для проведения операций при каждом прогоне циклического теста выбирается "случайным" образом в диапазоне 0..79, но авторы программы (похоже) не учли, что некторые из тестов читают/пишут по 4 дорожки подряд.

В результате, при зацикливании функционального теста, начиная с 28-го прохода цикла тестирования - программа даёт контроллеру нереальные задания ( вроде: прочитать 64 сектора, начиная с 10-го сектора 79-й дорожки ), в результате чего головка дисковода выезжает на неформатированную часть диска и контроллер сообщает об ошибке: "Не найден адресный маркер".



Т Е С Т К М Д И Н Г М Д

УСТАНОВКА ПАРАМЕТРОВ
ФОРМАТИРОВАНИЕ
--->+ФУНКЦИОНАЛЬНЫЙ ТЕСТ
ЗАПИСЬ
ЧТЕНИЕ
ВЫБОР УСТРОЙСТВА



-----------------------------------------------------------------------------
ТЕСТ САМОДИАГНОСТИКИ.
ВЫБОР ДОРОЖКИ.
ЧТЕНИЕ ЗАГОЛОВКА.
ЗАПИСЬ. ОШИБКА.ESR=1640
ЧТЕНИЕ. ОШИБКА.ESR=1640
ЧТЕНИЕ ДОРОЖКИ. ОШИБКА.ESR=11600
ЗАПИСЬ С МЕТКОЙ. ОШИБКА.ESR=1740
ЧТЕНИЕ С МЕТКОЙ. ОШИБКА.ESR=1740
ОТРАБОТКА IE. ПРОХОД 35

Alex_K
30.12.2013, 00:57
В ходе эмуляции контроллера КМД ( MY ) выяснилось, что программа тестирования КМД: TESTMY.SAV содержит ошибку.

Дорожка для проведения операций при каждом прогоне циклического теста выбирается "случайным" образом в диапазоне 0..79, но авторы программы (похоже) не учли, что некторые из тестов читают/пишут по 4 дорожки подряд.

В результате, при зацикливании функционального теста, начиная с 28-го прохода цикла тестирования - программа даёт контроллеру нереальные задания ( вроде: прочитать 64 сектора, начиная с 10-го сектора 79-й дорожки ), в результате чего головка дисковода выезжает на неформатированную часть диска и контроллер сообщает об ошибке: "Не найден адресный маркер".
Проверил в эмуляторе UKNCBTL. Также есть такое и в TESTMZ.SAV. Что там за задание дают, сказать не могу, но ошибка с кодом 102 иногда выскакивает. И не на 28-м проходе, а может на 4-м, 8-м, ну т.д. И после этого функционального теста оказывается испорчена операционная система в памяти. При выходе в RT-11 вместо промптера вываливается в пультовый отладчик, перезапуск по нулевому адресу не помогает.

---------- Post added at 00:28 ---------- Previous post was at 00:27 ----------

P.S. Patron, когда ждать эмулятор ДВК с КМД?

---------- Post added at 00:57 ---------- Previous post was at 00:28 ----------

Похоже все же ошибочка в эмуляторе. Редко возникает при последовательном чтении секторов. Так что может быть TESTMZ и в порядке.

Titus
30.12.2013, 01:06
Похоже все же ошибочка в эмуляторе. Редко возникает при последовательном чтении секторов. Так что может быть TESTMZ и в порядке.

Проверьте за компанию на EmuStudio)

Patron
30.12.2013, 01:08
когда ждать эмулятор ДВК с КМД?По сути всё готово, но надо ещё решить, что писать на системный диск для загрузки ДВК-1 с MY-80.

Пока собрал что-то такое:


Volume ID: RT-11 V05.04
Owner : MY-80
RT11SJ.SYS 78 16-Dec-2012 14 SWAP .SYS 30 25-Mar-2003 92
SL .SYS 10 28-Dec-1987 122 EM .SYS 4 04-Mar-2012 132
TT .SYS 2 23-Jan-1980 136 LD .SYS 8 18-Jan-1988 138
LP .SYS 2 19-Dec-1988 146 MY .SYS 3 07-Dec-1989 148
STARTS.COM 1 27-Dec-2013 151 UCL .SAV 16 18-Jan-1988 152
UCL .DAT 9 04-Dec-2011 168 DIR .SAV 19 04-Jul-2002 177
PIP .SAV 30 31-Oct-1998 196 DAY .SAV 4 13-Apr-2013 226
DUMP .SAV 9 27-Dec-1983 230 RESORC.SAV 25 01-Mar-2012 239
DUP .SAV 45 27-Dec-1983 264 BINCOM.SAV 24 18-Jan-1988 309
DESS .SAV 20 04-Nov-1993 333 EDIK .SAV 22 19-Mar-2003 353
HAND .SAV 8 08-Nov-2011 375 BASIC .SAV 56 12-Sep-2011 383
MACRO .SAV 63 21-Dec-2012 439 LINK .SAV 59 31-Oct-1998 502
SYSMAC.SML 92 31-Oct-1998 561 XONIX .SAV 13 01-Sep-1992 653
SPEED .SAV 3 28-Nov-1992 666 TETRIS.SAV 28 04-Apr-1985 669
KLOP .SAV 13 21-Nov-1988 697 TESTMY.SAV 16 27-Dec-1988 710
< UNUSED > 874 726
30 Files, 712 Blocks
874 Free blocks

Alex_K
30.12.2013, 01:11
Проверьте за компанию на EmuStudio)
Уже сегодня, но ближе к вечеру.
Раз уж есть схема 1801ВП1-128, так уж и эмуляцию нормальную можно сделать.

---------- Post added at 01:11 ---------- Previous post was at 01:08 ----------


По сути всё готово, но надо ещё решить, что писать на системный диск для загрузки ДВК-1 с MY-80.
Да уж главное, чтобы с диска загрузиться. А hobot насоздает, того что надо. Места на MY значительно больше, чем на MX, найдется, чего записать.

Titus
30.12.2013, 01:35
Уже сегодня, но ближе к вечеру.
Раз уж есть схема 1801ВП1-128, так уж и эмуляцию нормальную можно сделать.
Это да.
Но желательно не запрягать телегу впереди лошади. Пока нет нормальных схем чипсета УКНЦ и ВМ2, переферия типа дисковода, которая, тем более в очень незначительной мере влияет на совместимость, не так интересна для точной эмуляции.

hobot
30.12.2013, 02:38
По сути всё готово, но надо ещё решить, что писать на системный диск для загрузки ДВК-1 с MY-80.
Там обязательно должны быть две отдельных готовых дискеты (образа) для HX сервера для СТЫКА С2 и СА? Так ведь? И ещё просто системная дискетка
(систему конечно с поддержкой календаря!!!). Вместо TESTMY.SAV может есть
на ДВК чем форматировать дискеты, кроме неё? Никогда не использовал (так-же как и TESTMZ.SAV и UKFORM.SAV) - всегда всё MZFORM форматировал и всегда всё работало !!! )

Вот россыпь утилит которые на систему можно добавить:


Image : RT11A.dsk

Format : DSK
Size : 800 Kb

Volume ID: RT11A
Owner :

File Blocks Date Bytes
---------- ------ ----------- ----------
RS .SYS 26 13-Sep-1994 13'312
DESS19.SAV 19 04-Mar-1994 9'728
NYS .SAV 22 22-Oct-1993 11'264
TTY .SAV 3 25-Jan-1991 1'536
LAT .SAV 2 16-Oct-1994 1'024
RUS .SAV 2 16-Oct-1994 1'024
COD .SAV 2 27-Oct-1987 1'024
STALK .SAV 49 23-Jan-1992 25'088
SPACEM.SAV 33 30-Apr-1979 16'896
DS .SAV 8 26-Mar-1994 4'096
RSGUID.TXT 78 13-Sep-1994 39'936
TESTPU.LST 14 18-May-1988 7'168
NYS .HLP 23 15-Apr-1980 11'776
TTINQ .MAC 11 18-May-2013 5'632
CLRL .SAV 2 25-Dec-2013 1'024
CLRL .MAC 1 25-Dec-2013 512
TTINQ .SAV 4 18-May-2013 2'048
SHM .SAV 4 07-Nov-1992 2'048
SYS .SAV 3 30-May-1979 1'536
SHKEYS.SAV 5 23-Sep-2013 2'560
< UNUSED > 1275 652'800
---------- ------ ----------- ----------
20 Files, 311 Blocks
1275 Free blocks

И может быть отдельно ещё РАФОС с поддержкой работы с плёнкой отдельно приложить! ) На 800кб образе с MY-драйвером.
Т.к. графические платы пока не эмулируются с ADOS связываться
так же смысла мало )


А hobot насоздает, того что надо.
[hobot] - застрял на PM.SYS - это уникальнейший Prompt Manager )))

Alex_K
30.12.2013, 18:53
Проверьте за компанию на EmuStudio)
Проверил. Последовательное чтение секторов идет нормально, без ошибок. На функциональном тесте ошибки есть, начиная где-то с 40+ прохода, в консольном окне пишется "Wrong track: 80". Так что ошибка в функциональном тесте имеет место быть, как и в TESTMY.SAV.

Titus
30.12.2013, 22:11
На функциональном тесте ошибки есть, начиная где-то с 40+ прохода, в консольном окне пишется "Wrong track: 80". Так что ошибка в функциональном тесте имеет место быть, как и в TESTMY.SAV.
Если так пишет, значит залез на 80-й трек, а там ничего нет.

vmp
01.01.2014, 17:14
Раз уж есть схема 1801ВП1-128, так уж и эмуляцию нормальную можно сделать.
Там в последних прошивках КМД можно было заставить процессор КМД выполнять код, лежащий в ОЗУ основного процессора. Я этим пользовался для записи защищенных от копирования дискет.
https://groups.google.com/d/msg/fido7.mo.dec/8maPi71f_WI/1GIr7YgIUdwJ

Alex_K
01.01.2014, 17:37
Там в последних прошивках КМД можно было заставить процессор КМД выполнять код, лежащий в ОЗУ основного процессора. Я этим пользовался для записи защищенных от копирования дискет.
https://groups.google.com/d/msg/fido7.mo.dec/8maPi71f_WI/1GIr7YgIUdwJ
Да, я это уже попробовал (http://zx.pk.ru/showpost.php?p=657382&postcount=249) в эмуляторе ДВК от Patron. Да и все прошивки дизассемблированы и разобраны. Собственно их всего две: старая -091, которая много чего не умела, да и ошибки там были, и новые -092 и -255, отличались только размером памяти и ее инициализацией.

Patron
01.01.2014, 21:26
Судя по тесту, выполняемому КМД в технологическом режиме - когда процессор КМД выполняет команду RESET - регистр статуса КМД ( 177100 на шине КМД ) полностью обнуляется.

Чтобы в обычном режиме делать то же самое без сброса ВП1-128 - КМД приходится дважды записывать ноль в регистр статуса - один раз через шину КМД и один раз через шину ДВК.

Alex_K
01.01.2014, 21:48
Судя по тесту, выполняемому КМД в технологическом режиме - когда процессор КМД выполняет команду RESET - регистр статуса КМД ( 177100 на шине КМД ) полностью обнуляется.
Об этом мы точно узнаем, если вскроют 1801ВП1-095 и 1801ВП1-096. Информации по этим чипам нет никакой, можно только гадать.

Чтобы в обычном режиме делать то же самое без сброса ВП1-128 - КМД приходится дважды записывать ноль в регистр статуса - один раз через шину КМД и один раз через шину ДВК.
А обнуление идет с двух сторон потому, что биты, доступные по записи со стороны вычислителя, доступны только по чтению со стороны КМД. Ну и наоборот.

А команда RESET применяется для очистки регистра 177130 1801ВП1-128. По сигналу INIT там очищаются все биты РСН по записи (с 0 до 10). Также очищаются биты по чтению 7(TR) и 14(CRC).

Patron
01.01.2014, 22:18
А команда RESET применяется для очистки регистра 0177130 1801ВП1-128.Дело в том, что до RESET в регистр статуса 0177100 пишется 0177777, после чего его содержимое проверяется на равенство 0100200 и при отличии тест засчитывает ошибку, а после RESET начинается новый цикл тестирования и там уже ошибочным считается ненулевое значение в регистре статуса.

Поэтому, если по RESET не проводить полное обнуление регистра статуса - тест засчитывает ошибку.

Alex_K
01.01.2014, 22:37
Дело в том, что до RESET в регистр статуса 0177100 пишется 0177777, после чего его содержимое проверяется на равенство 0100200 и при отличии тест засчитывает ошибку, а после RESET начинается новый цикл тестирования и там уже ошибочным считается ненулевое значение в регистре статуса.

Поэтому, если по RESET не проводить полное обнуление регистра статуса - тест засчитывает ошибку.
Да, только там пишется 177737 (без бита DONE). А так действительно он там не обнуляется, так что RESET тоже обнуляет его, хотя может и не все биты.

Patron
02.01.2014, 18:10
В описании КМД прямо говорится, что бит требования в регистре статуса КМД очищается при любом обращении к регистру данных - и при чтении, и при записи.

Если это так - КМД не может отличить чтение и запись регистра данных, что должно проявляться при "ручной" загрузке с MY.

После ввода команды 37 ( Load ) в регистр статуса - КМД выполняет такой код:



003006 [000004] BIT #32., (R2) ; 003010:000040 -> 177100:000037
003012 [000004] BEQ 003076

003076 [000004] MOV (R2), R5 ; 177100:000037 -> R5 :000000
003100 [000000] BIT #16384., R5 ; 003102:040000 -> R5 :000037
003104 [000004] BEQ 003112

003112 [000004] BICB #224., R5 ; 003114: 340 -> R5 : 037
003116 [000000] CMPB #21., R5 ; 003120: 025 -> R5 : 037
003122 [000011] BNE 003130

003130 [000011] CMPB #19., R5 ; 003132: 023 -> R5 : 037
003134 [000011] BNE 003152

003152 [000011] MOV #128., (R2) ; 003154:000200 -> 177100:000037


Если успеть прочитать регистр данных КМД в пульте ДВК до того, как в регистре статуса КМД будет установлен бит требования 0200 - КМД дождётся записи номера привода в регистр данных. Если же запоздать - чтение содержимого регистра данных при его открытии в пульте ДВК ( судя по описанию КМД ) будет воспринято, как запись номера загружаемого привода в регистр данных.

Но как пульт ДВК может успеть, если даже при нажатии <ПС> - перед тем, как прочитать и вывести на терминал содержимое регистра данных КМД - пульт ДВК выводит на терминал его адрес ( на скорости 9600 это занимает 7 мс, значит процессор КМД за это время выполнит 28000 тактов ).


Следовательно - одно из двух:

1. Или бит требования в регистре статуса КМД сбрасывается только при записи в регистр данных.

2. Или указанная в описании КМД последовательность "ручной" загрузки годится только для загрузки с нулевого привода.


http://s5.hostingkartinok.com/uploads/images/2014/01/9186b736934b5679bc856e46f62a9ccc.jpg

Alex_K
02.01.2014, 18:24
В описании КМД прямо говорится, что бит требования в регистре статуса КМД очищается при любом обращении к регистру данных - и при чтении, и при записи. ......
Я тоже когда-то задумывался над этим, и тоже не мог понять, как таким образом можно загрузиться. Но увы, ответ на вопрос поможет дать только "взлом" 1801ВП1-095 и 1801ВП1-096. Никакой дополнительной информации по этим чипам нет, так что можно только гадать.

Patron
02.01.2014, 18:31
увы, ответ на вопрос поможет дать только "взлом" 1801ВП1-095 и 1801ВП1-096Ещё ответ может дать любой, кто хоть раз грузился "вручную" с ненулевого привода MY.

Когда при простом открытии регистра данных КМД в пульте - вдруг запускается мотор дисковода, а головка нулевого привода начинает ездить туда-сюда - это настолько противоречит интуитивным ожиданиям, что должно запоминаться надолго.

Alex_K
02.01.2014, 18:49
Ещё ответ может дать любой, кто хоть раз грузился "вручную" с ненулевого привода MY.

Когда при простом открытии регистра данных КМД в пульте - вдруг запускается мотор дисковода, а головка нулевого привода начинает ездить туда-сюда - это настолько противоречит интуитивным ожиданиям, что должно запоминаться надолго.
Ну если кто-то из реальных владельцев ДВК с КМД это прочтет и попробует. После этого ответит на вопрос, пошла загрузка при чтении 172142, или нет.

Patron
02.01.2014, 19:07
Ну если кто-то из реальных владельцев ДВК с КМД это прочтет и попробует. После этого ответит на вопрос, пошла загрузка при чтении 172142, или нет.Тут даже дисковод не нужен, ведь сброс бита 200 вызывается выставлением на шину адреса регистра данных. Достаточно ввести команду 37, потом убедиться, что содержимое регистра статуса изменилось на 200, а потом нажать <ПС> и <^>. Если после этого в регистре статуса уже не будет 200 - значит чтение регистра данных действительно работает в КМД точно так же, как и запись в регистр данных.

MM
02.01.2014, 21:02
Может, в РЕ2-134-й посмотреть можно ? Это ПЗУ на 0 адрес от МС1201.03-04.

Patron
05.01.2014, 18:22
Моя программа вывода надписи из КМД и проверки некоторых регистровА вот что anonymous пишет в теме "Контроллер КМД / ДВК (http://bk0010.org/forum/?id=2205)":



Patron, можно тесты под MY сделать и исследовать его работу в тонкостях. Команда 035 позволяет запускать свой программный код на процессоре ВМ1 в составе MY.
Типа, можно сделать архив с исходником и SAV-файлом теста, прицепить тут к сообщению, а там выложить ссылку.

Alex_K
05.01.2014, 19:34
А вот что anonymous пишет в теме "Контроллер КМД / ДВК (http://bk0010.org/forum/?id=2205)":
Я тоже это читаю и слежу за этим. Получается, что сброс бита готовности в регистре статуса происходит только при записи в регистр данных со стороны вычислителя.

Типа, можно сделать архив с исходником и SAV-файлом теста, прицепить тут к сообщению, а там выложить ссылку.
Можно. Проверка идет присутствия адреса 160000, 177564 и 177566. Если присутствует 177564, то пробуется вывестись строка на экран. Проверка происходит при адресах "окна" 3 и 377. По идее на МС1201.01 тесты при разных адресах "окон" должны отработать одинаково.
Ссылка на архив на zx.pk.ru (http://zx.pk.ru/attachment.php?attachmentid=44872&d=1388935840) и на pisem.net (http://kisly-alexey.pisem.net/TSTKMD/tskmd1.zip).

Patron
06.01.2014, 00:02
В описании КМД указано, что "адресация к регистрам СЛОВНАЯ", в смысле - к ним нельзя обращаться в циклах DATOB и DATIOB.
А что будет, если на 1801ВМ1 сделать ( например ) MOVB #1,@#172140 - Trap_To_04 ?

Или в регистры КМД нельзя только по нечётным адресам MOVB делать ?

Alex_K
06.01.2014, 00:30
В описании КМД указано, что "адресация к регистрам СЛОВНАЯ", в смысле - к ним нельзя обращаться в циклах DATOB и DATIOB.
А что будет, если на 1801ВМ1 сделать ( например ) MOVB #1,@#172140 - Trap_To_04 ?

Или в регистры КМД нельзя только по нечётным адресам MOVB делать ?
Это значит, что сигнал WTBT не обрабатывается. Во всяком случае у 1801ВМ2 в случае байтовой записи неиспользуемый байт передается как ноль, и в случае применения байтовой команды в устройство пойдет либо младший, либо старший нулевой байт.

Patron
06.01.2014, 02:05
Это значит, что сигнал WTBT не обрабатывается.Наверное, со стороны шины КМД сигнал WTBT тоже не обрабатывается.

Alex_K
06.01.2014, 12:07
Наверное, со стороны шины КМД сигнал WTBT тоже не обрабатывается.
Сигнал WTBT не отрабатывается при обращении к регистрам статуса и данных как со стороны вычислителя, так и со стороны КМД. А вот при обращении в "окно" обработка сигнала идет, если идет байтовая запись в "окно", то сигнал WTBT с шины КМД перетранслируется на шину вычислителя.
Кстати необработкой сигнала WTBT страдают многие внешние устройства. Например его не обрабатывают 1801ВП1-035, 1801ВП1-065, рассмотренная 1801ВП1-128, в УКНЦ 1801ВП1-120. Кстати, в УКНЦ есть регистры адреса/данных со стороны ЦП 176640/176642. При обращении в регистр адреса 176640 обработка WTBT не идет и при байтовой записи в него неиспользуемый байт оказывается нулевым. А вот регистр данных 176642 сигнал WTBT обрабатывает нормально.

Patron
06.01.2014, 14:38
Кстати необработкой сигнала WTBT страдают многие внешние устройства. Например его не обрабатывают 1801ВП1-035, 1801ВП1-065, рассмотренная 1801ВП1-128, в УКНЦ 1801ВП1-120.Значит, эмуляцию ВП1-128 мне тоже надо подкорректировать.

Оказалось, что даже в дековском стандарте Q-Bus не указано, как именно выставляются на шину записываемые байты - всегда в младшем байте слова данных ( т.е. с байтовой адресаций ) или при A0 = 1 в старшем байте слова данных, а при A0 = 0 - в младшем байте.

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

Alex_K
06.01.2014, 14:43
Оказалось, что даже в дековском стандарте Q-Bus не указано, как именно выставляются на шину записываемые байты - всегда в младшем байте слова данных ( т.е. с байтовой адресаций ) или при A0 = 1 в старшем байте слова данных, а при A0 = 0 - в младшем байте.

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

bigral
06.01.2014, 16:07
Оказалось, что даже в дековском стандарте Q-Bus не указано, как именно выставляются на шину записываемые байты - всегда в младшем байте слова данных ( т.е. с байтовой адресаций ) или при A0 = 1 в старшем байте слова данных, а при A0 = 0 - в младшем байте.


http://en.wikipedia.org/wiki/Q-Bus


Byte addressing means that the physical address passed on the Unibus was interpreted as the address of a byte-sized quantity of data. Because the bus actually contained a data path that was two bytes wide, address bit [0] was subject to special interpretation and data on the bus had to travel in the correct byte lanes.

Адресацию с точностью до байта означает, что минимальной адресуемой единицей на шине является 8-ми битный байт. Поскольку шина 16-битная и содержит два байта, то адресная линия AD0 используется специальным образом — для указания старшего или младшего адресуемого байта. Все 16-битные операции (операции со словом) могут обращаться только по чётным адресам, а 16-битная операция по нечетному адресу вызывает прерывание особого вида (ошибка шины). Существует специальная линия — WTBT (на МПИ — БАЙТ или ПЗП) обозначающая что происходит операция записи байта. Операция чтения на шине всегда происходит пословно по четному адресу (AD0=0) и ненужный байт просто отбрасывается.

Patron
06.01.2014, 16:24
Адресацию с точностью до байта означает, что минимальной адресуемой единицей на шине является 8-ми битный байт. Поскольку шина 16-битная и содержит два байта, то адресная линия AD0 используется специальным образом — для указания старшего или младшего адресуемого байта.Прочтя такое не каждый поймёт, что в стандарте Q-Bus линия A0 не является адресной. Ведь даже если выставить на шину нечётный "адрес" - младший байт слова данных всегда будет "проецироваться" на чётный адрес.

bigral
06.01.2014, 16:34
Ведь даже если выставить на шину нечётный "адрес" - младший байт слова данных всегда будет "проецироваться" на чётный адрес.

:) вот язык гуру мне никак не понять, чтоли на english переходить надо??? как это интерпретировать? если выставить слово на нечетный адрес то будет trap4 о каком "проецировании" речь?

Patron
06.01.2014, 16:44
если выставить слово на нечетный адрес то будет trap4 о каком "проецировании" речь?Это не имеет прямого отношения к стандарту Q-Bus.

Суть же в том, что работая только с линиями D0..D7 - по Q-Bus невозможно ни прочитать, ни записать нечётный байт. Если бы у Q-Bus была возможна байтовая адресация - на эту шину можно было бы посадить 8-разрядный процессор, использующий для приёма/передачи данных только линии D0..D7. Но в том и дело, что адресация на Q-Bus исключительно и только словная, а линия A0 используется не как адресная, а как индексная - для передачи смещения к байту в слове данных, передаваемом по линиям D0..D15.

SKcorp.
06.01.2014, 22:38
Ну если кто-то из реальных владельцев ДВК с КМД это прочтет и попробует. После этого ответит на вопрос, пошла загрузка при чтении 172142, или нет.

Нет.
После записи 0 включается мотор привода и диод. Потом диод гаснет.

PS: На -091 прошивке tskmd1.sav пишет: "pODPROGRAMMA W kmd NE ZAPU]ENA".

Alex_K
06.01.2014, 23:03
PS: На -091 прошивке tskmd1.sav пишет: "pODPROGRAMMA W kmd NE ZAPU]ENA".
А на -091 прошивке функции запуска подпрограмм в "окне" нет, поэтому все правильно пишет. Т.к. контроллер с 1809РУ1, то лучше туда поставить неофициальную прошивку -093. Эта та же -092 или -255, только сделанная для 1809РУ1.

---------- Post added at 23:03 ---------- Previous post was at 23:02 ----------

P.S. А что за терминал, который не обрабатывает коды переключения на русский и латинский алфавиты?

SKcorp.
06.01.2014, 23:20
А на -091 прошивке функции запуска подпрограмм в "окне" нет, поэтому все правильно пишет. Т.к. контроллер с 1809РУ1, то лучше туда поставить неофициальную прошивку -093. Эта та же -092 или -255, только сделанная для 1809РУ1.

---------- Post added at 23:03 ---------- Previous post was at 23:02 ----------

P.S. А что за терминал, который не обрабатывает коды переключения на русский и латинский алфавиты?

Чем она (-093) лучше?

Терминал 15ИЭ-00-013:

http://bk0010.spb.ru/PHOTO/NEBK/2/PICT0030.JPG

Alex_K
06.01.2014, 23:32
Чем она (-093) лучше?
Исправлены ошибки и добавлены новые функции.

Терминал 15ИЭ-00-013:
Ясно. Терминал надо перевести в режим отображения маленьких латинских и русских букв.

SKcorp.
06.01.2014, 23:55
Исправлены ошибки и добавлены новые функции.

Какие ошибки и какие функции?
Просто смысл курочить живую железку, которая выполняет свои функции.



Ясно. Терминал надо перевести в режим отображения маленьких латинских и русских букв.

Как?

Alex_K
06.01.2014, 23:59
Как?
Попробуйте поиграться настройками в служебной строке. И сколько микросхем ПЗУ на плате ПЗУ в 15ИЭ - пять или шесть?

SKcorp.
07.01.2014, 00:01
Попробуйте поиграться настройками в служебной строке. И сколько микросхем ПЗУ на плате ПЗУ в 15ИЭ - пять или шесть?

6.

Alex_K
07.01.2014, 00:04
Какие ошибки и какие функции?
Просто смысл курочить живую железку, которая выполняет свои функции.
Новые функции - запуск подпрограммы пользователя, перенос блоков памяти, форматирование дорожки в формате IBM, работа с односторонними накопителями. Из серьезных ошибок, что я помню - может работать с дискетами, отформатированными на PC (с индексными маркерами) и блок параметров может находится в любом месте памяти, а не только в первых 64К (могут быть проблемы с RT11XM и RSX-11M, Unix-подобными).
А так да, и -091 выполняет свои основные функции.

SKcorp.
07.01.2014, 00:13
Новые функции - запуск подпрограммы пользователя, перенос блоков памяти, форматирование дорожки в формате IBM, работа с односторонними накопителями. Из серьезных ошибок, что я помню - может работать с дискетами, отформатированными на PC (с индексными маркерами) и блок параметров может находится в любом месте памяти, а не только в первых 64К (могут быть проблемы с RT11XM и RSX-11M, Unix-подобными).
А так да, и -091 выполняет свои основные функции.

Ну это не стоит того, чтобы выпаивать ПЗУ, искать РР1 и программатор.

Дискету отформатированную на PC в формате MY - читает и так.
А XM и прочие на ДВК-2 явно и так не пойдут.

Vslav
07.01.2014, 00:38
Ну это не стоит того, чтобы выпаивать ПЗУ, искать РР1 и программатор.

"Обижаишь, дарагой. Зачэм гризли? Застрэлылы!" (c)
Не хочу показаться нескромным, но РЕ-мулятор отлично решает эту проблему. Перепрограммируется по СOM-порту прямо в системе, потом автоматически ее сбрасывает. Вести с ним разработку софта - одно удовольствие. Скомпилировали, залили, авторестарт, посмотрели результат - следующая итерация. Никаких лишних телодвижений с панельками, программаторами и прочим. Не говоря уж е что число итераций только условно ограничено 100К (сравним с 20 для РР1). При желании еще и нужную диагностику в COM отсылать можно.

MM
07.01.2014, 00:38
Спрошу уважаемого SKcorp :
Если на ДВК3-4 загрузить в VM: ОС RT-11 и запустить ее, а потом попытаться скопировать командой .COPY/DEV/ST:0/END:1 VM: MY0: - операция завершится успешно или с ошибкой - оччень хитрый вопрос, кстати...

SKcorp.
07.01.2014, 00:53
"Обижаишь, дарагой. Зачэм гризли? Застрэлылы!" (c)
Не хочу показаться нескромным, но РЕ-мулятор отлично решает эту проблему. Перепрограммируется по СOM-порту прямо в системе, потом автоматически ее сбрасывает. Вести с ним разработку софта - одно удовольствие. Скомпилировали, залили, авторестарт, посмотрели результат - следующая итерация. Никаких лишних телодвижений с панельками, программаторами и прочим. Не говоря уж е что число итераций только условно ограничено 100К (сравним с 20 для РР1). При желании еще и нужную диагностику в COM отсылать можно.

У меня коллекция железа, а не эмуляторов, пускай и хардварных.
Да и единственный живой MY я трогать не буду, пока он живой.
Ибо наконец-то собрал машину с MX+MY.

---------- Post added at 23:53 ---------- Previous post was at 23:49 ----------


Спрошу уважаемого SKcorp :
Если на ДВК3-4 загрузить в VM: ОС RT-11 и запустить ее, а потом попытаться скопировать командой .COPY/DEV/ST:0/END:1 VM: MY0: - операция завершится успешно или с ошибкой - оччень хитрый вопрос, кстати...

А вот с этим облом, ибо единственная живая сейчас машина - это ДВК-2М с МС1201.02, а туда никакой VM: не влезет.

Alex_K
07.01.2014, 00:58
... ибо единственная живая сейчас машина - это ДВК-2М с МС1201.02 ...
Замечательно, тем более с MY. SKcorp., надеюсь сможете в будущем запустить некоторые тесты, связанные с HALT-режимом 1801ВМ2 и архитектурой МС1201.02?

SKcorp.
07.01.2014, 01:14
Замечательно, тем более с MY. SKcorp., надеюсь сможете в будущем запустить некоторые тесты, связанные с HALT-режимом 1801ВМ2 и архитектурой МС1201.02?

Машина у меня в доступе до конца праздников. Потом будет убрана, ибо места нет. Сейчас это все посередине комнаты, а ГМД-7012 в коридоре, ибо шнурка к нему нет, а пассики к нему склеил только сегодня.

Вот как это все сейчас выглядит. На фото еще нет блока дисководов MY.

http://bk0010.spb.ru/PHOTO/NEBK/2/PICT0028.JPG