ぴゅう太RAM&ROMカートリッジ対応

ぴゅう太RAM&ROMカートリッジというのを作ってまして、

http://www.geocities.jp/parallel_computer_inc/cart.html

TINY BASICやら、

https://tms9918.hatenablog.com/entry/2017/02/04/182833

PITFALL!やら、

https://tms9918.hatenablog.com/entry/2017/03/05/114050

TI SCRAMBLEやら、

https://tms9918.hatenablog.com/entry/2017/04/15/101627

DOOR DOORが遊べるようになります。

https://www.youtube.com/watch?v=MIoiBIzAjyk

しかしエミュレータが対応していませんので、ePyuTa 謎WIPページの修正点をメモしておこうと思います。

http://takeda-toshiya.my.coocan.jp/pyuta/index.html

memory.h

/*
	TOMY PyuTa Emulator 'ePyuTa'

	Author : Takeda.Toshiya
	Date   : 2007.07.15 -

	[ memory ]
*/

#ifndef _MEMORY_H_
#define _MEMORY_H_

#include "../vm.h"
#include "../../emu.h"
#include "../device.h"

class MEMORY : public DEVICE
{
private:
	DEVICE *d_cmt, *d_cpu, *d_psg, *d_vdp;
	
	uint8_t ipl[0x8000];	// ipl rom (32k)
	uint8_t basic[0x4000];	// basic rom (16k)
	uint8_t cart[0x8000];	// cartridge (32k)
	uint8_t extram[0x4000];	// extram (16k)
(省略)

memory.cpp

(省略)
#define ENABLE_CART() { \
	if(ctype == 4) { \
		SET_BANK(0x0000, 0x3fff, wdmy, ipl); \
		SET_BANK(0x4000, 0xbfff, wdmy, cart); \
	} else if(has_extrom) { \
		SET_BANK(0x0000, 0x7fff, wdmy, ipl); \
		SET_BANK(0x8000, 0xbfff, wdmy, cart); \
	} else { \
		SET_BANK(0x0000, 0x3fff, wdmy, ipl); \
		SET_BANK(0x4000, 0x7fff, extram, extram); \
		SET_BANK(0x8000, 0xdfff, wdmy, cart); \
	} \
	cart_enabled = true; \
}
(省略)
void MEMORY::open_cart(const _TCHAR* file_path)
{
	// open cart
	FILEIO* fio = new FILEIO();
	
	if(fio->Fopen(file_path, FILEIO_READ_BINARY)) {
		// 8kb
		ctype = fio->Fread(cart, 0x2000, 1);
		memcpy(cart + 0x2000, cart, 0x2000);
		// 16kb
		ctype += fio->Fread(cart + 0x2000, 0x2000, 1);
		// 24kb
		ctype += fio->Fread(cart + 0x4000, 0x2000, 1);
		// 32kb
		ctype += fio->Fread(cart + 0x6000, 0x2000, 1);
		fio->Fclose();
		
		ENABLE_CART();
	}
	delete fio;
}
(省略)

バイナリはこちらです。(要IPL.ROM)

http://www.geocities.jp/parallel_computer_inc/scroll.zip