Автор |
Сообщение |
|
|
Заголовок сообщения: |
Re: форт-машина |
|
|
forth@km.ru писал(а): подскажите, как сделать запуск "микрокода" команд ВМ через jump table ? сейчас опкоды ВМ тупо перебираются парами команд cpi/breq, для запуска последней команды понадобится 256 машинных циклов:
один из вариантов Код: mov zl,op ; байт код. subi zl,low(-TabJMP*2) ; таким образом прибавляем адрес таблицы. sbci zh,high(-TabJMP*2) ijmp ; Переход на требуемый . . . . . TabJMP: rjmp opc_00 ; 256 rjmp-ов rjmp opc_01 rjmp opc_02 . . . rjmp opc_FE rjmp opc_FF
[quote="forth@km.ru"]
подскажите, как сделать запуск "микрокода" команд ВМ через jump table ? сейчас опкоды ВМ тупо перебираются парами команд cpi/breq, для запуска последней команды понадобится 256 машинных циклов:
[/quote]
один из вариантов
[code] mov zl,op ; байт код. subi zl,low(-TabJMP*2) ; таким образом прибавляем адрес таблицы. sbci zh,high(-TabJMP*2) ijmp ; Переход на требуемый . . . . . TabJMP: rjmp opc_00 ; 256 rjmp-ов rjmp opc_01 rjmp opc_02 . . . rjmp opc_FE rjmp opc_FF
[/code]
|
|
|
|
Добавлено: Вс дек 11, 2011 20:53 |
|
|
|
|
|
Заголовок сообщения: |
Re: форт-машина |
|
|
26 сентября, 21:49 Открыт исходный код прошивки DIY-компьютера Fignition Код: Джулиан Скидмор (Julian Skidmore) опубликовал исходный код прошивки для своего 8-битного самодельного компьютера Fignition.
Fignition — это маленький (но полноценный) DIY-компьютер, основанный на микроконтроллере AVR ATMega168 и имеющий 8 КБ ОЗУ (расширяется до 32 КБ) и 384 КБ flash-памяти, 8-кнопочную клавиатуру, композитный видеовыход (PAL) и USB-выход (тип B), через который осуществляется питание устройства. Имеется и доступ к шине I2C. В качестве операционной системы и языка программирования выступает диалект Forth.
Компьютер распространяется в виде 46 отдельных деталей, которые предлагается собрать самостоятельно с помощью паяльника. Стоимость составляет 20 фунтов стерлингов. По заявлению автора проекта, производительность компьютера в несколько раз превосходит такие компьютеры 80-х, как ZX Spectrum и Jupiter Ace.
Код прошивки доступен под лицензией GNU GPLv3 на популярном хостинге кода GitHub. Чуть позже Джулиан обещал выложить в открытый доступ материалы по аппаратной части своего устройства. https://sites.google.com/site/libby8dev/fignition сайт разработчика https://github.com/Snial/FIGnition код прошивки
26 сентября, 21:49 Открыт исходный код прошивки DIY-компьютера Fignition [code]Джулиан Скидмор (Julian Skidmore) опубликовал исходный код прошивки для своего 8-битного самодельного компьютера Fignition.
Fignition — это маленький (но полноценный) DIY-компьютер, основанный на микроконтроллере AVR ATMega168 и имеющий 8 КБ ОЗУ (расширяется до 32 КБ) и 384 КБ flash-памяти, 8-кнопочную клавиатуру, композитный видеовыход (PAL) и USB-выход (тип B), через который осуществляется питание устройства. Имеется и доступ к шине I2C. В качестве операционной системы и языка программирования выступает диалект Forth.
Компьютер распространяется в виде 46 отдельных деталей, которые предлагается собрать самостоятельно с помощью паяльника. Стоимость составляет 20 фунтов стерлингов. По заявлению автора проекта, производительность компьютера в несколько раз превосходит такие компьютеры 80-х, как ZX Spectrum и Jupiter Ace.
Код прошивки доступен под лицензией GNU GPLv3 на популярном хостинге кода GitHub. Чуть позже Джулиан обещал выложить в открытый доступ материалы по аппаратной части своего устройства.[/code] [url]https://sites.google.com/site/libby8dev/fignition[/url] сайт разработчика [url]https://github.com/Snial/FIGnition[/url] код прошивки
|
|
|
|
Добавлено: Вс дек 11, 2011 15:02 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
forth@km.ru писал(а): мне проще в RU.EMBEDDED спросить
Если поленился заглядывать - там народ очень плотно занимается AVR. При чём с практическими целями. При чём некоторые возились (не знаю, как сейчас) с Фортом.
[quote="forth@km.ru"]мне проще в RU.EMBEDDED спросить[/quote]
Если поленился заглядывать - там народ очень плотно занимается AVR. При чём с практическими целями. При чём некоторые возились (не знаю, как сейчас) с Фортом.
|
|
|
|
Добавлено: Пт июл 14, 2006 12:59 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Примерно так:
Сначала вычитается значение из региcтра Z,
а потом команда IJMP
Примерно так:
Сначала вычитается значение из региcтра Z,
а потом команда IJMP :)
|
|
|
|
Добавлено: Пт июл 14, 2006 12:08 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Посмотри как сделано например для AVR
с сайта tinyboot.com ( FF302 IDE в разделе фирмваре )
Но там тоже вроде замудрено:)
Посмотри как сделано например для AVR
с сайта tinyboot.com ( FF302 IDE в разделе фирмваре )
Но там тоже вроде замудрено:)
|
|
|
|
Добавлено: Пт июл 14, 2006 12:03 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
я бы делал проверками битов сначала, т.е.
что-то подобное вот такому "кусту":
: blk_00 ... ; : blk_01 ... ; : blk_10 ... ; : blk_11 ... ;
: blk_1 dup 40 and if blk_11 then blk_10 else ;
: blk_0 dup 40 and if blk_01 then blk_00 else ;
: cmd dup 80 and if blk_1 then blk_0 else ;
Тогда, на каждую команду только 8 проверок.
p.s. это я для понятности на форте написал, а так на асме все, конечно
я бы делал проверками битов сначала, т.е.
что-то подобное вот такому "кусту":
[b]: blk_00 ... ; : blk_01 ... ; : blk_10 ... ; : blk_11 ... ;
: blk_1 dup 40 and if blk_11 then blk_10 else ;
: blk_0 dup 40 and if blk_01 then blk_00 else ;
: cmd dup 80 and if blk_1 then blk_0 else ;[/b]
Тогда, на каждую команду только 8 проверок.
p.s. это я для понятности на форте написал, а так на асме все, конечно :)
|
|
|
|
Добавлено: Пт июл 14, 2006 11:49 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Balancer писал(а):
мне проще в RU.EMBEDDED спросить
[quote="Balancer"]Пообщайся с народом в http://forums.airbase.ru[/quote]
мне проще в RU.EMBEDDED спросить
|
|
|
|
Добавлено: Пт июл 14, 2006 10:24 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Пообщайся с народом в http://forums.airbase.ru/index.php?topic=32548
в http://forums.airbase.ru/index.php?topic=34041
и т.п.
|
|
|
|
Добавлено: Пт июл 14, 2006 10:13 |
|
|
|
|
|
Заголовок сообщения: |
форт-машина |
|
|
начал сегодня писать FVM для AVR+32K XRAM, обнаружил что интерпретатор байт-кода
идеально ложится на систему команд и архитектуру (три 16-битных индексных регистра XYZ) AVR
подскажите, как сделать запуск "микрокода" команд ВМ через jump table ? сейчас опкоды ВМ тупо перебираются парами команд cpi/breq, для запуска последней команды понадобится 256 машинных циклов:
Код: ; Virtual FORTH Machine for AVR ATmega8515 + 32K EXT SRAM ; (c) Dmitry Ponyatov <forth@km.ru>, public domain
; ATTENTION: entry point must be @ 0x8000 (high 32K)
.include "m8515def.inc"
.org 0x00 rjmp RESET .org 0x20
.def tmp = r20 .def cellh = r21 .def celll = r22 .def op = r21 ; opcode
RESET: ; enable watchdog ldi tmp,0b00001111 out WDTCR,tmp ; enable external RAM control ; reset VM pointers ldi XH,0x80 ; instruction pointer ldi XL,0x00 ldi YH,0xE0 ; return stack ldi YL,0x00 ldi ZH,0xF0 ; data stack ldi ZL,0x00 ; load opcode NEXT: ; FORTH interpreter NEXT point ; load command opcode ld op,X+ ; FVM standard commands cpi op,0x00 breq vm_NOP cpi op,0x01 breq vm_JMP cpi op,0x03 breq vm_CALL cpi op,0x04 breq vm_RET ; user commands cpi op,0xF0 breq vm_F0 cpi op,0xF1 breq vm_F1 cpi op,0xF2 breq vm_F2 cpi op,0xF3 breq vm_F3 cpi op,0xF4 breq vm_F4 cpi op,0xF5 breq vm_F5 cpi op,0xF6 breq vm_F6 cpi op,0xF7 breq vm_F7 cpi op,0xF8 breq vm_F8 cpi op,0xF9 breq vm_F9 cpi op,0xFA breq vm_FA cpi op,0xFB breq vm_FB cpi op,0xFC breq vm_FC cpi op,0xFD breq vm_FD cpi op,0xFE breq vm_FE cpi op,0xFF breq vm_FF
ABORT: ; abort on incorrect command or assertion sleep rjmp ABORT
; VM commands
vm_NOP: rjmp NEXT
vm_JMP: ld celll,X+ ; \ move to next command ld cellh,X+ ; / mov XH,cellh ; \ move Ip to colabble addr mov XL,celll ; / rjmp NEXT
vm_CALL: ld celll,X+ ; \ move to next command ld cellh,X+ ; / st -Y,XL ; \ store next command addr st -Y,XH ; / to return stack mov XH,cellh ; \ move Ip to colabble addr mov XL,celll ; / rjmp NEXT
vm_RET: ld XH,Y+ ld XL,Y+ rjmp NEXT
; put your own user defined commands here
vm_F0: rjmp NEXT vm_F1: rjmp NEXT vm_F2: rjmp NEXT vm_F3: rjmp NEXT vm_F4: rjmp NEXT vm_F5: rjmp NEXT vm_F6: rjmp NEXT vm_F7: rjmp NEXT vm_F8: rjmp NEXT vm_F9: rjmp NEXT vm_FA: rjmp NEXT vm_FB: rjmp NEXT vm_FC: rjmp NEXT vm_FD: rjmp NEXT vm_FE: rjmp NEXT
vm_FF: ; this command will be executed ; if VM memory will be empty sleep rjmp vm_FF
начал сегодня писать FVM для AVR+32K XRAM, обнаружил что интерпретатор байт-кода
идеально ложится на систему команд и архитектуру (три 16-битных индексных регистра XYZ) AVR
подскажите, как сделать запуск "микрокода" команд ВМ через jump table ? сейчас опкоды ВМ тупо перебираются парами команд cpi/breq, для запуска последней команды понадобится 256 машинных циклов:
[code]; Virtual FORTH Machine for AVR ATmega8515 + 32K EXT SRAM ; (c) Dmitry Ponyatov <forth@km.ru>, public domain
; ATTENTION: entry point must be @ 0x8000 (high 32K)
.include "m8515def.inc"
.org 0x00 rjmp RESET .org 0x20
.def tmp = r20 .def cellh = r21 .def celll = r22 .def op = r21 ; opcode
RESET: ; enable watchdog ldi tmp,0b00001111 out WDTCR,tmp ; enable external RAM control ; reset VM pointers ldi XH,0x80 ; instruction pointer ldi XL,0x00 ldi YH,0xE0 ; return stack ldi YL,0x00 ldi ZH,0xF0 ; data stack ldi ZL,0x00 ; load opcode NEXT: ; FORTH interpreter NEXT point ; load command opcode ld op,X+ ; FVM standard commands cpi op,0x00 breq vm_NOP cpi op,0x01 breq vm_JMP cpi op,0x03 breq vm_CALL cpi op,0x04 breq vm_RET ; user commands cpi op,0xF0 breq vm_F0 cpi op,0xF1 breq vm_F1 cpi op,0xF2 breq vm_F2 cpi op,0xF3 breq vm_F3 cpi op,0xF4 breq vm_F4 cpi op,0xF5 breq vm_F5 cpi op,0xF6 breq vm_F6 cpi op,0xF7 breq vm_F7 cpi op,0xF8 breq vm_F8 cpi op,0xF9 breq vm_F9 cpi op,0xFA breq vm_FA cpi op,0xFB breq vm_FB cpi op,0xFC breq vm_FC cpi op,0xFD breq vm_FD cpi op,0xFE breq vm_FE cpi op,0xFF breq vm_FF
ABORT: ; abort on incorrect command or assertion sleep rjmp ABORT
; VM commands
vm_NOP: rjmp NEXT
vm_JMP: ld celll,X+ ; \ move to next command ld cellh,X+ ; / mov XH,cellh ; \ move Ip to colabble addr mov XL,celll ; / rjmp NEXT
vm_CALL: ld celll,X+ ; \ move to next command ld cellh,X+ ; / st -Y,XL ; \ store next command addr st -Y,XH ; / to return stack mov XH,cellh ; \ move Ip to colabble addr mov XL,celll ; / rjmp NEXT
vm_RET: ld XH,Y+ ld XL,Y+ rjmp NEXT
; put your own user defined commands here
vm_F0: rjmp NEXT vm_F1: rjmp NEXT vm_F2: rjmp NEXT vm_F3: rjmp NEXT vm_F4: rjmp NEXT vm_F5: rjmp NEXT vm_F6: rjmp NEXT vm_F7: rjmp NEXT vm_F8: rjmp NEXT vm_F9: rjmp NEXT vm_FA: rjmp NEXT vm_FB: rjmp NEXT vm_FC: rjmp NEXT vm_FD: rjmp NEXT vm_FE: rjmp NEXT
vm_FF: ; this command will be executed ; if VM memory will be empty sleep rjmp vm_FF[/code]
|
|
|
|
Добавлено: Пт июл 14, 2006 09:47 |
|
|
|
|