Важная информация

User Tag List

Страница 21 из 30 ПерваяПервая ... 171819202122232425 ... ПоследняяПоследняя
Показано с 201 по 210 из 296

Тема: PDP-11 и всё всё всё :)

  1. #201
    Guru
    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,002
    Спасибо Благодарностей отдано 
    287
    Спасибо Благодарностей получено 
    631
    Поблагодарили
    531 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ок, посмотрю, но когда получится - наверняка не скажу. Точнее так - в выходные - да, а вот до выходных получится или нет..

  2. #202
    Guru
    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,210
    Спасибо Благодарностей отдано 
    346
    Спасибо Благодарностей получено 
    608
    Поблагодарили
    400 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от vva Посмотреть сообщение
    у F77 деление командой DIVD, у С - DIVF
    В FPP команды одинарной и двойной точности имеют один и тот же код. Перед их использованием нужно указать точность с помощью команд SETF или SETD.

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

    Цитата Сообщение от vva Посмотреть сообщение
    То есть С работает с фортрановским real*4, хотя указан double и резервируется именно 8 байт на переменную.
    Как в С включить работу с double я не нашел.
    Если вы про DECUS C, то он с FPP работает в режиме двойной точности, в библиотеке она устанавливается командой SETD (170011). При работе с переменными одинарной точности происходит загрузка и сохранение регистров с преобразованием точности. В качестве примера небольшая программка и полученный результат на ассемблере:
    Код:
    float  a1,a2,a3;
    double b1,b2,b3;
    int main()
    {
     a1=1; a2=2; a3=a1/a2;
     b1=1; b2=2; b3=b1/b2;
    }
    Код:
    .comm    _a1,4
    .comm    _a2,4
    .comm    _a3,4
    .comm    _b1,10
    .comm    _b2,10
    .comm    _b3,10
    .globl    _main
    .text
    _main:
    ~~main:
    jsr    r5,csv~
    movf    $40200,r0
    movfo    r0,_a1
    movf    $40400,r0
    movfo    r0,_a2
    movof    _a1,r0
    movof    _a2,r1
    divf    r1,r0
    movfo    r0,_a3
    movf    $40200,r0
    movf    r0,_b1
    movf    $40400,r0
    movf    r0,_b2
    movf    _b1,r0
    divf    _b2,r0
    movf    r0,_b3
    jmp    cret~
    .globl    fpin~~
    .globl    fppr~~
    .globl    fpem~~

  3. Этот пользователь поблагодарил Alex_K за это полезное сообщение:

    vva (17.05.2023)

  4. #203
    Member
    Регистрация
    16.07.2021
    Адрес
    г. Черкесск
    Сообщений
    89
    Спасибо Благодарностей отдано 
    37
    Спасибо Благодарностей получено 
    10
    Поблагодарили
    8 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    В FPP команды одинарной и двойной точности имеют один и тот же код. Перед их использованием нужно указать точность с помощью команд SETF или SETD.
    Уже разобрался (ранее ориентировался только на код, генерируемый компилятором). Вывод, сделанный ранее про PDP-11 C V1.2-006 был неверен, идет работа с double:
    #include <stdio.h>

    #define N 20

    int main()
    {
    int i;
    static double o1, o2, v1, v2, v3, v4;

    for(i=0; i<N; i++)
    {
    o1=i+1; o2=o1; v1=o1+o2; v2=o1-o2;
    v3=o1*o2; v4=o1/o2;
    }
    }

    .TITLE TOP8NP
    .IDENT /V1.0 /

    .PSECT $CODEI,RO,I,LCL,REL,CON
    $CODEI:

    .PSECT $READW,RW,D,GBL,REL,CON,SAV
    $READW:
    .BLKB 8. ; o1
    .BLKB 8. ; o2
    .BLKB 8. ; v1
    .BLKB 8. ; v2
    .BLKB 8. ; v3
    .BLKB 8. ; v4

    .GLOBL C$SVFR,C$MAI

    .PSECT $CODEI

    MAIN:: ; main
    CALL C$SVFR ; 227
    CLR R4 ; 232 i
    BR 2$
    1$: MOV R4,R5 ; 234 i,
    INC R5
    SETD
    SETI
    LDCIF R5,F3
    STF F3,$READW+0 ; ,o1
    LDF $READW+0,F3 ; o1,
    STF F3,$READW+8. ; ,o2
    LDF $READW+0,F3 ; o1,
    ADDF $READW+8.,F3 ; o2,
    STF F3,$READW+16. ; ,v1
    LDF $READW+0,F3 ; o1,
    SUBF $READW+8.,F3 ; o2,
    STF F3,$READW+24. ; ,v2
    LDF $READW+0,F3 ; 235 o1,
    MULF $READW+8.,F3 ; o2,
    STF F3,$READW+32. ; ,v3
    LDF $READW+0,F3 ; o1,
    DIVF $READW+8.,F3 ; o2,
    STF F3,$READW+40. ; ,v4
    INC R4 ; 232 i
    2$: CMP R4,#20. ; i,
    BLT 1$
    RETURN
    .END

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

    Цитата Сообщение от Alex_K Посмотреть сообщение
    float a1,a2,a3;
    double b1,b2,b3;
    int main()
    {
    a1=1; a2=2; a3=a1/a2;
    b1=1; b2=2; b3=b1/b2;
    }
    Эта програмка на PDP-11 C выглядит нагляднее:

    .PSECT $CODEI,RO,I,LCL,REL,CON
    $CODEI:
    .PSECT $READW,RW,D,GBL,REL,CON,SAV
    $READW:
    A1:: .BLKB 4 ; a1
    A2:: .BLKB 4 ; a2
    A3:: .BLKB 4 ; a3
    B1:: .BLKB 8. ; b1
    B2:: .BLKB 8. ; b2
    B3:: .BLKB 8. ; b3

    .GLOBL C$SVFP,C$MAI
    .PSECT $CONST,RO,D,LCL,REL,CON
    $CONST:
    .FLT4 2.
    .FLT4 1.
    .FLT2 2.
    .FLT2 1.

    .PSECT $CODEI
    MAIN:: ; main
    CALL C$SVFP ; 228
    SETF ; 230
    LDF $CONST+20.,F3
    STF F3,A1 ; ,a1
    LDF $CONST+16.,F3
    STF F3,A2 ; ,a2
    LDF A1,F3 ; a1,
    DIVF A2,F3 ; a2,
    STF F3,A3 ; ,a3
    SETD ; 231
    LDF $CONST+8.,F3
    STF F3,B1 ; ,b1
    LDF $CONST+0,F3
    STF F3,B2 ; ,b2
    LDF B1,F3 ; b1,
    DIVF B2,F3 ; b2,
    STF F3,B3 ; ,b3
    RETURN
    .END

  5. #204
    Master
    Регистрация
    13.07.2018
    Адрес
    г. Переславль-Залесский
    Сообщений
    691
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    44
    Поблагодарили
    40 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    В FPP команды одинарной и двойной точности имеют один и тот же код. Перед их использованием нужно указать точность с помощью команд SETF или SETD.
    Читал, сейчас вспомнил, но так как судьба меня не сводила с FPU

    Из лайфхаков, под XM можно собирать компилятор с ключами /V вместо /O при генерации. Процесс компиляции сильно ускоряется, так как компилятор грузится в память и от туда работает...
    Плюс VBGEXE, тоже способ ускорения ...
    Можно в XM держать постоянно в памяти редактор, компилятор и линкер
    VBGEXE вполне запускается и как системное задание тоже...

    Насчёт работы без FPU F77, у меня работал на 1801ВМ3, но нужно ключ соответствующий и не обращаться к плавающий арифметике... Целые считаются через EIS.

    И прочитал года 4 назад, что есть специальная библиотека для работы F77 на процессорах без FPU.
    Ну плюс существует драйвер - эмулятор FPU
    Последний раз редактировалось Alex; 17.05.2023 в 10:35.

  6. #205
    Guru
    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,002
    Спасибо Благодарностей отдано 
    287
    Спасибо Благодарностей получено 
    631
    Поблагодарили
    531 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex Посмотреть сообщение
    Насчёт работы без FPU F77, у меня работал на 1801ВМ3, но нужно ключ соответствующий
    Насчёт RT не скажу, но в варианте исполняющей библиотеки под RSX нужно было слегка модуль инициализации хакнуть - оно чего-то там делало, детали с ходу не вспомню, надо свои файлы с ДВК глянуть.
    И именно для комплятора под RSX такого ключа не помню.
    Гляну сво файлы (постараюсь сегодня), когда и если найду - отпишусь. Скорее всего это будет с одновременной проверкой на PDP-11/23+

  7. #206
    Member
    Регистрация
    16.07.2021
    Адрес
    г. Черкесск
    Сообщений
    89
    Спасибо Благодарностей отдано 
    37
    Спасибо Благодарностей получено 
    10
    Поблагодарили
    8 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    С FPU напрямую тоже дела не имел, решил попробовать:
    .TITLE FDIV
    .IDENT /X1.0/
    .MCALL .EXIT

    .PSECT $CODE1
    ; JSR PC,OTI$
    ; MOV #-73200,-(SP)
    ; MOV #23051,R4
    ; JSR R4,@$NAM$

    ; MOV #-5,$SEQC
    START: MOV #1,R2
    SETD
    SETI
    L$GANC:
    ; MOV #-6,$SEQC
    LDCIF R2,%1
    LDF %1,%0
    DIVF %1,%0
    STF %0,V
    INC R2
    CMP R2,#24
    BLE L$GANC
    MOV R2,I
    ; CLR -(SP)
    ; JSR PC,STOP$
    .EXIT
    ;
    V: .BLKB 8.
    I: .BLKB 2
    ;
    .END START

    В итогк получил: ?MON-F-FPU trap 001014

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

    Как получить доступ к регистрам FPU?

  8. #207
    Guru
    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,002
    Спасибо Благодарностей отдано 
    287
    Спасибо Благодарностей получено 
    631
    Поблагодарили
    531 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от vva Посмотреть сообщение
    Как получить доступ к регистрам FPU?
    %0-%3, в некоторых командах %4 и %5
    Ну или стандартное R0-R5

    Основной нюанс - какой регистр - CPU или FPP - определяется командной, скажем, если это LDF/LDD, то источник - процессор, а приёмник - FPP.

    Доп нюанс. В некоторых командах, когда в качетстве источника/приёмника указан регистр - то это будет не регистр процессора, а FPP.

  9. #208
    Member
    Регистрация
    16.07.2021
    Адрес
    г. Черкесск
    Сообщений
    89
    Спасибо Благодарностей отдано 
    37
    Спасибо Благодарностей получено 
    10
    Поблагодарили
    8 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Hunta Посмотреть сообщение
    %0-%3, в некоторых командах %4 и %5
    Пробовал (см. распечатку) - получил ?MON-F-FPU trap 001014

    Убрал знак % - работает и по коду соответствует.
    Осталось выяснить правильно ли считает (нет проги распечатки float, писать лень). Буду использовать .DPRINT

  10. #209
    Guru
    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,002
    Спасибо Благодарностей отдано 
    287
    Спасибо Благодарностей получено 
    631
    Поблагодарили
    531 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от vva Посмотреть сообщение
    Убрал знак %
    Если просто убрать %, это будет ссылка на ячейки памяти, а не на регистры. Что-то где-то не так.

  11. #210
    Member
    Регистрация
    16.07.2021
    Адрес
    г. Черкесск
    Сообщений
    89
    Спасибо Благодарностей отдано 
    37
    Спасибо Благодарностей получено 
    10
    Поблагодарили
    8 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Hunta Посмотреть сообщение
    Если просто убрать %, это будет ссылка на ячейки памяти, а не на регистры. Что-то где-то не так.
    Проверил с % и без -- работает в обоих случаях (очевидно ранее где-то была ошибка)
    Примеры:
    172367 000172 ADDF V1,3
    172567 000112 LDF V2,1
    172467 000054 LDF V2,0

    172367 000172 ADDF V1,%3
    172567 000112 LDF V2,%1
    172467 000054 LDF V2,%0

    Результат работы:
    .RUN FTEST
    Enter first value (int dec): 3
    Enter second value (int dec): 15

    ADD result=00018.
    SUB result=00012.
    MUL result=00045.
    DIV result=00005.

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

    Прога:
    .TITLE FDIV
    .IDENT /X1.0/
    .MCALL .EXIT, .DEBUG, .DPRINT, .PRINT
    .ENABL LSB
    .DEBUG SWITCH=ON,VALUE=YES

    .PSECT $CODE1

    START: CLR R1
    1$: .PRINT PRTMSG(R1)
    CALL INDEC
    BCC 2$
    .EXIT
    2$: MOV R0, INVAL(R1)
    TST (R1)+
    CMP R1, #4
    BNE 1$
    ;
    CLR R0
    .PRINT
    ;
    SETD
    SETI
    L$GANC:
    LDCIF INVAL,%3
    STF %3,V1
    LDCIF INVAL+2,%3
    STF %3,V2
    ADDF V1,%3
    STCFI %3,IRES
    .DPRINT ^"ADD result=",IRES,DEC
    ;
    LDF V2,%2
    SUBF V1,%2
    STCFI %2,IRES
    .DPRINT ^"SUB result=",IRES,DEC
    ;
    LDF V2,%1
    MULF V1,%1
    STCFI %1,IRES
    .DPRINT ^"MUL result=",IRES,DEC
    ;
    LDF V2,%0
    DIVF V1,%0
    STCFI %0,IRES
    .DPRINT ^"DIV result=",IRES,DEC
    .EXIT
    ;
    V: .BLKB 8.
    V1: .BLKB 8.
    V2: .BLKB 8.
    INVAL: .BLKW 2
    IRES: .BLKW 1
    ;
    PRTMSG: .WORD EFVMSG
    .WORD ESVMSG

    EFVMSG: .ASCII /Enter first value (int dec): /<200>
    ESVMSG: .ASCII /Enter second value (int dec): /<200>
    .EVEN

    .END START

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

    Цитата Сообщение от vva Посмотреть сообщение
    .TITLE FDIV
    Нужно поменять - не порядок...

Страница 21 из 30 ПерваяПервая ... 171819202122232425 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Вспомнить всё
    от Patison в разделе Люди
    Ответов: 195
    Последнее: 27.04.2024, 16:09
  2. Цифровая археология: 1801 и все-все-все
    от Vslav в разделе ДВК, УКНЦ
    Ответов: 2701
    Последнее: 22.02.2022, 17:55

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •