С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Не только заметили, но и переписали BDOS, т.к. {цитирую по памяти} "проще было переписать".
Есть у меня архив переписанной 2.2, причем уже в коде Z80, меньшего размера (что дало автору впихнуть в сстандартный объем еще и код для поддержки дат файлов, каталога по умолчанию и т.п.), и одно из упоминавшихся в описалове - он писал что исправил ошибки в файловом доступе в стандартной 2.2, что дало увеличение максимального размера - как ФС так и файлов (до математического предела, а не до бага). Конечно, все это надо проверять, т.к. делано это опять же еще до эпохи дешевых "народных" HDD.
- - - Добавлено - - -
Если память не подводит, вроде вот это оно:
http://www.gaby.de/ftp/pub/cpm/znode...ssrc/zsdos.htm
Лучше сделать и жалеть, чем не сделать и жалеть.
Некоторые из моих поделок тут: https://github.com/serge-404
Ну, господа, если вы используете что-то своё, а не CP/M 2.2, то конечно, оно у вас может и не работать
Я вот не поленился, набил программу, которая записывает 1100h записей (544Кб) последовательно, а потом читает записи с номерами 0FFFh и 1000h. Тестировал на Корвете (там CP/M байт в байт как на Башкирии, но у Башкирии один логический диск всего 384Кб). Так вот считалось именно то, что я и записывал (а именно - 16-битный номер записи).
И в каталоге именно так, как и должно быть - номера экстентов: ... 00.1E 00.1F 01.00 01.01 ...
Используется BDOS который цельнотянутый на всех CP/M Ориона, откуда его утянули - сие тайна великая есть, но живет оно вот в таком вот виде с одна тысяча девятьсот мохнатого года. И код там для 8080, тремя страницами ранее есть исходники, тоже не моего производства (архив с двумя файлами - в мнемониках 8080 и Z80) - я их взял иллюстрировать свои мысли как наиболее хорошо комментированные исходники, т.к. те фрагменты что я правил, с этим исходником совпадали (за другое не поручусь) - тремя страницами треда ранее. А то что ты смотришь сейчас, это то что я как перспективное указал (а не то что использую), читай внимательнее. Оно в коде для Z80 (глянул в код в спойлере, а там индексные операции, лол).
Последний раз редактировалось Error404; 31.07.2016 в 13:29.
Лучше сделать и жалеть, чем не сделать и жалеть.
Некоторые из моих поделок тут: https://github.com/serge-404
А теперь посмотрим на исходники, на которые дал ссылку Error404. Интересует, как они конвертируют номер записи:
Скрытый текст
Код:LDFCB: LD (RDWR),A ; Save Read/Write flag LD A,(IX+33) ; Get first byte random record LD D,A ; Save it in D RES 7,D ; Reset MSB to get next record RLA ; Shift MSB in carry LD A,(IX+34) ; Load next byte random record RLA ; Shift Carry PUSH AF ; Save it AND MAXEXT ; Mask next extent LD C,A ; Save it in C POP AF ; Get byte RLA ; Shift 4 times RLA RLA RLA AND 0FH ; Mask it LD B,A ; Save data module number LD A,(IX+35) ; Get next byte random record LD E,6 ; Set random record to large flag CP 4 ; Test random record to large JR NC,LDFCB8 ; Yes then error RLCA ; Shift 4 times RLCA RLCA RLCA ADD A,B ; Add byte LD B,A ; Save data module number in B LD (IX+NXTREC),D ; Set next record count LD D,(IX+FCBMOD) ; Get data module number BIT 6,D ; Test error random record JR NZ,LDFCB0 ; Yes then jump LD A,C ; Get new extent number CP (IX+FCBEXT) ; Compare with FCB JR NZ,LDFCB0 ; Not equal then open next extent LD A,B ; Get new data module number XOR (IX+FCBMOD) ; Compare with data module number AND MAXMOD ; Mask it JR Z,LDFCB6 ; Equal then return LDFCB0: BIT 7,D ; Test FCB modified (write)[свернуть]
Обратите внимание на выделенные красным цветом строчки. Правильно ли запомнились в стеке 4 бита расширенного номера экстента? Или может быть нужно было только 3 раза потом сдвиг делать?
Моть вообще CPM 3 запилить, где то помню попадались исходники. Поддержка страничной памяти, TPA 60 Килобайт. Ещё чего то не помню. )
Альтаирка неплоха ,конечно, но охота ,чего то охота.А чего еще не понял.
![]()
Все зависит от того, сколько бит в екстенте. Если вот это верно:
то сдвигов должно быть всего 4 а не 5. И тогда, либо первый RLA должен быть после PUSH AF (т.е. два байта поменять местами) либо один RLA после POP AF убрать. Возможно это ошибка разрабов и изначально все должно было быть по первому варианту. А оошибку сразу не выявили потому что не было столько объемов. Или я не прав?Код:; For random i/o, set the fcb for the desired record number ; based on the 'r0,r1,r2' bytes. These bytes in the fcb are ; used as follows: ; ; fcb+35 fcb+34 fcb+33 ; | 'r-2' | 'r-1' | 'r-0' | ; |7 0 | 7 0 | 7 0| ; |0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0| ; | overflow | | extra | extent | record # | ; | ______________| |_extent|__number___|_____________| ; also 's2'
PS Я вот думаю, может натянуть какую досю на мой МХ2?
- - - Добавлено - - -
Стоп, а сдвиг то влево а не вправо. Причем через С. Так что 5 это нормально.
Последний раз редактировалось HardWareMan; 31.07.2016 в 12:28.
Потестировал чтение/запись под PRODOS, нет вроде никаких проблем с файлами больше 512Кб. Дайте уже то, что у вас не работает!
Ну, наверное вот это быстрее всего можно взять (там в первой партиции CP/M):
https://drive.google.com/file/d/0B3S...ew?usp=sharing
Остальное я уже покоцал своими правками.
- - - Добавлено - - -
Ну тут я никак не могу подтвердить или опровергнуть, я ее пока не юзал. Вроде Ivagor как раз на ПроДосе файлы делил т.к. оно большими не работало?
- - - Добавлено - - -
Или вот еще дисководный вариант
Лучше сделать и жалеть, чем не сделать и жалеть.
Некоторые из моих поделок тут: https://github.com/serge-404
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)