🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by brown Thu, 30 Oct 1986 19:46
Hercules graphics card programs
#8627
Author: brown
Date: Thu, 30 Oct 1986 19:46
680 lines
22718 bytes
Quite awhile ago I received from Hercules, three programs to use with
their graphics cards.  Maybe some of you do programming with the graphics
card and would like a little hint.

The files are in shar format and also remove the .signature at the end.

Mike Brown

***** CUT HERE *****
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
#	check.asm
#	herc.asm
#	herc.doc
#	modetest.asm
# This archive created: Thu Oct 30 13:38:58 1986
# By:	Mr. Video ()
export PATH; PATH=/bin:$PATH
echo shar: extracting "'check.asm'" '(1132 characters)'
if test -f 'check.asm'
then
	echo shar: will not over-write existing file "'check.asm'"
else
sed 's/^	X//' << \SHAR_EOF > 'check.asm'
	X;- - - - - - - - - - - - - - - - - 
	X;	CHECK.ASM
	X;
	X;  Will perform a test to see if
	X;  a Hercules Graphics Card is
	X;  present.
	X;
	X;- - - - - - - - - - - - - - - - - 
	X
	Xstatus_port	equ	03BAh		; Display Status Port - Bit 7
	X					; changes on vertical retrace.
	Xdseg	segment
	X	msg1	db	0dh,0ah,'Yes, this is a Hercules Graphics Card.$'
	X	msg2	db	0dh,0ah,'Hey, this is not a Hercules Graphics Card!$'
	Xdseg	ends
	X
	Xstack	segment	STACK
	X	dw	40 dup (?)
	Xstack	ends
	X
	Xcheck	segment	
	X	assume	cs:check,ds:dseg,ss:stack
	X
	Xstart	proc	far
	X
	X	push	ds
	X	xor	ax,ax
	X	push	ax
	X
	X	mov	ax,dseg
	X	mov	ds,ax
	X
	X	mov	dx,status_port		; Take a reading
	X	in	al,dx
	X	and	al,80h
	X	mov	ah,al			; Save bit 7 for test
	X
	X	mov	cx,8000h
	Xexamine:
	X	in	al,dx			; Take another reading
	X	and	al,80h			; Isolate bit 7
	X	cmp	al,ah
	X	jne	hercules		; If bit 7 changes then it
	X	loop	examine			; is a Hercules Graphics Card
	X
	X	jmp	other			; After this long, it must be
	X					; something else.
	X
	Xhercules:
	X	mov	dx,offset msg1		; Print appropriate message
	X	mov	ah,9
	X	int	21h
	X
	X	jmp	exit
	X
	Xother:
	X	mov	dx,offset msg2		; Print appropriate message
	X	mov	ah,9
	X	int	21h
	X
	Xexit:
	X	ret
	X
	Xstart	endp
	Xcheck	ends
	X	end start
	X
	X
SHAR_EOF
if test 1132 -ne "`wc -c < 'check.asm'`"
then
	echo shar: error transmitting "'check.asm'" '(should have been 1132 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'herc.asm'" '(11843 characters)'
if test -f 'herc.asm'
then
	echo shar: will not over-write existing file "'herc.asm'"
