;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; RDOS operating system ; Copyright (C) 1988-2000, Leif Ekblad ; ; This program is free software; you can redistribute it and/or modify ; it under the terms of the GNU General Public License as published by ; the Free Software Foundation; either version 2 of the License, or ; (at your option) any later version. The only exception to this rule ; is for commercial usage in embedded systems. For information on ; usage in commercial embedded systems, contact embedded@rdos.net ; ; This program is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; You should have received a copy of the GNU General Public License ; along with this program; if not, write to the Free Software ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ; ; The author of this program may be contacted at leif@rdos.net ; ; SWAP.ASM ; Memory swap module ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; INCLUDE ..\user.def INCLUDE ..\os.def INCLUDE ..\user.inc INCLUDE ..\os.inc INCLUDE ..\driver.def INCLUDE system.inc swap_data_seg STRUC swap_level DB ? swap_hooks DB ? swap_arr DD 2*32 DUP(?) swap_data_seg ENDS .386p code SEGMENT byte public use16 'CODE' assume cs:code ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: RegisterSwapProc ; ; DESCRIPTION: Register a new swap-callback ; ; PARAMETERS: ES:EDI Callback address ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; register_swap_proc_name DB 'Register Swap Proc',0 register_swap_proc PROC far push ds push ax push bx ; mov ax,swap_data_sel mov ds,ax mov al,ds:swap_hooks mov bl,al xor bh,bh shl bx,3 add bx,OFFSET swap_arr mov [bx],edi mov [bx+4],es inc al mov ds:swap_hooks,al ; pop bx pop ax pop ds retf32 register_swap_proc ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: run_hooks ; ; DESCRIPTION: Run hooks ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; run_hooks Proc near mov ax,swap_data_sel mov ds,ax mov cl,ds:swap_hooks or cl,cl je run_hooks_done ; mov bx,OFFSET swap_arr run_hooks_loop: push ds push bx push cx ; mov al,ds:swap_level call fword ptr [bx] ; pop cx pop bx pop ds add bx,8 dec cl jnz run_hooks_loop run_hooks_done: ret run_hooks Endp ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: swap_thread ; ; DESCRIPTION: swap thread ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; swap_name DB 'Swap', 0 swap_pr: int 3 swap_loop: mov bx,swap_data_sel mov ds,bx mov ds:swap_level,0 call run_hooks mov eax,10 WaitMilliSec jmp swap_loop ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: init_swap_thread ; ; DESCRIPTION: Init swap thread ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; init_swap_thread PROC far push ds push es pusha mov ax,cs mov ds,ax mov es,ax ; mov si,OFFSET swap_pr mov di,OFFSET swap_name mov cx,256 mov ax,3 ; CreateThread ; popa pop es pop ds retf32 init_swap_thread ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: Init_swap ; ; DESCRIPTION: Init module ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public init_swap init_swap PROC near push ds push es pushad ; mov ax,cs mov ds,ax mov es,ax ; mov edi,OFFSET init_swap_thread HookInitTasking ; mov esi,OFFSET register_swap_proc mov edi,OFFSET register_swap_proc_name xor cl,cl mov ax,register_swap_proc_nr RegisterOsGate ; mov bx,swap_data_sel mov eax,SIZE swap_data_seg AllocateFixedSystemMem mov ds,bx mov ds:swap_hooks,0 ; popad pop es pop ds ret init_swap ENDP code ENDS END