Войти
ФлеймФорумЖелезо

А если ли у нас ностальгирующие по MOS 6502? (9 стр)

Страницы: 16 7 8 9 10 11 Следующая »
#120
14:23, 4 дек. 2017

nonamezerox
Ага, особенно отлично будет через Poke высчитывать где пиксель нарисовать вместо нативного кода. "Очень" быстро получится.


#121
14:34, 4 дек. 2017

monobogdan
> nonamezerox
> Ага, особенно отлично будет через Poke высчитывать где пиксель нарисовать
> вместо нативного кода. "Очень" быстро получится.

Не особо сложнее, у комодора в этом плане графический режим попроще чем у спека, там этих длбаных третей экрана нет.

#122
14:37, 4 дек. 2017

nonamezerox
ну про разрешение уже неправда тогда будет. У обоих бордюр есть который полэкрана закрывает.
Про спек хз, но там вроде как в NES, пишешь свои спрайты в область памяти где хранятся спрайты символов, затем в фреймбуффере уже пишешь ассоциированный с твоим спрайтом символ.
У Commodore64 есть аппаратные спрайты в которых можно записать спрайт и потом свободно отоображать.

#123
15:16, 4 дек. 2017

monobogdan
> Про спек хз, но там вроде как в NES, пишешь свои спрайты в область памяти где
> хранятся спрайты символов, затем в фреймбуффере уже пишешь ассоциированный с
> твоим спрайтом символ.

Неа))))

Там все по хардкору

Область пикселей занимает адресное пространство #4000 - #57FF, а область атрибутов #5800 - #5AFF. В свою очередь, область пикселей разбита на 3 части по 64 строки. Строение каждой трети одинаковое:

Строки выводятся в следующем порядке (отсчёт от нуля):

0, 8, 16, 24, 32, 40, 48, 56,

1, 9, 17, 25, 33, 41, 49, 57,

...

7, 15, 23, 31, 39, 47, 55, 63

У спектрума же - блоки 8х8, идущие подряд.

У коммодора то есть, блин

#124
17:44, 4 дек. 2017

nonamezerox
Да, адрес x/y нелинейный.
Изображение
Сниппеты ассовские даже есть, пойти на пиксель выше адреса/ на пиксель ниже, с учётом этой хрени (это быстрее чем использовать карту Y адресов).

#125
17:57, 4 дек. 2017

Разве там даже терминал так же как и обычные пиксели в RAM хранится? Или есть какой то массив байтов?

#126
18:05, 4 дек. 2017

Dexus
> Да, адрес x/y нелинейный.

Ага, можно эту схему адреса разложить на 2 составляющие. Пусть адрес полоски из 8 пикселей хранится в регистровой паре HL, тогда:
а) инкремент L переходит к такой же полоске в знакоместе справа (пока такое существует конечно)
б) инкремент H переходит к следующей полоске внутри текущего знакоместа (опять таки, пока она существует)
То есть если в HL находится адрес первого байта в знакоместе, то само знакоместо/символ можно быстро заполнить итерируя однобайтовыми инкрементами H.

#127
18:24, 4 дек. 2017

=A=L=X=
так расскажи поподробнее о CF и как складывать 16 битные числа на 8 битном цпу.

#128
18:46, 4 дек. 2017
  int16_t a, b;
  a += b;

000000r 1               .segment  "BSS"
000000r 1               
000000r 1               L001D:
000000r 1  00 00          .res  2,$00
000002r 1               L001E:
000002r 1  00 00          .res  2,$00
000004r 1               
000004r 1               .segment  "CODE"
000000r 1               
000000r 1               ;
000000r 1               ; a += b;
000000r 1               ;
000000r 1  AD rr rr       lda     L001E
000003r 1  18             clc
000004r 1  6D rr rr       adc     L001D
000007r 1  8D rr rr       sta     L001D
00000Ar 1  AD rr rr       lda     L001E+1
00000Dr 1  6D rr rr       adc     L001D+1

http://6502.org/tutorials/65c816opcodes.html#6.1.1.1

И даже 32 битное сложение, как выглядит laddeq - https://searchcode.com/codesearch/view/1744284/
такая же механика складываем последующее с учетом переноса.

  int32_t a, b;
  a += b;

000000r 1               .segment  "BSS"
000000r 1               
000000r 1               L001D:
000000r 1  00 00 00 00    .res  4,$00
000004r 1               L001E:
000004r 1  00 00 00 00    .res  4,$00
000008r 1               
000008r 1               .segment  "CODE"
000000r 1               
000000r 1               ;
000000r 1               ; a += b;
000000r 1               ;
000000r 1  AD rr rr       lda     L001E+3
000003r 1  85 rr          sta     sreg+1
000005r 1  AD rr rr       lda     L001E+2
000008r 1  85 rr          sta     sreg
00000Ar 1  AE rr rr       ldx     L001E+1
00000Dr 1  AD rr rr       lda     L001E
000010r 1  A0 rr          ldy     #<(L001D)
000012r 1  84 rr          sty     ptr1
000014r 1  A0 rr          ldy     #>(L001D)
000016r 1  20 rr rr       jsr     laddeq
#129
18:49, 4 дек. 2017

