Почти совпало :) Я сделал 08900h - на 256 байт ниже переменных Монитора. Подумал, что 256 байт буфера должно хватить.
Вид для печати
Нет, все секторно-файловые дела берёт на себя CH376. Вот цитата из ридми:
- требуется гораздо меньше ОЗУ под буферы (36 байт на USB дескриптор и по 64 байта
на командную строку и путь). детально не копал, но похоже количество вводимых символов
не проверяется, так что с длинными путями и ком. строкой надо осторожнее.
Так что 256 байт - это ещё с запасом, если мои подсчёты верны :)
Вот полностью из ридми про CH376:
Скрытый текст
Только с CH376:
- поддержка полноценной записи файлов, поддержка удаления файлов
- W ИМЯфайла.РАСШИРЕНИЕфайла,АДРЕСоткуда,СКОЛЬКОбайт - записать в файл
данные из памяти, начиная с указанного адреса в памяти и сколько байт
(пример: W TEST.BIN,0ACD,5FE0 - пишет в файл TEST.BIN из памяти начиная
с адреса 0х0ACD и до адреса 0х0ACD+0х5FE0=0х6AAD).
Все параметры обязательные. Если файла нет - он будет создан, если есть -
сообщение FILE EXISTS и выход (ничего не записывется);
- WO ИМЯфайла.РАСШИРЕНИЕфайла,АДРЕСоткуда,СКОЛЬКОбайт - аналогично W, но
в случае наличия файла он перезаписывается, длина становится равна СКОЛЬКОбайт;
- WA ИМЯфайла.РАСШИРЕНИЕфайла,АДРЕСоткуда,СКОЛЬКОбайт - аналогично W, но
в случае наличия файла данные добавляются в конец файла, длина увеличивается на СКОЛЬКОбайт;
- DEL ИМЯфайла.РАСШИРЕНИЕфайла - удаление файла. удаление директорий заблокировано,
потому что контроллер не проверяет наличие файлов внутри директории и удаляет со
всеми потрохами, причем делает это некорректно;
- I [LUN] - запуск повторной инициализации устройства. параметр LUN нужен для работы с
некоторыми картридерами чтобы выбрать нужную карту. теоретически может быть от 0 до F,
пока максимум что мне попалось - 4. если не указан - то 0. макс. значение выводится
при инициализации;
- ? - небольшой встроенный help. можно отключить в defs.inc (жрет место в бинарнике)
- требуется гораздо меньше ОЗУ под буферы (36 байт на USB дескриптор и по 64 байта
на командную строку и путь). детально не копал, но похоже количество вводимых символов
не проверяется, так что с длинными путями и ком. строкой надо осторожнее.
- по железу - контроллер подключается аналогично SD_HWM_PVV - шина данных, /RD, /WR, /CS, A0.
конкретные адреса нужно указать в defs.inc (DATA_PORT, CMD_PORT);
там же надо указать начальный адрес компиляции и адрес буфера.
все это добро со всеми фичами помещается в 2 килобайта. загрузка файлов по ощущениям
в несколько раз быстрее чем с SD_HWM_PVV (это понятно - процессору не нужно перепахивать
директории, FAT и т.п.)[свернуть]
ПЗУ, после сборки, получился чуть меньше 2 килобайт.
буфер на сектор с CH376 не используется. файлы пишутся/читаются прямо по целевым адресам в памяти. буфер там для командной строки и текущего пути, плюс еще пара байт на текущий LUN и еще что-то.
- - - Добавлено - - -
а можно проосто посмотреть в исходник ;)
Код:#ifdef CH376
BUFDIR EQU BUF
CWD EQU BUF+40
LINEBUF EQU CWD+64
M_LUN EQU LINEBUF+64
ENDBUF EQU M_LUN+1
#else
Поставил на шину данных буфер на 74LS245, провода до платы CH376 примерно 8см. Конденсатора нет. Работает стабильно.
Скрытый текст
https://i.ibb.co/gdNywKP/01.jpg[свернуть]
Скрытый текст
https://i.ibb.co/3m3W72f/02.jpg[свернуть]
Теперь нужно разобраться с приостановкой и прерыванием вывода каталога и проверить запись. Только клавиатуру PS/2 подключить, а то неудобно на шлейфиках клавиатуру от РК-86 использовать :)
надо разбираться где глюк - в IfKeyPress или в GETC
попробуй добавить в dos_rk.asm строчку
если при нажатии и удержании пробела вывод остановится - проблема в GETC, надо смотреть что там в ПЗУ Галаксии, если нет - проблема в IfKeyPressКод:C_DIR12:
CALL IfKeyPress ; опрос нажатия кнопок
CPI 0FFH ; приостановка вывода списка файлов если есть нажатие любой кнопки
JZ C_DIR3
jmp C_DIR12
call GETC
cpi dir_exit ;выход
rz
Видимо, я недостаточно по времени удерживал пробел - стал удерживать дольше и вывод каталога стал останавливаться. В общем, извиняюсь за ложную тревогу. После остановки нажимал ENTER и вывод шёл дальше. Если нажимать пробел, вывод шёл, останавливаясь после каждого файла. Правда, ещё не понял, как прерывать вывод. Когда нажимаю BREAK, вывод останавливается, но выхожу в Бейсик и нужно снова набирать A=USR(&F000).
Ещё непонятная штука с вводом имени файла для запуска. Игра PACMAN_P - проблема с вводом подчерка в имени файла. В Бейсике подчерк вводится нормально, но в SDOS подчерк не вводится. Другие символы вводятся. Конечно, можно переименовать файл, это не проблема. Буду тестить CH376 дальше, попробую запись. Только что сделал PS/2 для Галаксии, не знаю, успею ли сегодня потестить...