From: Alan Cox Date: Fri, 25 May 2018 21:30:16 +0000 (+0100) Subject: trs80m1: fix interrupt handling X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=32131ed0917cfbaedcc560842dd7b381eba32594;p=FUZIX.git trs80m1: fix interrupt handling --- diff --git a/Kernel/platform-trs80m1/main.c b/Kernel/platform-trs80m1/main.c index 75d3c0c5..668e3267 100644 --- a/Kernel/platform-trs80m1/main.c +++ b/Kernel/platform-trs80m1/main.c @@ -29,20 +29,28 @@ uint8_t platform_param(char *p) return 0; } +/* Work around SDCC bugs */ +uint8_t sdcc_bug_2753(uint8_t v) __z88dk_fastcall +{ + return v; +} + +/* We assign these to dummy to deal with what I think is an SDCC bug */ void platform_interrupt(void) { uint8_t irq = *((volatile uint8_t *)0x37E0); uint8_t dummy; + + tty_interrupt(); + kbd_interrupt(); + /* FIXME: do we care about floppy interrupts */ - if (irq & 0x80) - *((volatile uint8_t *)0x37EC); - else { - tty_interrupt(); - kbd_interrupt(); - if (irq & 0x80) { /* FIXME??? */ - timer_interrupt(); - *((volatile uint8_t *)0x37E0); /* Ack the timer */ - } + + if (irq & 0x40) + dummy = sdcc_bug_2753(*((volatile uint8_t *)0x37EC)); + if (irq & 0x80) { /* FIXME??? */ + timer_interrupt(); + dummy = sdcc_bug_2753(*((volatile uint8_t *)0x37E0)); /* Ack the timer */ } }