Anuncios Google

Como manejar IRQ's en C

Necesito una ayuda. Estoy tratando de manejar los IRQ's en un programa(se ejecuta directamente sobre el Hardware)y necesito manejar el IRQ del teclado y recibir los datos de el, pero en C, ¿alguna idea?

He visto varios ejemplos en ensamblador, pero no los entiendo del todo y no se que IRQ maneja(estoy buscando manejar el IRQ1, Interruptor 09)y ademas no consigo entender como sabe que teclas se pulsan...

 

Gracias de antemano



Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de pspgorrister

Yo no conozco ninguna forma

Yo no conozco ninguna forma de hacer eso sin usar ensamblador (asm), más que nada porque las interrupciones funcionan con los registros específicos del procesador, y para eso hay que usar asm (si no sabes que es un registro del micro, mejor olvidate del asundo :D).

Puedes incrustar intrucciones asm en C, mediante la directiva "asm", "__asm__" o también "__asm". No es un estándar de C y cada compilador tiene el suyo propio, pero aún así, no dejan de ser instrucciones en asm puro y duro ;-).

Aquí tengo un texto, que te podrá ser útil de unos apuntes que tenía por ahí (ya tienen tiempo):

INT 09 C - IRQ1 - KEYBOARD DATA READY
Desc:	this interrupt is generated when data is received from the keyboard.
	  This is normally a scan code (from either a keypress *or* a key
	  release), but may also be an ACK or NAK of a command on AT-class
	  keyboards.
