이번에 알아볼것은 인터럽트 핸들러입니다.
단순하게 말하자면 급하다고 신호를 보내는 녀석을 실행시키게 컨트롤해주는 것입니다.
다음 표를 보면서 설명하겠습니다.
|
1 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
|
2 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
|
3 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
|
4 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
|
출력 |
3 |
4 |
2 |
1 |
0 |
4 |
1 |
우선 0일경우에는 급하지 않다는 신호로 보시면 되고 1일경우 급하다는 신호로 보시면 됩니다.
처음 시작부분에서 3번째신호만이 1이기 때문에 3이 출력됩니다.
그 다음 출력에서는 4가 1이기때문에 4가 출력됩니다.
그 다음부분 또한 2번째 신호가 1이기때문에 2가 출력됩니다.
그 다음 부분은 1번째 신호와 2번째 신호가 둘다 1이 출력되었을 경우의 상황입니다.
이럴때, 즉 2개이상의 신호가 1일경우 이전신호가 1이 아닐경우의 값을 출력합니다.
따라서 2번째 신호는 이전 신호가 1이였기때문에 1번째 신호가 출력됩니다.
그 다음 부분은 1번쨰 신호만 1이지만 1번쨰 신호는 이전에 1이였기때문에 0을 출력합니다.(0-> 변동사항이 없다로 보시면 됩니다.)
그 다음 부분은 4번째만 1이기떄문에 4가 출력됩니다.
마지막 부분은 1번째만 1이기때문에 1이 출력됩니다.
결국 출력되는 값은 0에서 1올 바뀌는 입력값이 출력되는 것입니다.
저의 허접한 알고리즘 형태로 설명을 드리겠습니다.
우선 첫번쨰 입력에 대해서 입력값을 받습니다.
0을 입력 받았을 경우 0을 출력합니다.
1을 입력받았을경우 A와 1을 더한 값이 1인지 확인합니다.
1일경우 SUM에 1을 더합니다.
1이아닐경우(이때는 A에 1이상의 값이 존재하기에 2이상의 값이 나오게 됩니다.) SUM에 0을 더합니다.
A가 1이고 입력이 0일때에는 입력이 0이기 때문에 출력이 0이 될수밖에없고,
A가 1이고 입력이 1일때에는 A+1의 값이 2이기때문에 출력이 0이 될수밖에 없기 때문입니다.
이 방법을 모든 입력에 대해서 구합니다.
즉 SUM 에는 첫번쨰 입력부터 N번째 입력에 대한 조건 결과 값의 합이 쌓이게 되는겁니다.
이후 SUM을 출력하면 몇번째 입력에서 인터럽트가 발생되었는지 확인 할 수 있게 됩니다.
코드에대해서 설명을 드리자면
1번에 보이는 4개의 코드는 모두 같은 코드입니다.
1. 입력값을 받고 그 값을 acc에 저장합니다.
그 후 0인지 확인을 하여 0이면 0을 출력하고 acc값을 bak에 저장합니다.
0이 아닐경우 swp으로 bak값을 불러온 후 0인지 확인하여 0이면 1을 출력 후 1을 bak에 저장하고 1이면 acc값을 bak에 저장합니다.
경우는 총 4가지가 있습니다.
0 -> 0 : 0 출력 0 저장
0 -> 1 : 1 출력 1 저장
1 -> 0 : 0 출력 0 저장
1 -> 1 : 0 출력 1 저장
2번의 경우 1번에서 출력한 값들을 모두 합하는 구간입니다.
'게임 > TIS-100' 카테고리의 다른 글
| [스팀게임]TIS-100 SEQUENCE PEAK DETECTOR (0) | 2018.04.23 |
|---|---|
| [스팀게임]TIS-100 SIGNAL PATTERN DETECTOR (0) | 2018.04.22 |
| [스팀게임]TIS-100 SIGNAL EDGE DETECTOR (0) | 2018.04.20 |
| [스팀게임]TIS-100 SEQUENCE COUNTER (0) | 2018.01.10 |
| [스팀게임]TIS-100 SEQUENCE GENERATOR (시퀀스 발생기) (0) | 2018.01.08 |