https://github.com/salextpuru/sdcc-noinit

CALL'ы и RET'ы

Postby SfS » Wed, 01.03.2017 08:40:05

Собственно, это https://github.com/salextpuru/sdcc-noinit
Буду добивать далее по мере возможностей.
SfS
 
Posts: 113
Joined: Thu, 23.02.2017 17:13:01

Postby moroz1999 » Wed, 01.03.2017 10:48:27

Любопытно выглядит.
User avatar
moroz1999
 
Posts: 1872
Joined: Wed, 01.08.2012 11:23:51

Postby SfS » Wed, 01.03.2017 11:33:41

Оно не только выглядит, но ещё и работает слегка) Для работы надо SDCC и это https://github.com/salextpuru/speccy-toochain

Ты не любопытствуй, а используй :)
Last edited by SfS on Wed, 01.03.2017 17:42:15, edited 1 time in total.
SfS
 
Posts: 113
Joined: Thu, 23.02.2017 17:13:01

Postby SfS » Sun, 05.03.2017 06:57:00

Основные функции и клавиатурные почти добил. Перехожу к файловым.
SfS
 
Posts: 113
Joined: Thu, 23.02.2017 17:13:01

Postby psb » Sun, 05.03.2017 14:48:33

опрос клавы есть - уже годно!
User avatar
psb
 
Posts: 715
Joined: Tue, 30.12.2014 23:22:32

Postby SfS » Sun, 05.03.2017 15:13:15

Там уже все, кроме дисковых операций есть для WC-плагинов. Еще нет DMА. Смотри исходники https://github.com/salextpuru/sdcc-noin ... n/plugin.c
Это тест того, что есть (не всего).
SfS
 
Posts: 113
Joined: Thu, 23.02.2017 17:13:01

Postby SfS » Sun, 05.03.2017 15:14:41

Я так и не понял, почему нет дозаписи файлов, как в ОС. Это слишком сложно сделать на спеке?

ИМХО, гораздо удобнее, как в ОС:

open() - вернула открытый/созданный файл или ошибку
read() - прочитала сколько сказали.
write() - записала сколько сказали.
close() - закрыла файл.

Тормознее? Возможно. Но удобства пользования перекрывают тормознутость.
SfS
 
Posts: 113
Joined: Thu, 23.02.2017 17:13:01

Postby VBI » Sun, 05.03.2017 16:05:27

давай ещё подумаем.
проблема не дописывать, это как раз не проблема - вали себе дальше call SAVE512 по 512 байт.
File Operations. Проблема скорее это обновить размер конкретного файла после окончания
User avatar
VBI
 
Posts: 1965
Joined: Mon, 03.06.2013 09:20:29

Postby psb » Sun, 05.03.2017 17:06:52

VBI wrote:Проблема скорее это обновить размер конкретного файла после окончания
ну а с чем это связано?
User avatar
psb
 
Posts: 715
Joined: Tue, 30.12.2014 23:22:32

Postby g0blinish » Sun, 05.03.2017 17:25:55

Image
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby SfS » Sun, 05.03.2017 18:02:26

VBI wrote:давай ещё подумаем.
проблема не дописывать, это как раз не проблема - вали себе дальше call SAVE512 по 512 байт.
File Operations. Проблема скорее это обновить размер конкретного файла после окончания


Чтобы "валить дальше по 512 байт" необходимо синхронно продолжать FAT-цепочку.

Если я правильно (а правильно ли я понял?) понял, то WC все сектора файла прописываюся в FAT при его создании. То есть фактически, при создании файла - сразу резервируются N секторов, которые считаются из его размера. Потом указатель просто бежит сначала файла по уже зарезервированным секторам и записывает их.

Как надо сделать, чтобы было как в "настоящих" ОС?
1. В момент создания (открытия) файла необходимо запоминать копию его записи в каталоге, сектор каталога и смещение записи о файле от начала этого сектора.
2. Дописывая очередной блок данных, необходимо следить за переходом в следующий сектор и корректировать FAT при записи каждого нового сектора.

Скорость при записи уменьшится. Расход память увеличится. Насколько?

Расход памяти:
- полная копися записи о файле из FAT + указатель записи-чтения из файла.
- информация о текущей записи в FAT (номер последнего занятого файлом сектора и проч).

Скорость:
- при переходе за границу сектора скорректировать FAT-цепочку.
- при закрытии файла - сохранить его длину.

