Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifdef BSX_CPP
- BSXSatellaview bsxsatellaview;
- void BSXSatellaview::init() {
- }
- void BSXSatellaview::load() {
- bus.map(Bus::MapMode::Direct, 0x00, 0x3f, 0x2188, 0x219f, { &BSXSatellaview::mmio_read, &bsxsatellaview }, { &BSXSatellaview::mmio_write, &bsxsatellaview });
- bus.map(Bus::MapMode::Direct, 0x80, 0xbf, 0x2188, 0x219f, { &BSXSatellaview::mmio_read, &bsxsatellaview }, { &BSXSatellaview::mmio_write, &bsxsatellaview });
- }
- void BSXSatellaview::unload() {
- BSX1.close();
- BSX2.close();
- bsxf.BS1 = false;
- bsxf.BS2 = false;
- }
- void BSXSatellaview::power() {
- BSX1.open("BSX1.bin", file::mode::read);
- BSX2.open("BSX2.bin", file::mode::read);
- regs.r218c_count = 0;
- if (BSX1.size() != -1) {
- BSX1.seek(0);
- bsxf.BS1 = true;
- }
- else bsxf.BS1 = false;
- if (BSX2.size() != -1) {
- BSX2.seek(0);
- bsxf.BS2 = true;
- }
- else bsxf.BS2 = false;
- reset();
- }
- void BSXSatellaview::reset() {
- if(bsxf.BS1) BSX1.seek(0);
- if(bsxf.BS2) BSX2.seek(0);
- memset(®s, 0x00, sizeof regs);
- }
- uint8 BSXSatellaview::mmio_read(unsigned addr) {
- addr &= 0xffff;
- switch(addr) {
- case 0x2188: return regs.r2188;
- case 0x2189: return regs.r2189;
- case 0x218a: {
- return BSX1.size();
- //return regs.r218a;
- }
- case 0x218b: {
- if(regs.r218b_port) {
- if (bsxf.BS1) {
- if (BSX1.offset() >= BSX1.size()) BSX1.seek(0);
- return BSX1.read();
- }
- else return 0x01;
- }
- else return 0x00;
- }
- case 0x218c: {
- if(regs.r218c_port) {
- if (bsxf.BS2) {
- if (regs.r218c_chk || BSX2.offset() >= BSX2.size()) {
- //BSX2.seek(regs.r218c_count*256);
- if(regs.r218c_count==1) BSX2.seek(0);
- else if(regs.r218c_count==2) BSX2.seek(0x200);
- else if(regs.r218c_count>=3) BSX2.seek(0x400);
- regs.r218c_chk=false;
- }
- return BSX2.read();
- }
- else return 0x01;
- }
- else return 0x00;
- }
- case 0x218d: {
- return 0x11;
- }
- case 0x218e: return regs.r218e;
- case 0x218f: return regs.r218f;
- case 0x2190: return regs.r2190;
- case 0x2192: {
- if(regs.r2192_port) {
- unsigned counter = regs.r2192_counter++;
- if(regs.r2192_counter >= 18) regs.r2192_counter = 0;
- if(counter == 0) {
- time_t rawtime;
- time(&rawtime);
- tm *t = localtime(&rawtime);
- regs.r2192_hour = t->tm_hour;
- regs.r2192_minute = t->tm_min;
- regs.r2192_second = t->tm_sec;
- }
- switch(counter) {
- case 0: return 0x00; //???
- case 1: return 0x00; //???
- case 2: return 0x00; //???
- case 3: return 0x00; //???
- case 4: return 0x00; //???
- case 5: return 0x01;
- case 6: return 0x01;
- case 7: return 0x00;
- case 8: return 0x00;
- case 9: return 0x00;
- case 10: return regs.r2192_second;
- case 11: return regs.r2192_minute;
- case 12: return regs.r2192_hour;
- case 13: return 0x00; //???
- case 14: return 0x00; //???
- case 15: return 0x00; //???
- case 16: return 0x00; //???
- case 17: return 0x00; //???
- }
- }
- else return 0x00;
- } break;
- case 0x2193: return regs.r2193 & ~0x0c;
- case 0x2194: return 0xff; //regs.r2194;
- case 0x2196: return regs.r2196;
- case 0x2197: return regs.r2197;
- case 0x2199: return regs.r2199;
- }
- return cpu.regs.mdr;
- }
- void BSXSatellaview::mmio_write(unsigned addr, uint8 data) {
- addr &= 0xffff;
- switch(addr) {
- case 0x2188: {
- regs.r2188 = data;
- } break;
- case 0x2189: {
- regs.r2189 = data;
- } break;
- case 0x218a: {
- regs.r218a = data;
- } break;
- case 0x218b: {
- if (data && 1 == 1) {
- regs.r218b_port=true;
- BSX1.seek(0);
- }
- else regs.r218b_port=false;
- //regs.r218b = data;
- } break;
- case 0x218c: {
- if (data && 1 == 1) {
- regs.r218c_port=true;
- BSX2.seek(0);
- regs.r218c_count++;
- if (regs.r218c_count >= 2) regs.r218c_chk=true;
- }
- else regs.r218c_port=false;
- //regs.r218c = data;
- } break;
- case 0x218e: {
- regs.r218e = data;
- } break;
- case 0x218f: {
- regs.r218e >>= 1;
- regs.r218e = regs.r218f - regs.r218e;
- regs.r218f >>= 1;
- } break;
- case 0x2191: {
- if (data && 1 == 1) regs.r2191_port=true;
- else regs.r2191_port=false;
- //regs.r2191 = data;
- regs.r2192_counter = 0;
- } break;
- case 0x2192: {
- if (data && 1 == 1) regs.r2192_port=true;
- else regs.r2192_port=false;
- regs.r2190 = 0x80;
- } break;
- case 0x2193: {
- regs.r2193 = data;
- } break;
- case 0x2194: {
- regs.r2194 = data;
- } break;
- case 0x2197: {
- regs.r2197 = data;
- } break;
- case 0x2199: {
- regs.r2199 = data;
- } break;
- }
- }
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement