Interrupt system implemented, some new programs.
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
; Tests a hardware interrupt delivered to a handler named in the Vector Segment.
|
||||
;
|
||||
; A device is named by the port it is plugged into, because that is what decides which
|
||||
; vector it arrives through. The test device on port 0x10 puts its line up when anything
|
||||
; is written to it.
|
||||
;
|
||||
; The device is asked for attention while the Interrupt Flag is down, so the line waits.
|
||||
; SIF lets it through, and the handler runs before the next instruction does.
|
||||
;
|
||||
; Correct output is:
|
||||
; O printed with the line up and the flag down
|
||||
; K printed by the handler
|
||||
; ! printed after RETI came back
|
||||
|
||||
#Program
|
||||
|
||||
start:
|
||||
CIF ; Hold devices off.
|
||||
INIA 0d1
|
||||
OUTA 0x10 ; The device asks. Its line goes up and stays up.
|
||||
|
||||
INIA 0d79 ; 'O'
|
||||
OUTA 0x00
|
||||
INIA 0x0A
|
||||
OUTA 0x00
|
||||
|
||||
SIF ; Let it through. It is answered on the very next step.
|
||||
|
||||
INIA 0d33 ; '!'. Reached only because RETI came back here.
|
||||
OUTA 0x00
|
||||
INIA 0x0A
|
||||
OUTA 0x00
|
||||
HALT
|
||||
|
||||
deviceHandler:
|
||||
INIA 0d75 ; 'K'
|
||||
OUTA 0x00
|
||||
INIA 0x0A
|
||||
OUTA 0x00
|
||||
RETI
|
||||
|
||||
#Vectors
|
||||
|
||||
Device 0x10 deviceHandler
|
||||
Reference in New Issue
Block a user