При чтении - скорость останется той же.

ИМХО так. Во что выльются трудозатраты на допиивание - только автор существующего драйвера может сказать. И насколько это реально.
SfS
 
Posts: 113
Joined: Thu, 23.02.2017 17:13:01

Postby psb » Sun, 05.03.2017 18:39:26

интересно все же, на сколько тормознее fatfs драйвера коши?
User avatar
psb
 
Posts: 715
Joined: Tue, 30.12.2014 23:22:32

Postby VBI » Sun, 05.03.2017 21:18:24

psb, ссылка в последнем моём посте, "файловый операции"

SfS, ты конечно очень крут
предлагаю тебе пообщаться с ребятами, которые программят сд карты. их вродь всего ничего - коши и тсл.
включится в этот процесс - и добавить всё описанное, всё нужное.
и тебе станет ясно - нужно ли оно, при необходимых затратах времени и сил.

потому что - "правильно ли я понял" - всё что тебе нужно, это нужно именно тебе, и делать - тебе :)
извини за прямоту

g0blinish, ололо лолка затролена!
User avatar
VBI
 
Posts: 1965
Joined: Mon, 03.06.2013 09:20:29

Postby psb » Sun, 05.03.2017 22:15:07

VBI wrote:ссылка в последнем моём посте, "файловый операции"

ничего там не нашел про фатфс.
User avatar
psb
 
Posts: 715
Joined: Tue, 30.12.2014 23:22:32

Postby VBI » Sun, 05.03.2017 22:30:48

psb ты меня смущаешь
User avatar
VBI
 
Posts: 1965
Joined: Mon, 03.06.2013 09:20:29

Postby AndyD » Sun, 05.03.2017 22:34:06

Как вариант создание файла 4мб как своп ,после окончания работы из 4мб копируются то что насобирали в новый файл,надо начать заново копируем в своп и в нем продолжаем укладывать сектора,минус -тормоза при загрузке и выгрузке + потеря данных при ресете.Но в принципе можно работать с 4мб файлом как с оригиналом, без лишнего копирования,4мб взят за пример,от задачи зависит ,хоть 10мб создавай, в винде ни кто место не экономит,в спеке кто мешает жрать в пустую память.
User avatar
AndyD
 
Posts: 280
Joined: Thu, 21.05.2015 21:32:38

Postby Koshi » Mon, 06.03.2017 00:45:13

SfS wrote:Чтобы "валить дальше по 512 байт" необходимо синхронно продолжать FAT-цепочку.

функционал расширения цепочки в ядре имеется – используется при расширении диров (файлы то добавлять можно до посинения), наружу недоступен.

SfS wrote:Если я правильно (а правильно ли я понял?) понял, то WC все сектора файла прописываюся в FAT при его создании. То есть фактически, при создании файла - сразу резервируются N секторов, которые считаются из его размера. Потом указатель просто бежит сначала файла по уже зарезервированным секторам и записывает их.

резервятся кластера!
при создании файла в него ничего не прописывается! для этого есть потоковая запись в файл, которая сама двигает указатель на сектор внутри файла.
в случае достижения конца цепочки кластеров, аля конца файла - выдается соответствующий статус.
ессно можно продолжать фигачить в файл дальше, тока ничего происходить не буит - проца тупо станет вылетать ничего не делая...

при файл криейте генерится только цепочка кластеров в которую поместится N байт. если места хватает (аля генератор цепочки не выдал ошибок), то переходит на стадию добавления ентри в дир, если опять все прокатывает (хватила места на экспанд дира, если таковой потребовался и т.д.), то выдается, что файл создан.
и да, нету никаких ограничений на размер файла. файл криейтор ограничен 4гб, ибо 32 бита, а так генератор цепочки может фигачить до посинения (пока место есть).

SfS wrote:Как надо сделать, чтобы было как в "настоящих" ОС?
1. В момент создания (открытия) файла необходимо запоминать копию его записи в каталоге, сектор каталога и смещение записи о файле от начала этого сектора.
2. Дописывая очередной блок данных, необходимо следить за переходом в следующий сектор и корректировать FAT при записи каждого нового сектора.

Скорость при записи уменьшится. Расход память увеличится. Насколько?

Расход памяти:
- полная копися записи о файле из FAT + указатель записи-чтения из файла.
- информация о текущей записи в FAT (номер последнего занятого файлом сектора и проч).

