4-битный бейдж Суперконференции Хакадея 2022 года

4-битные микроконтроллеры и микропроцессоры (прошлое, настоящее, будущее)

Moderator: Lavr

User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 4-битный бейдж Суперконференции Хакадея 2022 года

Post by Lavr »

Shaos wrote:
Lavr wrote:Я ж не знаю, кому это "видимо доку надо подкрутить чуток" - тебе или самому Voja..
Ну я свою доку написать не в состоянии, не говоря уже о том, чтобы исправить чужую :lol:
Ну ты там контактируешь в Суперконференции Хакадея 2022 года - может Voja подсказали, что "видимо доку надо подкрутить чуток" - я так подумал.
Shaos wrote:
Lavr wrote:Интересно, кстати, если регистр JSR - 4-битный...
Он также как PCL работает - старшие 8 бит берутся из PCH и PCM и вперёд (но с занесением адреса возврата в стек):
Так вот это совершенно очевидно, если "внимательно читать всё выше", из-за этого и вопрос возник!

Если в вызове подпрограммы меняются лишь младшие 4-бита в 12-битном адресе, а "старшие 8 бит
берутся из PCH и PCM", то переход возможен лишь в пределах 2^4 = 16 позиций адреса.
Если мы это делаем у верхней границы параграфа, то "вперед" мы перейти не сможем!
Необходим инкремент PCH и PCM - в этом суть вопроса была.

Так-то сама проблема известна из 6502 - вот и интересно, как Voja её решил.
iLavr
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: 4-битный бейдж Суперконференции Хакадея 2022 года

Post by Shaos »

Меняется весь 12-битный адрес в PC - нет у никаких проблем со сменой параграфа

Смотри на картинку - значения PCH и PCM (вместе с JSR) копируются в PC (а перед этим старый PC копируется в стек):

Image

т.е. для дальнего перехода копируем новые значения в PCH и PCM (при этом сам PC инкрементируется как и раньше), а потом пишем младший ниббл адреса в JSR, что и инициирует перескок
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: 4-битный бейдж Суперконференции Хакадея 2022 года

Post by Shaos »

Shaos wrote:Кстати вот уже первая реализация этого ЦПУ на языке описания железа есть - правда это какой-то экзотический Amaranth HDL над Питоном, но тем не менее:

https://github.com/ylm/nibblecpu
Вот тестовая программка, которая используется для проверки работоспособности этой "железной" реализации:

Code: Select all

test_prg = [
        0x924, #MOV R2, 4
        0x9C5, #MOV JSR, 5
        0x042, #DSZ R2
        0xFFD, #JR -3
        0xFFB, #JR -5
        0x142, #ADD R4, R2
        0x0E0, #RET 0
        0xFF9, #JR -7
        0xFFE, #JR -02
        0x040, #DSZ R0
        0x030, #DEC R0
        0x300, #SUB R0, R0
        0x020, #INC R0
        0x040, #DSZ R0
        0xF00, #JR  01
        0x020, #INC R0
        0x016, #ADD R0, 6
        0xFFF] #JR -01
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: 4-битный бейдж Суперконференции Хакадея 2022 года

Post by Shaos »

Lavr wrote: Если в вызове подпрограммы меняются лишь младшие 4-бита в 12-битном адресе, а "старшие 8 бит
берутся из PCH и PCM", то переход возможен лишь в пределах 2^4 = 16 позиций адреса.
Если мы это делаем у верхней границы параграфа, то "вперед" мы перейти не сможем!
Необходим инкремент PCH и PCM - в этом суть вопроса была.
Я понял в чём проблема - на картинке PCH и PCM равны старшим 8 битам PC, но в общем случае это может быть и не так - в PCH и PCM просто будут оставаться записанные туда заранее значения и это никак не влияет на PC, который всегда по ходу пьесы будет инкрементироваться в пределах всех 12 бит - т.е. проблема со страницами, о которой ты говоришь, касается только коротких переходов и коротких вызовов подпрограмм - по хорошему каждый переход и каждый вызов подпрограммы должен иметь в себе MOV PC,NN первой командой для замены PCH и PCM на правильные значения и уже потом MOV PCL,n или MOV JSR,n (разве что только эта программа не написана вручную чтобы влезть в пределы 16-словной страницы).
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: 4-битный бейдж Суперконференции Хакадея 2022 года

Post by Shaos »

Shaos wrote:Вот тестовая программка, которая используется для проверки работоспособности этой "железной" реализации:

Code: Select all

test_prg = [
        0x924, #MOV R2, 4
        0x9C5, #MOV JSR, 5
        0x042, #DSZ R2
        0xFFD, #JR -3
        0xFFB, #JR -5
        0x142, #ADD R4, R2
        0x0E0, #RET 0
        0xFF9, #JR -7
        0xFFE, #JR -02
        0x040, #DSZ R0
        0x030, #DEC R0
        0x300, #SUB R0, R0
        0x020, #INC R0
        0x040, #DSZ R0
        0xF00, #JR  01
        0x020, #INC R0
        0x016, #ADD R0, 6
        0xFFF] #JR -01
