Последний раз редактировалось AndyD; 14.08.2016 в 14:17.
Scorpion ZS-256turbo_Проф ПЗУ27040_Smuc_HDD_PCkeyMause(Scorp)_GS_512+XTR Модем(X-Trade)
ZX-Evolution rev.С+VDAC+OldGS_512+OpenSMUC+TSFM+TS-conf
Amiga500 1m+512k
Schneider EuroPC
ReVerSE-U16
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Сам диск не надо запускать. В этом диске от TR-DOS только разметка 256х16х80. Файловая система там совсем другая.
Запускать надо SNA-файл
Смотри видео, там все есть.
- - - Добавлено - - -
Да, она принимает команды во входном потоке.
Код:echo "cd bin get hello chmod 777 hello" | ucp filesystem-zx128.trd
Граф Дракула наш кумир, патамушта он вомпир!
VKINK 9 : BORDER NOT PI
В прошлый раз я добавил программку cpuspeed. Думаю, результат её работы и так виден невооружённым взглядом. Но для объективного контроля изменения производительности решил запилить bogomips. Алгоритм не аутентичный, но по смыслу похож: замеряем количество пустых циклов в тике. А тик у нас = 1/50 секунды.
Цикл следующий:
занимает 26 тактов.Код:loop dec bc ld a,b or c jr nz,loop
Результат даже похож на правду: для 3,5 МГц 2759*26=71734.
- - - Добавлено - - -
Кстати, обратил внимание:
1) printf() не умеет печатать числа с плавающей запятой,
2) консоль не умеет CSI коды.
- - - Добавлено - - -
Замечание: если кто будет использовать ассемблерные вставки, то пусть уберёт опцию --peep-asm - иначе компилятор в вашем коде накуролесит - заколебётесь баги искать.
Кроме того, в большинстве случаев добавление опции --reserve-regs-iy делает код более быстрым, и нередко более коротким.
С уважением,
Gris / Red Triangle.
_____________________________________
ZX-EVO/TS-Labs config/NGS/HDD/SD-card
Amiga A1200/Blizzard 1230@50/32/60GB
Amiga A1200/Apollo 1260@66/32/60GB
UnAmiga (C5) AGA GM7123 VideoDAC
Граф Дракула наш кумир, патамушта он вомпир!
VKINK 9 : BORDER NOT PI
Eltaron, не терпится увидеть фузикс в нормальном текстовом режиме на тсконфе: вот переписал модуль zxvideo (исходный взял с гитхаба Алана Кокса).
Задействовал аппаратный скролл. Написал функцию _vtattr_notify (я так понял, это установка атрибутов экрана). Курсор теперь выделяется не подчёркиванием, а сменой атрибутов. Переписал процедуру _do_beep, - четверть секунды должна звучать нота "ля" средней октавы.
Предполагается, что с адреса 0x0000 будет включена видеостраница, а перед обращением к дисководу необходимо временно включать ПЗУ (48?).
Поскольку, максимально поддержана память до 512кБ, предлагаю использовать для текстового экрана страницу 32, для шрифта - 33 (32xor1).
И, да, при загрузке системы, надо как-то загрузить 2кб шрифта - любой понравившийся стандартный спектрумовский шрифт (не в формате экрана) на 256 символов.
Может, сделаешь спецсборку на досуге?
Процедура включение в CPU0 видеостраницы:
Процедура включение в CPU0 ПЗУ:Код:di ld bc,#0x21af ;_MemConfig ld a,#0xCE out (c),a ld b,#0x10 ; #_tsPage0 ld a,#RAMPGNUM ; 32/33 out (c),a ei
Код:di ld bc,#0x21af ;_MemConfig ld a,#0xC0 out (c),a ld b,#0x10 ; #_tsPage0 ld a,#ROMnum out (c),a ei ret
Процедура включения текстового видеорежима:
Собственно, модуль zxvideo. Увы, не тестировал.Код:ld bc,#0x01af ; #_tsVPage ld a,#32 out (c),a dec b ; #_tsVConfig ld a,#0x43 ; %01000011, text mode in 320x240pix window.
- - - Добавлено - - -Код:; ; PentEVO/TS-Config text mode 320x240 (80x30 chars) vt primitives. ; Modified from original by Amixgris / Red Triangle. 18/08/2016. ; .module zxvideo ; exported symbols .globl _plot_char .globl _scroll_down .globl _scroll_up .globl _cursor_on .globl _cursor_off .globl _clear_lines .globl _clear_across .globl _do_beep .globl _vtattr_notify .globl _vtink .globl _vtpaper .area _VIDEO ; colors are ignored everywhere for now videopos: ; video page vith text mode must be mapped on cpu0 ld a,(#_tsconfig_topline_offset) add a,e and a,#0x3f ld e,d ld d,a ret _plot_char: pop iy pop hl pop de ; D = x E = y pop bc push bc push de push hl push iy call videopos ; ; TODO: Map char 0x60 to a grave accent bitmap rather ; than fudging with a quote ; ld b,#0 ; calculating offset in font table ld a, c cp #0x60 jr nz, nofiddle ld a, #0x27 nofiddle: ld (de),a ; set char code to text videomemory. ; set char attributes: ld a,(_tsconfig_screen_mix_color) set 7,e ld (de),a ret _clear_lines: pop bc pop hl pop de ; E = line, D = count push de push hl push bc clear_next_line: push de ld d, #0 ; from the column #0 ld b, d ; b = 0 ld c, #80 ; clear 80 cols push bc push de push af call _clear_across pop af pop hl ; clear stack pop hl pop de inc e dec d jr nz, clear_next_line ret _clear_across: pop iy pop hl pop de ; DE = coords pop bc ; C = count push bc push de push hl push iy call videopos ; first pixel line of first character in DE push de pop hl ; copy to hl ld b,#0 ld (hl),#" " push hl push de push bc ldir ; clear attributes: ld a,(#_tsconfig_screen_mix_color) pop bc pop de pop hl set 7,l set 7,e ld (hl),a ldir ret copy_line: ; HL - source, DE - destination ; convert line coordinates to screen coordinates both for DE and HL push de ex de, hl call videopos ex de, hl pop de call videopos ld bc, #80 push hl push de push bc ldir pop bc pop de pop hl ; copy attributes: set 7,e set 7,l ldir ret _scroll_down: ld bc,#8 _scrldn: ld hl,(#_tsconfig_topline_offset) add hl,bc ld (#_tsconfig_topline_offset),hl ld bc,#0x04af ; GYOffsL out (c),l inc b out (c),h ld a,l srl h rra rra rra and a,#0x3f ld (#_tsconfig_topline_offset),a ret _scroll_up: ld bc,#-8 jr _scrldn _cursor_on: pop bc pop hl pop de push de push hl push bc ld (cursorpos), de curs: call videopos set 7,e ld a,(de) or a,a rrca rrca rrca rrca ld (de),a ret _cursor_off: ld de, (cursorpos) jr curs _do_beep: ; do 440Hz dure 1/4s di ld bc,#0x00fe ld h,#110 loop_beep1: ld de,#298 loop_beep: dec de ld a,d or a,e jr nz,loop_beep ld a,l cpl ld l,a and a,#0x10 out (c),a dec h jr nz,loop_beep1 ei ret _vtattr_notify: ; void vtattr_notify(void) ld a,(#_vtink) and a,#0x0f ld (#_vtink),a rrca rrca rrca rrca ld c,a ld a,(#_vtpaper) and a,#0x0f ld (#_vtpaper),a or a,c ld (_tsconfig_screen_mix_color),a ret .area _DATA _vtink: .db 7 _vtpaper: .db 0 _tsconfig_screen_mix_color: .db 0x07 _tsconfig_screen_offset: .dw 0 _tsconfig_topline_offset: .db 0 cursorpos: .dw 0
Сам шрифт можно наживую в снапшот засунуть, в экранную область, а в инит добавить копирование его в 33-ю пагу.
можно просто лдиром, включив пагу вместо ПЗУ с помощью представленной процедуры.
- - - Добавлено - - -
Есть ещё идея обойтись без переключения паг в области ПЗУ, а копировать данные в экран с помощью ПДП, - но не продумал пока, есть ли в этом преимущество.
Последний раз редактировалось Sergey; 18.08.2016 в 22:05.
С уважением,
Gris / Red Triangle.
_____________________________________
ZX-EVO/TS-Labs config/NGS/HDD/SD-card
Amiga A1200/Blizzard 1230@50/32/60GB
Amiga A1200/Apollo 1260@66/32/60GB
UnAmiga (C5) AGA GM7123 VideoDAC
Собрал, не работает. Проблема в том, что вот тут
на входе DE = 0, после set 7,d оно превращается в 8000, куда и пишется рандом из аккумулятораКод:; set char attributes: ld a,(_tsconfig_screen_mix_color) set 7,d ld (de),a
Но 8000 - это начало секции DISCARD. Туда очень скоро произойдет переход и всё завалится из-за попытки исполнить записанные данные.
Ты, наверное, планировал какую-то другую страницу в 8000 подставлять, или я чего-то недопонимаю в организации памяти тсконфы?
Граф Дракула наш кумир, патамушта он вомпир!
VKINK 9 : BORDER NOT PI
Последний раз редактировалось AndyD; 18.08.2016 в 22:02.
Scorpion ZS-256turbo_Проф ПЗУ27040_Smuc_HDD_PCkeyMause(Scorp)_GS_512+XTR Модем(X-Trade)
ZX-Evolution rev.С+VDAC+OldGS_512+OpenSMUC+TSFM+TS-conf
Amiga500 1m+512k
Schneider EuroPC
ReVerSE-U16
Лять! Голова моя садовая! Нужно не D, а E! SET 7,E. Установленный старший разряд младшего байта адреса знакоместа "переносит" нас к его атрибуту! В общем, везде, где устанавливается 7-й бит в модуле, нужно поменять старший регистр регистровой пары на младший.
Поправил исходник в сообщении.
Кстати, а почему в аккумуляторе рандом? - там должен лежать код атрибутов. по девфолту #0x07 (или наоборот )
- - - Добавлено - - -
если ты запускал bogomips, то видел результат его работы - число в BogoMIPS. Например, для 3,5MHz - 0,002759. Это означает, что за однин тик (одно прерывание в нашем случае) успело выполниться 2759 циклов. Цикл занимает 26 тактов. Умножая количество циклов на их длительность, получим количество тактов в прерывании.
У пентагона 71680 тактов в прерывании, у меня получилось 71734, - всего на 54 такта погрешность.
- - - Добавлено - - -
Не рандом, а НОЛЬ! Пофикил исходник:
_tsconfig_screen_mix_color: .db 0x07
Последний раз редактировалось Sergey; 18.08.2016 в 22:02.
С уважением,
Gris / Red Triangle.
_____________________________________
ZX-EVO/TS-Labs config/NGS/HDD/SD-card
Amiga A1200/Blizzard 1230@50/32/60GB
Amiga A1200/Apollo 1260@66/32/60GB
UnAmiga (C5) AGA GM7123 VideoDAC
это понятно что под цикл подобрали количество проходов в прерывании ,мне интересно понять как сравнить с современными процессорами,там считаются тоже нопы по такой же схеме?запуск на смарте меня шокировал своими цифрами,вот и интересуюсь насколько сравнимы эти тесты,вот некоторые x86 процессоры, выпущенные в 2010-х, способны исполнять до 4 операций nop каждый такт.получается у них жульничество.Извиняюсь за глупые вопросы ,никогда не интересовался такими вещами.
Последний раз редактировалось AndyD; 18.08.2016 в 22:33.
Scorpion ZS-256turbo_Проф ПЗУ27040_Smuc_HDD_PCkeyMause(Scorp)_GS_512+XTR Модем(X-Trade)
ZX-Evolution rev.С+VDAC+OldGS_512+OpenSMUC+TSFM+TS-conf
Amiga500 1m+512k
Schneider EuroPC
ReVerSE-U16
Я ничего не "подбирал" - всё вычисляется.
Как реализовать оригинальный алгоритм, я не понял.
В оригинале используется такой цикл:
Я решил, что более близкий по смыслу цикл на z80 будет такой:Код:1: decl ax jns 1b
А, вообще, bogomips - это не тест производительности, хотя определённое представление о производительности он даёт, а сугубо прикладная задача - калибровка задержек, необходимых системе.Код:loop: dec bc ld a,b or c jr nz,loop
Результат будет зависеть и от скорости процессора и от длительности тиков. Какой длительности тики используются в Linux, я не знаю.
- - - Добавлено - - -Код:/* * Standalone BogoMips program (a la BogoMips) * Amixgris / RT 08/2016 * */ #include <stdio.h> long rd_cmos_hms_w(void) __naked; long rd_cmos_hms(void) __naked; long iBCDlong(long n) __naked; int dtime,m,n; long t1,t2; void main(void) { printf("Calibrating delay loop.. "); fflush(stdout); t1 = rd_cmos_hms_w(); __asm ld bc,#0x00 di .rept 80 .db 0x0b,0x78,0xb1,0x20,0xfb ; loop: dec bc ; ld a,b ; or c ; jr nz,loop .endm ei __endasm; t2 = rd_cmos_hms(); t1 = iBCDlong(t1); t2 = iBCDlong(t2); dtime = t2-t1; m = 0x500000/dtime/50; printf("ok -\n0,00%u BogoMIPS\n",m); } long rd_cmos_hms(void) __naked { __asm ld bc,#0xeff7 ld a,#0x80 out (c),a ld b,#0xdf xor a,a out (c),a ld b,#0xbf in l,(c) ld b,#0xdf ld a,#2 out (c),a ld b,#0xbf in h,(c) ld b,#0xdf ld a,#4 out (c),a ld b,#0xbf in e,(c) ld b,#0xef xor a out (c),a ld d,a ; result in dehl ret __endasm; } long rd_cmos_hms_w(void) __naked { __asm ld bc,#0xeff7 ld a,#0x80 out (c),a ld b,#0xdf xor a,a out (c),a ld b,#0xbf 1$: in a,(c) jr nz,1$ ld l,a ld b,#0xdf ld a,#2 out (c),a ld b,#0xbf in h,(c) ld b,#0xdf ld a,#4 out (c),a ld b,#0xbf in e,(c) ld b,#0xef xor a out (c),a ld d,a ; result in dehl ret __endasm; } long iBCDlong(long n) __naked { n; __asm pop af pop de pop bc push bc push de push af push de xor a,a ld d,a ld e,a ld h,a ld a,c rrca rrca rrca rrca and a,#0x0f call 4$ ; mul 10 ld d,a ld a,c and a,#0x0f add a,d ld d,#0 ld l,a call 2$ ; 10*DEHL call 3$ ; 6*DEHL ; mul hours by 60 = minutes. pop bc ld a,b rrca rrca rrca rrca and a,#0x0f call 4$ ; mul 10 ld d,a ld a,b and a,#0x0f add a,d ld d,#0 call 1$ ; add A to DEHL call 2$ ; 10*DEHL call 3$ ; 6*DEHL ; mul minutes by 60 = seconds. ld a,c rrca rrca rrca rrca and a,#0x0f call 4$ ; mul 10 ld d,a ld a,c and a,#0x0f add a,d ld d,#0 call 1$ ; add A to DEHL ; add seconds. ret 1$: add a,l ; add8to32 ld l,a ld a,h adc a,#0 ld h,a ld a,e adc a,#0 ld e,a ld a,d adc a,#0 ld d,a ret 2$: push bc ; 32b*10: add hl,hl ex de,hl adc hl,hl ex de,hl push de push hl add hl,hl ex de,hl adc hl,hl ex de,hl add hl,hl ex de,hl adc hl,hl ex de,hl pop bc add hl,bc ex de,hl pop bc adc hl,bc ex de,hl pop bc ret 3$: push bc ; 32b*6: add hl,hl ex de,hl adc hl,hl ex de,hl push de push hl add hl,hl ex de,hl adc hl,hl ex de,hl pop bc add hl,bc ex de,hl pop bc adc hl,bc ex de,hl pop bc ret 4$: add a,a ld d,a add a,a add a,a add a,d ld d,#0 ret __endasm; }
Ну, и, как бы целью написания мной богомипсов было не замерить производительность, а получить возможность проверки результата работы cpuspeed.
Последний раз редактировалось Sergey; 18.08.2016 в 23:08.
С уважением,
Gris / Red Triangle.
_____________________________________
ZX-EVO/TS-Labs config/NGS/HDD/SD-card
Amiga A1200/Blizzard 1230@50/32/60GB
Amiga A1200/Apollo 1260@66/32/60GB
UnAmiga (C5) AGA GM7123 VideoDAC
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)