Автор Тема: разогнал эмуль генс11а. (генсмуви)  (Прочитано 18652 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Segaman

  • Пользователь
  • Сообщений: 3240
  • Пол: Мужской
  • Blast Processing!
    • Youtube
    • Просмотр профиля
Re: разогнал эмуль генс11а. (генсмуви)
« Ответ #60 : 14 Октябрь 2009, 20:11:28 »
Добавить тада как в з80 банк тайлов :)

Добавлено позже:
И ваапще, скажите, что нужно, шоб эмуль скомпилить. у мя есть рес кмода, попробую тоже добавить рам

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: разогнал эмуль генс11а. (генсмуви)
« Ответ #61 : 14 Октябрь 2009, 20:15:20 »
А базы в Дюне как спрайты считаются или как SCROLL A или SCROLL B ?
здания scroll A как и земля.  а скролл B кстати "туман войны" только заметил) чит)
sprites low - юниты, sprites high -радар.

Добавлено позже:
И ваапще, скажите, что нужно, шоб эмуль скомпилить. у мя есть рес кмода, попробую тоже добавить рам
ну как бы 2гига вижл студии)

Оффлайн Segaman

  • Пользователь
  • Сообщений: 3240
  • Пол: Мужской
  • Blast Processing!
    • Youtube
    • Просмотр профиля
Re: разогнал эмуль генс11а. (генсмуви)
« Ответ #62 : 15 Октябрь 2009, 01:06:07 »
ну как бы 2гига вижл студии)
0_o
лушиб ниспрашивал, терь кашмары сница будут :D

Оффлайн Марат

  • Пользователь
  • Сообщений: 556
  • Пол: Мужской
    • Просмотр профиля
Re: разогнал эмуль генс11а. (генсмуви)
« Ответ #63 : 19 Октябрь 2009, 10:34:11 »
По-моему, разгадка кроется в файле star.c, который в папке starscream. Там есть функции чтения/записи байт, слов и двойных слов. Например, вот эта: static void gen_readbw(int size)
{
align(32);
emit("readmemory%s:\n",sizename[size]);
emit("readmemorydec%s:\n",sizename[size]);

if (size == 1)
{
emit("\tmov [__access_address], edx\n");
emit("\tand edx, 0xFFFFFF\n");
emit("\txor ecx, ecx\n");

emit("\tcmp edx, 0xE00000\n");
emit("\tjb short .Not_In_Ram\n");
emit("\tand edx, 0xFFFF\n");
emit("\txor edx, byte 1\n");
emit("\tmov cl, [Ram_68k + edx]\n");
emit("\tmov edx, [__access_address]\n");
emit("\tret\n");

emit("align 4\n");
emit(".Not_In_Ram\n");
emit("\tpush eax\n");
emit("\tpush edx\n");
emit("\tmov [__io_cycle_counter], edi\n");
emit("\tmov [__io_fetchbase], ebp\n");
emit("\tmov [__io_fetchbased_pc], esi\n");
emit("\tcall M68K_RB\n");

// emit("\tmov eax, [esp]\n");
// emit("\tpush ebx\n");
// emit("\tmov ebx, eax\n");
// emit("\tand eax, 0xF80000\n");
// emit("\tshr eax, 17\n");
// emit("\tand ebx, 0xFFFFFF\n");
// emit("\tcall [M68K_Read_Byte_Table + eax]\n");

emit("\tmov ebp, [__io_fetchbase]\n");
emit("\tmov cl, al\n");
emit("\tmov edi, [__io_cycle_counter]\n");
emit("\tadd esp, byte 4\n");
emit("\tmov esi, [__io_fetchbased_pc]\n");
emit("\tmov edx, [__access_address]\n");
emit("\tpop eax\n");
emit("\tret\n");
}

if (size == 2)
{
emit("\tmov [__access_address], edx\n");
emit("\tand edx, 0xFFFFFF\n");
emit("\txor ecx, ecx\n");

emit("\tcmp edx, 0xE00000\n");
emit("\tjb short .Not_In_Ram\n");
emit("\tand edx, 0xFFFF\n");
emit("\tmov cx, [Ram_68k + edx]\n");
emit("\tmov edx,[__access_address]\n");
emit("\tret\n");

emit("align 4\n");
emit(".Not_In_Ram\n");
emit("\tpush eax\n");
emit("\tpush edx\n");
emit("\tmov [__io_cycle_counter], edi\n");
emit("\tmov [__io_fetchbase], ebp\n");
emit("\tmov [__io_fetchbased_pc], esi\n");
emit("\tcall M68K_RW\n");
emit("\tmov edi, [__io_cycle_counter]\n");
emit("\tadd esp, byte 4\n");
emit("\tmov ebp, [__io_fetchbase]\n");
emit("\tmov cx, ax\n");
emit("\tmov esi, [__io_fetchbased_pc]\n");
emit("\tmov edx, [__access_address]\n");
emit("\tpop eax\n");
emit("\tret\n");
}
}
как я понял, читает байт или слово (в зависимости от size). Обратите внимание, там идет проверка адреса, если он меньше 0xE00000, то происходит переход на метку not_in_ram и используются функции M68K_RB, M68K_RW,
a если больше или равно, то адрес берется по маске 0xFFFF и просто читается из массива Ram_68k emit("\tand edx, 0xFFFF\n");
emit("\tmov cx, [Ram_68k + edx]\n");
. Из-за маски 0xFFFF сколько бы мы не увеличивали память, она все равно будет читаться/записываться в первы 64 кб. Ну, естественно, нужно будет сделать изменения в файле CPU_68K.c.

