/** TI85: TI85 EMulator ***********************************/ /** **/ /** TI85.CPP **/ /** **/ /** This file contains implementation for the TI85-specific **/ /** hardware: Rom mapper, i/o ports etc **/ /** Copyright (C) Marat Fayzullin 1994,1995 **/ /** You are not allowed to distribute this software **/ /** commercially. Please, notify me, if you make any **/ /** changes to this file. **/ /** Modifications to MSX.C Copyright (C) Robert Taylor 1995.**/ /** **/ /*************************************************************/ #include "TI85.h" #include #include #include #include #include #include #include #include #include #include #include #include "wgtgfx.h" /***************************************************************/ /** The z80 emulator performs it's operations on a continuous **/ /** block of memory (Called RAM). The ROM pages are stored **/ /** contiguouslty in a block of memory called ROMMap. When **/ /** the emualtion calles the**/ int Verbose; byte huge *RAM; byte huge *ROMMap; byte CurrentRom=1; byte CurrentKey=0; byte KeypadMask=0; byte PowerReg=0; byte DisplayContrast=0; byte LinkReg=0x0F; byte *ScrBuf; byte PCto85KeyMap[256-32] = {0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x1d,0x15,0x0c,0x0a,0x2b,0x0b,0x19,0x0d, 0x21,0x22,0x1a,0x12,0x23,0x1b,0x13,0x24, 0x1c,0x14,0x00,0x00,0x00,0x2a,0x00,0x00, 0x00,0x2e,0x26,0x1e,0x16,0x0e,0x2d,0x25, 0x1d,0x15,0x0d,0x2c,0x24,0x1c,0x14,0x0c, 0x2b,0x23,0x1b,0x13,0x0b,0x22,0x1a,0x12, 0x0a,0x21,0x19,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }; /****************************************************************/ /*** Write number into given IO port. ***/ /****************************************************************/ void DoOut(register byte Port,register byte Value) { switch(Port) { case 1: KeypadMask=Value; break; case 2: DisplayContrast=Value; case 5: MapROM(Value); break; case 6: PowerReg=Value; break; case 7: LinkReg=(LinkReg & 0xF3) | (Value & 0xC); break; } } /****************************************************************/ /*** Read number from given IO port. ***/ /****************************************************************/ byte DoIn(register byte Port) { switch(Port) { case 1: //Keypad return CurrentKey; case 2: return (DisplayContrast & 0x1f); case 3: return 0xc; case 5: return CurrentRom; case 6: return PowerReg; case 7: return LinkReg; default: return 0xFF; } } /****************************************************************/ /*** Switch ROM pages: this routine copys the data from the ***/ /*** relavent ROM into the mapped ROM space (0x4000-0x7fff) ***/ /****************************************************************/ void MapROM(register byte NewRom) { long Count; NewRom &=7; if (!(CurrentRom==NewRom) ) { CurrentRom=NewRom; for (Count=0;Count> (7-bit))&1; memcpy(abuf,ScrBuf,320*64); } void InitScreen(void) { setvga256(); } void MemCopy(byte *Dest, byte *Source,long Size) { long Count; for (Count=0;Count