какой формат файла rks?
вроде гдето видел
есть утилита для пересчета crc файла?
elite_pic.zip
какой формат файла rks?
вроде гдето видел
есть утилита для пересчета crc файла?
elite_pic.zip
С уважением,
Jerri / Red Triangle.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Откуда этот файл? В нем заголовок неправильный: 3 байт должен быть 81, а не 01 - это старший байт конечного адреса
Контрольная сумма файла DF3A, нужно последние 00 00 поменять на 3A DF.
Процедуру подсчет КС вот только на днях приводил:
http://zx-pk.ru/threads/6505-radio-8...l=1#post955672
Либо из Монитора пересохранить.
Ваш файл не грузится потому что Вы конечный адрес указали меньше начального 8000...014С, а надо 8000...814F. Во вложении правильный файл и с контрольной суммой. Если КС нет или она неверная, то грузить можно только по сбросу, т.к тогда КС не контролируется. Симпатичная картинка.
Распространённых форматов эмуляторов есть всего два - с именем и без имени. Они выводятся по O и W, а вводятся по I и R, соответственно.
А, если Вы применяете ленинградский монитор, то доступен еще формат РК86 (загрузка по Y), формат ОРИОНА (загрузка по @), формат ZX-Spectrum (загрузка по J), а также в формате MSX (после НР+F3). Естественно, в эмуляторе для форматов отличных от двухфазного, конфиг эмулятора д.быть соответственно настроен (указаны точки перехвата МГ-подпрограмм).
Итак формат без имени:
256 байтов 00 (пилотон)
E6 синхробайт
Нач.адрес (младший, старший)
Кон.адрес (младший, старший)
Сам файл длиной кон.адрес минус нач.адрес +1
Контрольная сумма (младший, старший)
Формат с именем:
256 байтов 00 (пилотон)
E6 синхробайт
D9, D9, D9 - признак формата с именем
до 17 байтов имени, но последний всегда 0
768 байтов 00 (второй пилотон)
E6 синхробайт
Нач.адрес (младший, старший)
Кон.адрес (младший, старший)
Сам файл длиной кон.адрес минус нач.адрес +1
Контрольная сумма (младший, старший)
Как видите, формат с именем отличается только наличием заголовка с именем. Потому второй пилотон специально сделан долгим, и если для файла с именем нажать на сброс во время второго пилотона, то можно ввести файл с именем с автоматическим запуском по окончании ввода (а также загрузить по директиве R).
В формате для эмулятора начальные байты, а именно первый пилотон и байт Е6 откинули. Пилотон не нужен, а вот байт E6 откинули зря, он нужен, потому, что его наличие позволяет слеплять блоки многоблочных программ в один файл простым слиянием. Таким и был формат GAM в эмуляторе Дёмина (он отличается от формата RK? только наличием лидирующего байта E6).
Эмуляторы EMU и EMU80 понимают формат GAM и даже если в формате RKS оставить лидирующий байт E6, то эмуляторы всё-равно загрузят верно. Т.е эти эмуляторы лидирующий E6 всегда отбрасывают. Это не вредит потому что в РК и ОРИОНЕ на адрес E6xx ничего не грузится, а для Специалиста нет программ грузящихся на адрес xxE6, начальные адреса всех программ кратны xx00.
На реальных кассетах использовался формат с именем, но для эмуляторов сочли его ненужным (т.к имя есть у файла Windows), потому для эмуляторов для файлов в виде кодов больше используется формат без имени, а для файлов в виде WAV используется формат с именем.
К сожалению, у авторов эмуляторов не хватило фантазии придумать разные расширения для разных форматов. Причём при попытке загрузить по I файл предназначенный для ввода по R, происходит завис. Потому такая путаница очень раздражает при эксплуатации эмуляторов (что в очередной раз доказывает, что если хочешь иметь удобный эмулятор, то сделай сам). Для сокращения путаницы я использую для формата с именем расширение 'RKS', а без имени - 'rks'. Кстати, если использовать эмулятор EMU80, то в конфиге можно задать типы файлов с которыми будет работать эмулятор.
Кстати, при ленинградском мониторе (в отличие от орловского), можно загрузить любой блок в двухфазке с любой скоростью и от любого компьютера, если указать начальный и конечный адреса. Например, ввести R1000,8F00 и по бегущему счётчику узнать конечный адрес загрузки. Можно проще - R1000 (неуказанный второй параметр принимается нулём). При этом с указанного адреса введутся все байты следующие сразу за байтом E6.
Теперь как подгонять КС блока.
К сожалению, хотя на Си написать это совсем несложно, конвертора DAT-файла кодов программы в формат RK? для Windows до сих пор никто не удосужился написать. Причём это должна быть программа работающая с командной строкой, тогда достаточно включить её запуск BAT-файлом сразу после трансляции, но перед стартом эмулятора.
Если Вы используете в эмуляторе ленинградский монитор, то не проблема подставить КС вручную с помощью редактора UltraEdit в HEX-режиме. Для этого файл грузят (по I или по R - без разницы). Ленинградский монитор подсчитывает и выводит контрольную сумму введённого блока (а орловский монитор выводит только надпись "ОШИБКА"). Достаточно посмотреть эту сумму и вручную подставить в конце файла или задать в исходнике.
- - - Добавлено - - -
Код:. .Z80 aseg ORG 100H KS EQU 0EEEEH RABADR EQU 8000H defb 0D9H,0D9H,0D9H defb 'DEMO игры ELITE',0 DS 256 - ($-100H) defb 0E6H DW RABADR, RABADR+LENGTH -1 .phase RABADR . . . . тело самой программы . . . . . ZZZ aset $ and 0FH if ZZZ ne 0 rept 10H-ZZZ defb 255 endm endif LENGTH EQU $-RABADR DW KS .dephase END
Вот так я оформляю программу транслируемую для Специалиста в макроассемблере М80 от Microsoft. Запускаю трансляцию, линковку и запуск странслированной программы в эмуляторе BAT-файлом, так что закончив набор текста, просто запускаю BAT-файл (можно прямо из UltraEdit, там есть такие возможности, т.е можно обойтись и без BAT-файла) и через секунду уже в эмуляторе, проверяю программу, для чего нажимаю НР+F9 (для прерывания загрузки по сбросу), затем I для ввода RKS файла.
Пока программа отлаживается, я не обращаю внимания на KS, а когда программа отлажена, то остаётся только посмотреть выводимую КС при вводе и подставить её в исходник вместо константы KS и ещё раз странслировать. Потому меня проблема из-за того, что ассемблер не умеет сам считать и подставлять КС в объектный код, не волнует. А вообще в ассемблере такая функция была бы полезной.
Кстати, для написания программ для 8-ми разрядок нет альтернативы макроассемблеру M80 и текстовому редактору UltraEdit, - всё остальное гораздо хуже.
Последний раз редактировалось barsik; 26.03.2018 в 10:41.
Подо что эта программа? У меня на эмуляторе не работает.
barsik, откуда я должен был узнать структуру файла .RKx?
все что я знаю получено анализом имеющихся образов кассетных файлов
а там все грузится по адресу 0 и второе слово получается вот такое вот.
про crc я в курсе но формул не знаю да и нет у меня такой функции в sjasm.
С уважением,
Jerri / Red Triangle.
Я запускал в эмуляторе EMU80 с указанием CPU КР580. Может быть для Вашего эмулятора мешает первый байт E6, удалите его. А вообще попадаются файлы у которых первый байт E6. Потому лучше сделать как сделали авторы других эмуляторов, - всегда игнорируйте лидирующий байт E6, это синхробайт.
Последний раз редактировалось barsik; 26.03.2018 в 10:32.
Убрал 0xE6. Как я его не заметил.
На самом деле, этот байт в образ пихать не надо, раз его нет в большинстве образов.
Да и контрольная сумма излишня. Тем более, что стандартному загрузчику она не нужна.
Согласен, кто к чему привык, то и лучше.
Хотя без некоторых свойств в макроассемблере (например, .phase) программировать сложнее. Кстати, на M80 можно в одной и той же программе писать кусок кода на Z80 (после оператора .Z80), а другой кусок кода на ассемблере 6502 (после оператора .6502), что удобно, если в ЭВМ, как в Apple-II, стоят сразу два программно переключаемых процессора.
В мониторе Специалиста есть директива K<нач.адр>,<кон.адр>, считающая КС (по подпрограмме F82A в РК86). Так что после ввода, зная адреса загрузки, этой директивой можно сосчитать КС.
А зачем Вам считать КС?
КС нужна только, если использовать орловский монитор, т.к с ним не знаешь адрес загрузки блока, т.к этот монитор не выводит адреса при неверной КС, но если и так знаешь адрес загрузки блока (чтобы ввести команду Gaddr<ВК>), то и это неважно. Используйте автостартовость монитора Специалиста по сбросу, где КС не контролируется.
А чтобы начать отладку встроенным отладчиком эмулятора, используйте эмулятор EMU80, задав в конфиге выход в отладчик по команде HALT. В нужном месте программы ставите HALT и сразу по старту программы оказываетесь в нужном для отладки месте (нажимаете U, чтобы пройти HALT) и далее шагаете по шагам нажимая F7 или F8.
Можно HALT и не использовать, но тогда надо по листингу трансляции смотреть адрес, где нужен останов и перед запуском программы выйти по АЛТ-D в отладчик, набрать A, затем нужный адрес, перейти туда и с помощью клавиши F5 поставить там стоп точку. Потому для ускорения проще вставить HALT при трансляции. Но чтобы вылет в отладчик по HALT срабатывал, поставьте в конце конфига для Специалиста строку:
cpu.debugOnHalt = yes
А кстати, я плохо понимаю ассемблер КР580, потому пишу в мнемониках Z80 и часто по привычке вставляю JR и другие Z80-команды, отчего в эмуляторе программы улетают и приходится много часов искать ошибку трассировкой. По счастью недавно Pyk ввёл в EMU80 возможность вылета в отладчик по недокументированной команде. Это здорово помогло. Так, что если Вы пишете на ассемблере Z80 для КР580, то Вам очень поможет такая строка в конфиге:
cpu.debugOnIllegalCmd = yes
Я не считаю КС в окончательной сборке, я просто смотрю в эмуляторе, что написано на экране после ввода (неважно по R или по I) и это число подставляю в исходник и снова транслирую. У меня при трансляции BAT-файлом результирующий файл копируется в подкаталог '...\EMU80\spec\PROGS\'.
Эмулятор EMU80 всегда при отладке загружен, из него выходить незачем (да и грузится он несколько секунд, что нервирует). После трансляции для ввода программы набираю R (или I) и нажимаю <ВК>. Контрольная сумма не волнует, потому что использую ленинградский монитор, а он выводит и адреса загрузки и реальную КС введённого блока по окончании загрузки. Если интересует могу поделиться конфигами Специалиста для EMU80 и EMU с прерываниями 50 Гц, дисководами, ROM-диском и ОЗУ в 1 мб.
Вообще-то, надо бы нацарапать программку, работающую из командной строки, которая считает КС файла в формате RKS без имени. Любой программист это напишет за 5 минут. Но я написать это могу только для MSDOS, т.к для Windows не программирую. Если кого-то это устроит (для прогона программ MSDOS надо иметь Win XP, не выше), то могу это сделать.
Последний раз редактировалось barsik; 27.03.2018 в 23:13.
Раз уж речь зашла о Emu80, могу еще предложить грузить файлы через Alt-F3 (с автозапуском) или Alt-L (без автозапуска). КС при этом игнорируется.
Ну или drag-n-drop'ом файл бросать в окно эмулятора, что равносильно Alt-F3.
- - - Добавлено - - -
jerri, вот, кстати, готовый скрипт от vinxru для формирования rks-файла с подсчетом КС:
https://github.com/alemorf/retro/blo...s/-make-rks.js
Там же есть -compile.bat, из которого он вызывается...
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)