Флейм
GameDev.ru / Флейм / Форум / CISC-x80: ПРАвәльный 8-битный «ДОМАШНИЙ» (псевдо-совместимый с PC-XT / CP/M-80 / DOS) (2 стр)

CISC-x80: ПРАвәльный 8-битный «ДОМАШНИЙ» (псевдо-совместимый с PC-XT / CP/M-80 / DOS) (2 стр)

Advanced: Тема повышенной сложности или важная.
Страницы: 1 2 3 415 Следующая »
return [](){};Участникwww22 мая 201814:09#15
=A=L=X=
> тут уже любую дрянь можно нивелировать нарастающей сложностью чипов
Да, главное не забывать регулярно выкатывать патчи для костылей в микрокоде
AlikberovПостоялецwww22 мая 201814:13#16
=A=L=X=
> Где?
Вообще-тo здесь. Говорю в общем же! Без конкретики в общем :))

Правка: 22 мая 2018 14:25

=A=L=X=Постоялецwww22 мая 201814:30#17
Alikberov

Я просто посоветовал взять современный инструментарий разработки, на современном копьютере, а не возится с машкодами в эмуляторе.
Так продуктивнее.

AlikberovПостоялецwww22 мая 201814:36#18
=A=L=X=
> Я просто посоветовал взять современный инструментарий разработки, на
> современном копьютере, а не возится с машкодами в эмуляторе.
> Так продуктивнее.
Этo я понимаю. Но, я вырос с «РАДИО-86РК» и советы мною воспринимаются как «смени паяльник на кубики лего»…

P.S.: Напрягает отсутствие полноценного дампа… И всё!

=A=L=X=Постоялецwww22 мая 201814:59#19
Если вот рассуждать про идеальный проц, то конечно у всех свои идеалы, а у меня они сложились такие:
а) 8-битного процессора вообще не должно быть. единственный настоящий 8-битный из известных - MOS 6502 очень уж уродлив архитектурно. 8080 и Z80 имеют 16-битные операции, что сильно экономит. но всё-равно постоянные палки в колёса с перекладыванием из аккумуляторов и обратно - с одной стороны это прикольно всмысле что решаешь как головоломку - но с другой стороны понятно что это снижает плотность кода и для программиста является палками в колёсах.
поэтому просто не нужен 8-битный процессор, нужен сразу 16-битный, в 16-битном адресном пространстве, 16 бит и нужны чтобы их быстро адресовать, вычислять адреса в массивах и т.п.
б) не надо делать 16-битные процессоры с сегментацией, чтобы преодолеть 64Кб - это опять таки лишние усилия по нагромождению костылей. максимум - мапперы памяти в каких то моделях первое время, а потом сразу прыгать на 32 бита с полноценной адресуемой опять таки разрядностью проца памятью. собственно так поступила Motorola - когда ей понадобился 16-битный проц она сделала 32-битную m68k просто снабдив его в первых моделях 16-битным ALU. ноу проблемо.

отсюда же получается, что нужна высокая ортогональность, болт должен быть забит на выделенный аккумулятор чтобы не было никаких перекладываний - просто опкоды команд заранее должны быть полностью ортогональными. в общем что-то такое RISC-овое должно быть, по 2 байта на опкод в среднем. 16 16-битных РОН, 64Кб ОЗУ, 4 бита в опкодах на номер регистра и так далее.

MahagamПостоялецwww22 мая 201815:16#20
=A=L=X=
> что нужна высокая ортогональность
PDP-11. или, если разменять один пару бит адресации режимов на пару бит адресации регистров - MSP430.
=A=L=X=Постоялецwww22 мая 201815:30#21
Mahagam
> PDP-11

Да, он на многих позитивно повлиял. Но регистровый файл - 8 РОН, по мне так уже маловато.

