User Tag List

Показано с 1 по 10 из 282

Тема: Отечественные компьютеры: быстродействие

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    759
    Поблагодарили
    353 сообщений
    Mentioned
    88 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Manwe Посмотреть сообщение
    Где бы посмотреть набор инструкций К1801ВЕ1? (погуглил, прежде чем спрашивать, ничего не нашёл)
    Кое-что есть в техническом описании

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

    Manwe(16.04.2020)

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    20.06.2014
    Адрес
    г. Орск, Оренбургская обл.
    Сообщений
    813
    Спасибо Благодарностей отдано 
    33
    Спасибо Благодарностей получено 
    80
    Поблагодарили
    60 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цифры.
    ПЭВМ: модернизированный АГАТ-9.
    ЦП: 65C802 (умеет 6502, 65C02 и 65C816, распиновка 6502).
    Частота: стандарт 1.021МГц, турбо 2.8 МАХа и 3.5 МАХа.
    Операция: копирование блока памяти и заполнение блока памяти константой.
    Нажмите на изображение для увеличения. 

Название:	TestCPU.jpg 
Просмотров:	282 
Размер:	66.0 Кб 
ID:	72244
    Последний раз редактировалось LeoN65816; 17.04.2020 в 11:46.
    Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

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

    vladtru(05.05.2020)

  4. #3

    Регистрация
    20.05.2013
    Адрес
    г. Ейск
    Сообщений
    197
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    23
    Поблагодарили
    9 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от LeoN65816 Посмотреть сообщение
    Цифры.
    ПЭВМ: модернизированный АГАТ-9.
    ЦП: 65C802 (умеет 6502, 65C02 и 65C816, распиновка 6502).
    Частота: стандарт 1.021МГц, турбо 2.8 МАХа и 3.5 МАХа.
    Операция: копирование блока памяти и заполнение блока памяти константой.
    Нажмите на изображение для увеличения. 