Оффлайн GManiac

  • Пользователь
  • Сообщений: 1284
    • Просмотр профиля
Re: разогнал эмуль генс11а. (генсмуви)
« Ответ #64 : 19 Октябрь 2009, 12:05:21 »
Интересная находка, скорей всего, дело в этом. Но это крайне неверный подход к написанию ядра CPU, т.к. CPU вообще не должен знать о каких-то памятях и масках. У него есть шина адреса, он выставляет на неё адрес, а куда физически пойдёт обращение, уже решает диспетчер памяти.
Удивили они меня такой глупостью. Интересно, это уже в генсе так было (в старскриме вряд ли, он же под сегу не заточен) или это добавили в ГенсТрейсере? (лень смотреть). Наверно, это добавили в Трейсере для упрощения отладки или ещё чего-то.

Оффлайн Марат

  • Пользователь
  • Сообщений: 556
  • Пол: Мужской
    • Просмотр профиля
Re: разогнал эмуль генс11а. (генсмуви)
« Ответ #65 : 19 Октябрь 2009, 12:28:24 »
Вообще, я забыл сказать, что это я нашел в исходниках gens kmod. Поэтому возможно в gens tracer добавили. Вожможно, это сделали для более точной эмуляции, так как в sega tech overview написано, что область $FF0000 - $FFFFFF отражается в область $Е00000 - $Е0FFFF, $E10000 - $E1FFFF и т.д.

Оффлайн GManiac

  • Пользователь
  • Сообщений: 1284
    • Просмотр профиля
Re: разогнал эмуль генс11а. (генсмуви)
« Ответ #66 : 19 Октябрь 2009, 12:31:23 »
Это так работало во всех генсах и без редактирования ядра CPU, помнишь, мы же сначала нашли маску в Mem_68k. Вот там и только там и должна находиться маска.
В переводе Sega_Tech HardWareMan пишет, что на железе можно расширить память, поставив нужную планку.

Оффлайн KABAL

  • Пользователь
  • Сообщений: 1300
    • Просмотр профиля
Re: разогнал эмуль генс11а. (генсмуви)
« Ответ #67 : 19 Октябрь 2009, 15:18:06 »
Можно сделать так при обращении к памяти RAM: в машинном коде при обращении в RAM пишется адрес от 00 FF 00 00 до 00 FF FF FF - если добавить новый блок памяти - задать ему адрес от 00 FE 00 00 до 00 FE FF FF; и пусть эмулятор копирует не по 64 kb а по 128 кб , начиная с E0 00 00 до FF FF FF, видимо нужно объяснить эмулятору, что область от 00 FE 00 00 до 00 FE FF FF находится в пределах не 64 а 128 копируемых Килобайт, наверное нужно везде, где написано 00 FF 00 00 - 00 FF ff ff написать 00 FE 00 00 - 00 FF FF FF, а где пишется 00 00 - ff ff написать 00 00 00 - 01 FF FF, и при этом объяснить, что 00 FF 00 00 - 00 FF FF FF соответствует 00 00 00 - 00 FF FF RAM, 00 FE 00 00 - 00 FE FF FF соответствует 01 00 00 - 01 FF FF RAM
« Последнее редактирование: 19 Октябрь 2009, 15:25:12 от KABAL »

