PDA

Просмотр полной версии : Корвет: Грузимся с магнитофона



BYTEMAN
16.02.2011, 18:56
Возникла необходимость каким-либо образом переконвертировать игрушки, что в COM-файлах, для загрузки с ленты.... Как это можно сделать? В частности, хочется переконвертировать TREAS.COM (с образа disk1.kdi). Какая методика перевода программ? Что из СОМ-файла удалить, что в него добавить, чтобы получить BIN-файл?

marinovsoft
16.02.2011, 19:07
BYTEMAN, я одно время занимался этим вопросом. Наверное с COM-файлами ничего не получится (У меня ничего не получилось). Ищите их .BIN эквиваленты, и конвертируйте моей программой, ссылка на которую выше в теме. COM-файлы грузятся с адреса 100h. А бинарники с ленты грузятся с 9000h. Чтобы переделать COM в BIN потребуется дизассеблировать и заново собрать, но уже с другой базой (непроверенное ИМХО).

Добавлено. Кроме того, некоторые COM-файлы обращаются к функциям CPM (или МикроДос'у), такие точно не пойдут.

Добавлено. Пытался тут одну игру с MSX-1 дизассемблировать и снова собрать как написано здесь http://vector06c.narod.ru/recompile.html , не получилось. Это я намекаю к кому можно обратиться :)

BYTEMAN
16.02.2011, 19:31
marinovsoft, а какая раскладка памяти корвета в режиме бейсика? Ведь, как я понимаю, BIN-файл грузится командой BLOAD, а тама можно указать произвольный адрес?

marinovsoft
16.02.2011, 19:39
Если мне память не изменяет (а она мне скорее всего изменяет, т.к. техдоку я не читал с момента, как закончил разбираться с ранними версиями msxcas), там как раз в начале памяти сидит бейсик.
В корветовском бейсике используется команда LOAD с префиксом B, команды BLOAD - нет. Формат такой LOAD "QWE.BIN",B,R
Префикс R - означает, что после загрузки исполнение передается на загруженный бинарник.
С какого адреса загружать бинарник пишется в самом кассетном файле, там же идет адрес конца загрузки и адрес передачи исполнения.

Добавлено. Все BIN файлы, которые мне попадались, работали только с 9000h адреса.

BYTEMAN
16.02.2011, 19:58
Значит, надо будет копать глубже :( Приедет корвет, буду экспериментировать... Ведь как я понимаю, магнитофон не поддерживается ни в одном эмуле корвета?

esl
16.02.2011, 20:25
бейсик работает в конфигурации
BASIC EQU 40H
ПЗУ 24к, 0000-5FFF
ОЗУ с 6000 по F7FF,
область УВВ с F800 по FFFF

я во времена оны скидывал .bin на кассету, там в общем совсем просто
грузим бинарник, он получает управление, перекидывает куда надо код, и передает ему управление, но ниче не осталось...

а в общем, - вполне реально
только надо будет некую "заглушку" доса написать,
почти все игрушки - к железу лезут на прямую, дос им не нужен
т.е. делаем некую заглушку доса, к ней клеим игрушку.
грузим, переключаем нужную конфигурацию памяти, перемещаем, запускаем.

надо только учитывать размер свободного RAM, некоторые игрушки без сжатия не влезут ...
но сейчас есть куча комперсоров которые на PC очень неплохо жмут, а код декомпрессора есть для i8080, можно преспособить

или на части бить надо.
например написать "загрузчик+cp/m emulator"
он стартует, переключает конфигурацию памяти, и грузит уже саму игру.

особенно TREAS - она здоровая.

магнитофон должен в эмулфторе B2M работать
у меня (pk8020.narod.ru) - точно не работает, зато там есть отладчик,
там кстати можно ставить бряки поинты и смотреть что обращается
там же есть и значение регистров (и распределение памяти)

BYTEMAN
16.02.2011, 20:50
esl, спасибо, информация очень полезная! У меня вообще была такая мысля:

Берём нужную нам игру (например, тот же Treas). Делим на несколько блоков. Пишем небольшой загрузчик на бейсике и программку в кодах, которая загрузит блок в область свободной памяти, переключит конфигурацию памяти, перебросит то, что мы загрузили, в нужные адреса, переключит конфиг памяти обратно, выйдет в бейсик, догрузит второй блок, посадит его куда надо. И так сколько раз надо. Потом просто поставит окончательный конфиг (в котором работает СР/М) и даст JP.

А что вы подразумевали под "заглушкой доса"? Если игра к досу не лезет, то тогда зачем он нам? :) Ну если и лезет, то тоже можно будет в том же загрузчике подгрузить с ленты необходимый кусок ДОСа, который понадобится. Правильно ли я вас понял и правильно ли я рассуждаю?

---------- Post added at 19:50 ---------- Previous post was at 19:48 ----------

А системные переменные бейсика то где располагаются?

esl
16.02.2011, 20:56
Правильно ;)
а если к CP/M BDOS/BIOS лезет то то что можем эмулировать, эмулируем, а остальное игнорируем

собственно "кусок доса" нам в этом случае не нужен.
про переменные - не помню, что-то сразу за ROM
а что-то (conin/conout) в самом конце памяти, там-же где и в CP/M

но думаю что в сжатом виде должны все влезть.

BYTEMAN
16.02.2011, 21:02
Всё! Завтра забираю Корвет, проверяю, и, если всё исправно, вперёд! :)