Горожу поддержку этого процыка в своём ассемблере RASM - относительные переходы JR на метку заработали с полпинка (т.к. я таковые уже делал в RASM для поддержки 8086 в своё время), а вот с длинными переходами видимо придётся забубенить "синтетические" операции JMP label и CALL label которые внутри будут представляться двумя инструкциями MOV PC,label>>4 и MOV PCL,label&15 (или MOV JSR,label&15 в случае CALL). Также команды вида MOV [NN],R0 и MOV R0,[NN] у меня в ассемблере непредставимы, поэтому я для них поменяю мнемоники на соответственно SR0 NN (Save R0) и LR0 NN (Load R0).
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: 4-битный бейдж Суперконференции Хакадея 2022 года

Post by Shaos »

Voja предлагает в моём ассемблере сразу же поддержать формат бинарника для засылки в бейдж:

Code: Select all

1. Header, 6 bytes: 00 FF 00 FF A5 C3
2. Program length, 2 bytes (in 16-bit words, Low byte first): NN NN
3. Program, NN 0N×Program Length (Low first): NN 0N, NN 0N, NN 0N...
4. 16-bit Checksum for items 2 and 3 only, 2 bytes (Low first): NN NN
Я скорее всего оставлю бинарь как есть (в big-endian формате), а превращаться в правильный формат с заголовком и контрольной суммой он будет при засылке в бейдж - я могу даже спец.программу для этого написать, которая будет с последовательным портом работать.

P.S. Также он говорит, что официальный ассемблер будет на питоне (и будет написан не им).

P.P.S. На http://hackaday.io я веду работу над ассемблером в рамках своего проекта "nedoPC SDK" (https://hackaday.io/project/158426) и он сегодня даже попал в тренды на http://hackaday.com :)
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: 4-битный бейдж Суперконференции Хакадея 2022 года

Post by Shaos »

Shaos wrote:Горожу поддержку этого процыка в своём ассемблере RASM - относительные переходы JR на метку заработали с полпинка (т.к. я таковые уже делал в RASM для поддержки 8086 в своё время), а вот с длинными переходами видимо придётся забубенить "синтетические" операции JMP label и CALL label которые внутри будут представляться двумя инструкциями MOV PC,label>>4 и MOV PCL,label&15 (или MOV JSR,label&15 в случае CALL). Также команды вида MOV [NN],R0 и MOV R0,[NN] у меня в ассемблере непредставимы, поэтому я для них поменяю мнемоники на соответственно SR0 NN (Save R0) и LR0 NN (Load R0).
Выложил подрихтованный RASM, который поддерживает этот CPU ( я его назвал Voja4 по аналогии с уже поддержанным Lavr4 ; )

Частично сгенерённая, частично составленная вручную таблица на 2730 правил:

https://gitlab.com/nedopc/sdk/-/blob/master/rasm/voja4.tab

Среди мнемоник есть 2 "синтетические" (как я и писал выше), которые на самом деле состоят из пары инструкций каждая - это "дальние" JMP и CALL:

Code: Select all

JMP              #0E B #09 #D0+ // MOV_PC,(LBL>>4) MOV_PCL,LBL&15
CALL             #0E B #09 #C0+ // MOV_PC,(LBL>>4) MOV_JSR,LBL&15
Исходник rasm.c расширился, чтобы поддержать новые правила:

https://gitlab.com/nedopc/sdk/-/blob/master/rasm/rasm.c

Чтобы поставить себе новый rasm делаем следующее:

Code: Select all

> git clone https://gitlab.com/nedopc/sdk.git
Cloning into 'sdk'...
remote: Enumerating objects: 1216, done.
remote: Counting objects: 100% (1216/1216), done.
remote: Compressing objects: 100% (506/506), done.
remote: Total 1216 (delta 732), reused 1130 (delta 688), pack-reused 0
Receiving objects: 100% (1216/1216), 491.77 KiB | 0 bytes/s, done.
Resolving deltas: 100% (732/732), done.
Checking connectivity... done.
> cd sdk
> cd rasm
> make
gcc -O2 -I../common -c rasm.c
gcc -O2 -I../common -c ../common/my_text.c
gcc rasm.o my_text.o -o rasm
Исходник должен собираться любым 16-битным, 32-битным или 64-битным ANSI-C компилятором (даже big-endian должен работать).
Могу собрать версию для доса и выложить, если кому надо ;)

P.S. А между тем официальный ассемблер для бейджа так ещё и не вышел :)
Tom Nardi wrote: Badge tools just need Python 3.6+, so you should be set assuming you're installing latest Ubuntu.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: 4-битный бейдж Суперконференции Хакадея 2022 года

Post by Shaos »

Теперь мне надо по быстрому эмуль нагородить
Наверное проще всего будет написать его на Robby и вывесить в веб (будет работать на движке Circuits.CC)
А в перспективе с помощью nedoPC SDK можно будет портировать это на любой поддерживаемый недокомп...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: 4-битный бейдж Суперконференции Хакадея 2022 года

