vinxru, сверлишь ручной машинкой? Входные отверстия по центру, а вот выходные с краю.Нужно это дело механизировать.А вообще красиво.
vinxru, сверлишь ручной машинкой? Входные отверстия по центру, а вот выходные с краю.Нужно это дело механизировать.А вообще красиво.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
2 шт
(номиналы резисторов указаны не корректно).
Всё просто. С одной стороны двунаправленная 8-битная шина между МК и компьютером. 9-ая линия, это тактовый сигнал. С другой стороны SD-карта и преобразователь 3.3 Вольта для карты.
Внутри МК зашита библиотека PetitFAT c которой общается компьютер. Эта библиотека не умеет создавать новые файлы и папки. Она умеет записывать в файлы, но только блоками по 512 байт и если размер файла не увеличивается.
Это потому что библиотека написана в крайне экономном стиле. Она использует всего несколько десятков байт ОЗУ. А для изменения размера файла нужно изменить несколько байт в таблице FAT. А карта памяти работает записывает данные блоками по 512 байт. То есть придется скопировать весь блок в память, изменить байт, а потом сохранить его обратно. На это потребуется 512 байт памяти.
Память то есть, но авторы PetitFS писали не для меня конкретно.
В будущем я использую другую библиотеку или доработаю эту.
Последний раз редактировалось vinxru; 25.02.2013 в 14:32.
Ошибка в подключении проводов к SD. Пришлось бросить перемычку.
Ошибка в порядке проводов подключения в разъему. Я ведь был уверен, что контакты расположены в порядке D0-D7. Оказалось, что хаотично. Исправлю таблицей перекодирования в МК.
---------- Post added at 11:35 ---------- Previous post was at 11:35 ----------
Вчера подпаял контроллер на проводах и удачно загрузил программу.
---------- Post added at 11:37 ---------- Previous post was at 11:35 ----------
Пока будет 4 команды
1) Загрузка файла boot.rks (pf_open, pf_read)
2) Загрузка файла с произвольным именем (pf_open, pf_read)
3) Начало получения списка файлов в папке (pf_opendir)
4) Получение следующего файла в папке (pf_readdir)
Вчера вечером сделал первые наброски файлового менеджера.
Каждый программист должен в своей жизни написать Norton CommanderПока контроллер работает только в режиме чтения, поэтому вторая панель не особо нужна.
Но! Она играет важную роль. Текст на экране рисуется относительно долго, и сократив его до двух колонок получилось значительно повысить скорость работы. При этом, при перемещении курсора (когда требуется скролл) я не рисую весь текст повторно, а активно использую копирование видеопамяти.
А копировать видеопамять в цвете у этого компьютера не получится, поэтому расцветки файлов не будет.Но зато быстро.
Теперь надо написать код связывающий его и микроконтроллер.
Как хорошо писать на Си под эти компыФункция копирования видеопамяти:
Просто и быстро. Хотя ассемблерные вставки то же пока присутствуют.Код:void scroll1(char* d, char* s, uchar w, uchar h) { for(; w; --w, d+=0x100, s+=0x100) memswap(d, s, h); }
Макросы я добавил, что ускорить программу. Что бы всё что можно рассчитать во время компиляции, считалось во время компиляции.Код:void fillRect1_int(uchar len, uchar x, uchar* a) { asm { lda fillRect1_int_2 fillRect1_int_cmd2: nop ; CMA = 2F NOP = 00 mov d, a lda fillRect1_int_1 mov e, a fillRect1_int_l0: mov a, m fillRect1_int_cmd: ora d ; XRA D = AA, ANA D = A2, ORA D = B2 mov m, a inx h dcr e jnz fillRect1_int_l0 } } void fillRect1(uchar* a, ushort c, uchar l, uchar r, uchar h) { if(c==0) { fillRect1_int(h, l & r, a); return; } --c; fillRect1_int(h, l, a); a += 0x100; for(; c; --c) { fillRect1_int(h, 0xFF, a); a += 0x100; } fillRect1_int(h, r, a); } #define QUARDCOORDS(XX,YY) ((uchar*)(0x9000)+(YY)+((XX)*256) ) #define FILLRECTARGS(X0,Y,X1) QUARDCOORDS(X0/8, Y0), ((X1)+1)/8-(X0/8), (0xFF >> ((uchar)(X0) & 7)), (0xFF >> ((uchar)((X1)+1) & 7)) ^ 0xFF, (Y1)-(Y0)+1 void fillRect(ushort x0, uchar y0, ushort x1, uchar y1) { fillRect1(FILLRECTARGS(x0, y0, x1, y1)); } void graphXor() { asm { mvi a, 0AAh jmp graph1_l1 } } void graph0() { asm { mvi a, 0A2h sta fillRect1_int_cmd mvi a, 02Fh jmp graph1_l2 } } void graph1() { asm { mvi a, 0B2h graph1_l1: sta fillRect1_int_cmd xra a graph1_l2: sta fillRect1_int_cmd2 } }
Медленно, потому что расчет адреса будет производится при вызове.
fillRect(8,5,184,232);
Быстро, потому что расчет адреса будет производится при компиляции.
fillRect1(FILLRECTARGS(8, 5, 184, 232));
Во вложении RKS файл, код на Си и промежуточный файл на асме.
Контроля переполнения буферов пути и ком строки я пока не сделал.
Еще надо будет свою функцию сканирования клавиатуры делать. Тут нет автоповтора и заглавных букв.
Я заголовочные файлы для BIOS начал писать и граф. библиотеку.
Последний раз редактировалось vinxru; 01.03.2013 в 14:12.
Каждый программист должен в своей жизни написать Norton Commander -
ха, верно сказано.
1. не стоит в упор копировать внешний вид окон Norton Commander'а, нужно искать что-то своё.
2. всё ж прорисовку линий нужно делать на ассемблере. Очень удачно сделал HardWareMan. У него вывод символов (окна у меня в программе нарисованы псевдографикой) сделан очень быстро.
3. я прорисовку окон, в том числе информационных и выбора дисков давно уже победил. На данный момент у меня уже есть: вывод и запуск файлов с Flash-диска, ROM-диска под МХ, файлов MX-DOS.
4. недоделки/хотелки пока таковы: считывание каталога/запуск файлов с SD карты, полноценные переходы по каталогам в MX-DOS, организация общения с RAM-диском (до 512 кБайт) и т.д.
И напоследок хочу сказать что офтопить как бы не желательно. Здесь vinxru обсуждает восстановление Специалистов, а уже идёт написание программ, изготовление новых девайсов и т.д.
Эта программа, часть SD-контроллера. Поэтому не оффтопик
---------- Post added at 16:08 ---------- Previous post was at 16:07 ----------
Рамка у меня рисуется линиями и очень быстро. Рисует функция как раз приведенная в прошлом посте.
---------- Post added at 16:12 ---------- Previous post was at 16:08 ----------
Я у тебя взял шрифты, функцию вывода на экран (только немного её оптимизировал).
Вообще, работает удивительно быстро. Доли секунды панель файлов перерисовывается при скоролле содержимого.
Я ждал от Специалиста диких тормозов.
---------- Post added at 16:14 ---------- Previous post was at 16:12 ----------
Размер шрифта 6 пикселей, а в байте 8 символов. Поэтому пришлось делать 4 функции рисования символов (как в твоей программе). Но внезапно это вылилось в то, что функция вывода текста может рисовать текст со смещением всего в 2 пикселя.
И тут я этим активно пользуюсь.
Мухаха! А я советую не редровить весь экран, а только строку с курсором. Я в свое время на кружке писал уже драйвер ROM диска с менюшкой. Все на отлично шустро прорисовывалось на стандартном тормозном выводе символа, т.к. рисовал только то, что нужно (т.н. "дифф"). Т.е., стираем курсор пропечатывая строку, где он был, рисуем новый опять же печатая где он должен быть. Весь скрин редровить только при тотальной смене картинки. Ну а с шустрым выводом должно просто летать.
Касаемо:
Мы этим пользовались еще на стандартном спеце 23 года назад в кружке. Именно поэтому, в быстром выводе 4 ветки вывода символа, а в оригинальном работа через сдвиг с помощью команды DAD и сохранением результата в стеке. Это же решает проблему хранения координаты Х, которая имеет 384 точки и не влазит в байт. Храним ее как X/2. Такие дела.
Я даже курсор xor fillRect рисую.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)