Оффлайн Segaman

  • Пользователь
  • Сообщений: 3240
  • Пол: Мужской
  • Blast Processing!
    • Youtube
    • Просмотр профиля
Re: разогнал эмуль генс11а. (генсмуви)
« Ответ #68 : 19 Октябрь 2009, 17:53:27 »
По моему лучше будет если адрес в 2 байта будет, то обращение в 00FFXXXX, а в 4е там де надо. и ваапще, нельзя ли копирование убрать и всю область от E000000 до FFFFFFFF под рам отвести? или там сложнее всё?

Добавлено позже:
Кстате на википедии прочёл, что карики с размером больше 4 мегов работают с песеключением банков http://ru.m.wikipedia.org/wiki/Sega_Mega_Drive?wasRedirected=true#cite_note-1

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: разогнал эмуль генс11а. (генсмуви)
« Ответ #69 : 19 Октябрь 2009, 19:05:17 »
По моему лучше будет
лучше? надо чтобы хоть как-то было))0
у меня после изменений в star.c  почти все перестает работать, память отобржает как нули. игры некоторые работают но без изображения.
вопрос что там писать заместо FFFF?  прбовал 2варианта -  7FFFF и FFFFF везде где про рам68к сказано. вот после этого такие глюки. попробую 1FFFFF еще и все 4 блока прописать. (в мем68к не менял , просто 7ffff писал)

Оффлайн Марат

  • Пользователь
  • Сообщений: 556
  • Пол: Мужской
    • Просмотр профиля
Re: разогнал эмуль генс11а. (генсмуви)
« Ответ #70 : 19 Октябрь 2009, 19:17:17 »
лучше? надо чтобы хоть как-то было))0
у меня после изменений в star.c  почти все перестает работать, память отобржает как нули. игры некоторые работают но без изображения.
вопрос что там писать заместо FFFF?  прбовал 2варианта -  7FFFF и FFFFF везде где про рам68к сказано. вот после этого такие глюки. попробую 1FFFFF еще и все 4 блока прописать. (в мем68к не менял , просто 7ffff писал)
Вот 1FFFFF  как раз и надо писать.

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: разогнал эмуль генс11а. (генсмуви)
« Ответ #71 : 19 Октябрь 2009, 19:57:00 »
Вот 1FFFFF  как раз и надо писать.
ничего не изменилось вообщем-то :(  а  что насчет cpu68k.c ?

Оффлайн Марат

  • Пользователь
  • Сообщений: 556
  • Пол: Мужской
    • Просмотр профиля
Re: разогнал эмуль генс11а. (генсмуви)
« Ответ #72 : 19 Октябрь 2009, 20:11:15 »
Вот попробуй замени свои файлы этими файлами.Star.c and CPU_68K.c Файл star.c из папки Starscream/Main68K.

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: разогнал эмуль генс11а. (генсмуви)
« Ответ #73 : 19 Октябрь 2009, 21:13:45 »
Вот попробуй замени свои файлы этими файлами.Star.c and CPU_68K.c Файл star.c из папки Starscream/Main68K.
уже лучше) RRR не пашет, а Dune пашет.    сейчас изменю код в RRR как тогда).(т.к. мемтест у меня там)

опять тоже самое... все 65кб  (E0xxxx- FFxxxx) куски дублируются..

хотя вот еще что было:

Cpu_68k.c
.\Cpu_68k.c(157) : warning C4029: declared formal parameter list different from definition

Generating Main68k Starscream Assembly
STARSCREAM version M0.26d
Unrecognized option: "-quiet"
Project : error PRJ0019: A tool returned an error code from "Generating Main68k Starscream Assembly"
Build log was saved at "file://c:\gens11a\svnblah\Gens\Starscream\Main68k\Release\BuildLog.htm"
MainStar - 1 error(s), 0 warning(s)
« Последнее редактирование: 19 Октябрь 2009, 21:22:42 от Ti_ »

Оффлайн Марат

  • Пользователь
  • Сообщений: 556
  • Пол: Мужской
    • Просмотр профиля