else
sed 's/^	X//' << \SHAR_EOF > 'herc.asm'
	X;   HERC.ASM version 1.11B by Bela Lubkin 3/4/85
	X;   Copyright (C) 1985, Borland International
	X;
	X;   This program may be freely distributed as long as Borland copyright
	X; notices are retained both in source and object files.
	X;
	X;   Enhancements from version 1.00A:
	X; (1) HERC will no longer allow itself to be run twice, and it will not load
	X; if SideKick is present (therefore it must be loaded before SK).
	X; (2) Alt + left SHIFT + 'H' turns on Hercules graphics mode, page 1.  (G
	X; turns on page 0).  AutoCAD is known to use page 1.  If turning on page 0
	X; gives junk on the screen, try page 1.
	X;
	X;   When this program is run, it checks the system for the presence of a
	X; Hercules graphics card.  If there is one present, it installs a resident
	X; routine that will turn Hercules graphics mode on (page 0) whenever you type
	X; ALT + left SHIFT + 'G'.  Typing Alt + left SHIFT + 'H' will turn on Hercules
	X; graphics mode page 1 (AutoCAD uses this).  Finally, Alt + left SHIFT + 'T'
	X; will turn graphics mode off (turn text mode on).
	X;
	X;   The main use for this is to turn graphics mode back on after bringing
	X; SideKick up inside a graphics program.  For instance, if you are using MS
	X; WORD on the HGC, and you bring SK up, the screen is left in text mode when
	X; you exit.  You then type ALT-left SHIFT-G and WORD is back!
	X;
	X;   There are three error messages that can be printed when HERC is run:
	X;
	X; "Hercules graphics card not detected in system" means that HERC cannot find
	X; a Hercules Graphics card in your computer.  If you have an HGC and it is not
	X; detected, please report to me through the Borland SIG on CompuServe (GO
	X; BOR), or through Borland International technical support at (408) 438-8400.
	X;
	X; "HERC must be loaded before SideKick" will be printed if HERC detects that
	X; SideKick has already been loaded into your system.  HERC must be run before
	X; SideKick for proper operation.  (Almost all other resident programs must
	X; also be run before SideKick).  Note that if SideKick has been loaded, HERC
	X; will no longer be able to detect its own presence in the system, so you will
	X; get this message if both programs are already in the system.
	X;
	X; "HERC has already been loaded - type Alt + Left shift + G, H or T" will be
	X; printed if you try to run HERC after it has already been loaded into your
	X; system.  This is to prevent the instant crash that would happen if you
	X; loaded HERC twice.
	X;
	X;
	X; To assemble this:
	X; MASM HERC; (or ASM)
	X; LINK HERC;
	X; EXE2BIN HERC HERC.COM
	X;
	X
	XTerminate = 20H       ; Terminate interrupt
	XMsDos = 21H           ; MS-DOS interrupt
	XTermResident = 27H    ; Terminate but stay resident interrupt
	X
	XDOSPrint = 9          ; INT 21 code 9, print string
	X
	XCR = 13
	XLF = 10
	X
	XBIOSStuff = 0040H     ; Segment value for BIOS parameters
	XShiftFlags = 0017H    ; Offset value for BIOS shift flags state
	X
	XHercConfig = 03BFH    ; Hercules configuration port
	XHercStatus = 03BAH    ; Hercules status port
	XHercControl = 03B8H   ; Hercules control port
	XHercIndex = 03B4H     ; Hercules 6845 index port
	XHercValue = 03B5H     ; Hercules 6845 value port (label not used)
	XHercScreenEnable = 8  ; Bit to send to control port to enable video
	X
	XAlt = 08H             ; Shift key flag bit for ALT key
	XCtrl = 04H            ; Shift key flag bit for CTRL key
	XLShift = 02H          ; Shift key flag bit for left SHIFT key
	XRShift = 01H          ; Shift key flag bit for right SHIFT key
	X
	XInvoke = Alt+LShift   ; Invoking sequence is ALT-left SHIFT
	X
	XKbdIn = 60H           ; Keyboard scan code input port
	XKbdCtrl = 61H         ; Keyboard control port
	XScanCodeG = 22H       ; Scan code for 'g' key
	XScanCodeH = 23H       ; Scan code for 'h' key
	XScanCodeT = 14H       ; Scan code for 't' key
	X
	XEndOfINT = 20H        ; Interrupt controller end-of-interrupt signal
	XINTCtrl = 20H         ; Interrupt controller port
	X
	XF = 0FFH              ; Just to save typing...
	X
	XHerculesSideKickFix Segment
	XAssume CS:HerculesSideKickFix, DS:Nothing, ES:Nothing
	X
	X        ORG     0100H
	X
	XHercFix:JMP     Initialize
	XHercModes: DB 32,61H,50H,52H,0FH,19H,06H,19H,19H,02H,0DH,0BH,0CH
	X           DB 2, 35H,2DH,2EH,07H,5BH,02H,57H,57H,02H,03H,00H,00H
	X
	XNoOfVals = 0CH                        ; Number of 6845 parameters
	X
	XHMode:                                ; SI=0 for text, 0DH for graphics.
	X        ADD     SI,Offset HercModes   ; SI=Offset of ModeDescriptor[Mode]
	X        MOV     DX,HercConfig         ; [DX]=Configuration port
	X        MOV     AL,1                  ; Allow graphics, page 0 only
	X        OUT     DX,AL
	X        MOV     AL,CS:[SI]            ; AL=ModeDescriptor.CRTMode
	X        MOV     DL,HercControl And F  ; [DX]=Control port
	X        OUT     DX,AL
	X        MOV     CX,0                  ; For CX:=0 To 11 Do Begin
	X        MOV     DL,HercIndex And F    ;   [DX]=Index port
	XOutLoop:MOV     AL,CL
	X        OUT     DX,AL                 ;   Select CX'th register
	X        INC     SI
	X        MOV     AL,CS:[SI]            ;   AL:=ModeDescriptor.R6845[CX]
	X        INC     DX                    ;   [DX]=Data port
	X        OUT     DX,AL
	X        DEC     DX
	X        INC     CX
	X        CMP     CL,NoOfVals
	X        JNZ     OutLoop               ; End
	X        SUB     SI,NoOfVals
	X        MOV     AL,CS:[SI]            ; AL:=ModeDecriptor.CRTMode
	X        OR      AL,HercScreenEnable   ;     Or ScreenEnable
	X        MOV     DL,HercControl And F  ; Control port
	X        OUT     DX,AL
	X        RET                           ; Routine modified from Hercules version
	X                                      ;   of Turbo Graphix Toolbox
	X
	XOldINT9:DD ?                          ; Will save old keyboard INT vector for
	X                                      ; proper keyboard interrupt processing
	X
	XID:     DB      'HCBL'
	X
	XNewINT9:PUSH    ES
	X        PUSH    AX
	X        PUSH    SI
	X        PUSHF
	X        MOV     AX,BIOSStuff
	X        MOV     ES,AX
	X        MOV     AL,ES:[ShiftFlags]    ; Get BIOS shift key state flags
	X        AND     AL,Invoke
	X        CMP     AL,Invoke             ; Both ALT and left SHIFT depressed?
	X        JNE     DoOldINT9
	X        IN      AL,KbdIn              ; Get scan code
	X        CMP     AL,ScanCodeG          ; 'G'?
	X        JE      GrafMode              ;   Yes: turn graphics on
	X        CMP     AL,ScanCodeH          ; 'H'?
	X        JE      GrafMode              ;   Yes: turn graphics on, page 1
	X        CMP     AL,ScanCodeT          ; 'T'?
	X        JNE     DoOldINT9             ;   No: pass on to former keyboard int
	X        MOV     SI,0                  ;   Yes: set text mode
	XDoMode: PUSH    DX
	X        PUSH    CX
	X        PUSH    AX
	X        CALL    HMode
	X        POP     AX
	X        CMP     AL,ScanCodeH          ; Need to set page 1?
	X        JNE     Exit
	X        MOV     AL,3
	X        MOV     DX,HercConfig
	X        OUT     DX,AL                 ; Allow graphics, both pages
	X        MOV     DL,HercControl and F
	X        MOV     AL,8AH
	X        OUT     DX,AL                 ; Set graphics mode, page 1
	X
	XExit:   IN      AL,KbdCtrl            ; Reset key ready bit... nobody sees
	X        MOV     AH,AL                 ;   key but us
	X        OR      AL,80H
	X        OUT     KbdCtrl,AL
	X        MOV     AL,AH
	X        OUT     KbdCtrl,AL
	X        MOV     AL,EndOfINT           ; Tell interrupt processor we're
	X        OUT     INTCtrl,AL            ;   (almost) done.
	X        POP     CX
	X        POP     DX
	X        POPF
	X        POP     SI
	X        POP     AX
	X        POP     ES
	X        IRET
	X
	XGrafMode:                             ; Set graphics mode
	X        MOV     SI,0DH
	X        JMP     DoMode
	X
	XDoOldINT9:
	X        POPF
	X        POP     SI
	X        POP     AX
	X        POP     ES
	X        JMP     DWord Ptr [OldINT9]   ; Key is not 't', 'g' or 'h' with Invoke
	X                                      ;   flags set, so pass on to old
	X                                      ;   keyboard handler
	X                                      ; Took me 45 minutes to figure out the
	X                                      ;   MASM syntax for what DEBUG took as
	X                                      ;   simply JMP FAR [address] !!
	X
	XInitialize:
	X        MOV     AH,9
	X        MOV     DX,Offset CopyRightMsg
	X        INT     MsDos
	X        XOR     AX,AX
	X        MOV     DS,AX
	X        LDS     DI,Dword ptr DS:[0020H] ; INT 8 vector
	X        CMP     Word ptr DS:[DI-4],'KS'
	X        JNE     CheckHERCLoaded
	X        MOV     DX,Offset SKAlreadyLoadedMSG
	X        CMP     Word ptr DS:[DI-2],'IB'
	X        JE      AbortMSG
	X
	XCheckHERCLoaded:
	X        MOV     DS,AX
	X        LDS     DI,Dword ptr DS:[0024H] ; INT 9 vector
	X        CMP     Word ptr DS:[DI-4],'CH'
	X        JNE     CheckHGC
	X        MOV     DX,Offset HERCAlreadyLoadedMSG
	X        CMP     Word ptr DS:[DI-2],'LB'
	X        JNE     CheckHGC
	X
	XAbortMSG:
	X        PUSH    CS
	X        POP     DS
	X        MOV     AH,DOSPrint
	X        INT     MsDos
	X        INT     Terminate
	X
	XNotThere:
	X        MOV     DX,Offset NotThereMsg
	X        JMP     Short AbortMSG
	X
	XCheckHGC:
	X        MOV     BX,0100H
	X        MOV     DX,HercStatus         ; Loop looking for status port bit 7 to
	X        IN      AL,DX                 ;   be on.  Herc uses it as a retrace
	X        MOV     AH,AL                 ;   indicator while IBM doesn't ever
	X        AND     AH,80H                ;   turn it on.
	XII1:    MOV     CX,0040H
	XII2:    IN      AL,DX
	X        AND     AL,80H
	X        CMP     AL,AH
	X        LOOPZ   II2
	X        JNZ     EndLoop
	X        DEC     BX
	X        JNZ     II1
	XEndLoop:JZ      NotThere              ; Not a herc if status doesn't change
	X        MOV     AX,0B000H
	X        MOV     DS,AX                 ; Need DS prefixes because of DS:Nothing
	X        MOV     BL,DS:[7FFFH]         ; Check for at least a full 32K of
	X        MOV     CL,DS:[3FFFH]         ;   memory.  (Some cards other than herc
	X        INC     Byte ptr DS:[3FFFH]   ;   do set bit 7)
	X        CMP     BL,DS:[7FFFH]
	X        MOV     DS:[3FFFH],CL         ; Restore former value
	X        JE      There
	X        MOV     DX,HercConfig         ; [DX]=Configuration port
	X        MOV     AL,1                  ; Allow graphics, page 0 only
	X        OUT     DX,AL                 ; -- in case memory test failed because
	X        MOV     BL,DS:[7FFFH]         ;    the card was in 'diagnostic' mode
	X        MOV     CL,DS:[3FFFH]
	X        INC     Byte ptr DS:[3FFFH]
	X        CMP     BL,DS:[7FFFH]
	X        MOV     DS:[3FFFH],CL
	X        JNE     NotThere              ; Not >=32K RAM: not a herc
	X
	XThere:  MOV     AX,0
	X        MOV     ES,AX
	X        MOV     BX,ES:[0024H]         ; Get current INT 9 vector
	X        MOV     CX,ES:[0026H]
	X        MOV     Word ptr [OldINT9],BX
	X        MOV     Word ptr [OldINT9+2],CX ; Save it
	X        MOV     DX,Offset NewINT9
	X        MOV     AX,2509H
	X        PUSH    CS
	X        POP     DS
	X        INT     MsDos                 ; Set INT 9 to our handler
	X        MOV     DX,Offset InstalledMSG
	X        MOV     AH,DOSPrint
	X        INT     MsDos                 ; Say we're installed
	X        MOV     DX,Offset Initialize  ; Terminate and stay resident (keep only
	X        INT     TermResident          ;   the necessary code, not this init
	X                                      ;   stuff.  Still saves a copy of the
	X                                      ;   environment + a PSP, about 1/2K)
	X
	XCopyRightMsg:
	X        DB      'HERC.COM Copyright (C) 1985, Borland International',CR,LF
	X        DB      'This program may be freely copied as long as this copyright notice is retained',CR,LF,'$'
	XNotThereMsg:
	X        DB      'Hercules graphics card not detected in system$'
	XSKAlreadyLoadedMSG:
	X        DB      'HERC must be loaded before SideKick$'
	XHERCAlreadyLoadedMSG:
	X        DB      'HERC has already been loaded - type Alt + Left shift + G, H or T$'
	XInstalledMSG:
	X        DB      'HERC version 1.11B installed.  Type Alt + Left shift + G for graphics page 0,'
	X        DB      CR,LF,'Alt + LS + H for graphics page 1, or Alt + LS + T for text.$'
	X
	XHerculesSideKickFix ENDS
	X        END     HercFix
