Цитата Сообщение от kapitan-u Посмотреть сообщение
Я уже выяснил почему пару програм не идут: не полностью реализована ВВ55
Я тоже поленился это сделать...
Я вижу, что некоторые программы управляют переключением видепамяти через регистр управления ВВ55 0хС3 меняя режим нижней части порта С
Видимо перевод его в вежим ввода дает 1, а режим вывода - то что там прописано в порт С. Идеальный вариант для всех поделок: либо найти полную реализацию ВВ55, либо самому написать.
Полная реализация полезна и хороша, но для "Львова" (если только старый софт смотреть) отлично подойдет компромиссный вариант с частичной эмуляцией самого необходимого:

Код:
IO.prototype.input = function(port) {
    port &= 0xFF;

    //В ПК-01 "Львов" реализована неполная дешифрация портов ввода-вывода
    //[http://lvovpc.ho.ua/forum/viewtopic.php?p=2219#p2219]
    port = 0xC0 + (port & this.decoding_mask);

    if (port === 0xD1) {
        this.ports[port] = this.keyboard.get(this.ports[0xD0], 0xD0);
    }
    else if (port === 0xD2) {
        this.ports[port] = this.keyboard.get(this.ports[0xD2], 0xD2);
    }
    else if ((port & 0x03) === 3) {
      //Согласно документу i8255A/i8255A-5 datasheet мы имеем,
      //что Control Word Register доступен только для записи:
      //"The Control Word Register can Only be written into.
      //No Read operation of the Control Word Register is allowed."
      //[http://www.classiccmp.org/rtellason/chipdata/8255.pdf]
      //Такие дела, котаны. Берегите себя, читайте мануалы.
      return 0;
    }

    return this.ports[port];
};

IO.prototype.output = function(port, w8) {
    port &= 0xFF;

    //В ПК-01 "Львов" реализована неполная дешифрация портов ввода-вывода
    //[http://lvovpc.ho.ua/forum/viewtopic.php?p=2219#p2219]
    port = 0xC0 + (port & this.decoding_mask);

    if ((port & 0x03) === 3 && (w8 & 0x80) === 0) {
        var mask = 0x01 << ((w8 & 0x0E) >> 1),
            target = port - 1;

        if (w8 & 0x01) {
            this.output(target, this.input(target) | mask);
        }
        else {
            this.output(target, this.input(target) & ~mask);
        }
    }

    if (port === this.MEDIA_PORT) {
        if ((this.ports[this.PALETTE_PORT] & this.BEEPER_MODE_BIT) || this.ignore_ctrl_bit) {
            this.beeper.process(w8 & this.BEEPER_BIT);
        }
    }

    this.ports[port] = w8;
};
И

Код:
  //port 0xC0
    //[http://lvovpc.cu.cc/article.shtml?id=2]
    //[http://lvovpc.cu.cc/article.shtml?id=5]
    this.PRINTER_PORT = 0xC0;

    //port 0xC1 (b)
    this.PALETTE_PORT = 0xC1;
    this.BEEPER_MODE_BIT = 0x80;        // 1 - вывод звука на бипер разрешен

    //port 0xC2 (c)
    this.MEDIA_PORT = 0xC2;
    this.BEEPER_BIT = 0x1;              //1 - on, 0 - off
    this.VRAM_STATUS_BIT = 0x2;         //0 - видеоОЗУ подключено
    this.PRINTER_SC_STROBE_BIT = 0x4;
    this.TAPE_READ_BIT = 0x10;
    this.PRINTER_AC_BUSY_BIT = 0x40;