|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Gigatron (компьютер на рассыпухе)
Author |
Message |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Я поискал компилятор ассемблера для Gigatron-а... от авторов вроде как его нет, поскольку ядро системы они вроде как написали на python... Но нашел я по пути пару статеек, где автор, которому, похоже, Gigatron понравился, подробно расписал как и что в этом скромном железе работает: Gigatron TTL microcomputerПрограммная архитектура Gigatron TTL microcomputer
_________________ iLavr
|
17 Aug 2020 18:04 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 865
|
Ассемблерный текст выглядит так: | | | | Code: #----------------------------------------------------------------------- # # ROM page 0: Boot # #-----------------------------------------------------------------------
align(0x100, 0x100)
# Give a first sign of life that can be checked with a voltmeter ld(0b0000); C('LEDs |OOOO|') ld(syncBits^hSync, OUT) # Prepare XOUT update, hSync goes down, RGB to black ld(syncBits, OUT) # hSync goes up, updating XOUT
# Simple RAM test and size check by writing to [1<<n] and see if [0] changes or not. ld(1); C('Quick RAM test and count') label('.countMem0') st([memSize],Y); C('Store in RAM and load AC in Y') ld(255) xora([Y,0]); C('Invert value from memory') st([Y,0]); C('Test RAM by writing the new value') st([0]); C('Copy result in [0]') xora([Y,0]); C('Read back and compare if written ok') bne(pc()); C('Loop forever on RAM failure here') ld(255) xora([Y,0]); C('Invert memory value again') st([Y,0]); C('To restore original value') xora([0]); C('Compare with inverted copy') beq('.countMem1'); C('If equal, we wrapped around') ld([memSize]) bra('.countMem0'); C('Loop to test next address line') adda(AC); C('Executes in the branch delay slot!') label('.countMem1') | | | | |
Но это не что иное, как программа на питоне. Просто в начале файла подключается asm.py Это, как бы, "микрокод". Он делает много чего: вывод видео, звука, и наконец выполняет инструкции либо vCPU (собственно процессор, как он был задуман), либо 6502 (более поздняя дополнительная реализация). Ассемблера для vCPU вроде нет, но программы пишутся на более высокоуровневом "языке" GCL (gcl0x.py), который компилируется в команды vCPU, и там вроде как есть возможность делать inline-вставки. Сама прорамма записывается в ПЗУ в виде таблицы (в листинге это видно): Наличие "трамплинов" вроде как говорит о том, что программа копируется в ОЗУ, т.к. в компиляторе GCL на мой взгляд эти трамплины никак не учитываются. Считать что-либо из ПЗУ обычным способом возможности нет, поэтому данные грузятся выполняя команду ld через "трамплин". Т.е. в ПЗУ блок данных содержит этакие "дырки". Не думаю, что команды vCPU выполняются прямо из ПЗУ. Собственно, вот тут видно:
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
18 Aug 2020 02:27 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 865
|
Ассемблер для vCPU всё же есть: vasm.py, два года назад, когда я скачивал репозиторий его не было. Программа на vasm
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
18 Aug 2020 02:40 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Репозиторий я тоже скачал 28 июля 2020 г., сам еще толком не разбирался, что там, но пишут, что: С таким "винигретом" ковыряться было неохота, и я решил поискать отдельный компилятор ассемблера. Gigatron всё же довольно популярным оказался: его и на ПЛИС уже повторили, и софт народ пытается писать - может кто и слепил уже отдельный удобный компилятор ассемблера...
_________________ iLavr
|
18 Aug 2020 04:15 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 865
|
Если почитать документ по языку GCL, то становится понятно, что этот язык и ассемблер vCPU - это практически одно и то-же, просто разные варианты синтаксиса.
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
18 Aug 2020 04:54 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Нет желания ковыряться в их хитровыдуманных языках GCL и виртуальном ассемблер vCPU... Есть такая мысль, что Gigatron в принципе нетрудно повторить в Proteus, и на родном ассемблереон, по идее, должен довольно шустро шевелиться даже в виде модели... Непонятным для такого проекта представляется устройство ввода: в оригинале - это либо "джойстик" от "Денди", либо PS/2 клавиатура через адаптер на ATTiny...
_________________ iLavr
|
18 Aug 2020 06:04 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 865
|
Ну, светодиодами поморгать ты "на родном ассемблере" в Proteus-е сможешь, а вот формировать видео-сигнал и паралельно делать что-либо полезное у тебя вряд-ли получится.
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
18 Aug 2020 11:15 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Это просто будет очень медленно, но непреодолимых препятствий этому нет, и на хорошем современном компьютере шевелиться всё будет. Библиотека dll с исходным кодом для цветного дисплея у нас в Proteus-е давно есть - это не проблема. Б ольшая, но тоже принципиально преодолимая проблема - это как раз устройство ввода. Клавиатуру или "джойстик" придётся "нарисовать" заново, как я делал в проекте EDUC-8 Microcomputer. Просто это выполнимая, но объёмная и совершенно неинтересная работа...
_________________ iLavr
|
18 Aug 2020 15:06 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
По образу-то, действительно по образу, вот только коды, к сожалению, не совпадают даже частично... Была у меня слабенькая надежда на хотя бы частичное их совпадение... Ассемблерные коды Gigatron взяты отсюда: Programming the Gigatron Ассемблерные коды Gigatron | | | | Code: inst # pseudo-C mnemonic ------------------------------------------------------------- 02 586: /*nop*/ // nop
00 54305: A = oper // ld $00 01 505: A = RAM[oper] // ld [$00] 03 1: A = IN // ld in 05 26: A = RAM[X] // ld [x] 09 2: A = RAM[(Y<<8)|oper] // ld [y,$00] 0d 32: A = RAM[(Y<<8)|X] // ld [y,x] 10 1: X = oper // ld $00,x 11 27: X = RAM[oper] // ld [$00],x 12 11: X = A // ld ac,x 14 326: Y = oper // ld $00,y 15 19: Y = RAM[oper] // ld [$00],y 16 2: Y = A // ld ac,y 18 14: OUT = oper // ld $00,out 19 6: OUT = RAM[oper] // ld [$00],out
20 33: A &= oper // anda $00 21 8: A &= RAM[oper] // anda [$00] 25 2: A &= RAM[X] // anda [x] 29 2: A &= RAM[(Y<<8)|oper] // anda [y,$00] 30 9: X = A & oper // anda $00,x
40 14: A |= oper // ora $00 41 17: A |= RAM[oper] // ora [$00] 45 3: A |= RAM[X] // ora [x] 50 6: X = A | oper // ora $00,x 5d 3: OUT = A | RAM[(Y<<8)|X++] // ora [y,x++],out
60 16: A ^= oper // xora $bf 61 11: A ^= RAM[oper] // xora [$00] 69 5: A ^= RAM[(Y<<8)|oper] // xora [y,$00]
80 402: A += oper // adda $00 81 28: A += RAM[oper] // adda [$00] 82 36: A *= 2 // adda ac 85 2: A += RAM[X] // adda [x] 89 6: A += RAM[(Y<<8)|oper] // adda [y,$00] 8d 4: A += RAM[(Y<<8)|X] // adda [y,x] 90 11: X = A + oper // adda $00,x 91 1: X = A + RAM[oper] // adda [$00],x 92 2: X = 2*A // adda ac,x 95 1: Y = A + RAM[oper] // adda [$00],y
a0 28: A -= oper // suba $00 a1 3: A -= RAM[oper] // suba [$00] a5 5: A -= RAM[X] // suba [x] b0 3: X = A - oper // suba $00,x
c0 4: RAM[oper] = oper // st $00,[$00] c2 662: RAM[oper] = A // st [$00] c3 2: RAM[oper] = IN // st in,[$00] c6 8: RAM[X] = A // st [x] ca 6: RAM[(Y<<8)|oper] = A // st [y,$00] ce 9: RAM[(Y<<8)|X] = A // st [y,x] d2 7: RAM[oper] = A; X = A // st [$00],x d6 8: RAM[oper] = A; Y = A // st [$00],y de 27: RAM[(Y<<8)|X++] = A // st [y,x++] dc 52: RAM[(Y<<8)|X++] = oper // st $00,[y,x++]
e0 314: PC = (Y<<8)|oper // jmp y,$00 e1 2: PC = (Y<<8)|RAM[oper] // jmp y,[$00] e2 13: PC = (Y<<8)|A // jmp y,ac
e4 3: if (A > 0) PC = hi(PC)|oper // bgt $00 e8 14: if (A < 0) PC = hi(PC)|oper // blt $00 ec 30: if (A != 0) PC = hi(PC)|oper // bne $00 f0 10: if (A == 0) PC = hi(PC)|oper // beq $00 f4 5: if (A >= 0) PC = hi(PC)|oper // bge $00 f8 2: if (A <= 0) PC = hi(PC)|oper // ble $00 fc 497: PC = hi(PC)|oper // bra $00 fd 2: PC = hi(PC)|RAM[oper] // bra [$00] fe 612: PC = hi(PC)|A // bra ac | | | | |
_________________ iLavr
|
18 Aug 2020 15:36 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Да, я тоже по случаю прочитал вот тут: In Memoriam - Marcel van Kervinck что-то типа эпитафии...
_________________ iLavr
|
19 Aug 2020 14:21 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Есть вот какое предположение на этот повод: 1. В оригинале Gigatron работает с "джойстиком" от "Денди", следовательно, на родном ассемблереон должен быть способен поддерживать и родную клавиатуру от "Денди", которая работает через порт "джойстика": Такую клавиатуру смоделировать в Proteus и просто, и даже интересно! 2. Конечно, это круто, что Gigatron работает на VGA-монитор без лишнего железа! Но это и съедает его довольно неслабую тактовую частоту в 6.25 МГц... А вот если исключить эту опцию, в которой и прелести-то особой нет: всего-то 160х120 точек, и подключить на этот порт обычный LCD дисплейчик с интерфейсом SPI, то процессор станет свободен от необходимости постоянного видеовывода, и его мощности можно обратить на полезную программу. LCD дисплейчик не обязательно брать от NOKIA 3310, сейчас выбор дисплейчиков побогаче! С этими двумя решениями Gigatron и под Proteus должен приемлемо шевелиться... Только вот с софтом у Gigatron-а всё довольно запутанно...
_________________ iLavr
|
20 Aug 2020 11:53 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 865
|
Да, если процессору vCPU остаются такты только во время обратного хода луча по вертикали, то он получит не больше 9% времени. (из 525 остаются только 45 и то не полность). Но! Размер точки Gigatron-а 4х4 пикселя, то есть он повторяет каждую сканлинию 4 раза. И есть режимы, когда некоторые сканлинии остаются чёрными (в первой версии только одна из 4-х, в последних до трёх из 4-х). То есть даже если имеем только одну чёрную, то будет (45+120)/525 уже почти 30%, а с тремя будет уже около 77%. Правда в таком режиме картинка уже выглядит коряво. Режим переключается кнопкой на джойстике в любой момент.
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
20 Aug 2020 23:43 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22625 Location: Silicon Valley
|
так как там видео генерируется программно, то надо полагать весь существующий софт ожидает телевизора...
|
21 Aug 2020 01:11 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 865
|
Почему телевизора? Там же написано, VGA 640x480 59.94Hz
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
21 Aug 2020 01:46 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22625 Location: Silicon Valley
|
Ну в штатах почти все телеки умеют VGA 59.94Hz
|
21 Aug 2020 01:58 |
|
|
Who is online |
Users browsing this forum: No registered users and 29 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
|
|