monobogdan
> так расскажи поподробнее о CF и как складывать 16 битные числа на 8 битном цпу.

8-битные команды сложения складывают два 8-битных значения и получают 9-битный результат, так как если складывать 255 + 255, то получается число 510, а оно влазит только в 9 бит (двоичное число = 111111110).
Вот этот самый верхний 9-ый бит в результате сложения и называется флагом переноса "carry flag" = CF.
Если теперь еще сделать чтобы команда сложения начав складывать прибавляла его к слагаемым как третий операнд - при этом один только нижний бит, то можно получить число 511 (255+255+взведенный CF) и замкнуть поле складываемых чисел.
При этом мы становимся способны сложить число любой битности просто начав суммировать байты по порядку отталкиваясь от нулевого CF, а с каждым байтом же принимая его из результата предыдущего сложения.

#130
9:49, 5 дек. 2017

Дровишки в срач:

нет, речь именно о центральном процессоре. дело в том, что при одинаковых частотах MOS6502 работает в среднем в 3(три) раза быстрее чем Z80.

каких инструкций ?

допустим установка константы в аккумулятор -
Z80: LD A, число - 7 тактов
6502: LDA #$число - 2 такта

чтение байта по абсолютному адресу в аккумулятор:
Z80: LD A,(адрес) - 13 тактов
6502: LDA $адрес - 4 такта

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

если есть желание продолжать MOS vs Zilog - лучше создать отдельную тему.

частота-то тактовая, и за сколько тактов процессор выполняет те или иные команды - ключевой фактор, равно важный как и конская или козья частота ))
и чтоб приведенные для примера команды, как ты говоришь были "По скорости исполнения инструкций они равны." надо чтоб Z80 был с в ТРИ раза большей частотой, даже чуть больше

простой процессор - быстрые команды, и быстрый доступ к памяти.
у зилога 8бит операции регистр-регистр - 4 такта (и это минимальное время исполнения команд, меньше 4 не бывает)
у 6502 регистров нет, зато операция с константой - 2 такта, с памятью из zero-page - 3 такта, то есть регистр-память у 6502 быстрее чем регистр-регистр у зилога.

#131
10:21, 5 дек. 2017

nonamezerox

Ну это частично сглаживалось тем, что у Z80 были более высокие частоты.
На самом деле тут причина со следствием поменяна - дизайн 6502 отталкивается как раз от частоты шины - она его и ведет, и потому он сделан так чтобы выполнять ровно одно элементарное действие за один цикл чтения/записи памяти с этой самой шины, это и есть его тактовая частота.
Дизайн Z80 отталкивается от своей внутренней частоты, которая может быть выше частоты памяти - у него потому говорят что команды разбиты на M-циклы (соответствующие доступам в память), которые разбиты на T-циклы (соответствующие частоте генератора).
Поэтому когда в 82 году выходит дешевейший комп тех лет - ZX Spectrum (модель с 48Кб стоит 175 фунтов стерлингов, это примерно 315$ по максимальному обменному курсу того года), то в нём стоит Z80 на 3,5 МГц.
Но в этом же году выпущенный Commodore 64 (с 64Кб за 595$) обладал MOS 6510 на 1 МГц.
Принцип в действии. Поэтому и "в 3 раза" собственно - эти 3 раза в частотах как раз и видны.

#132
11:28, 5 дек. 2017

nonamezerox
> Z80: LD A, число - 7 тактов
> 6502: LDA #$число - 2 такта


=A=L=X=
> Z80 на 3,5 МГц.

=A=L=X=
> 6510 на 1 МГц.

думаю, что поровну

#133
11:59, 5 дек. 2017

nonamezerox
> у зилога 8бит операции регистр-регистр - 4 такта (и это минимальное время
> исполнения команд, меньше 4 не бывает)

разве 4 такта не классическая система . fetch/decode/eval/write back ?

#134
10:04, 18 дек. 2017

Кстати то, что 6502 и его кузены плотно посажены на частоту памяти имеет смысл и потому что такова сама философия этих процессоров - немногочисленность количества регистров фактически обязывает к тому, что второй аргумент арифметико-логической команды берется из памяти - процессор этот за данными почти всегда лазил в память и богатство режимов адресации и zero-page - не от хорошей жизни так сказать потому там и появились. Поэтому у них архитектурно и не ставилось задачи такой - обогнать память.

Страницы: 16 7 8 9 10 11 Следующая »
ФлеймФорумЖелезо