SHAR_EOF
if test 11843 -ne "`wc -c < 'herc.asm'`"
then
	echo shar: error transmitting "'herc.asm'" '(should have been 11843 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'herc.doc'" '(782 characters)'
if test -f 'herc.doc'
then
	echo shar: will not over-write existing file "'herc.doc'"
else
sed 's/^	X//' << \SHAR_EOF > 'herc.doc'
	X  Because there is no system record of the Hercules Graphics Card's graphics
	Xmode, SideKick cannot determine the current mode of the Hercules card. As a
	Xconsequence of this, after bringing SideKick up the screen is always left in
	Xthe text mode.
	X
	X  After running HERC.COM, typing ALT-left shift-G will turn Hercules Graphics
	Xmode on.  ALT-left shift-T will turn it off (turn text mode on).  After
	Xleaving SK, if the screen is left all garbled, type ALT-left shift-G to fix
	Xit!
	X
	X  If G doesn't do the job, try ALT-ls-H, which turns on the Hercules card's
	Xsecond graphics page.  AutoCAD uses this, as do many other programs.
	X
	X  HERC should be run before SideKick, so that SideKick can be killed by typing
	XCTRL-Home CTRL-End from its main menu.
	X
	X  -  Bela Lubkin, Borland International
SHAR_EOF
if test 782 -ne "`wc -c < 'herc.doc'`"
then
	echo shar: error transmitting "'herc.doc'" '(should have been 782 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'modetest.asm'" '(4313 characters)'
