nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 08:12



Reply to topic  [ 44 posts ]  Go to page Previous  1, 2, 3
4-битный бейдж Суперконференции Хакадея 2022 года 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
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


22 Oct 2022 04:10
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Меняется весь 12-битный адрес в PC - нет у никаких проблем со сменой параграфа

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

Image

т.е. для дальнего перехода копируем новые значения в PCH и PCM (при этом сам PC инкрементируется как и раньше), а потом пишем младший ниббл адреса в JSR, что и инициирует перескок

_________________
:dj: https://mastodon.social/@Shaos


22 Oct 2022 11:31
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Shaos wrote:
Кстати вот уже первая реализация этого ЦПУ на языке описания железа есть - правда это какой-то экзотический Amaranth HDL над Питоном, но тем не менее:

https://github.com/ylm/nibblecpu

Вот тестовая программка, которая используется для проверки работоспособности этой "железной" реализации:
Code:
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

_________________
:dj: https://mastodon.social/@Shaos


22 Oct 2022 15:24
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
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-словной страницы).

_________________
:dj: https://mastodon.social/@Shaos


23 Oct 2022 13:14
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Shaos wrote:
Вот тестовая программка, которая используется для проверки работоспособности этой "железной" реализации:
Code:
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).

_________________
:dj: https://mastodon.social/@Shaos


25 Oct 2022 01:20
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Voja предлагает в моём ассемблере сразу же поддержать формат бинарника для засылки в бейдж:
Code:
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 :)


Attachments:
Screenshot from 2022-10-25 23-38-15.png
Screenshot from 2022-10-25 23-38-15.png [ 657 KiB | Viewed 4802 times ]

_________________
:dj: https://mastodon.social/@Shaos
25 Oct 2022 23:03
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
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:
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:
> 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.

_________________
:dj: https://mastodon.social/@Shaos


30 Oct 2022 20:48
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Теперь мне надо по быстрому эмуль нагородить
Наверное проще всего будет написать его на Robby и вывесить в веб (будет работать на движке Circuits.CC)
А в перспективе с помощью nedoPC SDK можно будет портировать это на любой поддерживаемый недокомп...

_________________
:dj: https://mastodon.social/@Shaos


31 Oct 2022 01:40
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Shaos wrote:
Теперь мне надо по быстрому эмуль нагородить
Наверное проще всего будет написать его на Robby и вывесить в веб (будет работать на движке Circuits.CC)
А в перспективе с помощью nedoPC SDK можно будет портировать это на любой поддерживаемый недокомп...

Вот как-то так оно может выглядеть:


Attachments:
Screenshot from 2022-10-31 22-23-04.png
Screenshot from 2022-10-31 22-23-04.png [ 8.22 KiB | Viewed 4717 times ]

_________________
:dj: https://mastodon.social/@Shaos
31 Oct 2022 22:36
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Shaos wrote:
Интересная особенность инструкции SKIP - она может пропустить 1,2,3 или 4 инструкции по условию C,NC,Z,NZ (ещё есть флаг V. однако его надо проверять отдельно как произвольный бит в памяти).


Attachment:
SKIP.png
SKIP.png [ 120.01 KiB | Viewed 4689 times ]


В моём РобоАссемблере оно поддерживается вот так:
Code:
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:
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:
@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:
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

_________________
:dj: https://mastodon.social/@Shaos


02 Nov 2022 20:24
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Сегодня видео вышло про бейдж от самого автора!!!


https://youtu.be/ix__enrtYF4

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

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

P.P.S. в пятницу вылетаю в LA :rotate:

_________________
:dj: https://mastodon.social/@Shaos


02 Nov 2022 21:09
Profile WWW
Senior

Joined: 01 Jan 2022 04:34
Posts: 162
Location: USSR, Tashkent
Reply with quote
бейдж фигня, а вот чо у него с зади за экран с жизнью, не понятно


03 Nov 2022 07:15
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
imsushka wrote:
бейдж фигня, а вот чо у него с зади за экран с жизнью, не понятно

Ну его же проекты - ищи на хакадее точка ио

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

Думаю успею ли тетрис для бейджа сделать ;)

_________________
:dj: https://mastodon.social/@Shaos


04 Nov 2022 19:41
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Тетрис с товарищем сделать таки успели, но только путём полной перепрошивки фирмвари в бейдже :)

Attachment:
Screenshot from 2022-11-12 23-03-26.png
Screenshot from 2022-11-12 23-03-26.png [ 651.36 KiB | Viewed 4410 times ]
https://www.youtube.com/watch?v=X-XJmlMLx7k&t=1552s

Также я добавил к своему бейджу 4 кнопочки Cherry-MX, которые будут управлять "правильным" тетрисом, который уже будет 4-битным:


Attachments:
Supercon6-ext4keys.jpg
Supercon6-ext4keys.jpg [ 460.1 KiB | Viewed 4411 times ]

_________________
:dj: https://mastodon.social/@Shaos
12 Nov 2022 23:58
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 44 posts ]  Go to page Previous  1, 2, 3

Who is online

Users browsing this forum: No registered users and 4 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.