Прогнал Basic-тесты на реальном железе: БК 0010 и БК 0011М. Результаты БК 0010 немного отличаются от тех, что в таблице (насколько я понял, они получены из эмулятора). БК 0011М в таблице не было, так что встречайте новичка :)
Таблица БК 0010 и 0011
Прогнал Basic-тесты на реальном железе: БК 0010 и БК 0011М. Результаты БК 0010 немного отличаются от тех, что в таблице (насколько я понял, они получены из эмулятора). БК 0011М в таблице не было, так что встречайте новичка :)
Таблица БК 0010 и 0011
manwe.pdp-11.ru
vladtru (21.04.2020)
Manwe, а можно было нормально поделиться, без вот этой гейской пропаганды? Она закрывает часть таблицы и её нельзя закрыть не вводя чего либо.
HardWareMan, например
F12.
Личка заполнена! И чистить я ее не буду! Пользуйтесь адекватными средствами связи! Спасибо.
Seamos realistas y hagamos lo imposible!
Ernesto Che GuevaraПереехал сюда: SteinBlume (ex ATM CP/M Explorer)
http://era-cg.su
Black Cat / Era CG, ради чего? Кто больше заинтересован в этом? Ответишь на вопрос - сразу всё поймёшь.
HardWareMan, да мне ж пофиг. Вижу фигню - убираю фигню. Все просто
Личка заполнена! И чистить я ее не буду! Пользуйтесь адекватными средствами связи! Спасибо.
Seamos realistas y hagamos lo imposible!
Ernesto Che GuevaraПереехал сюда: SteinBlume (ex ATM CP/M Explorer)
http://era-cg.su
HardWareMan (18.04.2020)
Скорость исполнения команды MOV с разными типами адресации на БК 0010 и БК 0011М (частоты 3, 4, 6 МГц, память медленная штатная и быстрая статическая в контроллере дисковода).
Таблица
manwe.pdp-11.ru
Прихожу без разрешения, сею смерть и разрушение...
Очень интересная таблица, показывающая хотя бы в частном случае разницу между 6502 и 65816. Да и 6502 – тоже достаточно загадочный для меня, например, процессор. Известно, что по средней скорости в тестах при частоте 1 МГц он вполне сравним с 8080 на 2,5 МГц (часто даже быстрее) или даже с Z80 на частотах больше 3 МГц. А вот копирование и заполнение блоков памяти – слабая сторона 6502, так как нет ни спец. команд для этого (как у Z80), ни полноценных стековых операций, использующих всё адресное пространство, а не только нулевую страницу.
Подскажите, пожалуйста, подробности, как вы тестировали. Можно ли увидеть сами тестовые фрагменты на ассемблере? Данные по скорости достаточно загадочные – например, не совсем понятно, как реализованы первые два варианта теста (где скорость невысокая) – после копирования каждого байта идут операции организации цикла или всё же цикл в какой-то степени развёрнут? А в быстрых вариантах используются стековые команды (Push)? (тогда копирование возможно только в нулевой странице?)
Вообще, насколько я могу судить, наиболее интересно классическое копирование блоков памяти с произвольного адреса на произвольный адрес (на всем адресном пространстве, конечно) в развёрнутых циклах (обычно копируются фрагменты какой-то определенной длины – скажем, при выводе на экран, и программисты все равно стараются развернуть цикл, насколько возможно), а также наиболее быстрые способы (как у вас в таблице) – с нахождением данных или их адресов прямо в коде (типа LXI/PUSH для 8080) и опять же развернутыми циклами. Хорошо бы также указать, сколько тактов нужно на команды организации циклов (до 256 повторений и больше 256) – тогда можно добавлять их к тактам развернутых циклов и получить точные данные для любого числа повторений одинаковых цепочек команд внутри цикла.
Здесь обновлённые данные.
Очень простой и шустрый процик. А 65816 еще лучше и вкуснее. Это как Z80 является улучшенной версией i8080, так и 65816 является улучшенной версией 6502, но намного значительнее улучшенной про сравнению Z80/i8080. Даже был разработан еще более продвинутый 32-битный 65832, но, к сожалению, он так и не выпускался...
А если i8080 и Z80 дать прикурить на 1 МГц, то будут ли они шустрее, чем 6502 на той же частоте?
А если 6502 дать прикурить на 2.5 МГц или 3 МГц, то будет ли он шустрее, чем i8080 или 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 такт/байт!
Инструкция копирования, подпрограмма копирования, подпрограмма заполнения
Код: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[свернуть]
Да. Я же расписал аналог от Z80.
Разумеется (только не в нулевой, а в первой). Однако, 65816 умеет полностью 64 КиБ.
Последний раз редактировалось LeoN65816; 06.05.2020 в 00:26.
Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).
vladtru (07.05.2020)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)