esl, ещё, если помните, я как-то спрашивал, откуда взялась на корвете TreasureIsland. Так вот думаю, что версия о том, что игра была слизана со спектрума, немного не верна. В спектрумовской версии нет музыки. В корветовской она есть .Так же эта музыка есть в версии для Commodore 16 (http://plus4world.powweb.com/software/Treasure_Island) и на Commodore 64 (http://www.gb64.com/game.php?id=8120). Больше этой музыки я нигде не слышал.... Так что вопрос о перекочевании этой игры - спорный...

marinovsoft
16.02.2011, 21:11
esl, а с "сетью" не пробовали разбираться? Я пробовал как-то дизассемблировать программки из комплекта DOS-LINE+NET-CP/M, пытаясь хоть как-то понять логику работы, но так и ничего не понял. Максимум через COM-порт на PC + адаптер на оптопаре + терминал удавалась завесить "Корвет", иногда с визуальными и звуковыми спецэффектами.

Добавлено. Некоторые игры хрананят как минимум "таблицы рекордов" в отдельных файлах. Это надо учитывать.

b2m
16.02.2011, 21:19
команды BLOAD - нет. Формат такой LOAD "QWE.BIN",B,R
Что-то не работает у меня в эмуляторе команда LOAD, пишет "синтаксическая ошибка". Эмуляцию магнитофона сделать можно, но пока я не разберусь с командой LOAD, я сделать не могу.

marinovsoft
16.02.2011, 21:24
Ага, соврал, должно быть
LOAD "CAS:QWE",B,R

esl
17.02.2011, 01:23
esl, а с "сетью" не пробовали разбираться? Я пробовал как-то дизассемблировать программки из комплекта DOS-LINE+NET-CP/M, пытаясь хоть как-то понять логику работы, но так и ничего не понял. Максимум через COM-порт на PC + адаптер на оптопаре + терминал удавалась завесить "Корвет", иногда с визуальными и звуковыми спецэффектами.

с родной корветовской - несколько раз начинал, протокола описания не видел, кое что есть в наработках, надо бы продолжить ...
с альтернативными - смысла имхо мало, да и нет у меня к ним доступа
а с родной - в теории хоть есть, например сделать загрузчик софта с IBM ...
(например есть у человека живой ПК8020, а дисков - нет
подключаем по кому, передаем начальный загрузчик, и получаем живой диск
ну или по магнитофону тоже можно такое)

B2M даже добавил сеть в свой эмулятор по моей просьбе, но руки пока не дошли этим воспользоваться :(




Добавлено. Некоторые игры хрананят как минимум "таблицы рекордов" в отдельных файлах. Это надо учитывать.
а на это можно забить :)
но аккуратно
и имхо на корвете таких не особо много
теже голдсофтоские ...

BYTEMAN
21.02.2011, 19:15
дык ведь абсолютные переходы все полетят....

такой вопрос: какая команда служит для передачи управления на маш. код?

esl
21.02.2011, 20:46
дык ведь абсолютные переходы все полетят....

такой вопрос: какая команда служит для передачи управления на маш. код?

вопрос не понял.

так наоборот как раз, наша задача обеспечить комовской игрушке "родную" среду выполнения при загрузке с кассеты
т.е. грузим мы например с 0x8000, туда и передается управление
код которые лежит там, переключает конфигурацию (включает ту в которой работает cp/m (0x40 -> 0x1c)
перемещает игруху на 0x100
инициализирует "имитатор" доса, и передает ей управление
имитатор - эт будет зависить от игрушек, для некторых он нужен в большем объеме, но думаю для основных - в меньшем.
т.е. это не копия CP/M это толко эмулятор нескольких функций.

BYTEMAN
21.02.2011, 22:04
сейчас вожусь с запуском простой игрушки PACMAN. Какой неудобный проц 8080... В z80 дал LDIR - и всё... А тут... Ничего, зато хоть ассемблеру немного научусь :)

---------- Post added at 21:04 ---------- Previous post was at 20:54 ----------

И с произвольного адреса загрузиться не получится, т.к. прога MSXCAS делает файлы только с адреса 9000H.

esl
21.02.2011, 22:08
c
PAC-MAN, XYZON, ITA-Express, Binary-Lend, FIRE, Ninja-Kagu?, eric-bomber, RALLY, tetris
возится не надо,
есть их версии которые пускаются с 8000 или 9000 адреса
предназначены были для передачи по сети на РМУ :)

кстати, а ведь можно сделать картдридж ...

BYTEMAN
21.02.2011, 23:20
а где из взять?

зы.... Правильно ли я делаю переключение на конфиг памяти CP/M:

LD HL,0FA7FH
LD A,1CH
LD (HL),A

Мнемоники, ессно, зетниковские..

---------- Post added at 21:38 ---------- Previous post was at 21:20 ----------

зы... Сергей, если можно, удалите меня из чёрного списка ICQ :)

---------- Post added at 22:20 ---------- Previous post was at 21:38 ----------

