Well... I did this:
Code
#define MC1000_NE555_FREQ       (60) /* Hz - calculated from the 555 timer */
#define MC1000_NE555_DUTY_CYCLE	(.16666) /* % */

static TIMER_DEVICE_CALLBACK( ne555_tick )
{
    mc1000_state *state = timer.machine->driver_data<mc1000_state>();

    // (state->ne555_int not needed anymore and can be done with?)
    state->ne555_int = param;

    cputag_set_input_line(timer.machine, Z80_TAG, INPUT_LINE_IRQ0, param);
}
...and...
Code
static MACHINE_CONFIG_START( mc1000, mc1000_state )

    [...]

    /* timers */
    MDRV_TIMER_ADD_PERIODIC("ne555assert", ne555_tick, HZ(MC1000_NE555_FREQ))
    MDRV_TIMER_PARAM(ASSERT_LINE)

    MDRV_TIMER_ADD_PERIODIC("ne555clear", ne555_tick, HZ(MC1000_NE555_FREQ))
    MDRV_TIMER_START_DELAY(HZ(MC1000_NE555_FREQ * 100 / MC1000_NE555_DUTY_CYCLE))
    MDRV_TIMER_PARAM(CLEAR_LINE)

    [...]

MACHINE_CONFIG_END
Now, when I run that machine code program I made before I get:
Code
CALL 16128
..................1.............
.................1..............
................1...............
...............1................
..............1.................
.............1..................
............1...................
...........1....................
........
OK
Compare this to the real MC-1000 output:
Code
CALL 16128
...............1.....1.....1....
1........1.....1.....1.....1....
1.......1..............1....1...
2.1.....1.....1.....1......1....
1...............1...............
2......1.....1.............1....
2.........1.....1.....1.....1...
1........1.....1.....1.....1....
1.......1......1.....1.....1....
1.......
OK
Now... what stands for the difference? Is the emulated Z80 clock faster than the original machine (so that the program can print more dots before being interrupted by NE555)? Doesn't NE555 really produce interrupts at 60MHz? Or what? (And how could I test the hypotheses?)

Last edited by Ensjo; 10/29/10 04:28 PM.