KrzysioCart mapper 030
*

Offline mono

  • *
  • 14
KrzysioCart mapper 030
« dnia: Listopada 30, 2021, 02:04:33 »
Czy można gdzieś poczytać o tym w jaki sposób zaimplementowany jest mapper 030 w KrzysioCart-cie?
Zrobiłem sobie kod wg opisu UNROM-512 w https://wiki.nesdev.org/w/index.php?title=UNROM_512 . Stoi tam że taki mapper ma 32K VRAM bankowane po 8K. No i na emulgatorach (FCEUX 2.4.0-interim i Mesen 0.9.9) mi kod ładnie działa, a tymczasem kiedy to samo wykonam na żywej konsoli (IQ-502 i na FunGame 3) z KrzysioCart-em no to wygląda to tak, jakby VRAM-u mial tylko 8K i żadną miarą nie potrafił przełączać banków VRAM.
Adresuję $C000 gdzie bity to: %MCCPPPPP gdzie:
M - mirroring
C - bank CHR-RAM
P - bank PRG-ROM
Banki ROM przełączane są poprawnie.
Może to kwestia nagłówka iNES lub NES 2.0? Testowałem obydwa i nie pomogło. Aktualnie wygląda to tak:
VERSION = 2
MAPPER = 30
SUBMAPPER = 0
ROMBANKS = 16
VROMBANKS = 0
MIRRORING = 0
BATTERYRAM = 1
TRAINER = 0
FOURSCREEN = 1
VSSYSTEM = 0
RAMBANKS = 0
TVSYSTEM = 0

        .byte 'NES',$1A
        .byte [ROMBANKS & $0FF]
        .byte [VROMBANKS & $0FF]
        .byte [[MAPPER & $0F] << 4] | [FOURSCREEN << 3] | [TRAINER << 2] | [BATTERYRAM << 1] | [MIRRORING << 0]
        .byte [MAPPER & $F0] | [VERSION << 2] | [VSSYSTEM << 0]
.if [VERSION = 2]
        .byte [SUBMAPPER << 4] | [[MAPPER & $F00] >> 8]
        .byte [[VROMBANKS & $F00] >> 4] | [[ROMBANKS & $F00] >> 8]
        .byte $00       ;RAMBANKS?
        .byte $00 | 9   ;32K CHR-RAM
        .byte 2         ;multiple region
        .byte $00
        .byte $00       ;no miscellaneous ROM present
        .byte $00       ;no expansion device
.else
        .byte RAMBANKS
        .byte TVSYSTEM
        .byte $00
        .byte $00
        .byte $00
        .byte $00
        .byte $00
        .byte $00
.endif
Dla VERSION=2 generowany jest nagłówek NES 2.0, dla VERSION=0 iNES.
Nagłówek iNES robię wg https://wiki.nesdev.org/w/index.php?title=INES a NES 2.0 https://wiki.nesdev.org/w/index.php?title=NES_2.0 .

Edit: Wstawiłem kod w odpowiednie znaczniki.
« Ostatnia zmiana: Listopada 30, 2021, 16:47:45 wysłana przez mono »
code, hex and rol'n'ror
niewiedza buduje, wiedza rujnuje

Odp: KrzysioCart mapper 030
« Odpowiedź #1 dnia: Listopada 30, 2021, 16:09:05 »
A w ogóle jest obsługiwany ten mapper? Sprawdziłbym ci kod na Everdrive N8 ale nie mam jak nagrać na kartę SD :-\ EDN8 na pewno obsługuje Mapper 30 bo grałem w gierki z NESMakera.

Na przyszłość: jak wklejasz kod to wrzuć go w tag code, będzie się odcinać od treści i do tego przy dłuższych listingach niepotrzebnie rozpycha post.

Z doświadczenia - jak na Mesenie kod przełącza ci banki to na konsoli też będzie działać.
« Ostatnia zmiana: Listopada 30, 2021, 16:10:54 wysłana przez Verteks »