Название:	TestCPU.jpg 
Просмотров:	282 
Размер:	66.0 Кб 
ID:	72244
    Очень интересная таблица, показывающая хотя бы в частном случае разницу между 6502 и 65816. Да и 6502 – тоже достаточно загадочный для меня, например, процессор. Известно, что по средней скорости в тестах при частоте 1 МГц он вполне сравним с 8080 на 2,5 МГц (часто даже быстрее) или даже с Z80 на частотах больше 3 МГц. А вот копирование и заполнение блоков памяти – слабая сторона 6502, так как нет ни спец. команд для этого (как у Z80), ни полноценных стековых операций, использующих всё адресное пространство, а не только нулевую страницу.

    Подскажите, пожалуйста, подробности, как вы тестировали. Можно ли увидеть сами тестовые фрагменты на ассемблере? Данные по скорости достаточно загадочные – например, не совсем понятно, как реализованы первые два варианта теста (где скорость невысокая) – после копирования каждого байта идут операции организации цикла или всё же цикл в какой-то степени развёрнут? А в быстрых вариантах используются стековые команды (Push)? (тогда копирование возможно только в нулевой странице?)

    Вообще, насколько я могу судить, наиболее интересно классическое копирование блоков памяти с произвольного адреса на произвольный адрес (на всем адресном пространстве, конечно) в развёрнутых циклах (обычно копируются фрагменты какой-то определенной длины – скажем, при выводе на экран, и программисты все равно стараются развернуть цикл, насколько возможно), а также наиболее быстрые способы (как у вас в таблице) – с нахождением данных или их адресов прямо в коде (типа LXI/PUSH для 8080) и опять же развернутыми циклами. Хорошо бы также указать, сколько тактов нужно на команды организации циклов (до 256 повторений и больше 256) – тогда можно добавлять их к тактам развернутых циклов и получить точные данные для любого числа повторений одинаковых цепочек команд внутри цикла.

  5. #4

    Регистрация
    20.06.2014
    Адрес
    г. Орск, Оренбургская обл.
    Сообщений
    813
    Спасибо Благодарностей отдано 
    33
    Спасибо Благодарностей получено 
    80
    Поблагодарили
    60 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Здесь обновлённые данные.

    Цитата Сообщение от vladtru Посмотреть сообщение
    Да и 6502 – тоже достаточно загадочный для меня, например, процессор.
    Очень простой и шустрый процик. А 65816 еще лучше и вкуснее. Это как Z80 является улучшенной версией i8080, так и 65816 является улучшенной версией 6502, но намного значительнее улучшенной про сравнению Z80/i8080. Даже был разработан еще более продвинутый 32-битный 65832, но, к сожалению, он так и не выпускался...

    Цитата Сообщение от vladtru Посмотреть сообщение
    Известно, что по средней скорости в тестах при частоте 1 МГц он вполне сравним с 8080 на 2,5 МГц (часто даже быстрее) или даже с Z80 на частотах больше 3 МГц.
    А если i8080 и Z80 дать прикурить на 1 МГц, то будут ли они шустрее, чем 6502 на той же частоте?
    А если 6502 дать прикурить на 2.5 МГц или 3 МГц, то будет ли он шустрее, чем i8080 или Z80 на той же частоте?
    Таблица и видео всё наглядно показывают. Так что вывод совершенно очевиден!!!

    Цитата Сообщение от vladtru Посмотреть сообщение
    А вот копирование и заполнение блоков памяти – слабая сторона 6502, так как нет ни спец. команд для этого (как у Z80)
    Я бы так не судил. У 6502 подпрограмма копирования блока памяти работает быстрее (16 такт/байт, а если совсем точнее: 16 + (5+5+5+3)/256 = 16.0703125 такт/байт), чем инструкция копирования блока памяти у Z80 (LDIR: 21 такт/байт). Предвижу вопли спектрумистов: "Ну как же? А LDI нам даёт 16 тактов, а не 21!". На что еще раз обращу внимание: копирование блока памяти (да хоть 64КиБ!!!), а не одиночного байта одной инструкцией LDI!
    Ну а заполнение блока памяти еще шустрее - 11 такт/байт (точнее 11 + (5+5+3)/256 = 11.05078125 такт/байт).
    65816 имеет инструкции копирования блока памяти MVN/MVP - полный аналог LDIR/LDDR у Z80, только втрое (!!!) шустрее - 7 такт/байт против 21 у Z80. Вообще-то даже 7 такт/байт - это медленно... Можно было бы уложиться и в 3 такт/байт!

    Цитата Сообщение от vladtru Посмотреть сообщение
    Подскажите, пожалуйста, подробности, как вы тестировали. Можно ли увидеть сами тестовые фрагменты на ассемблере? Данные по скорости достаточно загадочные – например, не совсем понятно, как реализованы первые два варианта теста (где скорость невысокая) – после копирования каждого байта идут операции организации цикла или всё же цикл в какой-то степени развёрнут?

    Инструкция копирования, подпрограмма копирования, подпрограмма заполнения


    Код:
    zp00    =       $00
    zp02    =       $02
    zp04    =       $04
    
    zp10    =       $10
    
    Tick    =       $80
    
    Pos     =       $90
    
    Screen  =       $4000
    SizeOfScreen    = $4000
    
    NMI_On  =       $C040
    NMI_Off =       $C020
    
    
            .ba     $F800
    
            .cpu    65816
    
    Reset
            sei
            cld
            ldx     #$FF
            txs
            sta     $C100
            sta     $C111
            sta     $C122
            sta     $C133
            sta     $C144
            sta     $C058
            sta     $C05A
    
    
    Main
            bit     NMI_Off
            ldx     #0
            lda     #" "
    -       sta     $800,x
            sta     $900,x
            sta     $A00,x
            sta     $B00,x
            sta     $C00,x
            sta     $D00,x
            sta     $E00,x
            sta     $F00,x
            inx
            bne     -
            sta     $C786
    
            stz     zp10
            lda     #$A
            sta     zp10+1
            ldx     #0
            stx     Pos
    -       lda     Mes1,x
            beq     +
            jsr     Send
            inx
            bra     -
    +
    
            stz     zp10
            lda     #$C
            sta     zp10+1
            ldx     #0
            stx     Pos
    -       lda     Mes2,x
            beq     +
            jsr     Send
            inx
            bra     -
    +
    
            jsr     Delay5s
    
    
    
    
    ;       65816 MVN
    
            sta     $C720
            clc
            xce
            rep     #$30
            .al
            .rl
    
            lda     #$FFFE
            sta     Tick
    -
            lda     Tick
            bne     -
    
            lda     #64
            sta     zp04
    -
            lda     zp04
            and     #3
            tax
            lda     ColorTable,x
            sta     Screen
            ldx     #Screen
            ldy     #Screen+1
            lda     #SizeOfScreen-2
    
    ;----------------------
    ;main cycle, 7 ticks/byte
            mvn     0,0	;7
    ;----------------------
    
            dec     zp04
            bne     -
    
            bit     NMI_Off
            sec
            xce
            .as
            .rs
    
            sta     $C786
    
            lda     Tick+1
            jsr     PrintTwoDigits
            lda     Tick
            jsr     PrintTwoDigits
    
    
            stz     zp10
            lda     #$D
            sta     zp10+1
            ldx     #0
            stx     Pos
    -       lda     Mes3,x
            beq     +
            jsr     Send
            inx
            bra     -
    +
            jsr     Delay5s
    
    
    
    
    ;       6502 MoveMemory
    
            sta     $C720
    
            lda     #$FF
            sta     Tick+1
            lda     #$FE
            sta     Tick
    -
            lda     Tick
            bne     -
    
            lda     #64
            sta     zp04
    MM01
            lda     zp04
            and     #3
            tax
            lda     ColorTable,x
            sta     Screen
            lda     #1
            sta     zp02
            ldy     #0
            sty     zp00
            lda     #>Screen
            sta     zp00+1
            sta     zp02+1
            lda     #>SizeOfScreen
            sta     zp04+1
    
    ;----------------------
    ;main cycle, 16 ticks/byte
    -
            lda     (zp00),y	;5
            sta     (zp02),y	;6
            iny			;2
            bne     -		;3
    ;----------------------
    
            inc     zp00+1		;5
            inc     zp02+1		;5
            dec     zp04+1		;5
            bne     -		;3
            dec     zp04
            bne     MM01
    
            bit     NMI_Off
    
            sta     $C786
    
            lda     Tick+1
            jsr     PrintTwoDigits
            lda     Tick
            jsr     PrintTwoDigits
    
    
            stz     zp10
            lda     #$E
            sta     zp10+1
            ldx     #0
            stx     Pos
    -       lda     Mes4,x
            beq     +
            jsr     Send
            inx
            bra     -
    +
            jsr     Delay5s
    
    
    
    ;       6502 FillMemory
    
            sta     $C720
    
            lda     #$FF
            sta     Tick+1
            lda     #$FE
            sta     Tick
    -
            lda     Tick
            bne     -
    
            lda     #64
            sta     zp04
    FM01
            ldy     #0
            sty     zp00
            lda     #>Screen
            sta     zp00+1
            lda     #>SizeOfScreen
            sta     zp04+1
    
            lda     zp04
            and     #3
            tax
            lda     ColorTable,x
    
    ;----------------------
    ;main cycle, 11 ticks/byte
    -
            sta     (zp00),y	;6
            iny			;2
            bne     -		;3
    ;----------------------
    
            inc     zp00+1		;5
            dec     zp04+1		;5
            bne     -		;3
            dec     zp04
            bne     FM01
    
            bit     NMI_Off
    
            sta     $C786
    
            lda     Tick+1
            jsr     PrintTwoDigits
            lda     Tick
            jsr     PrintTwoDigits
    
    
            jsr     Delay5s
            jsr     Delay5s
    
            jmp     Main
    
    
    
    ColorTable   .by     0, $55, $AA, $FF
    
    
    
    Delay2s
            bit     NMI_Off
            stz     Tick
            stz     Tick+1
            bit     NMI_On
    -
            lda     Tick
            cmp     #100
            bne     -
            rts
    
    
    Delay5s
            bit     NMI_Off
            stz     Tick
            stz     Tick+1
            bit     NMI_On
    -
            lda     Tick
            cmp     #250
            bne     -
            rts
    
    
    PrintTwoDigits
            pha
            lsr
            lsr
            lsr
            lsr
            jsr     PrintDigit
            pla
            and     #15
            jsr     PrintDigit
            rts
    
    PrintDigit
            tax
            lda     HexDigit,x
            jsr     Send
            rts
    
    
    Send
            ldy     Pos
            sta     (zp10),y
            inc     Pos
            rts
    
    
    ;        .PETSCII
    
    HexDigit
    ;        .tx     "0123456789ABCDEF"
            .db     $B0, $B1, $B2, $B3, $B4, $B5, $B6, $B7
            .db     $B8, $B9, $C1, $C2, $C3, $C4, $C5, $C6
    
    Mes1
    ;        .tx     "Filling 64 screens 256x256x4colors (1MB) in NMI ticks:"
            .db     $C6, $49, $4C, $4C, $49, $4E, $47, $A0
            .db     $B6, $B4, $A0, $53, $43, $52, $45, $45
            .db     $4E, $53, $A0, $B2, $B5, $B6, $58, $B2
            .db     $B5, $B6, $58, $B4, $43, $4F, $4C, $4F
            .db     $52, $53, $A0, $A8, $B1, $CD, $C2, $A9
            .db     $A0, $49, $4E, $A0, $CE, $CD, $C9, $A0
            .db     $54, $49, $43, $4B, $53, $BA
            .db     0
    
    Mes2
    ;        .tx     "65816 MVN instruction (7 clocks/byte) - $"
            .db     $B6, $B5, $B8, $B1, $B6, $A0, $CD, $D6
            .db     $CE, $A0, $49, $4E, $53, $54, $52, $55
            .db     $43, $54, $49, $4F, $4E, $A0, $A8, $B7
            .db     $A0, $43, $4C, $4F, $43, $4B, $53, $AF
            .db     $42, $59, $54, $45, $A9, $A0, $AD, $A0
            .db     $A4
            .db     0
    
    Mes3
    ;        .tx     "6502 MoveMemory Sub  (16 clocks/byte) - $"
            .db     $B6, $B5, $B0, $B2, $A0, $CD, $4F, $56
            .db     $45, $CD, $45, $4D, $4F, $52, $59, $A0
            .db     $D3, $55, $42, $A0, $A0, $A8, $B1, $B6
            .db     $A0, $43, $4C, $4F, $43, $4B, $53, $AF
            .db     $42, $59, $54, $45, $A9, $A0, $AD, $A0
            .db     $A4
            .db     0
    
    Mes4
    ;        .tx     "6502 FillMemory Sub  (11 clocks/byte) - $"
            .db     $B6, $B5, $B0, $B2, $A0, $C6, $49, $4C
            .db     $4C, $CD, $45, $4D, $4F, $52, $59, $A0
            .db     $D3, $55, $42, $A0, $A0, $A8, $B1, $B1
            .db     $A0, $43, $4C, $4F, $43, $4B, $53, $AF
            .db     $42, $59, $54, $45, $A9, $A0, $AD, $A0
            .db     $A4
    
            .db     0
    
    
    
    NMI_Native
            inc     Tick
            rti
    
    
    NMI
            inc     Tick
            bne     +
            inc     Tick+1
    +
            rti
    
    
    IRQ
            rti
    
    
            .ba     $FFEA
            .wo     NMI_Native
            .wo     0
            .wo     IRQ
    
            .ba     $FFFA
            .wo     NMI
            .wo     Reset
            .wo     IRQ
    [свернуть]



    Цитата Сообщение от vladtru Посмотреть сообщение
    А в быстрых вариантах используются стековые команды (Push)?
    Да. Я же расписал аналог от Z80.

    Цитата Сообщение от vladtru Посмотреть сообщение
    (тогда копирование возможно только в нулевой странице?)
    Разумеется (только не в нулевой, а в первой). Однако, 65816 умеет полностью 64 КиБ.
    Последний раз редактировалось LeoN65816; 06.05.2020 в 00:26.
    Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

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

    vladtru(07.05.2020)

  6. #5

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,963
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    312
    Поблагодарили
    236 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от LeoN65816 Посмотреть сообщение
    У 6502 подпрограмма копирования блока памяти работает быстрее (16 такт/байт, а если совсем точнее: 16 + (5+5+5+3)/256 = 16.0703125 такт/байт), чем инструкция копирования блока памяти у Z80 (LDIR: 21 такт/байт). Предвижу вопли спектрумистов: "Ну как же? А LDI нам даёт 16 тактов, а не 21!". На что еще раз обращу внимание: копирование блока памяти (да хоть 64КиБ!!!), а не одиночного байта одной инструкцией LDI!
    а что, кто-то запрещает блок копировать цепочкой из ldi?
    не говоря уже о стековых извращениях

    Цитата Сообщение от LeoN65816 Посмотреть сообщение
    Ну а заполнение блока памяти еще шустрее - 11 такт/байт (точнее 11 + (5+5+3)/256 = 11.05078125 такт/байт).
    то есть вдвое медленнее z80
    Прихожу без разрешения, сею смерть и разрушение...

  7. #6

    Регистрация
    20.05.2013
    Адрес
    г. Ейск
    Сообщений
    197
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    23
    Поблагодарили
    9 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    LeoN65816,

    Благодарю за разъяснения и листинг программы. То есть в универсальном случае копирования блоков памяти во всем адресном пространстве развернутый цикл имеет длину 13 тактов – это до 76,7 Кбайт/с при частоте 1,021 МГц (я, как человек, давно и близко имеющий отношение к компьютерам, всегда под К подразумеваю 2 в 10 степени – думаю, так привычнее для всех ретрокомпьютерщиков). Команда цикла BNE здесь занимает всего 3 такта, правда для числа повторений не больше 256. Соответственно, заполнение произвольной области памяти константой имеет развернутый цикл 8 тактов – при достаточно большой длине такой цепочки скорость стремится к 124,6 Кбайт/с. На организацию цикла также требуется всего 3 такта.

    Конечно, если сравнивать эти показатели с 8080 (как наиболее актуального для советских домашних ПК) и Z80 (популярные английские и японские ПК), 6502 очень сильно проигрывает – у 8080 на частоте 2,5 МГц (Корвет, Орион-128) максимальная скорость копирования через стек почти в 2 раза больше (около 150 Кбайт/с, насколько я помню), без стека – почти в 1,5 раза больше (чуть больше 100 Кбайт/с), а скорость заполнения памяти через стек почти в 4 раза (!) больше – около 450 Кбайт/с (все данные, конечно, с развёрнутыми циклами, которые, однако, не всегда применимы и дают большое преимущество в основном на ПК со «столбцовой» организацией видеопамяти – типа «Вектора-06Ц», «Специалиста» или «Ориона-128»). У компьютеров на Z80 предельные скорости копирования и заполнения, естественно, ещё выше – хотя бы за счет более высокой частоты (копирование стеком – примерно до 250 Кбайт/с, без стека – более 200 Кбайт/с, заполнение памяти через стек – до 600 с лишним Кбайт/с, в 5 раз быстрее, чем у 6502 на 1 МГц). У БК-0010 максимальная скорость копирования тоже почти вдвое выше – порядка 136 Кбайт/с.

    Вторые варианты («Развернутый цикл») в таблице для 6502 получились почти вдвое и втрое быстрее – и это очень хорошие показатели, сравнимые с 8080, однако не понятно, как их применять на практике, если используется стековая команда, то есть копируется только в стек или из стека, который не выходит за пределы одной страницы (256 байт) в начале адресного пространства. А что будет, если всё же использовать не Push, а обычные команды пересылок, чтобы задействовать всё адресное пространство – насколько упадет скорость в этих двух быстрых вариантах?

    Как вообще можно было ускорить, скажем, вывод на экран у таких ПК, как «Агат», Apple II, Acorn Electron и т.д. (без аппаратных спрайтов, скроллингов и т.д.) – использовали копирование из стека или нулевой страницы (к которой доступ быстрее)? Или хватало и таких небольших скоростей? Особенно у Яблока (а как у Агата в агатовских режимах?) – у него строчная организация видеопамяти (у Электрона и BBC Micro – вроде бы строчно-столбцовая, когда внутри знакоместа память растет по столбцам, а между знакоместами – по строкам, зато объем видеопамяти до 20 Кбайт). Насколько быстро работал с графикой Агат, имевший видеорежимы с 16 Кбайтами видеопамяти (у Apple II в обычном режиме – вроде всего 7.5 Кбайт).

    Процессор 65816, конечно, был намного быстрее, чем 6502, за счет 16-битности, дополнительных команд и большей частоты – я, например, читал, что Apple II GS (65816 на 2,8 МГц) был во многих тестах быстрее, чем классический Macintosh (68000 на 8 МГц, но эффективная около 5 МГц).
    Последний раз редактировалось vladtru; 07.05.2020 в 23:07.

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

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

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

Похожие темы

  1. Отечественные компьютеры: Разное.
    от KALDYH в разделе Разное
    Ответов: 172
    Последнее: 26.11.2025, 02:28
  2. Ответов: 674
    Последнее: 18.11.2024, 15:27
  3. Раздел про отечественные компьютеры
    от CityAceE в разделе Форум
    Ответов: 47
    Последнее: 22.02.2012, 01:31
  4. Ответов: 59
    Последнее: 02.05.2011, 01:35

Ваши права

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