This repository has been archived on 2025-10-07. You can view files and clone it, but cannot push or open issues or pull requests.
Files
chibi-pc09/emu/z80pack-1.9/z80sim/simint.c
Amber 783d32a495 copy all local files to repo
cp/m files, sprites, circuit design
2020-05-15 09:07:45 -04:00

91 lines
1.9 KiB
C

/*
* Z80SIM - a Z80-CPU simulator
*
* Copyright (C) 1987-2006 by Udo Munk
*
* History:
* 28-SEP-87 Development on TARGON/35 with AT&T Unix System V.3
* 11-JAN-89 Release 1.1
* 08-FEB-89 Release 1.2
* 13-MAR-89 Release 1.3
* 09-FEB-90 Release 1.4 Ported to TARGON/31 M10/30
* 20-DEC-90 Release 1.5 Ported to COHERENT 3.0
* 10-JUN-92 Release 1.6 long casting problem solved with COHERENT 3.2
* and some optimization
* 25-JUN-92 Release 1.7 comments in english
* 04-OCT-06 Release 1.8 modified to compile on modern POSIX OS's
*/
/*
* This module contain the interrupt handlers for the OS:
*
* int_on() : initialize interrupt handlers
* int_off() : reset interrupts to default
* user_int() : handler for user interrupt (CNTL-C)
* quit_int() : handler for signal "quit" (CNTL-\)
* term_int() : handler for signal SIGTERM when process is killed
*/
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <termios.h>
#include <signal.h>
#include "sim.h"
#include "simglb.h"
static void user_int(int), quit_int(int), term_int(int);
extern void exit_io(void), int_off();
extern struct termios old_term;
void int_on(void)
{
static struct sigaction newact;
newact.sa_handler = user_int;
sigaction(SIGINT, &newact, NULL);
newact.sa_handler = quit_int;
sigaction(SIGQUIT, &newact, NULL);
newact.sa_handler = term_int;
sigaction(SIGTERM, &newact, NULL);
}
void int_off(void)
{
static struct sigaction newact;
newact.sa_handler = SIG_DFL;
sigaction(SIGINT, &newact, NULL);
sigaction(SIGQUIT, &newact, NULL);
sigaction(SIGTERM, &newact, NULL);
}
static void user_int(int sig)
{
#ifdef CNTL_C
cpu_error = USERINT;
cpu_state = STOPPED;
#else
cntl_c++;
#endif
}
static void quit_int(int sig)
{
#ifdef CNTL_BS
cpu_error = USERINT;
cpu_state = STOPPED;
#else
cntl_bs++;
#endif
}
static void term_int(int sig)
{
exit_io();
int_off();
tcsetattr(0, TCSADRAIN, &old_term);
puts("\nKilled by user");
exit(0);
}