Post by Shaos »

Shaos wrote:Теперь мне надо по быстрому эмуль нагородить
Наверное проще всего будет написать его на Robby и вывесить в веб (будет работать на движке Circuits.CC)
А в перспективе с помощью nedoPC SDK можно будет портировать это на любой поддерживаемый недокомп...
Вот как-то так оно может выглядеть:
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: 4-битный бейдж Суперконференции Хакадея 2022 года

Post by Shaos »

Shaos wrote:Интересная особенность инструкции SKIP - она может пропустить 1,2,3 или 4 инструкции по условию C,NC,Z,NZ (ещё есть флаг V. однако его надо проверять отдельно как произвольный бит в памяти).
SKIP.png
В моём РобоАссемблере оно поддерживается вот так:

Code: Select all

SKIP_C,4         #00 #F0
SKIP_C,1         #00 #F1
SKIP_C,2         #00 #F2
SKIP_C,3         #00 #F3
SKIP_NC,4        #00 #F4
SKIP_NC,1        #00 #F5
SKIP_NC,2        #00 #F6
SKIP_NC,3        #00 #F7
SKIP_Z,4         #00 #F8
SKIP_Z,1         #00 #F9
SKIP_Z,2         #00 #FA
SKIP_Z,3         #00 #FB
SKIP_NZ,4        #00 #FC
SKIP_NZ,1        #00 #FD
SKIP_NZ,2        #00 #FE
SKIP_NZ,3        #00 #FF
(я специально не стал поддерживать аргумент как произвольное число т.к. тут 0 в аргументе означает пропуск 4 инструкций)

Как можно видеть напрямую можно скипать только по двум флагам - C и Z. Флаг переполнения после операций со знаком хранится в спец-регистре и может быть использован вот так (взято из коммента от автора):

Code: Select all

1101 1111 0100   MOV   R0, [0xF4]      ;  R0  <----  [RdFlags]
0000 1001 0001   BIT   R0, 1           ;  Z  <----  Vflag
0000 1111 1110   SKIP  NZ, 2           ;  Skip next 2 instructions if NZ
... next 2 instructions could be an absolute jump, like MOV PC, NN and MOV PCL, N
На моём ассемблере это будет так:

Code: Select all

@RDFLAGS EQU #F4

LABEL:
    LR0 @RDFLAGS    // R0  <----  [RdFlags]
    BIT_R0, 1    // Z  <----  Vflag
    SKIP_NZ,2    // Skip next 2 instructions if NZ
    JMP    LABEL    // an absolute jump, like MOV PC, NN and MOV PCL, N
что будет сассемблировано вот так:

Code: Select all

This listing was generated by RoboAssembler v2.6 by Shaos <me@shaos.net>


 000 0D LABEL:	LR0 @RDFLAGS	// R0  <----  [RdFlags]
     F4
 001 00		BIT_R0, 1	// Z  <----  Vflag
     91
 002 00		SKIP_NZ,2	// Skip next 2 instructions if NZ
     FE
 003 0E		JMP	LABEL	// an absolute jump, like MOV PC, NN and MOV PCL, N
     00
 004 09
     D0



@RDFLAGS 	00F4
LABEL		0000
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: 4-битный бейдж Суперконференции Хакадея 2022 года

Post by Shaos »

Сегодня видео вышло про бейдж от самого автора!!!


https://youtu.be/ix__enrtYF4

(продублировал в первом сообщении топика)

P.S. в видео показано пошаговое выполнение программы "бегущая строка" при котором индикаторы подсвечивают выполняемые инструкции - таким образом можно попробовать "прочитать" программу :)

P.P.S. в пятницу вылетаю в LA :rotate:
Я тут за главного - если что шлите мыло на me собака shaos точка net
imsushka
Maniac
Posts: 232
Joined: 01 Jan 2022 04:34
Location: USSR, Tashkent

Re: 4-битный бейдж Суперконференции Хакадея 2022 года

Post by imsushka »

бейдж фигня, а вот чо у него с зади за экран с жизнью, не понятно
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: 4-битный бейдж Суперконференции Хакадея 2022 года

Post by Shaos »

imsushka wrote:бейдж фигня, а вот чо у него с зади за экран с жизнью, не понятно
Ну его же проекты - ищи на хакадее точка ио

Сижу на парти по поводу открытия суперкона в г.Пасадена - разъемчик к плате расширения уже припаял  :)

Думаю успею ли тетрис для бейджа сделать ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: 4-битный бейдж Суперконференции Хакадея 2022 года

Post by Shaos »

Тетрис с товарищем сделать таки успели, но только путём полной перепрошивки фирмвари в бейдже :)
Screenshot from 2022-11-12 23-03-26.png
https://www.youtube.com/watch?v=X-XJmlMLx7k&t=1552s

Также я добавил к своему бейджу 4 кнопочки Cherry-MX, которые будут управлять "правильным" тетрисом, который уже будет 4-битным:
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net