Привет всем...
В команде Bload "" - в кавычках - имя файла ставится...
С пустыми кавычками - может и не грузится...
???
Вид для печати
Эмулятор VV.
Это и есть вся программа - её цель объединить три слоя.
Рядом в каталоге лежат три файла где записаны слои.
Пробовал BLOAD "" и так BLOAD "name" - без разницы.
Грузится только один файл. А потом окно диалога загрузки не появляется.
- - - Добавлено - - -
Да точно. Попробовал в EMU там такой вариант работает.
А как сделать то, что можно загрузить таким BLOAD? Я пробую то и сё в emu80, попробовал из мануала BSAVE"PROG",4000,6300. Все записывается, но когда делаю BLOAD неизменно говорит мне "НЕЛЬЗЯ ОШИБКА". Я согласен, что нельзя ошибка, надо без ошибка, но как?
Берешь кодовый блок - скомпилировав из ассемблера,
или набранный в мониторе или записанный командами poke - в память...
И блок кода записываешь...
Потом командой Bload "name" - загружаешь в память...
И скорее всего адреса загрузки должны быть выше, больше адреса в Himem...
На область Basic' a Bload "" - загружать данные не будет...
Himem &6fff
Bload "" - например c &7000...
Stl75, спасибо, HIMEM помогло.
svofski, дело не в HIMEM, а в адресах. Нельзя загружать по адресам <4300h. >= можно
Все равно в v06x у меня не загружает. Читает 4 байта префикса, 31 байт имени с нулями, после чего сразу говорит "нельзя ашипка" не доиграв даже до того места, где записаны стартовые адреса. Я смотрю через перехват $2b05. Тот же файл в emu80 и VV загружается. Что может быть не так?
С помощью проги перевел две игры из журналов Радиолюбитель:
- "Питон" (Александр Еременчук РЛ-08/1993)
- "Атака" (Артем Чеботарев РЛ-03/1992)
Число не имеет значения, имя ведь может быть разной длины. Я просто не учел, что там может быть флажок ожидания синхробайта, когда надо скипать до E6. Пока исправил, но вообще это неправильно, получается, что эмулятор слишком много знает о структуре файла и всякую фигню от себя додумывает. Надо встраиваться на более низкий уровень.
P.S. глюк с незагрузкой RDS я больше повторить не могу. Загружается.
Тот самый питон, где основной цикл на асме. Время инициализации на мой взгляд слишком долгое, в таких случаях лучше подгружать кодовый блок.
- - - Добавлено - - -
Исправил время прогона тестика для 2.6ВМ1. Постараюсь адаптировать хотя бы часть оптимизаций оттуда в версию для 8080.
Перевел еще 2 игры из журнала Радиолюбитель:
- Познай себя (И.Онищенко РЛ.3/93)
- Ход конем (А.Еременчук РЛ.8/93)
Оптимизировал бейсик с учетом основных (но не всех) достижений версии для 580ВМ1 (перечень изменений в readme). В качестве модного и актуального бенча предлагаю оценить старт ANTIGRAV (от RUN до завершения рисования уровня):
2.5 - 164.4 секунды
2.891 - 130.17 секунды
2.995 - 65.58 секунды
2.996 - 52.23 секунды
Еще 2 игры из журнала - Радиолюбитель - Ваш компьютер:
- Метеоритная защита (Усов.В. РЛ-ВК-10/1996);
- Одинокая пешка (Усов.В. РЛ-ВК-08/1997);
thetrik, Сколько всего нового - забытого старого. Нужно будет перетеститровать. Спасибо что делаешь это!!
Мой новый проект пока буксует - причина ограничения памяти и скорости Бейсика.
Есть идея как ускорить (в какой-то мере) процесс, но для этого мне нужно
Подскажите пожалуйста:
1. Правильно ли я понял что формат Бейсика BSAVE это тоже самое что и формат записи МОНИТОРА-ОТЛАДЧИКА ?
2. Может ли "Pretty 8080 Assembler" выгрузить в формате BSAVE ?
Из ответа я понял:
1. в "Pretty 8080 Assembler" нет возможности выгрузить в формате МОНИТОРА-ОТЛАДЧИКА
2. формат BSAVE и формат МОНИТОРА-ОТЛАДЧИКА всётаки чем-то отличаются и значит формат МОНИТОРА-ОТЛАДЧИКА мне не подходит. Мне нужен Бейсиковский формат BSAVE.
Есть вариант на языке высокого уровня на РС создать файл формата BSAVE, чтобы Бейсик его загружал.
Например в журнале Байт №5 Октябрь 1991 г. приводится физический формат файла МОНИТОРА-ОТЛАДЧИКА.
А есть ли где-нибудь описание формата BSAVE ?
Извини за телеграфный ответ. Да, ты правильно понял.
Может быть, но по-моему с ним довольно прозрачно. Такой тест:
POKE&7000,1
BSAVE"FORMAT",&7000,&70FF
Сохраняем format.cas и смотрим. Получается по-моему так:
4 байта 0xD2
имя файла, 0, 0, 0
(много нулей, допустим 255)
0xE6 - байт синхронизации
MSB, LSB адрес началча big-endian
MSB, LSB адрес конца big-endian
(данные, 256 байт в нашем случае)
1 байт контрольная сумма.
Отличная идея !! Так это можно вообще не изобретать велосипед (насколько я понял), можно сохранить в Бейсике BSAVE то пространство памяти, которое мне нужно будет загрузить - и заменить данные на свои (например выгруженные в hex формате в Pretty).
Однако что такое контрольная сумма в формате BSAVE непонятно ? - поскольку википедия даёт достаточно обширный комментарий на этот счёт.
Назло здравому смыслу я сделал конвертер bin2cas.bat на языке bat-файлов. Использование, например: bas2cas.bat bload.bin bload.cas 0x7000
Проверял только в 11 винде.
Заполнил FF область от 8000 до 9FFF. Записал BSAVE "NNNNNNN",8000,9FFF
Открыл в HEX формате и вот что выдаёт:
D2 D2 D2 D2 (имя файла 7 байт) (259 нулей) E6
80 00 9F FF (адрес началча и конца)
(245 раз FF) C0 DC E2 E2 DC E2 E2 DC C0
(247 раз FF) 00 71 8A CB AA 9A 8A 71 00
(247 раз FF) 00 C7 28 2C AA 69 28 C7 00
(247 раз FF) 00 00 80 80 80 80 80 00 00
(247 раз FF) 00 72 8A 0A 7B 8A 8A 73 00
(247 раз FF) 00 08 08 08 CF 08 08 EF 00
(247 раз FF) 00 20 20 20 3C 20 20 BE 00
(247 раз FF) 03 03 03 03 03 03 03 03 03
(6146 раз FF) 29 (контрольная сумма)
После первых 8 строк данных идёт некая цепочка из девяти байт - что это ?
Количество байт данных должно быть 32*256=8192 по факту (8*256)-2=2046+6146=8192 всё сходится
Контрольная сумма 29&(41) - не совсем понял как её вычислить ?
- - - Добавлено - - -
До конца ещё не понял, но похоже это решение моего вопроса :) Спасибо !!
bas2cas.bat bload.bin bload.cas 0x7000 а вот эти циферки 0x7000 это что ?
Я незнаю как сделано в других эмуляторах, но в моем (VV) после первого детекта последовательности CAS перехватчиком выскакивает диалоговое окно выбора .cas файлов, по завершению которого взводится флажек блокировки открытия следующего на некоторое время (доли секунды, точно не помню). Иначе это окно появляется бесконечно.
Просто добавь паузу в ~1сек перед следующим BLOAD"" и все заработает как надо.
Не понятно, откуда это, может что-то записалось в область данных? А формат записи на магнитную ленту директивой BSAVE следующий:
Код:- заголовок 256 байт 0h (нет в файлах .cas)
- синхробайт 0E6h (нет в файлах .cas)
- 4 байта 0D2h
- имя файла (до 127 байт ?);
- 3 байта 0h
- заголовок 256 байт 0h
- синхробайт 0E6h
- ст., мл. байт адреса начала;
- ст., мл. байт адреса конца;
- байты файла
- 1 байт контр. сумма всех байтов файла без переноса
Шутки шутками, а я добавил .tape v06x-cas к прекрасму. .tape v06c-cas или .tape v06c-bload сделает cas и wav как надо для BLOAD. Для скачивания .cas жать кнопку TAPE.
Пример: [ссыла]
- - - Добавлено - - -
У меня после диалога ставится флажок-признак того, что файл открыт и, пока он стоит, диалог больше не открывается. Когда файл кончается, флажок сбрасывается. Для дополнтельной защиты подсмотрел у Pyk сброс флажка по 0x2b8e. В emu80v4 это называется закрытие файла, но это по-моему просто означает, что бейсик вывалился в REPL. То есть два BLOAD подряд при исполнении программы срабатывание 0x2b8e не вызовут.
- - - Добавлено - - -
P.S. и это чем-то даже хорошо, потому что можно сделать синтетический .CAS файл, в котором будет склеено несколько файлов. Ну и WAV тоже так.
Если файл, например, обрубок, диалог откроется во второй раз. Его можно закрыть. Если диалог закрыть без файла (сразу, или по кривости файла), можно грузить wav. По-моему нормально обрабатываются жизненные ситуации и восстановление после исключительных не обременительное.
Было проведено исследование и тайна этих цепочек раскрыта (спасибо KTSerg) - это оказались адреса записи данных 8000-9FFF - на экране они возникают вначале исполнения команды BSAVE.
- - - Добавлено - - -
Вот это поворот !! Ещё вчера мечтали, а уже сегодня это стало реальностью :) СПАСИБО !!
2B8E в 2.5 это ввод с клавиатуры, постараюсь его туда вернуть.
Дополнение к бессмысленному тесту:
BASCOM (плавучка) - 13 секунд
BASCOM (целые) - 0.5 секунд (да, полсекунды)
Для полной честности можно еще прибавлять 1.25 секунды на инициализацию.
Хотя стоит подумать над альтернативной процедурой для перехвата. Пример: bload"" в некоей демонстрационной программе на бейсике, после bload"" внутри программы нет обращений к клавиатуре - перехода на 2B8E в этом случае не будет.
- - - Добавлено - - -
Как вариант - щелкание магнитофонным реле (1B4F в 2.5), вызывается в конце CLOAD, VERIFY, MERGE, CSAVE, BLOAD, BSAVE.
- - - Добавлено - - -
Еще лучше реагировать на релешный бит порта 1, тогда можно не привязываться к адресу процедуры.
Реле это правда отличная идея и наверняка наиболее универсальная. Надеюсь, что ты сохранил его в новых версиях Бейсика.
В 2.55-2.70 сохранил все по максимуму, в т.ч. реле.
Есть еще один нетрадиционный вариант ускорения бейсика 2.5 (или его потомков) - сделать версию для ориона-про (с мультикартой). В турбо там будет в 3 раза быстрее, с отключенным турбо (переключать можно программно) примерно как на векторе.
Stl75, компиляторов Бейсика есть целых два, Microsoft BASCOM и Amsterdam Compiler Kit умеет компилировать Бейсик для CPM под 8080, правда без плавучки.
Еще есть игрушечный компилятор бейсика на бейсике BCBC. Его не пробовал, но я и ACK не пробовал.