Пакман не работает :(

Вот кусок кода для пересыла и начальной установки:

ORG 0E000H
LD HL,0FA7FH
LD A,1CH
LD (HL),A
LD HL,0F000H
LD SP,HL
LD HL,09000H
LD DE,0100H
LD BC,04000H
CALL LDIR
JP 0100H

LDIR LD A,(HL)
LD (DE),A
DEC BC
LD A,B
OR C
RET Z
INC DE
INC HL

С адреса 9000Н располагается наш пакман.... Отлаживал в эмуляторе b2m, но тама почему-то во время пересыла портится регистр HL и BC.... Почему - непонятно, т.к. на пустом месте :( Что дальше делать я не знаю... Если такая элементарщина не заработала, то что уж и говорить дальше :(

esl
21.02.2011, 23:43
попробуй запретить прерывания

взять можно в архиве софта корветовского - там есть они-же но с расширением не .com а .bin

по поводу регистра конфигурации, он называется SYSREG
и имеет адрес REGBASE + 0x7f

вот таблица карт памяти (https://picasaweb.google.com/sergey.erokhin/KorvetPK8020#5421161022167193090)
для 40 и 1С это таки FA7F

можно еще и
ld a,1c
ld (0xfa7f),a

p.s. я тоже всю жизнь для 8080 писал в z80 мнемонике
благо m80 прекрасно это понимал.

список вроде как чистил, у меня аська далеко не всегда включена.

BYTEMAN
22.02.2011, 00:22
Спасибо огромное! УВсё заработало! Завтра буду грузить TREAS и KLAD!!!!!

marinovsoft
22.02.2011, 05:58
А можно полный кусок кода, я бы к MSXCAS прикрутил бы конвертилку? Только подскажите еще где там размер исходного файла (пересылаемых данных) указывается, я в ASM i8080 (и z80) "очин пляхой панимайу".

esl
22.02.2011, 12:01
Спасибо огромное! УВсё заработало! Завтра буду грузить TREAS и KLAD!!!!!

treasure - точно нужна DOS, она там в коде делает CALL 5
там была "защита" ?
она в оригинале работало только под в КОРНЕТЕ
забавно что в коде есть кусок исходника ;)
и самое забавное что в нем есть кусок вызова проверки ;)
явно в коде было
DS xxxx (резервировать буфер)
и там остался мусор ...

я в свое время выдрал тот вызов из корнета (лень было разбирать что это)
и вставил эмулятор этой функции.

сейчас посмотрел, treasure вызывает досовксий conout (c=09h)
в принципе, ту версию что на диске disk.kdi можно запатчить чтоб не выводила на экран ничего (правда и не очищала его)
BDA8: C2 -> C0
ну или найти в конце
3E 26 B9 C2 00 00
и исправить
3E 26 B9 C0 00 00

а клад - точно при старте вызывает 0F (File open), в остальное время вроде не дергает дос и биос
тоже можно вернуть ему на это ошибку и думаю он заработает.

esl
22.02.2011, 14:02
esl, ещё, если помните, я как-то спрашивал, откуда взялась на корвете TreasureIsland. Так вот думаю, что версия о том, что игра была слизана со спектрума, немного не верна. В спектрумовской версии нет музыки. В корветовской она есть .Так же эта музыка есть в версии для Commodore 16 (http://plus4world.powweb.com/software/Treasure_Island) и на Commodore 64 (http://www.gb64.com/game.php?id=8120). Больше этой музыки я нигде не слышал.... Так что вопрос о перекочевании этой игры - спорный...

таки да, даже можно точно сказать что источником была версия для
Comondore plus/4
вот сравнение меню. я так понимаю в c64 и zx ее не было
25189
спрайты игроков тоже из версии plus/4, спрайты совпадают
25190
ну и карта ;) и спрайты деревьев, в версии для c64/zx она слегка другая.
не говоря про спрайты.
25191

вот тут видео с plus/4 (http://www.youtube.com/watch?v=d6rEasfxZeM)
это точно источник, там еще есть с c64 там таки другая графика.

BYTEMAN
22.02.2011, 17:12
вот тут видео с plus/4
это точно источник, там еще есть с c64 там таки другая графика.

Я на реале играл, у меня есть С16 :)

А на С64 и Спектруме грарика немного другая. Поэтому я и решил, что версия С16 наиболее близка к корветовской.

зы. С16 и plus/4 - это одно и то же, только у +4 было 64Кб памяти и немного встроенного ПО (табличный, текстовый процессоры, база данных). Мой С16 я расширил до 64Кб, поэтому у меня сейчас эта игра тоже работает.

ps. На Ютубе запись с эмулятора ;)

сейчас посмотрел, treasure вызывает досовксий conout (c=09h)
в принципе, ту версию что на диске disk.kdi можно запатчить чтоб не выводила на экран ничего (правда и не очищала его)
BDA8: C2 -> C0
ну или найти в конце
3E 26 B9 C2 00 00
и исправить
3E 26 B9 C0 00 00

Как я понял, текста тоже не будет (меню)?

---------- Post added at 14:29 ---------- Previous post was at 14:25 ----------

А где можно взять описание CP/M? В частности интересуют все адреса функций (как векторов, так и самих подпрограмм). Может быть можно будет просто эти функции в нужые адреса кидануть. Даже можно вообще весь ДОС сделать подгрузаемым с кассетки. Просто сбрасываться сразу в бейсик, без ОПТС. Он и не будет зачищать память, кусок доса как раз останется.

---------- Post added at 14:32 ---------- Previous post was at 14:29 ----------

Попробовал - С0 помогает :). Текста нет, буду пробовать эту функцию подставлять.

---------- Post added at 14:39 ---------- Previous post was at 14:32 ----------


А можно полный кусок кода, я бы к MSXCAS прикрутил бы конвертилку? Только подскажите еще где там размер исходного файла (пересылаемых данных) указывается, я в ASM i8080 (и z80) "очин пляхой панимайу".

Вначале бейсик-часть:

5 LOAD "CAS:LOADER",B
10 FOR I=0 TO 36
20 POKE &HE000+I, PEEK(&H9000+I)
30 NEXT I
40 LOAD "CAS:PACMAN",B
50 DEF USR0=&HE000
60 A=USR0 (0)

Это по бейсик части. Теперь сам лоадер:

ORG 0E000H
DI
LD HL,0FA7FH
LD A,1CH
LD (HL),A
LD HL,0F000H
LD SP,HL
LD HL,09000H
LD DE,0100H
LD BC,04000H
CALL LDIR
JP 0100H

LDIR LD A,(HL)
LD (DE),A
DEC BC
LD A,B
OR C
RET Z
INC DE
INC HL