*

Offline mono

  • *
  • 14
Odp: KrzysioCart mapper 030
« Odpowiedź #2 dnia: Listopada 30, 2021, 16:44:49 »
A w ogóle jest obsługiwany ten mapper?
Wg Elektrody https://www.elektroda.pl/rtvforum/topic3326538-90.html#18796621 oraz z opisu aukcji na Allegro https://allegro.pl/oferta/pegasus-kardridz-krzysiocart-micro-sd-everdrive-8291640896 wynika że jest obsługiwany - pytanie tylko w jakim zakresie.
Jakąś wskazówką jest:
Cytat: phanick_na_elektrodzie
* dodanie obsługi mappera 30 - od teraz możliwa jest też gra w gry stworzone za pomocą NesMakera - programu ułatwiającego tworzenie gier czy inne nieoficjalne tytuły o rozmiarze 512 kB korzystające z mappera nr 2 (np. Battle Kid 2),
i
Cytat: qwe234_na_allegro
* z dodaniem obsługi mappera 30 - od teraz zagrasz też w gry stworzone za pomocą NesMakera - programu ułatwiającego pisanie gier),
co rodzi jakąś nadzieję, że to mój trywialny błąd.

Interesowałoby mnie co dokładnie jest w KrzysioCarcie zaimplementowane? Bo jest tego trochę:
- bankowanie pamięci PRG-ROM
- bankowanie pamięci CHR-RAM
- mirroring
- pamięć savów
- flashowanie
Jakimi rejestrami się to adresuje (jeśli jest inaczej niż w opisie na https://wiki.nesdev.org/w/index.php?title=UNROM_512 )? Ile tych pamięci jest? Jak się to konfiguruje w nagłówku i jakiego rodzaju ten nagłówek ma być (a gdyby były działające przykłady to już w ogóle byłbym przeszczęśliwy)?
Jest gdzieś może jakaś strona Autora gdzie jest dokładna specyfikacja?

Sprawdziłbym ci kod na Everdrive N8 ale nie mam jak nagrać na kartę SD :-\ EDN8 na pewno obsługuje Mapper 30 bo grałem w gierki z NESMakera.
Wiem, wiem :) Dziękuję za ofertę, ale właśnie na EverDrive już MWK mi przeprowadzał wstępne testy. Wolałbym jednak żeby mi program działał nie tylko na ED w wersji Pro :)

Edit: A - KrzysioCartSave v.2020-09-26.
« Ostatnia zmiana: Listopada 30, 2021, 16:52:06 wysłana przez mono »
code, hex and rol'n'ror
niewiedza buduje, wiedza rujnuje

*

Offline Mcin

  • **
  • 499
Odp: KrzysioCart mapper 030
« Odpowiedź #3 dnia: Listopada 30, 2021, 20:50:33 »
Są tu i posiadacze wersji standardowej, a nawet obu :)

Odp: KrzysioCart mapper 030
« Odpowiedź #4 dnia: Listopada 30, 2021, 21:01:14 »
Bardzo słabo znam się na hardware, tego mappera nie próbowałem zakodować także nie odpowiem na pytania.

Ja bym zrobił tak:
- wrzuć ROM jakiejś gry z NESMakera do Mesena
- odpal debugger i ustaw pułapkę na zapis pod adres $C000, jeśli debugger się nie zatrzyma to jest to ten drugi wariant (nie Twój), wtedy wróć do punktu pierwszego
- wrzuć na KrzysioCarta
- jak będzie działać u Ciebie ok na konsoli to zobacz jak tam jest zaprogramowana obsługa mappera i zwyczajnie zgap ;)

*

Offline Krisuroku

  • *
  • 444
  • くりすろく
    • Krisuroku Twitch
Odp: KrzysioCart mapper 030
« Odpowiedź #5 dnia: Grudnia 02, 2021, 07:55:39 »
Jedynie wspomnę, że też grałem w gry z NesMakera na KrzysioCart. Oczywiście tylko KC w nowszej wersji obsługuje ten mapper. Pierwsza wersja KC o ile dobrze pamiętam nie wspierała mappera 030.
Nie w tym roku! XD

