git-svn-id: https://spexeah.com:8443/svn/Asuro@118 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c
This commit is contained in:
		
							
								
								
									
										73
									
								
								src/drivers/isr46.pas
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								src/drivers/isr46.pas
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,73 @@ | ||||
| { ************************************************ | ||||
|   * Asuro | ||||
|   * Unit: Drivers/ISR46 | ||||
|   * Description: Primary ATA IRQ | ||||
|   ************************************************ | ||||
|   * Author: Aaron Hance | ||||
|   * Contributors:  | ||||
|   ************************************************ } | ||||
|  | ||||
| unit isr46; | ||||
|  | ||||
| interface | ||||
|  | ||||
| uses | ||||
|     util, | ||||
|     console, | ||||
|     isr_types, | ||||
|     IDT; | ||||
|  | ||||
| procedure register(); | ||||
| procedure hook(hook_method : uint32); | ||||
| procedure unhook(hook_method : uint32); | ||||
|  | ||||
| implementation | ||||
|  | ||||
| var | ||||
|     Hooks : Array[1..MAX_HOOKS] of pp_hook_method; | ||||
|  | ||||
| procedure Main(); interrupt; | ||||
| var | ||||
|     i : integer; | ||||
|      | ||||
| begin | ||||
|     CLI; | ||||
|     for i:=0 to MAX_HOOKS-1 do begin | ||||
|         if uint32(Hooks[i]) <> 0 then Hooks[i](void($00000000))); | ||||
|     end; | ||||
|     console.writestringln('Disk Operation Complete'); | ||||
| end; | ||||
|  | ||||
| procedure register(); | ||||
| begin | ||||
|     memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); | ||||
|     IDT.set_gate(18, uint32(@Main), $08, ISR_RING_0); | ||||
| end; | ||||
|  | ||||
| procedure hook(hook_method : uint32); | ||||
| var | ||||
|     i : uint32; | ||||
|  | ||||
| begin | ||||
|     for i:=0 to MAX_HOOKS-1 do begin | ||||
|         if uint32(Hooks[i]) = hook_method then exit; | ||||
|     end; | ||||
|     for i:=0 to MAX_HOOKS-1 do begin | ||||
|         if uint32(Hooks[i]) = 0 then begin | ||||
|             Hooks[i]:= pp_hook_method(hook_method); | ||||
|             exit; | ||||
|         end; | ||||
|     end; | ||||
| end; | ||||
|  | ||||
| procedure unhook(hook_method : uint32); | ||||
| var | ||||
|     i : uint32; | ||||
| begin | ||||
|     for i:=0 to MAX_HOOKS-1 do begin | ||||
|         If uint32(Hooks[i]) = hook_method then Hooks[i]:= nil; | ||||
|         exit; | ||||
|     end; | ||||
| end; | ||||
|  | ||||
| end. | ||||
		Reference in New Issue
	
	Block a user
	 aaron
					aaron