Пока что всё... Ищу пакеры под 8080... :( Пока что пусто...

---------- Post added at 14:40 ---------- Previous post was at 14:39 ----------

marinovsoft, можете добавить в MSXCAS установку произвольного адреса загрузки и запуска BIN-файлов?

esl
22.02.2011, 18:11
меню не будет, как и любых надписей
там просто, вывод строки до символа $
легко, через биос.
попозжей могу набросать.

описание есть в в архиве софта (ссылка была выше)

весь дос нафиг не нужен, cp/m - это такой "драйвер дисковода" ;)
нафиг он игрушке.

на корвете есть "Executive files packer V1.0. Copyright (C) 1991 by Goldsoft"
треасуре например он сжал до 15232 байт ;)

он там в куче есть ...

---------- Post added at 17:05 ---------- Previous post was at 16:59 ----------


5 LOAD "CAS:LOADER",B
10 FOR I=0 TO 36
20 POKE &HE000+I, PEEK(&H9000+I)
30 NEXT I
40 LOAD "CAS:PACMAN",B
50 DEF USR0=&HE000
60 A=USR0 (0)

загрузку надо выкидывать, лоадер запихнуть в


15 read V
20 POKE &HE000+I, V
100 DATA &h11,&h22,&h33,&h44,&h55,...


а еще для полного щастья, загрузчик запулить в АЦЗУ (текстовый экарн)
он 1к FC00-FFFF
только надо чтоб скрол его не затер,
например добавать
1 cls:pcls
2 print:print:print
и тогда заганять ее с fc00
одна строка - 64 байта ...

---------- Post added at 17:11 ---------- Previous post was at 17:05 ----------

и по поводу упаковщиков
http://sensi.org/~svo/scalar@home/
DeMLZ
DeEXO

BYTEMAN
22.02.2011, 18:17
меню не будет, как и любых надписей
там просто, вывод строки до символа $
легко, через биос.
попозжей могу набросать.

описание есть в в архиве софта (ссылка была выше)

весь дос нафиг не нужен, cp/m - это такой "драйвер дисковода"
нафиг он игрушке.

Если найти доки со всеми адресами, то я бы покурил и выкинул бы всё оттуда лишнее :)

на корвете есть "Executive files packer V1.0. Copyright (C) 1991 by Goldsoft"
треасуре например он сжал до 15232 байт


Это уже получше! А как com-файл называется? Всю кучу просто разгрести тяжеловато будет :(



загрузку надо выкидывать, лоадер запихнуть в......

Вся проблема была в том, что я не мог сохранить с корвета то, что я там набрал.... У ноута нет линейного входа :( Эмули мафон тоже не поддерживают... Мне было проще организовать блочную загрузку :) Как на спектруме.

esl
22.02.2011, 18:51
я там обновил пост про 8080 пакеры

а тот пакер что упоминал - PAKEXE.COM

BYTEMAN
22.02.2011, 19:07
а еще для полного щастья, загрузчик запулить в АЦЗУ (текстовый экарн)
он 1к FC00-FFFF
только надо чтоб скрол его не затер,
например добавать
1 clscls
2 printrintrint
и тогда заганять ее с fc00
одна строка - 64 байта ...
Тут я поизвращаюсь немного :) Можно будет и загрузку экрана, как на спектруме, замутить :)

и по поводу упаковщиков
http://sensi.org/~svo/scalar@home/
DeMLZ
DeEXO
Через часика 3 начну крутить.... Сейчас ещё видеовывод надо будет покрутить... Может быть сегодня уже в цвете подключу.

зы. АЦЗУ погасить можно? Т.е. чтобы информация тама была, но на экран не выводилась?

---------- Post added at 18:07 ---------- Previous post was at 17:57 ----------

MegaLZ упаковал в 13083 :)

esl
22.02.2011, 21:19
смайлы поели
1 cls:pcls
2 print:print:print

можно погасить хоть кусок текстового экрана
нарисовать под ним прямоугольник и погасить

загрузку экрана заставки - мутить смысла нету
он здоровый - 48к 3*16к
только эмулировать

а в цвете, особого смысла нет, почти все игрушки делались по ЧБ
некоторые в цвете - просто ужасны (GoldSoft KARATE)
основная масса мониторов в школах была ЧБ

BYTEMAN
22.02.2011, 22:31
загрузку экрана заставки - мутить смысла нету
он здоровый - 48к 3*16к
только эмулировать
А пакер на что? ;)

BYTEMAN
23.02.2011, 00:47
Вобщем, облом-с с TREAS... В эмуляторе всё работает (просто гружу с нужного адреса в дебаггере и запуская - работает). На реале же - после начала игры появляется игровое поле, и всё зависает... Спрайты не двигаются... Вобщем, облом :( Выкладываю то, что получилось. У кого есть возможность, проверьте на реале. Загрузка с автозапуском (LOAD"CAS:TREAS ",B,R), моноблок.

BYTEMAN
23.02.2011, 10:35
Вот сам код:

.ORG 09000H
DI
JMP BEG
TREAS: ;тут у нас будут нули, потом в HEX-редакторе вставляется упакованный TREAS.COM.mlz


BEG: .ORG 0D000H
LXI H,0FA7FH
MVI A,01CH
MOV M,A
LXI H,TREAS
LXI D,0100H
CALL DEC40
JMP 0100H


DEC40:
mvi a,80h ;если распаковщик вызывается только один раз
sta AF+2 ;то эту и предыдущую строки можно удалить
MS: push psw ; ldi
mov a, m ;
stax d ;
inx h ;
inx d ;
pop psw ;
M0: lxi b, 02FFh
M1: call ExAfAf
M1X: add a
jnz M2 ; jr nz, M2
mov a, m
inx h
ral
M2: sta RestA1+1; rl C
mov a, c ;
ral ;
mov c, a ;
RestA1: mvi a,0
jnc M1X ; jr nc, M1X
call ExAfAf
dcr b ; djnz X2
jnz X2
mov a, c ; sra C
ral ;
mov a, c ;
rar ;
mov c, a ;
mvi a, 002h
jc N1 ; jr c, N1
inr a
inr c
jz N2 ; jr z, N2
lxi b, 033Fh
jmp M1 ; jr M1
X2:
dcr b ; djnz X3
jnz X3
sta RestA3+1; srl C
mov a, c ;
ora a ;
rar ;
mov c, a ;
RestA3: mvi a,0
jc MS ; jr c, MS
inr b
jmp M1 ; jr M1
X6: add c
N2: lxi b, 04FFh
jmp M1 ; jr M1
N1: inr c
jnz M4 ; jr nz, M4
call ExAfAf
inr b
N5:
sta RestA2+1; rr C
mov a, c ;
rar ;
mov c, a ;
rc
mov a, b ; rl B
ral ;
mov b, a ;
RestA2: mvi a,0
add a
jnz N6 ; jr nz, N6
mov a, m
inx h
ral
N6: jnc N5 ; jr nc, N5
call ExAfAf
add b
mvi b, 006h
jmp M1 ; jr M1
X3:
dcr b ; djnz X4
jnz X4
mvi a, 001h
jmp M3 ; jr M3
X4:
dcr b ; djnz X5
jnz X5
inr c
jnz M4 ; jr nz, M4
lxi b, 051Fh
jmp M1 ; jr M1
X5:
dcr b ; djnz X6
jnz X6
mov b, c
M4: mov c, m
inx h
M3: dcr b
push h
mov l, c
mov h, b
dad d
mov c, a
LdirLoop: mov a, m ; ldir
stax d ;
inx h ;
inx d ;
dcr c ;
jnz LdirLoop;
pop h
jmp M0 ; jr M0

ExAfAf: push h ; ex AF, AF'
push psw ;
AF: lxi h,8000h ;
xthl ;
shld AF+1 ;
pop psw ;
pop h ;
ret


.end

esl
23.02.2011, 11:22
ну из явных "багов"
после переключения конфигурации надо по адресу 5 занести "c3" jmp
а то мой микроэмулятор думает что работаем в cp/m и модифицирует только адрес
если в памяти 0, то все прокатит, если же мусор, то возможно разное ...

и стек было бы неплохо установить, хоть в FFFF, тогда заодно на экране забавное мигание ;)

BYTEMAN
23.02.2011, 11:24
Ок, я сейчас в универ, вечером опробую на реале.

