С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Tronix, имеет смысл записывать 17-байтный заголовок в отдельный файл.
В wav2cas для МС1502 не надо вычитать 256 байт. Именно поэтому у Пасьянса получился размер 5F02h байт, а у Редактора текста вообще получается отрицательный размер 2 - 256 = -254 байта.
В wav2cas в структуре Wave_Fmt поля Sample_Rate и Bytes_secnd должны быть типа LongInt.PHP код:
.......
If Poisk then
begin
WriteLn('Size : '+IntToStr(Phdr.FLen));
WriteLn('Type : '+IntToHex(Phdr.Ftype,2));
end
else
begin
WriteLn('Size : '+IntToStr(Mhdr.FLen)+' (-256 bytes)');
WriteLn('Type : '+IntToHex(Mhdr.Ftype,2));
end;
.......
If Poisk then TotalCnt := Phdr.FLen else TotalCnt := Mhdr.Flen-256;
.......
Последний раз редактировалось SoftCat; 12.05.2013 в 14:26.
shattered, Вы много сделали в MESS для МС1502, добавили работу с дисководом. Почему этого нет в последней версии MESS? Там почему-то МС1502 вообще не запускается.
Последняя -- это 148u4? Релизные версии я проверяю редко, но вроде такого не было.
С дисководом не все так просто. Когда я его делал, то исправил общий код эмуляции wd17xx и этот кусок в MESS не попал, потому что был кривой. С тех пор эмуляцию wd17xx (т.е. вг93) переписали с нуля и той, дополнительной, правки уже недостаточно (вылетает ошибка CRC). Спрошу старших товарищей.
Не понял, если честно
Вот отсюда:
http://www.mamedev.org/release.html
Проверю при случае.
Спасибо за подсказку насчет домножения на 100h у МС1502 типов 02h и 08h для получения размера. Кстати, точно .E (EXE) это 08h, а не 80h?
Но! Насчет вычитания из получившегося размера 256 байт я бы все-таки поспорил, так как если их не вычитать - последний блок данных всегда читается с ошибкой контрольной суммы, и как показывает практика - в нем содержатся повторяющиеся одинаковые байты, как правило это FFh, но могут быть и другие.
Предположений несколько: 1) Видимо просто подстраховались и когда делят размер на 100h округляли размер в блоках в большую сторону. С другой стороны не понятно, что если программа занимает скажем 12 байт? Это 1 блок. 1*256 = 256. Минус 256 это 0 байт. Таким образом выходит, что для файлов меньше 256 байт отнимать 256 байт не нужно. Странно, может не предполагали, что могут быть исполнимые проги < 256 байт?
2) Таки отнимать 256 от размера не нужно, но что тогда содержится сразу за последним блоком в поле, предназначенном для контрольной суммы (2 байта). Не контрольная сумма блока - это точно. Мож контрольная сумма всего файла? Или просто мусор..
PS: Да, лажанул в описании wave структуры, спасибо.
---------- Post added at 17:49 ---------- Previous post was at 17:22 ----------
Сейчас погонял файлы - в последнем блоке в поле контрольной суммы у всех файлов содержится 0000h. Ну ладно, не будем тогда отнимать 256 от размера, а буду смотреть - если стоит режим MC1502 и если у последнего блока не совпадает CRC с подсчитаным а равняется 0000h, то это не ошибка а так типо и надо -)))
---------- Post added at 17:53 ---------- Previous post was at 17:49 ----------
Кстати, вы упомянали о сорцах биоса 1502, не осталось-ли их у вас, чтоб посмотреть так сказать воочию на всю эту картину...
Tronix, .E (EXE) файл Электроники МС1502 это точно тип 08h. А тип 80h в Электронике МС1502 полностью совпадает с типом 80h Поиска. Для типов 02h и 08h надо домножать размер на 100h, а вот для типа 80h не надо.
Заметьте, что размеры файлов типов 02h и 08h всегда делятся на 256. Поэтому в этих файлах не может быть частично заполненных последних блоков, и с контрольной суммой (CRC) последнего блока всё в порядке. А что касается остальных типов файлов, то я точно не помню, как там решается вопрос с CRC последнего блока. Надо смотреть исходники.
Исходники BIOS'а МС1502 я сделал сам с помощью Sourcer'а. Могу Вам прислать, когда буду дома.
Последний раз редактировалось SoftCat; 13.05.2013 в 18:32.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)