Re: разогнал эмуль генс11а. (генсмуви)
« Ответ #74 : 19 Октябрь 2009, 21:25:44 »
Хм, а ты батник comp_m68k запусканшь, перед компиляцией?

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: разогнал эмуль генс11а. (генсмуви)
« Ответ #75 : 19 Октябрь 2009, 21:27:36 »
Хм, а ты батник comp_m68k запусканшь, перед компиляцией?
сча, глянем. я его ток 1раз запускал когда первый раз собирал. наверн из-за этого

Оффлайн Марат

  • Пользователь
  • Сообщений: 556
  • Пол: Мужской
    • Просмотр профиля
Re: разогнал эмуль генс11а. (генсмуви)
« Ответ #76 : 19 Октябрь 2009, 21:29:19 »

хотя вот еще что было:

Cpu_68k.c
.\Cpu_68k.c(157) : warning C4029: declared formal parameter list different from definition

Generating Main68k Starscream Assembly
STARSCREAM version M0.26d
Unrecognized option: "-quiet"
Project : error PRJ0019: A tool returned an error code from "Generating Main68k Starscream Assembly"
Build log was saved at "file://c:\gens11a\svnblah\Gens\Starscream\Main68k\Release\BuildLog.htm"
MainStar - 1 error(s), 0 warning(s)
Наверное, мой файл отличается от твоего. У меня ведь с gens kmod'a. Дай мне свои.

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: разогнал эмуль генс11а. (генсмуви)
« Ответ #77 : 19 Октябрь 2009, 22:27:15 »
Наверное, мой файл отличается от твоего. У меня ведь с gens kmod'a. Дай мне свои.


Добавлено позже:
сча, глянем. я его ток 1раз запускал когда первый раз собирал. наверн из-за этого
теперь эффект заметнее.-заглючило много че)))-точнее графа  и ток во время гонки

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

Добавлено позже:
Наверное, мой файл отличается от твоего. У меня ведь с gens kmod'a. Дай мне свои.
ну как удалось мои изменить?

Добавлено позже:
я уже сам изменил ) правда ток один и кажись мем заработала) сейчас буду тест прогонять узнаем.
по чтению нули идут уже)

10:0000  0C B9  CMPI.L  #$00000000,($00F00000)
10:000A  66 00  BNE     #$0058 [10:0064]
10:000E  0C B9  CMPI.L  #$00000000,($00F12345)
10:0018  66 00  BNE     #$004A [10:0064]

Оффлайн Марат

  • Пользователь
  • Сообщений: 556
  • Пол: Мужской
    • Просмотр профиля

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: разогнал эмуль генс11а. (генсмуви)
« Ответ #79 : 19 Октябрь 2009, 22:34:27 »
заработала память

10:0000  23 FC  MOVE.L  #$12345678,($00FF0002)        - запись
10:000A  0C B9  CMPI.L  #$12345678,($00FF0002)             - чтение
10:0014  66 00  BNE     #$0012 [10:0028]                        -  равно.
10:0018  0C B9  CMPI.L  #$12345678,($00E00002)              - E00002 теперь заместо FF0002 (память, пришлось в игре код менять)
10:0022  66 00  BNE     #$0004 [10:0028]    - E00002 неравно FF0002 - не дублируется!
10:0028  4E 71  NOP
10:002A  4E 75  RTS    



Добавлено позже:
Вот
сейчас с этим попробую надеюсь графа вернется в игру )

не помогло . может M68K_Fetch[1].offset = (unsigned)&Ram_68k[0] - 0xE00000;
все таки FF0000 должен быть?
« Последнее редактирование: 19 Октябрь 2009, 22:50:42 от Ti_ »

Оффлайн Марат

  • Пользователь
  • Сообщений: 556
  • Пол: Мужской
    • Просмотр профиля
Re: разогнал эмуль генс11а. (генсмуви)
« Ответ #80 : 19 Октябрь 2009, 22:45:08 »
Кстати, Ti_, ты откуда сырцы скачал?

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля

Оффлайн Марат

  • Пользователь
  • Сообщений: 556
  • Пол: Мужской
    • Просмотр профиля
Re: разогнал эмуль генс11а. (генсмуви)
« Ответ #82 : 19 Октябрь 2009, 23:04:53 »
не помогло . может M68K_Fetch[1].offset = (unsigned)&Ram_68k[0] - 0xE00000;
все таки FF0000 должен быть?
Вряд ли, но все равно попробуй.