зы. Никто не знает, как в TASM подключить BIN-файл? INCLUDE - для asm-файлов, директивы incbin там нет :(

esl
23.02.2011, 11:42
по поводу вывода на экран

вот код conout это один символ на экран, в C



conout: ;e07d
mov a,c
lxi h,0
dad sp
lxi sp,stack0 ;0edfeh
push h
mvi a,14h
di
sta syscopy ;0f703h
sta sysreg1c ;0fa7fh
ei
call 4ch
mvi a,1ch
di
sta sysreg1c ;0fa7fh
sta syscopy ;0f703h
ei
pop h
sphl
ret

он выводит через ROM

а сам эмулятор доса для вывода строки ..

сорри за мешанину 8080/z80 но думаю понятно о чем речь.



...
0005: jmp ourEmu

сюда попадает код

ourEmu:
mvi a,9
cmp c
jnz nextFunc

loop:
ld a,(de)
cp '$'
jz _RET
push de
ld c,a
call conout
pop de
inc de
jp loop

nextFunc:
....

ld a,0xff ;имитируем ошибку.
или наоборот
xor a,a? ;(
_RET
jmp old5
прыгнули на то что было раньше
ну или в нашем случае тут может быть ret



ну

BYTEMAN
23.02.2011, 11:51
Уже проверил - появляется карта, на экране даже спрайтов нет :(

.ORG 09000H
DI
JMP BEG
TREAS:


BEG: .ORG 0D000H
LXI H,0FFFFH
SPHL
LXI H,0FA7FH
MVI A,01CH
MOV M,A
LXI H,00005H
MVI A,0C3H
MOV M,A
LXI H,TREAS
LXI D,0100H
CALL DEC40
JMP 0100H


DEC40:

BYTEMAN
23.02.2011, 11:53
по поводу вывода на экран

вот код conout это один символ на экран, в C
это уже точно вечером проверю.

BYTEMAN
23.02.2011, 19:33
Никак не врублюсь, почему на эмуле (юзал эмуль b2m, у него в дебаггере есть прямая загрузка и выгрузка памяти) работает, а на реале виснет :(

esl
23.02.2011, 19:37
Уже проверил - появляется карта, на экране даже спрайтов нет :(

сфоткай что именно на экране ...

возможно железо глючит ...
нажатие i(и) или n(н) что либо дает ?



у меня в эмуляторе тоже работает
p.s. заодно поломал его ;)
нечуствительность к мечам
прохождение сквозь врагов
вечные мечи

BYTEMAN
23.02.2011, 19:56
сфоткай что именно на экране ...

возможно железо глючит ...

у меня в эмуляторе тоже работает
p.s. заодно поломал его
нечуствительность к мечам
прохождение сквозь врагов
вечные мечи
Просто карта, без спрайтов. Один раз удалось добиться такого же результата в эмуляторе, но только тогда, когда записывал С3 до переключения карты памяти :)

---------- Post added at 18:56 ---------- Previous post was at 18:40 ----------


нажатие i(и) или n(н) что либо дает ?
Дык музыка играет!!!! Нажимаю n - играет вступление, появляется карта - и висняк. I - не нажимал, сейчкас попробую....

esl
23.02.2011, 19:56
только карта без героя и противника ?
попробуй еще записать

ff -> fb29

BYTEMAN
23.02.2011, 20:01
При нажатии на i реагирует как надо - просто чистый экран. При нажатии на любую кнопку вываливается обратно в меню.

esl
23.02.2011, 20:07
и еще, выдает ли следующая бейсиковская прога 0 и 2йки
10 print peek(&hfb38) and 2
20 goto 10

BYTEMAN
23.02.2011, 20:11
О, теперь работает!!!!!

---------- Post added at 19:10 ---------- Previous post was at 19:09 ----------


ff -> fb29
Эта штука помогла!!!

---------- Post added at 19:11 ---------- Previous post was at 19:10 ----------

Хаотические нули и двойки.

b2m
23.02.2011, 20:14
О, теперь работает!!!!!

Эта штука помогла!!!

Это ты маску на все прерывания поставил :)

BYTEMAN
23.02.2011, 20:19
Это ты маску на все прерывания поставил
Так что, проблема с железом?

esl
23.02.2011, 20:21
Это ты маску на все прерывания поставил :)

ну да, замаскировали все прерывания,
решительно не понимаю :(

там в коде первая DI
похоже завис запрос на прерывание, и при EI оно начало его обрабатывать ...
странно, как такое может быть

бейсиком я проверял что ест битик VBL

BYTEMAN
23.02.2011, 20:23
бейсиком я проверял что ест битик VBL
Оно на ВВ55 доходит. И обрабатывается....

У меня много чего сгорело... Может быть, ещё какая часть подгорела... У меня одна ВВшка два (!) раза сгорала.

esl
23.02.2011, 20:23
Так что, проблема с железом?

х.з. если у тебя Бейсик 2.0
и в нем нормально нажимаются клавиши - то запросы на прерывания обрабатываются.
там опрос клавы по 50hz- VBL прерыванию

BYTEMAN
23.02.2011, 20:38
х.з. если у тебя Бейсик 2.0
да. ОПТС 2.0. Бейсик Корвет 2.0.

и в нем нормально нажимаются клавиши - то запросы на прерывания обрабатываются.
там опрос клавы по 50hz- VBL прерыванию
Что там ещё торчать может???

---------- Post added at 19:38 ---------- Previous post was at 19:28 ----------

У кого есть возможность, попробуйте погрузить разные варианты что я выкладывал на реале....

b2m
23.02.2011, 20:44
Что там ещё торчать может???
Ну, в бейсике кроме прерывания по сети ничего не разрешено (а в CP/M кроме 50Гц). Однако непонятно, почему прерывание по сети приходит, вроде не должно (в эмуляторе и не приходит).

BYTEMAN
23.02.2011, 20:50
Ну, в бейсике кроме прерывания по сети ничего не разрешено (а в CP/M кроме 50Гц). Однако непонятно, почему прерывание по сети приходит, вроде не должно (в эмуляторе и не приходит).
так эта двойка - это прерывание от сети???

b2m
23.02.2011, 20:54
Нет, это ты из ВВ55 считывал, просто СИ по кадрам ( или строкам :) ).

BYTEMAN
23.02.2011, 21:27
был бы в корвете теневик....

---------- Post added at 20:22 ---------- Previous post was at 19:58 ----------

Что за хер нахер.... Ещё раз загрузил игрушку - опять неработает.

---------- Post added at 20:27 ---------- Previous post was at 20:22 ----------

Опять заработала... ХЗ что такое...

---------- Post added at 20:27 ---------- Previous post was at 20:27 ----------

При убивании врага нет звука "пщщщь". Только писк при полёте меча....

Ради интереса скриншот жкрана с работающей игрой.

esl
23.02.2011, 22:50
Ну, в бейсике кроме прерывания по сети ничего не разрешено (а в CP/M кроме 50Гц). Однако непонятно, почему прерывание по сети приходит, вроде не должно (в эмуляторе и не приходит).
нет, в ОПТС2 в бейсике разрешено 50герц и сеть
в ОПТС1 только сеть
основные отличия ОПТС2 - это опрос клавиатуры как в CP/M, по прерываниям

---------- Post added at 21:50 ---------- Previous post was at 21:48 ----------


Нет, это ты из ВВ55 считывал, просто СИ по кадрам ( или строкам :) ).
vbl - 50hz

BYTEMAN
23.02.2011, 23:38
Добавил эмулятор коней (:)), текст выводит. Но опять баги:

1) Игра где-то сама меняет ячейки 0005H - 0007H на C3 40 00, хотя я тубда принудительно (пока из дебаггера) пишу С3 00 E0.
2) При запуске игры ('N') появляется карта, спрайты, и - висняк......

Также пока что не понятно, почему на реале звуки не такие, как в эмуле....

marinovsoft
24.02.2011, 07:28
У себя в исходнике нашел,


COr:=$6D7E; { Начало текста кода в Корвете }

С этого адреса Корвет в.2 располагает текст набираемой программы. Проверьте в эмуляторе, можно ли грузить с этого адреса, ничего не поломается? Точнее не прямо с этого, а где-то чуть дальше.

marinovsoft, можете добавить в MSXCAS установку произвольного адреса загрузки и запуска BIN-файлов?
добавить можно, как это должно выглядеть?

BYTEMAN
24.02.2011, 07:56
добавить можно, как это должно выглядеть?
Просто разрешить произвольно выбирать адрес загрузки. Т.е. открываем БИН-файл, а нам окошко с двумя числами - адрес посадки, и адрес запуска. Третье число не изменяется пользователем, чисто для информативности - конечный адрес загрузки и длина файло. И запоминать последние значения. введённых полей. Как-то так :)

---------- Post added at 06:56 ---------- Previous post was at 06:55 ----------


У себя в исходнике нашел,
У Вас есть исходы Бейсика??? Можете поделиться?

