Source file: /~heha/basteln/PC/hh_vts/hh_vts.zip/VTD_LPT/VL.EXE

MZ`
>
@Bo|4Y^cty~7@Ier'6CW	{${7{;{a|BJBJË$BJ$t	u(tVň>>É*Gu~gr^;>
ut	@>
uÉ>,
U1F<w`t$g栰b U1F<w<r`5!V%!“U1Nwu! ! U1Nwu!!U16
;6ut~~gr^6
&y&PmXCBPSQRVWUn>u9P_^ZY[XU1f
~0@u?9tt0t`tU҉1ľWUc?u@U]U1gg:<sРg$P6P6g6~g<STAT VSY LA LC M  Z Text     (ESC zum Beenden mit MODE CO80)<      '(
{U1hw{gs$g:<gg:<PPW~ggPPaasРg
g(iWWjpiWRWjpggWu~jgP{g0%Ƞg0%Рg0%gg0%ؠg0%Ƞg0%Рg0%ËРg0%£gg1gggg$g>g s5g<r<wg<r<w>g|>ggg >gt;g< r<?wg0qg<`r<wg0`qgog<@uga<[ugV<\ugK<]ug@<`ug5<{ug*<|ug<}ug<~ug	<ugggqg>g'tg<r	<w{iW01RPjg01RPjg0RPjg$01RPjgRPjgRPjgWj)p{gg0q;g}g/{ub{gg<u{<ujw{,sРg$PP6g6~gigg:<sРgg1U]U(hW hWdiW
iWi]˴<t
<vU2$gg3ggg@gPl&&:t&<ҹ7g8%!ÎP&&<t<rPWX
t-J0@*u&, %ôP0X
u<wʴvgggg3ggPn؀>gtgXπ>gugt^C6G#mgg6W
6w6O6o:w':w#xx:gw:.gwggA>ggg6g%>gʊg˸PX>ggg:u2ˋ6W6wgr:gw6gr	:6gw*g*gˋ6Gt$&gpg6G$&gg&gˀgˠggˋ6OP3&g3-r&:tË6_4;sauaCBBa$aˀ>gutˠgg
u2
u
&g
uˋ6EEE]EgME06}ˁ}t
E׸L؉EM]MMM3U~&UJJ&u&}3g\<t4<t0<tDI<t'<t#<t7<tF<
tO< r;t&C;vt }K;t&< rjC둀>gt&C
N&
CC~3&E&]
]6&M&)M&}>gu&G33

SQRPrX<t*<t-<
t3<
t5	g2RcZ:gv gO:gt
	g-ZY[:6gvQR>gggZYô2
2PPڋ&<t!<t,<
t5<
t9G:gv<ng,bQRZYS:gtFy>gG0PP&J2‹ȋcBJB;tcQRW+P&J2c>IVuTg>g
tutë笫_ZYVWU]_^nڌD3£$(0D&,68j9.5!E%!#%!$%!?%!hPPcPNiPPcP:3[SYt@SYt@X3Xǖ9sWT!NX[YZ^_]ϸYPD hooks three I/O ports.
;
	movzx	edx, WORD PTR [VPD_BIOS_Base_Addr][ecx*2]
	test	edx, edx			; Q: Is there a printer here?
	jz	SHORT VPD_Init_Next_LPT 	;    N: Test next one
	mov	[esi.VPD_IO_Base], edx		;    Y: Save port base addr
	inc	edi				; One more LPT virtualized
	test	dh, dh				; Q: Hardware port? (> 0FFh)
	jz	SHORT VPD_Init_Next_LPT 	;    N: Network printer!
	cmp	esi, [VPD_Sgrab_LPT]		;    Y: Q: SGRAB using it?
	je	SHORT VPD_Init_Next_LPT 	;	   Y: Don't trap I/O
						;	   N: Hook I/O ports
;
;   Some networks place the I/O address for LPT1 into the LPT2 and LPT3
;   base address fields.  Make sure that hasn't happened.
;
	cmp	esi, OFFSET32 VPD_LPT1
	je	SHORT VPD_Hardware_Port
	cmp	[VPD_LPT1.VPD_IO_Base], edx
	je	SHORT VPD_Duplicate_IO_Port
	cmp	esi, OFFSET32 VPD_LPT2
	je	SHORT VPD_Hardware_Port
	cmp	[VPD_LPT2.VPD_IO_Base], edx
	jne	SHORT VPD_Hardware_Port
	.ERRNZ VPD_Max_Virt_LPTs - 3

VPD_Duplicate_IO_Port:				; I/O base address duplicated
	mov	[esi.VPD_IO_Base], 1		; Set IO base to 1 to indicate
	jmp	SHORT VPD_Init_Next_LPT 	; a network printer port


;
;   This is a physical printer port.  Hook the I/O ports starting with
;   port # in EDX.
;
VPD_Hardware_Port:
	push	ecx				; Save loop counter
	push	esi				; and data structure pointer

	mov	esi, [esi.VPD_Proc_Addr]	; ESI -> Procedure to call
	mov	ecx, VPD_Num_Ports_Per_LPT	; ECX = # of ports to hook
VPD_ITrap_Loop:
	VMMcall Install_IO_Handler		; Install port hook
	inc	edx				; EDX = Next LPT port to hook
	loopd	VPD_ITrap_Loop			; Loop until all hooked

	pop	esi				; Restore
	pop	ecx

VPD_Init_Next_LPT:
	add	esi, SIZE VPD_Struc		; ESI -> Next data structure
	inc	ecx				; Bump counter
	cmp	ecx, VPD_Max_Virt_LPTs		; Q: More LPTs to init?
	jb	VPD_Init_Loop			;    Y: Loop

;
;   All printer ports hooked.  At this point we check to see if there are
;   any printers (network or hardware) connected.  If there are none then
;   VPD_Device_Init will return with carry SET to indicate that it should
;   never be called again.  If any printers do exist then VPD hooks IRQ 7
;   hardware interrupt an
Detected encoding: UTF-80