Скорость:
- при переходе за границу сектора скорректировать FAT-цепочку.
- при закрытии файла - сохранить его длину.


делается все гораздо проще:
побайтовые операции реализуются на более высоком уровне, пользуя кеширование (512 байт буфера хватит всем).
вышли за 512б - ушли на SAVE512, закрыли файл - выгрузили кеш... как-то так.
соотв. в апи вц сейчас только недоступно расширение файла, а точнее опен/клоз, дабы можно было увеличивать размер файла при записи.
MGN Group
User avatar
Koshi
 
Posts: 297
Joined: Thu, 26.07.2012 16:41:52

Postby SfS » Mon, 06.03.2017 05:10:42

Да, действительно, кластера, извиняюсь. Просто привык, что на флешках кластер=512.

Я некорректно сформулировал. Не про запись в фат речь у меня, а про копию записи в каталоге. Оговорился, поздно уже было.

В остальном мы говорим об одном и том же. Если забыть про "уровни ОС", что в данном случае это не существенно. В сухом остатке - нужен кэш под текущий сектор и нужна копия записи файла в каталоге + указатель позиции в файле.

в случае достижения конца цепочки кластеров, аля конца файла - выдается соответствующий статус.
ессно можно продолжать фигачить в файл дальше, тока ничего происходить не буит - проца тупо станет вылетать ничего не делая...


В общем, как я и понял, под файл в фате резервируется место сразу и изменить его размер нельзя в настоящий момент.

Если это добить - то будет вообще нормальная и привычная работа с файлами, что очень приятно и позволит много чего делать.

Вопрос по памяти. Как происходит удаление плагинов и происходит ли вообще?
SfS
 
Posts: 113
Joined: Thu, 23.02.2017 17:13:01

Postby g0blinish » Mon, 06.03.2017 08:41:10

речь идет о трдос или мсдос?
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby SfS » Mon, 06.03.2017 08:51:25

Речь идет о драйвере FAT в WC.
SfS
 
Posts: 113
Joined: Thu, 23.02.2017 17:13:01

Postby Koshi » Mon, 06.03.2017 20:26:38

SfS wrote:Вопрос по памяти. Как происходит удаление плагинов и происходит ли вообще?

ручками из F10 меню можно удалить, в апи не выводил...
MGN Group
User avatar
Koshi
 
Posts: 297
Joined: Thu, 26.07.2012 16:41:52

Postby SfS » Tue, 07.03.2017 04:58:29

Koshi wrote:ручками из F10 меню можно удалить, в апи не выводил...


ИМХО, стоит вывести. Постоянно держать в памяти плагины типа терминала или ещё какого смысла нет. Или ввести какой-нибудь признак самоудаления плагина по выходу. Ну чтобы плагин вел себя просто как отдельная программа - загрузил, поработал, удалился.

Это ничего, что я свои пожелания так много высказываю?)
SfS
 
Posts: 113
Joined: Thu, 23.02.2017 17:13:01

Postby SfS » Tue, 07.03.2017 17:44:25

Ну вот. Первый тест работы с файлами пошел (FINDNEXT и вывод на экран содержимого каталога).

Кстати, использование sprintf() увеличило размер программы сразу килобайта на полтора:) Но какая чудесная функция!)
SfS
 
Posts: 113
Joined: Thu, 23.02.2017 17:13:01

Postby SfS » Wed, 08.03.2017 05:38:09

Заработала FENTRY. Все поисковые запросы теперь имеют один интерфейс.
Тесты тут. Можно включать-выключать при компиляции.

https://github.com/salextpuru/sdcc-noin ... s/wcplugin
SfS
 
Posts: 113
Joined: Thu, 23.02.2017 17:13:01

Postby SfS » Wed, 08.03.2017 17:52:36

Добавлены тесты создания, записи и чтения файла. Функции работают.

Почему везде разный интерфейс у функций? То флаг + имя, то флаг+длина+имя, то ещё как. Проще было бы везде сделать единый описатель файла - структуру, но использовать из него нужные поля.

Ладно. Главное - заработало. осталось добить переименование-удалние и прочую несущественную лабуду. И либа будет вполне юзабельной.
SfS
 
Posts: 113
Joined: Thu, 23.02.2017 17:13:01

Next

Return to Coding

Who is online

Users browsing this forum: No registered users and 1 guest

cron

x