marinovsoft
24.02.2011, 08:51
Не бейсика. Я когда msxcas писал, выяснил, по какому адресу находится первая строка только что набранного в бейсике исходника. (Эмулятороводам проще - можно посмотреть в отладчике.)
Т.е. писал что-то вроде "10 PRINT "AAAAA" и смотрел по какому адресу будет лежать номер строки.

esl
24.02.2011, 10:22
1) Игра где-то сама меняет ячейки 0005H - 0007H на C3 40 00, хотя я тубда принудительно (пока из дебаггера) пишу С3 00 E0.
2) При запуске игры ('N') появляется карта, спрайты, и - висняк......


это мой эмулятор "защиты", я его навесил на код, он перехватывает
call 5 и эмулирует 0x26 функцию бдоса

помнишь я тебе говорил запатчить байтик, чтоб на экран не выводилось ?
так теперь если есть conout то возьми оригинальный файл

твой "эмулятор" должен быть готов до jmp 100
если он там будет, то мой - просто станет перед ним и все будет работать

а если ты мой - выкинул, то он и должен виснуть после отрисовки карты? и точно при переходе на другой экран.

---------- Post added at 09:11 ---------- Previous post was at 09:09 ----------


У себя в исходнике нашел,


COr:=$6D7E; { Начало текста кода в Корвете }

С этого адреса Корвет в.2 располагает текст набираемой программы. Проверьте в эмуляторе, можно ли грузить с этого адреса, ничего не поломается? Точнее не прямо с этого, а где-то чуть дальше.


я бы на это не полагался, я думаю что с 7000 можно грузить спокойно.

---------- Post added at 09:22 ---------- Previous post was at 09:11 ----------



У Вас есть исходы Бейсика??? Можете поделиться?

в архиве софта есть нечто что можно считать исходниками бейсика

посмотри папку !Sources\ROMs
ROMB1201.ASM - явно исходник какой-то версии бейсика, какой не известно
R002.ASM - некая версия ОПТС 1.1


там есть исходники CP/M Bios - Ver. 1.2 (c) III 1988
и еще разное

b2m
24.02.2011, 11:33
Также пока что не понятно, почему на реале звуки не такие, как в эмуле....
Может это в эмуле не такие, как на реале? :) esl, какое твоё мнение насчёт звуков в эмуляторе?

marinovsoft
24.02.2011, 12:20
msxcas ver. 2.1. Настройки сохраняются в пределах текущего сеанса работы программы. Тестовая версия, исходников пока не дам, она полностью на с++ переписана и имеет много ненайденных багов.
Попытка конвертации файла с расширением com аналогична конвертации bin файла, за исключением выдачи предупреждения. Жду нормального "stub"-а в вашем исполнении.

esl
24.02.2011, 12:39
Может это в эмуле не такие, как на реале? :) esl, какое твоё мнение насчёт звуков в эмуляторе?

вроде и в твоем и в моем звук похожий
может на выходных достану контур ...

BYTEMAN
24.02.2011, 17:59
а если ты мой - выкинул, то он и должен виснуть после отрисовки карты? и точно при переходе на другой экран.
Я принудительно писал туда (при первом ображении к 0005) в дебаггере E000H. Попробую оставить 0040H.

твой "эмулятор" должен быть готов до jmp 100
если он там будет, то мой - просто станет перед ним и все будет работать
Так оно и делается.

в архиве софта есть нечто что можно считать исходниками бейсика

посмотри папку !Sources\ROMs
ROMB1201.ASM - явно исходник какой-то версии бейсика, какой не известно
R002.ASM - некая версия ОПТС 1.1


там есть исходники CP/M Bios - Ver. 1.2 (c) III 1988
и еще разное
Вот это супер! Буду ковырять!

---------- Post added at 16:35 ---------- Previous post was at 16:30 ----------


msxcas ver. 2.1. Настройки сохраняются в пределах текущего сеанса работы программы. Тестовая версия, исходников пока не дам, она полностью на с++ переписана и имеет много ненайденных багов.
Попытка конвертации файла с расширением com аналогична конвертации bin файла, за исключением выдачи предупреждения. Жду нормального "stub"-а в вашем исполнении.
Опробую, спасибо.

вроде и в твоем и в моем звук похожий
может на выходных достану контур ...
На реале только писк. Причём одноголосый. В эмуле звук как будто двузтоновый, и есть шум при попадании мечом. Пыщь :) Скорее всего, где-то опять железо лагает :( Что, кроме таймера и разрещения звука (ВВшка) влияет на звук?

---------- Post added at 16:59 ---------- Previous post was at 16:35 ----------

чудеса.... запустил теперь так, как говорил esl, теперь звук такой же, как и на реале.... В дисковой же версии немного не так :( 3.14здэць....

BYTEMAN
24.02.2011, 22:12
Выкладываю стабильно работающую версию :) На реале и на эмуле пашет.

В файле Безымянный я записал с микрофона звук, как оно примерно играет. На искажения музыки не обращайте внимания. Главное - слышно, что писк идёт однотональный, и нет звука "убийства". В эмуляторе - то же самое, хотя если загрузить com-файл из-под ОС, то звуки нормальные.

BYTEMAN
25.02.2011, 17:40
Забыл убрать запрет прерывания. Убрал - эффекта ноль... Звуки как были левые, так и остались... :(

Попробовал грузануть Клад - работает :)

BYTEMAN
25.02.2011, 22:23
Прилепил цветной видеовывод :)

esl
28.02.2011, 17:43
вот, записал на своем еле живом контуре
это дисковая версия, у контура нет в пзу бейсика,
биос груится ТОЛЬКО с дисковода