MahagamПостоялецwww22 мая 201815:33#22
=A=L=X=
> Но регистровый файл - 8 РОН, по мне так уже маловато.
ну слепите 16 рон (на самом деле меньше) и получите MSP430. теперь режимов адресации станет меньше. и сишное while (*dst++ = *src++) в две команды не скомпилируется уже.
хотя PDP-11 - тот редкий зверь, в котором даже mov устанавливал флаги.
AlikberovПостоялецwww22 мая 201815:55#23
=A=L=X=
> но всё-равно постоянные палки в колёса с перекладыванием из аккумуляторов и обратно
Когдa я тренировался с эмуляцией, корректировал готовое. В частности, в i8080/Z80 инструкции с кодами «40»/«49»/«52»/«5B»/«64»/«6D»/«7F», так как они «холостые» я перехватил префиксами. И «52 86» уже работало как «ADD D,(HL)» без использования аккумулятора. Уверен, технически это на кристалле i8080/Z80 можно было реализовать…
Наверное, никто из вас вообще не вчитывался в #0, так как оттуда это хорошо видно! И «эмулятор мой» ленитесь ковырять, так как строки 3482-3642 открытым шаблоном описывают всю таблицу команд, логику и регистры! То есть JS-код править не надо: Вбей шаблон из паспорта «6502» - в эмуляторе и таблица команд изменится, и дизассемблер команды «Dendy» будет показывать, и листинги с «6502»-ассемблера начнёт транслировать… То есть, это не просто эмулятор какого-то моего процессора, а реальная студия, где можно за 10 минут расписать свой процессор и запустить!
Что мешает и Ваш (конкретно) процессор туда впихнуть? ;)
(Замечу не в первый раз уж: Эмулятор - старый! В версии на диске функций больше.)
Вот, лёгким движением руки и правкой шаблона получил реальный РАДИО-86РК.
(Жмёте кнопку «MATRIX» и тут же правите шаблон, чтобы тут же таблица команд изменилась на глазах после двойного клика по «MATRIX». Даже исходники ковырять не нужно же! Или лень?)
На досуге я очень много кодил. :)))

=A=L=X=
> нужен сразу 16-битный, в 16-битном адресном пространстве
Тот Mega Processor как раз 16-битный! А толку?
Вот реально не понимаю, зачем он потратил годы, десятки тысяч долларов, чтобы продемонстрировать 16-битную версию Тетриса на своей архитектуре! И всё! Столько трудов, а сервер - не построил.
Кому не понятно: Эта страничка открывается у Вас прямо из памяти 8-битного процессора, спаянного на коленке!
Зачем вот Вам эти 16 бит??? Переплюнуть Space-Shuttle хотите, где до недавних пор стоял сам i8086!

Правка: 22 мая 2018 16:43

MahagamПостоялецwww22 мая 201816:26#24
Alikberov
> То есть, это не просто эмулятор какого-то моего процессора, а реальная студия,
> где можно за 10 минут расписать свой процессор и запустить!
внезапно, реальные процессоры работают не как эмуляция в студии, а как реальное железо. хотите эмулировать наиболее подобным образом? пишите модель не на JS, а на верилоге.
это у вас всё просто инструкции с кодами «40»/«49»/«52»/«5B»/«64»/«6D»/«7F», так как они «холостые» я перехватил префиксами. в кремнии этот "перехват" совсем не так прост и дёшев, как кажется. отсюда и нет желания делать красивые опкоды.
AlikberovПостоялецwww22 мая 201816:32#25
Mahagam
> а как реальное железо. хотите эмулировать наиболее подобным образом? пишите
> модель не на JS, а на верилоге.
Кaк раз в моём JS шаблон описывается почти как Verilog:
00_000_000_C    NOP             :0                                                                      No operation
00_XX0_001_E    LXI     S$W,_2  :S$W=_2                                                                 Load address into P$Y
00_0X0_010_F    STAX    P$W     :P$W.m=R7                                                               Store Accumulator to P$W
00_0X1_010_F    LDAX    P$W     :R7=P$W.m                                                               Load Accumulator from P$W
00_100_010_E    SHLD    _2      :$1=_2,m[$1]=R5,m[$1+1]=R4                                              Store HL
00_101_010_E    LHLD    _2      :$1=_2,R5=m[$1],R4=m[$1+1]                                              Load HL
00_110_010_F    STA     _2      :m[_2]=R7                                                               Store Accumulator
00_111_010_F    LDA     _2      :R7=m[_2]                                                               Load Accumulator
00_XX1_001_D    DAD     S$W     :r.psw.l=(r.psw.l&0xBF)+((P2+S$W)>>16),P2+=S$W                          Addition HL with S$W
00_XX0_011_D    INX     S$W     :S$W++                                                                  Increment S$W
00_XX1_011_D    DCX     S$W     :S$W--                                                                  Decrement S$W
00_XXX_100_A    INR     R$Y     :$1=r.psw.l&1,r.psw.l=R$Y,r.psw.l++,r.psw.l=(r.psw.fx&254)|$1,R$Y++     Increment R$Y
00_XXX_101_A    DCR     R$Y     :$1=r.psw.l&1,r.psw.l=R$Y,r.psw.l--,r.psw.l=(r.psw.fx&254)|$1,R$Y--     Decrement R$Y
00_XXX_110_F    MVI     R$Y,_1  :R$Y=_1                                                                 Flip-flop translation byte to R$Y
00_XXX_111_A    ALU$Y           :ALU$Y                                                                  ALU$Y
01_110_110_C    HLT             :r.pc.x --                                                              Halting
01_XXX_XXX_F    MOV     R$Y,R$X :R$Y=R$X                                                                Flip-flop translation R$X to R$Y
10_XXX_XXX_A    ALA$Y   R$X     :$1=R$X,ALA$Y                                                           ALA$Y
11_XXX_000_B    RCON$Y          :CON$Y?r.pc.x=r.sp.w:0                                                  Return if CON$Y
11_XX0_001_E    POP     P$W     :P$W=r.sp.w                                                             Pop P$Y from stack
11_XXX_010_B    JCON$Y  _2      :$1=_2,CON$Y?r.pc.x=$1:0                                                Jump if CON$Y
11_000_011_B    JMP     _2      :r.pc.x=_2                                                              Jump to address
11_001_001_B    RET             :r.pc.x=r.sp.w                                                          Return from substitute
11_001_101_B    CALL    _2      :$1=_2,r.sp.w=r.pc.x,r.pc.x=$1                                          Call substitute
11_010_011_C    OUT     _1      :$1=_1                                                                  Output to port
11_011_011_C    IN      _1      :$1=_1                                                                  Input from port
11_100_011_E    XTHL            :$1=P2,P2=r.sp.w,r.sp.w=$1                                              Exchange HL with stack heap
11_101_011_E    XCHG            :$1=r.de.x,r.de.x=r.hl.x,r.hl.x=$1                                      Exchange DE and HL
11_110_011_C    DI              :0                                                                      Disable Interruptions
11_111_011_C    EI              :0                                                                      Enable Interruptions
11_101_001_b    PCHL            :r.pc.x=r.hl.x                                                          Jump to HL-address
11_111_001_E    SPHL            :r.sp.x=r.hl.x                                                          Load HL to SP
11_XXX_100_B    CCON$Y  _2      :$1=_2,CON$Y?(r.sp.w=r.pc.x,r.pc.x=$1):0                                Call subroutine in CON$Y
11_XX0_101_E    PUSH    P$W     :r.sp.w=P$W                                                             Push P$Y to stack
11_XXX_110_A    ALI$Y   _1      :$1=_1,ALI$Y                                                            ALI$Y
11_XXX_111_B    RST     $Y      :r.sp.w=r.pc.x,r.pc.x=$Y*8                                              Restart $Y
XX_XXX_XXX_X    ???     $W      :0                                                                      unused
Достаточно долго я изучал особенности тех же casex, чтобы с меньшим потом из моего JS перенести в Verilog.
(Точнее, сам шаблон дешифратора команд проработать корректными масками, если быть корректным).