Добавлено позже:
Можешь свой проект залить?

Добавлено позже:
Файл star.c ты мой использовал или в своем такие же изменения сделал?

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: разогнал эмуль генс11а. (генсмуви)
« Ответ #83 : 19 Октябрь 2009, 23:36:03 »
Добавлено позже:
Можешь свой проект залить?

Добавлено позже:
Файл star.c ты мой использовал или в своем такие же изменения сделал?
source
его нужно распаковать в C:\gens11a\svnblah  , и чтобы скомпилить нужно вначале pwm.obj вначале комплить потом ребилд всего ост.-  если не будет компл. сейчас еще ориг. файлы выложу- все что я изменял.

я не смотрел что ты сделал в своем) я просто написал 1FFFFF везде где ram_68k

Добавлено позже:
Вряд ли, но все равно попробуй.

мошт мы видеопамять тож расширили вот и показывает непойми че

Оффлайн Марат

  • Пользователь
  • Сообщений: 556
  • Пол: Мужской
    • Просмотр профиля
Re: разогнал эмуль генс11а. (генсмуви)
« Ответ #84 : 19 Октябрь 2009, 23:44:05 »
Думаю это из-за ram, куда распаковывается графика и карты.

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: разогнал эмуль генс11а. (генсмуви)
« Ответ #85 : 20 Октябрь 2009, 14:42:50 »
не знаю как это фиксить.  пробовал такие варианты: в стар.ц ( вместо 1FFFFF,  писать где ред 1FFFF, где врайт FFFFF, так вообще не пашет )
+пробовал разные cpu68k.c тоже не помогает.    с обычным cpu68k.c вообще не показывает графу., тоже самое случается если там сменить offset на FF0000.

Добавлено позже:
Думаю это из-за ram, куда распаковывается графика и карты.
там про нее ничего не сказано. мошт где-то что не учтено и эмуль на нее заезжает.  и туда например копирует) - раньше дублировались блоки по 65кб , а теперь по 2мб дублируются из рам в видео.

Оффлайн Марат

  • Пользователь
  • Сообщений: 556
  • Пол: Мужской
    • Просмотр профиля
Re: разогнал эмуль генс11а. (генсмуви)
« Ответ #86 : 20 Октябрь 2009, 14:58:49 »
Ti_, я три раза скачал твой архив source, но так и не смог извлеч оттуда файлы. Ты можешь только измененные файлы залить?

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: разогнал эмуль генс11а. (генсмуви)
« Ответ #87 : 20 Октябрь 2009, 15:39:40 »
Ti_, я три раза скачал твой архив source, но так и не смог извлеч оттуда файлы. Ты можешь только измененные файлы залить?

Оффлайн Марат

  • Пользователь
  • Сообщений: 556
  • Пол: Мужской
    • Просмотр профиля
Re: разогнал эмуль генс11а. (генсмуви)
« Ответ #88 : 20 Октябрь 2009, 16:04:26 »
Ti_, там, в файле star.c, где функция "static void gen_readdecl" после метки not_in_ram emit(".Not_In_Ram\n");
emit("\tadd edx, byte 2\n");
emit("\tpush eax\n");
emit("\tpush edx\n");
emit("\tmov [__io_cycle_counter], edi\n");
emit("\tmov [__io_fetchbase], ebp\n");
emit("\tmov [__io_fetchbased_pc], esi\n");
emit("\tcall M68K_RW\n");
emit("\tmov ecx, eax\n");
emit("\tsub dword [esp], byte 2\n");
emit("\tand ecx, 0x1FFFFF\n");
emit("\tcall M68K_RW\n");
emit("\tand eax, 0x1FFFFF\n");
emit("\tmov edi, [__io_cycle_counter]\n");
нужно убрат 1F, т.е. оставить как было emit("\tand ecx, 0xFFFF\n");
emit("\tcall M68K_RW\n");
emit("\tand eax, 0xFFFF\n");

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: разогнал эмуль генс11а. (генсмуви)
« Ответ #89 : 20 Октябрь 2009, 16:12:03 »
Ti_, там, в файле star.c, где функция "static void gen_readdecl" после метки not_in_ram
да это я только сегодня добавил, ничего не изменилось вообщем-то.