на экране с цветами не все в порядке, когда делали RGB -> SVIDEO конвертер, забыли про I, надо переделывать :(
собтвенно - mp3 (http://dl.dropbox.com/u/490774/K_TREAS.mp3) видео (http://dl.dropbox.com/u/490774/K_Treasure.MOV)

пшик - есть :)

похоже дело в инициализации таймера, попробовал в эмуляторе скопировать cp/m инит, не помогло
надо смотреть как трреасуре генерит пшик в коде
эт на досуге ...


p.s. чейто мой контур загибается, мягко говоря ни с первого раза стартрует (на экране сетка/мусор)
дисковод при записи похоже гробит диски
в общем надо чинить по новой :)
заодно и пзу сдеать с оптс1/2
и модернизацию железа до 2го варианта.

BYTEMAN
28.02.2011, 18:05
на экране с цветами не все в порядке, когда делали RGB -> SVIDEO конвертер, забыли про I, надо переделывать
собтвенно - mp3 видео
В моём корвете, кстати, сигналы I и B почемуто были перепутаны (если смотреть по схеме...)...

похоже дело в инициализации таймера, попробовал в эмуляторе скопировать cp/m инит, не помогло
надо смотреть как трреасуре генерит пшик в коде
эт на досуге ...
Будет время, гляньте плз ;)

p.s. чейто мой контур загибается, мягко говоря ни с первого раза стартрует (на экране сетка/мусор)
В первую очередь всё в панельках поправить, потом уже искать непропай...

Дмитрий2012
27.02.2015, 22:32
Стал обладателем ПК8010 "Корвет":)

Компьютер вроде запускается нормально, в бейсик выходит. Планирую собрать Korvet-EXTROM, который позволит загружать систему с внешней SD карты.
А пока, хочу потестить машинку, подскажите какие программы можно загрузить в корвет с магнитофона, где можно взять WAV файлы?
И какой все таки синтаксис командной строки в Корвете для загрузки с магнитофона и записи на ленту? Прочитал в книге, что для этого используются команды СLOAD и CSAVE. Пробовал набирать CSAVE "PRIMER"ничего не получается, пишет ошибка синтаксиса.

marinovsoft
28.02.2015, 06:09
Навскидку: GONKI.BIN, TETRIS.BIN, DETI.BIN
как из этих файлов получить wav и как его потом загружать и какие команды вводить в бейсике - читать выше в этой теме и может быть еще и в этой теме
http://zx-pk.ru/showthread.php?t=9854

PS: CLOAD и CSAVE на Корвете нет.

Дмитрий2012
28.02.2015, 09:27
Спасибо, разобрался:)

PS: CLOAD и CSAVE на Корвете нет.
В книге именно про эти команды пишут. Может быть какая-то другая версия бейсика описана в книге...

Serebriakov
12.06.2018, 16:41
На Корвете используется MSX-формат записи на ленту.
Но MSX-ных команд CSAVE (https://www.msx.org/wiki/CSAVE) и CLOAD (https://www.msx.org/wiki/CLOAD) на Корвете нет.

В книге "Знакомьтесь, Персональная ЭВМ Корвет" (http://zx-pk.ru/threads/13953-kniga-quot-znakomtes-personalnaya-evm-korvet-quot.html?p=576286&viewfull=1#post576286), скорее всего опечатка.
Хотя там ниже описываются и простые SAVE (https://www.msx.org/wiki/SAVE) и LOAD (https://www.msx.org/wiki/LOAD).

Так вот, на Корвете есть только SAVE и LOAD со специальными параметрами:


SAVE "УСТРОЙСТВО:ИМЯ ФАЙЛА",ПАРАМЕТРЫ
LOAD "УСТРОЙСТВО:ИМЯ ФАЙЛА",ПАРАМЕТРЫ



УСТРОЙСТВО:
CAS: - кассетный накопитель
A: - дисковод A:
B: - дисковод B:
...

В дисковом бейсике BASIC.COM, устройство можно не указывать - по-умолчанию будет использоваться дисковод A:



ИМЯ ФАЙЛА:
Задается без расширения, т.е. без BIN или BAS:
LOAD "CAS:RALLY",B,R

При загрузке с кассеты, имя файла можно опустить:
LOAD "CAS:",B,R



ПАРАМЕТРЫ:
A - текстовый ASCII-формат
B - блочный формат (бинарный, токенизированный)
R - сразу запустить программу после загрузки (авто RUN)


Утилита MSXCAS для конвертирования BAS/BIN в RAW для записи на ленту от MarinovSoft:
http://marinovsoft.narod.ru/pk8020.htm
RAW файлы затем легко конвертируются в WAV, с помощью любого редактора (Sound Forge, Audacity и т.п.).
В архиве с программой MSXCAS v2.0 есть подробный readme.txt, где расписаны параметры конвертирования.

Архив, со всеми найденными в образах BIN-файлами:
https://yadi.sk/d/yqcaTOkt3XnTRP

Arix
05.11.2018, 15:04
Магнитофоны давно убраны в шкаф, кассеты размагничиваются, осыпаются. Я в своё время их все оцифровал в МРЗ. Сейчас гружу программы со смартфона, современного компьютера, флешевого плеера. Но у этих устройств есть один существенный недостаток - при втыкании в них кабеля у них выключается динамик. Причем, часто на программном уровне, так что, с паяльником не залезешь. Ноутбуки тоже страдают этим недостатком. Или динамика нет вообще. Только у стационарного компьютера звук не выключается. Но он стоит в другой комнате. А я привык слышать процесс загрузки. Так же на эти устройства нельзя ничего записать. Кроме ноутбука, но у него отключается звук. Есть ли какие-нибудь цифровые аналоги магнитофона, с функцией записи, со встроенным динамиком, не отключающимся при подключении кабеля?

Raydac
07.11.2018, 00:23
я просто в кабеле в параллель припаял один дешевенький наушник, так что при загрузке слышно что идет по кабелю