Правка: 22 мая 2018 16:35

MahagamПостоялецwww22 мая 201816:38#26
Alikberov
> Кaк раз в моём JS шаблон описывается почти как Verilog
почти как симулируемая или синтезируемая часть верилога? это кагбэ, две стороны одного верилога.
AlikberovПостоялецwww22 мая 201816:47#27
Mahagam
> почти как симулируемая или синтезируемая часть верилога? это кагбэ, две стороны
> одного верилога.
Тo есть Вы интересуетесь, готов ли я взяться писать реально коммерчески выгодный проект, стоимостью чуть ниже тех самых Altera студий, где любой сможет за 5 минут набросать примерную логику своего процессора, чтобы одним кликом получить комплекс Verilog-шаблонов, готовых к заливке в FPGA???
=A=L=X=Постоялецwww22 мая 201816:54#28
Alikberov
> Что мешает и Ваш (конкретно) процессор туда впихнуть? ;)

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

Правка: 22 мая 2018 16:56

MahagamПостоялецwww22 мая 201816:59#29
Alikberov
> где любой сможет за 5 минут набросать примерную логику своего процессора
мощно! вы пробовали? ну, не на JS, а на верилоге?

> комплекс Verilog-шаблонов, готовых к заливке в FPGA
никакие верилог-шаблоны в FPGA не заливаются.


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

я сам лет 7 назад написал на верилоге синтезируемое ядро MSP430. получилось относительно красиво и лаконично. и набор РОНов пытался упрятать в блоки битовой памяти так, чтобы они не рассыпались регистрами, а красиво ложились в SLICEM спартана. ну и дешифратор команд чтобы был простой и лаконичный.
так вот, всю красоту и лаконичность сломала пара: некрасивая команда RETI и вызов прерывания. они вот совсем не ложились на ту ортогональность что была без них.

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

Страницы: 1 2 3 415 Следующая »

/ Форум / Флейм / ПроЭкты

2001—2018 © GameDev.ru — Разработка игр