Notes:	this IRQ may be masked by setting bit 1 on I/O port 21h
	if the BIOS supports an enhanced (101/102-key) keyboard, it calls
	  INT 15/AH=4Fh after reading the scan code (see #00006) from the
	  keyboard and before further processing; all further processing uses
	  the scan code returned from INT 15/AH=4Fh
	the default interrupt handler is at F000h:E987h in 100%-compatible
	  BIOSes
	the interrupt handler performs the following actions for certain
	  special keystrokes:
	    Ctrl-Break	 clear keyboard buffer, place word 0000h in buffer,
			 invoke INT 1B, and set flag at 0040h:0071h
	    SysReq	 invoke INT 15/AH=85h (SysReq is often labeled SysRq)
	    Ctrl-Numlock place system in a tight wait loop until next INT 09
	    Ctrl-Alt-Del jump to BIOS startup code (either F000h:FFF0h or the
			   destination of the jump at that address)
	    Shift-PrtSc	 invoke INT 05
	    Ctrl-Alt-Plus (HP Vectra) enable keyclick
	    Ctrl-Alt-Plus (many clones) set clock speed to high
	    Ctrl-Alt-Minus (HP Vectra) reduce keyclick volume
	    Ctrl-Alt-Minus (many clones) set clock speed to low
	    Ctrl-Alt-SysReq (HP Vectra) generate hard reset
	    Ctrl-Alt-S	(many clones) run BIOS setup program
	    Ctrl-Alt-Esc (many clones) run BIOS setup program
	    Ctrl-Alt-Ins (many clones) run BIOS setup program
	    Ctrl-Alt-LeftShift-GrayMinus (some clones) turn off system cache
	    Ctrl-Alt-LeftShift-GrayPlus (some clones) turn on system cache
	DR DOS hooks this interrupt to control the cursor shape (underscore/
	  half block) for overwrite/insert mode
	DR Multiuser DOS hooks this interrupt for cursor shape control and to
	  control whether Ctrl-Alt-Del reboots the current session or the
	  entire system
SeeAlso: INT 05"PRINT SCREEN",INT 0B"HP 95LX",INT 15/AH=4Fh,INT 15/AH=85h
SeeAlso: INT 16/AH=00h,INT 16/AH=10h,INT 1B,INT 2F/AX=A901h,INT 4A/AH=00h"TI"
SeeAlso: INT 51"DESQview",INT 59"DoubleDOS",INT 79"GO32"
 
(Table 00006)
Values for keyboard make/break (scan) code:
 01h	Esc		 31h	N
 02h	1 !		 32h	M
 03h	2 @		 33h	, <		 63h	F16
 04h	3 #		 34h	. >		 64h	F17
 05h	4 $		 35h	/ ?		 65h	F18
 06h	5 %		 36h	Right Shift	 66h	F19
 07h	6 ^		 37h	Grey*		 67h	F20
 08h	7 &		 38h	Alt		 68h	F21 (Fn) [*]
 09h	8 *		 39h	SpaceBar	 69h	F22
 0Ah	9 (		 3Ah	CapsLock	 6Ah	F23
 0Bh	0 )		 3Bh	F1		 6Bh	F24
 0Ch	- _		 3Ch	F2		 6Ch	--
 0Dh	= +		 3Dh	F3		 6Dh	EraseEOF
 0Eh	Backspace	 3Eh	F4
 0Fh	Tab		 3Fh	F5		 6Fh	Copy/Play
 10h	Q		 40h	F6
 11h	W		 41h	F7
 12h	E		 42h	F8		 72h	CrSel
 13h	R		 43h	F9		 73h	<delta> [*]
 14h	T		 44h	F10		 74h	ExSel
 15h	Y		 45h	NumLock		 75h	--
 16h	U		 46h	ScrollLock	 76h	Clear
 17h	I		 47h	Home		 77h	[Note2] Joyst But1
 18h	O		 48h	UpArrow		 78h	[Note2] Joyst But2
 19h	P		 49h	PgUp		 79h	[Note2] Joyst Right
 1Ah	[ {		 4Ah	Grey-		 7Ah	[Note2] Joyst Left
 1Bh	] }		 4Bh	LeftArrow	 7Bh	[Note2] Joyst Up
 1Ch	Enter		 4Ch	Keypad 5	 7Ch	[Note2] Joyst Down
 1Dh	Ctrl		 4Dh	RightArrow	 7Dh	[Note2] right mouse
 1Eh	A		 4Eh	Grey+		 7Eh	[Note2] left mouse
 1Fh	S		 4Fh	End
 20h	D		 50h	DownArrow
 21h	F		 51h	PgDn
 22h	G		 52h	Ins
 23h	H		 53h	Del
 24h	J		 54h	SysReq		---non-key codes---
 25h	K		 55h	[Note1] F11	 00h	kbd buffer full
 26h	L		 56h	left \| (102-key)
 27h	; :		 57h	F11		 AAh	self-test complete
 28h	' "		 58h	F12		 E0h	prefix code
 29h	` ~		 59h	[Note1] F15	 E1h	prefix code
 2Ah	Left Shift	 5Ah	PA1		 EEh	ECHO
 2Bh	\ |		 5Bh	F13 (LWin)	 F0h	prefix code (key break)
 2Ch	Z		 5Ch	F14 (RWin)	 FAh	ACK
 2Dh	X		 5Dh	F15 (Menu)	 FCh	diag failure (MF-kbd)
 2Eh	C					 FDh	diag failure (AT-kbd)
 2Fh	V					 FEh	RESEND
 30h	B					 FFh	kbd error/buffer full
Notes:	scan codes 56h-E1h are only available on the extended (101/102-key)
	  keyboard and Host Connected (122-key) keyboard; scan codes 5Bh-5Dh
	  are only available on the 122-key keyboard and the Microsoft Natural
	  Keyboard; scan codes 5Eh-76h are only available on the 122-key
	  keyboard
	in the default configuration, break codes are the make scan codes with
	  the high bit set; make codes 60h,61h,70h, etc. are not available
	  because the corresponding break codes conflict with prefix codes
	  (code 2Ah is available because the self-test result code AAh is only
	  sent on keyboard initialization).  An alternate keyboard
	  configuration can be enabled on AT and later systems with enhanced
	  keyboards, in which break codes are the same as make codes, but
	  prefixed with an F0h scan code
	prefix code E0h indicates that the following make/break code is for a
	  "gray" duplicate to a key which existed on the original PC keyboard;
	  prefix code E1h indicates that the following make code has no
	  corresponding break code (currently only the Pause key generates no
	  break code)
	the Microsoft Natural Keyboard sends make codes 5Bh, 5Ch, and 5Dh
	  (all with an E0h prefix) for the Left Windows, Right Windows, and
	  Menu keys on the bottom row
	the European "Cherry G81-3000 SAx/04" keyboard contains contacts for
	  four additional keys, which can be made available by a user
	  modification; the three new keys located directly below the cursor
	  pad's Delete, End, and PgDn keys send make codes 66h-68h (F19-F21);
	  the fourth new key, named <delta>, sends make code 73h
	the SysReq key is often labeled SysRq
	the "Accord" ergonomic keyboard with optional touchpad (no other
	  identification visible on keyboard or in owner's booklet) has an
	  additional key above the Grey- key marked with a left-pointing
	  triangle and labeled "Fn" in the owner's booklet which returns
	  scan codes E0h 68h on make and E0h E8h on break
	the "Preh Commander AT" keyboard with additional F11-F22 keys treats
	  F11-F20 as Shift-F1..Shift-F10 and F21/F22 as Ctrl-F1/Ctrl-F2; the
	  Eagle PC-2 keyboard with F11-F24 keys treated those additional keys
	  in the same way
	[Note1] the "Cherry G80-0777" keyboard has additional F11-F15 keys
	  which generate make codes 55h-59h; some other extended keyboards
	  generate codes 55h and 56h for F11 and F12, which cannot be managed
	  by standard DOS keyboard drivers
	[Note2] the Schneider/Amstrad PC1512 PC keyboards contain extra keys,
	  a mouse, and a digital joystick, which are handled like extra keys.
	  The joystick's motion scancodes are converted into standard arrow
	  keys by the BIOS, and the joystick and mouse button scan codes are
	  converted to FFFFh codes in the BIOS keyboard buffer
	  (see CMOS 15h"AMSTRAD").
	  In addition to the keys listed in the table above, there are
	    Del-> (delete forward)	70h
	    Enter			74h

 

 


LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.

Imagen de Almamu

Gracias por la documentacion,

Gracias por la documentacion, me ha servido para programar el teclado(los mapas de teclas lian lo suyo, xD).

y tambien de referencia para los IRQ. Gracias.

Al final no tuve que usar mucho ASM, lo justo para iniciarlos y recibir las interrupciones, lo demas lo hago en C, xD. Ademas tuve que adaptar la GDT y la IDT, porque daban problemas con los IRQ y el manejador de excepciones...


Imagen de Almamu

Ya he conseguido manejar mas

Ya he conseguido manejar mas o menos las IRQ's, ya no necesito la ayuda.

Imagen de P22

Una progunta

qué es eso? Lo he buscado en wikipedia pero no lo entiendo

Imagen de Almamu

La verdad es que no se

La verdad es que no se explicarme, pero lo intentare.

Cuando tu pulsas una tecla en el teclado(por ejemplo)este genera una señal que se llama IRQ(se puede llamar interrupcion de hardware o peticion de interrupcion), se podría decir que segun el hardware sirve para una cosa o para otra, en el caso del teclado es para recibir las pulsaciones de este y el numero de tecla que se ha pulsado y luego interpretarlo tu en el codigo para obtener lo que quieres. De todas formas no creo que lo entiendas con mi explicacion, busca en google IRQ solo, te saldran muchos resultados sobre las Interrupciones o IRQ's.


Imagen de P22

Y solo es con el teclado?

eso

Imagen de Almamu

No hombre, practicamente con

No hombre, practicamente con todos los dispositivos de entrada/salida, de todas formas dejo la lista que tengo yo:

line     interrupt  function
 
IRQ0      08        system timer
IRQ1      09        keyboard
IRQ2      0A        PC/XT: EGA vertical retrace or maybe available
                    PC/AT: see explanation below
IRQ3      0B        COM2 or maybe available
IRQ4      0C        COM1
IRQ5      0D        PC/XT: hard disk drive
                    PC/AT: LPT2 or maybe available
IRQ6      0E        floppy disk drive
IRQ7      0F        LPT1
IRQ8      70        PC/AT: CMOS Real Time Clock
IRQ9      71        PC/AT: see explanation below
IRQ10     72        PC/AT: probably available
IRQ11     73        PC/AT: probably available
IRQ12     74        PC/AT: probably available
                    PS/2: mouse
IRQ13     75        PC/AT: numeric coprocessor
IRQ14     76        PC/AT: hard disk drive
IRQ15     77        PC/AT: probably available


Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.