if test -f 'modetest.asm'
then
	echo shar: will not over-write existing file "'modetest.asm'"
else
sed 's/^	X//' << \SHAR_EOF > 'modetest.asm'
	X
	X;HERCULES COMPUTER TECHNOLOGY
	X
	X;       This code is designed to illustrate the technique used to
	X;       dynamically sense the mode (text or graphics) of the Hercules
	X;       Graphics Card. The way that the program does this is to set the
	X;       light pen flip-flop and then read the light-pen trip address
	X;       in the 6845. A comparison of the value obtained here and a
	X;       "threshold" value reveals the current mode.
	X
	X;MODETEST.ASM - In Response to Alt-Left Shift will beep once if the HGC
	X;               is in text mode, twice if the HGC is in graphics mode.
	X;5-23-85
	X
	XKbInt	equ	9*4			;Vector location for keyboard routine
	XBIOSseg equ	0040h			;Segment value for BIOS parameters
	XShftFl	equ	0017h			;Offset for BIOS keyboard flag
	XALT	equ	8			;Bit flag for ALT key
	XLShift	equ	2			;Bit flag for Left Shift key
	XInvoke	equ	ALT+LShift		;Invoking Sequence
	XLpSet	equ	03B9h			;Set light pen address
	XLpReset equ	03BBh			;Reset light pen address
	XLpff	equ	2			;Flip-flop suitable for s/w query
	XOur6845 equ	03B4h			;6845 index register
	XOurStat equ	03BAh			;Display Status Port
	XNotVSync equ	80h			;This bit 0 during vertical
	X					; retrace
	XThreshold equ	(80*25 + 45*87)/2	;This value is the average of the
	X					;possible byte offset numbers in text
	X					;(80*25) and graphics (45*87) modes.
	X
	Xmode	segment
	X	assume	cs:mode,ds:mode,es:nothing
	X	org	100h
	X
	Xok:	jmp	loader
	X
	XErrMsg	db	0dh,0ah,'Light-Pen not operative - aborting.$'
	XKb	dd	0
	X
	Xmodetest:
	X	push	ax
	X	push	dx
	X
	X	push	es
	X	push	ds
	X
	X	push	cs
	X	pop	ds
	X
	X	mov	ax,BIOSseg
	X	mov	es,ax
	X	mov	al,es:[ShftFl]		;Get Keyboard state
	X	and	al,Invoke
	X	cmp	al,Invoke		;Is it ALT-Left Shift
	X	jne	Done			;If not, do normal INT 9
	X
	X;****************** This is the code you are interested in ******************
	X;******************            Mode Detection              ******************
	X
	X	xor	al,al
	X	mov	dx,OurStat
	Xwait1:					;test for v-sync transtition
	X	in	al,dx			
	X	test	al,NotVSync
	X	jz	wait1
	Xwait2:					
	X	in	al,dx			
	X	test	al,NotVSync
	X	jnz	wait2
	X
	X	xor	al,al			;Reset and Set Light Pen.
	X	mov	dx,LpReset
	X	out	dx,al
	X	mov	dx,LpSet
	X	out	dx,al
	X
	X	xor	bx,bx
	X
	X	mov	al,16			;Look in the 6845 for the offset into
	X	mov	dx,Our6845		; buffer when the light pen is
	X	out	dx,al			; tripped - high byte.
	X	inc	dx
	X	in	al,dx
	X	mov	bh,al
	X
	X	mov	al,17			;Get low byte of light pen
	X	mov	dx,Our6845		; trip address
	X	out	dx,al
	X	inc	dx
	X	in	al,dx
	X	mov	bl,al			;BX now contains Light Pen trip
	X					; address.
	X
	X	xor	dx,dx			;Set up dx as flag for sound routine
	X					; you don't need this.
	X
	X	cmp	bx,threshold		;If BX < threshold value - text mode.
	X	jb	sound			;Jump to what should happen for text.
	X
	X;************************* End of interesting code.*************************
	X
	X	mov	dl,01			;Flag to indicate graphics mode
	X
	Xsound:					;This code just sounds speaker
	X      	mov	al,10110110b
	X	out	43h,al
	X	mov	ax,800h
	X	out	42h,al
	X	mov	al,ah
	X	out	42h,al
	X
	X	in	al,61h
	X	mov	ah,al
	X	or	al,3
	X	out	61h,al
	X
	X	mov	cx,0ffffh
	Xpause:	loop	pause
	X	mov	al,ah
	X	out	61h,al
	X
	X	cmp	dl,1			;If graphics mode, beep again
	X	jne	done
	X
	X	dec	dl
	X
	X	mov	cx,7fffh
	Xpause1:	loop	pause1
	X	jmp	sound
	X
	Xdone:
	X	pop	ds
	X	pop	es
	X	pop	dx
	X	pop	ax
	X
	X	jmp	cs:Kb			;Original Interrupt 9 code.
	X
	Xloader:
	X	push	ds			;Set up a Far return to DS:0000
	X	xor	ax,ax
	X	push	ax
	X
	X	push	es
	X	push	si
	X	push	di
	X
	X	push	cs
	X	pop	ds			;Makes DS = CS
	X
	X;**************************** Also of interest ******************************
	X;******* Makes sure light pen is present and working before loading *********
	X
	X	mov	dx,LpSet
	X	out	dx,al
	X	mov 	dx,OurStat
	X	in	al,dx
	X	test	al,Lpff
	X	jz	exit			;If light pen stuck low, can't do
	X					;mode test - abort.
	X	mov	dx,LpReset
	X	out	dx,al
	X	mov	dx,OurStat
	X	in	al,dx
	X	test	al,Lpff
	X	jnz	exit			;If light pen stuck high, can't do
	X					;mode test - abort.
	X
	X;********************* End of minor interest section ************************
	X
	X; Save original keyboard routine
	X
	X	xor	ax,ax
	X	mov	es,ax
	X	mov	si,KbInt
	X	lea	di,Kb
	X
	X	cli
	X	mov	ax,es:[si]
	X	mov	cs:[di],ax
	X	mov	ax,es:[si+2]
	X	mov	cs:[di+2],ax
	X	sti
	X
	X; Load keyboard vector with our routine
	X
	X	mov	di,KbInt
	X	mov	ax,cs
	X	lea	si,modetest
	X	
	X	cli
	X	mov	es:[di],si
	X	mov	es:[di+2],ax
	X	sti
	X
	X	pop	di
	X	pop	si
	X	pop	es
	X
	X	pop	ax
	X	pop	ds
	X	
	X	lea	dx,loader		;DOS terminate but remain resident.
	X	int	27h
	X
	Xexit:					;Have failed to load, quit.
	X	mov	ah,9
	X	mov	dx,offset ErrMsg
	X	int	21h
	X
	X	pop	di
	X	pop	si
	X	pop	es
	X
	X	ret
	X
	Xmode	ends
	X	end	ok
	X					
SHAR_EOF
echo shar: a missing newline was added to "'modetest.asm'"
if test 4313 -ne "`wc -c < 'modetest.asm'`"
then
	echo shar: error transmitting "'modetest.asm'" '(should have been 4313 characters)'
fi
fi # end of overwriting check
#	End of shell archive
exit 0
-- 
		  ihnp4------\
		harvard-\     \
Mr. Video	   seismo!uwvax!nicmad!brown
		  topaz-/     /
		 decvax------/
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads