parallel_ioport_write_sw(void *opaque, uint32_t addr, uint32_t val)

{

    ParallelState *s = opaque;



    pdebug("write addr=0x%02x val=0x%02x\n", addr, val);



    addr &= 7;

    switch(addr) {

    case PARA_REG_DATA:

        s->dataw = val;

        parallel_update_irq(s);

        break;

    case PARA_REG_CTR:

        val |= 0xc0;

        if ((val & PARA_CTR_INIT) == 0 ) {

            s->status = PARA_STS_BUSY;

            s->status |= PARA_STS_ACK;

            s->status |= PARA_STS_ONLINE;

            s->status |= PARA_STS_ERROR;

        }

        else if (val & PARA_CTR_SELECT) {

            if (val & PARA_CTR_STROBE) {

                s->status &= ~PARA_STS_BUSY;

                if ((s->control & PARA_CTR_STROBE) == 0)

                    qemu_chr_fe_write(s->chr, &s->dataw, 1);

            } else {

                if (s->control & PARA_CTR_INTEN) {

                    s->irq_pending = 1;

                }

            }

        }

        parallel_update_irq(s);

        s->control = val;

        break;

    }

}

parallel_ioport_write_sw(void *opaque, uint32_t addr, uint32_t val)

{

    ParallelState *s = opaque;



    pdebug("write addr=0x%02x val=0x%02x\n", addr, val);



    addr &= 7;

    switch(addr) {

    case PARA_REG_DATA:

        s->dataw = val;

        parallel_update_irq(s);

        break;

    case PARA_REG_CTR:

        val |= 0xc0;

        if ((val & PARA_CTR_INIT) == 0 ) {

            s->status = PARA_STS_BUSY;

            s->status |= PARA_STS_ACK;

            s->status |= PARA_STS_ONLINE;

            s->status |= PARA_STS_ERROR;

        }

        else if (val & PARA_CTR_SELECT) {

            if (val & PARA_CTR_STROBE) {

                s->status &= ~PARA_STS_BUSY;

                if ((s->control & PARA_CTR_STROBE) == 0)

                    qemu_chr_fe_write(s->chr, &s->dataw, 1);

            } else {

                if (s->control & PARA_CTR_INTEN) {

                    s->irq_pending = 1;

                }

            }

        }

        parallel_update_irq(s);

        s->control = val;

        break;

    }

}

                    qemu_chr_fe_write(s->chr, &s->dataw, 1);
FUNC_0(void *VAR_0, uint32_t VAR_1, uint32_t VAR_2)

{

    ParallelState *s = VAR_0;



    pdebug("write VAR_1=0x%02x VAR_2=0x%02x\n", VAR_1, VAR_2);



    VAR_1 &= 7;

    switch(VAR_1) {

    case PARA_REG_DATA:

        s->dataw = VAR_2;

        parallel_update_irq(s);

        break;

    case PARA_REG_CTR:

        VAR_2 |= 0xc0;

        if ((VAR_2 & PARA_CTR_INIT) == 0 ) {

            s->status = PARA_STS_BUSY;

            s->status |= PARA_STS_ACK;

            s->status |= PARA_STS_ONLINE;

            s->status |= PARA_STS_ERROR;

        }

        else if (VAR_2 & PARA_CTR_SELECT) {

            if (VAR_2 & PARA_CTR_STROBE) {

                s->status &= ~PARA_STS_BUSY;

                if ((s->control & PARA_CTR_STROBE) == 0)

                    qemu_chr_fe_write(s->chr, &s->dataw, 1);

            } else {

                if (s->control & PARA_CTR_INTEN) {

                    s->irq_pending = 1;

                }

            }

        }

        parallel_update_irq(s);

        s->control = VAR_2;

        break;

    }

}

FUNC_0(void *VAR_0, uint32_t VAR_1, uint32_t VAR_2)
{ ParallelState *s = VAR_0; pdebug("write VAR_1=0x%02x VAR_2=0x%02x\n", VAR_1, VAR_2); VAR_1 &= 7; switch(VAR_1) { case PARA_REG_DATA:
s->dataw = VAR_2; parallel_update_irq(s); break; case PARA_REG_CTR:
VAR_2 |= 0xc0; if ((VAR_2 & PARA_CTR_INIT) == 0 ) { s->status = PARA_STS_BUSY; s->status |= PARA_STS_ACK; s->status |= PARA_STS_ONLINE; s->status |= PARA_STS_ERROR; } else if (VAR_2 & PARA_CTR_SELECT) { if (VAR_2 & PARA_CTR_STROBE) { s->status &= ~PARA_STS_BUSY; if ((s->control & PARA_CTR_STROBE) == 0)
qemu_chr_fe_write(s->chr, &s->dataw, 1); } else { if (s->control & PARA_CTR_INTEN) { s->irq_pending = 1; } } } parallel_update_irq(s); s->control = VAR_2; break; } }