Esempio n. 1
0
        // read with io
        public int Read(int address)
        {
            var page = (address & 0xF000) >> 12;

            switch (page)
            {
            case 0x0A:
                if (address >= 0xA000 && address < 0xA7C0)
                {
                    return(_floppyRom[address & 0x7FF]);
                }
                switch (address)
                {
                case 0xA7C0:
                    const int tapeDrivePresent = 0x80;
                    return(_ports[0] | tapeDrivePresent | (_input.LightPenClick ? 0x20 : 0));

                case 0xA7C1:
                    return(_ports[1] | (_input.IsKeyPressed((Mo5Key)(_ports[1] & 0xFE)) ? 0 : 0x80));

                case 0xA7C2:
                    return(_ports[2]);

                case 0xA7C3:
                    return(_ports[3] | ~_machine.Initn());

                case 0xA7CB:
                    return((_carflags & 0x3F) | ((_carflags & 0x80) >> 1) | ((_carflags & 0x40) << 1));

                case 0xA7CC:
                    return(((_ports[0x0E] & 4) != 0) ? JoystickPosition : _ports[0x0C]);

                case 0xA7CD:
                    return(((_ports[0x0F] & 4) != 0) ? JoystickAction | SoundMem : _ports[0x0D]);

                case 0xA7CE:
                    return(4);

                case 0xA7D8:
                    return(~_machine.Initn());

                case 0xA7E1: return(0xFF);        //0 means printer error #53

                case 0xA7E6: return(_machine.Iniln() << 1);

                case 0xA7E7: return(_machine.Initn());

                default:
                    if (address < 0xA800)
                    {
                        return(_ports[address & 0x3F]);
                    }
                    return(0);
                }

            case 0x0B:
                SwitchMemo5Bank(address);
                return(_mem[_mapper[page]][address & 0xFFF] & 0xFF);

            default:
                return(_mem[_mapper[page]][address & 0xFFF] & 0xFF);
            }
        }