*

Offline sdm

  • **
  • 125
Odp: KrzysioCart mapper 030
« Odpowiedź #6 dnia: Grudnia 02, 2021, 14:50:11 »
KrzysioCart jedynie 8KB CHR RAM. Nie ma opcji zabawy w przełączanie banków CHR RAM w 32KB.

Tak z ciekawości zapytam - piszesz coś pod UNROM-512 w ASM, czy w NESMAKER?
« Ostatnia zmiana: Grudnia 02, 2021, 14:52:22 wysłana przez sdm »

*

Offline mono

  • *
  • 14
Odp: KrzysioCart mapper 030
« Odpowiedź #7 dnia: Grudnia 02, 2021, 17:16:04 »
KrzysioCart jedynie 8KB CHR RAM. Nie ma opcji zabawy w przełączanie banków CHR RAM w 32KB.
Czyli moje przypuszczenia się jednak potwierdzają. Dzięki wielkie!

Tak z ciekawości zapytam - piszesz coś pod UNROM-512 w ASM, czy w NESMAKER?
W ASM bo to ma być przyjemność :)

A serio to w ASM bo akurat ten projekcik który robię jest wprawką (bardzo prostą technicznie) pozwalającą mi zapoznać się ze specyfiką kilku różnych platform i zorientować się co do przenośności kodu. Wyszedłem od Atari 130 XE (jestem Atarowcem z dziada pradziada) i to jest kod bazowy, właśnie zrobiłem wersję na NES/Famicom/Pegasus/Dendy (choć jak widać chyba trzeba będzie przemyśleć założenia i zrobić to inaczej), a teraz zabieram się za Atari 7800 i później Commodore +4 i Commodore 64.

Ja bym zrobił tak:
- wrzuć ROM jakiejś gry z NESMakera do Mesena
- odpal debugger i ustaw pułapkę na zapis pod adres $C000, jeśli debugger się nie zatrzyma to jest to ten drugi wariant (nie Twój), wtedy wróć do punktu pierwszego
- wrzuć na KrzysioCarta
- jak będzie działać u Ciebie ok na konsoli to zobacz jak tam jest zaprogramowana obsługa mappera i zwyczajnie zgap ;)
I to jest genialny pomysł! Ale już to zrobiłem zanim zadałem Wam pytanie na forum :)

Oczywiście tylko KC w nowszej wersji obsługuje ten mapper. Pierwsza wersja KC o ile dobrze pamiętam nie wspierała mappera 030.
Tak. Moja wersja to KrzysioCartSave v.2020-09-26.

Pięknie Wam dziękuję za odzew, informacje i sugestie bo spojrzenie z zewnątrz jest zawsze cenne - człowiek potrafi się zafiksować.
code, hex and rol'n'ror
niewiedza buduje, wiedza rujnuje

*

Offline sdm

  • **
  • 125
Odp: KrzysioCart mapper 030
« Odpowiedź #8 dnia: Grudnia 02, 2021, 20:41:36 »
Ciekawa idea. Czekam na efekty :) Co do przenoszenia kodu miedzy systemami to sam ostatnio przerabiałem coś podobnego - przepisałem kod NES/6502 na inne maszyny, także niezgodne pod względem CPU :)

https://dl.dropboxusercontent.com/s/k46n7c3qliwnasn/plush_nes.nes
https://dl.dropboxusercontent.com/s/ktt4i0z0hzwun0s/plush_sms.sms
https://dl.dropboxusercontent.com/s/h4636pqe4sl4kx1/plush_gb.gb

Kod na NES, na Sega Master System oraz Gameboy. Mam w planach inne systemy, ale dopiero się w nich orientuje. Atari 7800 mam na oku (miałem kiedyś tą konsolkę, wiec tym bardziej).

BTW. Dlaczego koniecznie chcesz 32KB CHR RAM? To twór bardzo nienaturalny w "przyrodzie" NES...
« Ostatnia zmiana: Grudnia 02, 2021, 21:02:40 wysłana przez sdm »

*

Offline mono

  • *
  • 14
Odp: KrzysioCart mapper 030
« Odpowiedź #9 dnia: Grudnia 02, 2021, 22:09:07 »
Co do przenoszenia kodu miedzy systemami to sam ostatnio przerabiałem coś podobnego - przepisałem kod NES/6502 na inne maszyny, także niezgodne pod względem CPU :)
Fajne! Robisz lemmingi? :>
Czy Ty cały kod robisz od nowa a assety zostają (albo są automatem skonwertowane, ale nie wymagają zmian przez grafika), czy jednak jakąś tam część masz wspólną?

Atari 7800 mam na oku (miałem kiedyś tą konsolkę, wiec tym bardziej).
A ja jako dziecko nie miałem, ale niezwykle ciekawi mnie ten chip MARIA i co się na nim da zrobić :)

Dlaczego koniecznie chcesz 32KB CHR RAM? To twór bardzo nienaturalny w "przyrodzie" NES...
Wiem, wiem - to chyba jeden z dwóch mapperów które mają bankowany CHR-RAM. Z racji na to, że ja tam mam grafikę, no to logosuję ją do kilku zestawów tilesów no i niestety niektóre graficzki nie chcą mi się zmieścić w 2 zestawach i wchodzą na trzeci. Więc wystarczyłyby mi 2 banki 8KB do swobodnego użytku. Może da się te graficzki poprawić? Zobaczymy.
Inny wariant to oczywiście bankowany CHR-ROM, który jest bardziej naturalny, ale nie wiem czy się z kolei zmieszczę z wszystkimi wariantami. Dość wygodnie jest kiedy mam dużo PRG-ROM, w którym mogę mieć nawet spakowane dane i rozpakować je do VRAM, niż mieć dużo banków CHR-ROM.
Tryb graficzny zastosowany w oryginalnej grze którą implementuję rodzi akurat tutaj różne problemy.

Edit: Literatka + doszczegółowienie.
« Ostatnia zmiana: Grudnia 02, 2021, 22:13:49 wysłana przez mono »
code, hex and rol'n'ror
niewiedza buduje, wiedza rujnuje

*

Offline sdm

  • **
  • 125
Odp: KrzysioCart mapper 030
« Odpowiedź #10 dnia: Grudnia 02, 2021, 22:33:57 »
To może użyj MMC1 lub MMC3 (wtedy jak potrzeba będzie użyć innych 8KB CHR to sobie przełączysz BANK), a jak nie szalejesz z PRG ROM to może CNROM (32KB PRG i 32KB CHR ROM) ?

Co do grafik to jak są zgodne z NES (2bpp) to w sumie copy-paste :) Ale zarówno SMS jak i GB wystarczyło nie robić nic w tym temacie ;)
« Ostatnia zmiana: Grudnia 02, 2021, 22:35:39 wysłana przez sdm »

*

Offline mono

  • *
  • 14
Odp: KrzysioCart mapper 030
« Odpowiedź #11 dnia: Grudnia 02, 2021, 22:58:11 »
To może użyj MMC1 lub MMC3 (wtedy jak potrzeba będzie użyć innych 8KB CHR to sobie przełączysz BANK), a jak nie szalejesz z PRG ROM to może CNROM (32KB PRG i 32KB CHR ROM) ?
Na Atari XL/XE skompresowny kod z danymi zajmuje mi 90 KB :) Ale widzę, że MMC1 powinien mi z powodzeniem wystarczyć. I MMC3 też. Widziałem je i nie wiem z jakich przyczyn wziąłem ten UNROM-512.  Dziękuję!
code, hex and rol'n'ror
niewiedza buduje, wiedza rujnuje