summaryrefslogtreecommitdiff
path: root/reference/C/CONTRIB/SNIP/cbtrap.asm
diff options
context:
space:
mode:
Diffstat (limited to 'reference/C/CONTRIB/SNIP/cbtrap.asm')
-rwxr-xr-xreference/C/CONTRIB/SNIP/cbtrap.asm63
1 files changed, 63 insertions, 0 deletions
diff --git a/reference/C/CONTRIB/SNIP/cbtrap.asm b/reference/C/CONTRIB/SNIP/cbtrap.asm
new file mode 100755
index 0000000..1a9662e
--- /dev/null
+++ b/reference/C/CONTRIB/SNIP/cbtrap.asm
@@ -0,0 +1,63 @@
+ PAGE ,132
+
+; Install a custom Interrupt 1b (Ctrl-Break exception) handler
+;
+; Public domain by Bob Stout
+;
+; Requires MASM 5.1 or later or equivalent
+;
+; Assemble with: MASM /Mx /z ...
+; TASM /jMASM /mx /z ...
+
+% .MODEL memodel,C ;Add model support via command
+ ;line macros, e.g.
+ ;MASM /Dmemodel=LARGE
+
+ .DATA?
+_origvec dd ?
+
+ .DATA
+
+ public cbrcvd
+
+cbrcvd dw 0
+
+ .CODE
+
+;
+; This is our actual ISR
+;
+myint1b:
+ mov ax,-1
+ mov cbrcvd,ax
+ iret
+
+;
+; Call this to install our ISR
+;
+ins1b PROC USES AX BX DS ES
+ mov ax,351bh ;get old vector...
+ int 21h
+ mov word PTR _origvec,bx
+ mov word PTR _origvec+2,es ;...and save it
+
+ push cs ;get myint1b segment in DS
+ pop ds
+ mov dx, OFFSET myint1b ;install myint1b in int 1bh
+ mov ax,251bh
+ int 21h
+ ret
+ins1b ENDP
+
+;
+; Call this to uninstall our ISR
+;
+redo1b PROC USES AX BX DS
+ mov dx, word PTR _origvec ;restore original vector
+ mov ds, word PTR _origvec+2
+ mov ax,251bh
+ int 21h
+ ret
+redo1b ENDP
+
+ end