Merge branch 'release/1.2.0'
This commit is contained in:
commit
62bdca8c46
1223
INFORMATIONS.md
1223
INFORMATIONS.md
File diff suppressed because it is too large
Load Diff
|
@ -6,6 +6,8 @@ smart
|
|||
org 0100h
|
||||
|
||||
include ..\include\fat.h
|
||||
include ..\include\mem.h
|
||||
include ..\include\divers.h
|
||||
|
||||
start:
|
||||
push cs
|
||||
|
@ -16,9 +18,10 @@ start:
|
|||
pop es
|
||||
pop fs
|
||||
pop gs
|
||||
mov ah,21
|
||||
mov ah,21
|
||||
mov cl,7
|
||||
int 47h
|
||||
|
||||
mov ah,3
|
||||
int 48h
|
||||
mov ax,0002
|
||||
|
@ -55,6 +58,7 @@ noret:
|
|||
waitchar:
|
||||
mov ax,0
|
||||
int 16h
|
||||
call convertfr
|
||||
cmp ah,59
|
||||
jne norr
|
||||
cmp bp,0
|
||||
|
@ -69,8 +73,14 @@ waitchar:
|
|||
add di,cx
|
||||
jmp waitchar
|
||||
norr:
|
||||
cmp al,0Dh
|
||||
cmp al,0Dh ;entrée
|
||||
je entere
|
||||
cmp al,08h ;backspace
|
||||
je backspace
|
||||
cmp al,27 ;echap
|
||||
je escape
|
||||
cmp al,' '
|
||||
jb waitchar
|
||||
cmp di,offset buffer+256
|
||||
je waitchar
|
||||
mov [di],al
|
||||
|
@ -79,6 +89,36 @@ norr:
|
|||
mov ah,7
|
||||
int 47h
|
||||
jmp waitchar
|
||||
escape:
|
||||
cmp di,offset buffer
|
||||
je waitchar
|
||||
mov ah,18h
|
||||
int 47h
|
||||
mov dx,offset buffer
|
||||
mov cx,di
|
||||
sub cx,dx
|
||||
js waitchar
|
||||
je waitchar
|
||||
sub bh,cl
|
||||
mov ah,19h
|
||||
int 47h
|
||||
mov di,offset buffer
|
||||
mov byte ptr [di],0
|
||||
backspace:
|
||||
cmp di,offset buffer
|
||||
je waitchar
|
||||
mov ah,18h
|
||||
int 47h
|
||||
dec bh
|
||||
mov dl,' '
|
||||
mov ah,0Eh
|
||||
int 47h
|
||||
mov ah,19h
|
||||
int 47h
|
||||
dec di
|
||||
mov byte ptr [di],0
|
||||
jmp waitchar
|
||||
|
||||
entere:
|
||||
mov byte ptr [di],0
|
||||
mov si,offset buffer
|
||||
|
@ -141,48 +181,12 @@ error:
|
|||
call concat0
|
||||
noaddext:
|
||||
mov si,offset buffer
|
||||
push cs
|
||||
mov ax,offset arrive
|
||||
push ax
|
||||
mov di,offset vga
|
||||
mov ah,40
|
||||
int 47h
|
||||
mov ax,9000h
|
||||
mov es,ax
|
||||
push ax
|
||||
mov di,0100h
|
||||
push di
|
||||
mov ah,4
|
||||
mov ah,18
|
||||
int 48h
|
||||
jc reallyerror
|
||||
push es
|
||||
push es
|
||||
push es
|
||||
pop ds
|
||||
pop fs
|
||||
pop gs
|
||||
push 7202h
|
||||
popf
|
||||
db 0CBh
|
||||
arrive:
|
||||
push cs
|
||||
push cs
|
||||
push cs
|
||||
push cs
|
||||
pop ds
|
||||
pop es
|
||||
pop fs
|
||||
pop gs
|
||||
mov si,offset vga
|
||||
mov ah,41
|
||||
int 47h
|
||||
xor bp,bp
|
||||
jmp replay
|
||||
reallyerror:
|
||||
pop ax
|
||||
pop ax
|
||||
pop ax
|
||||
pop ax
|
||||
mov ah,13
|
||||
mov si,offset Error_Syntax
|
||||
int 47h
|
||||
|
@ -206,7 +210,7 @@ Code_Version:
|
|||
int 47h
|
||||
ret
|
||||
|
||||
Version_Text db 'Cos 2000 version 3.0.2Fr par Nico',0
|
||||
Version_Text db 'Cos 2000 version 1.2Fr par Nico',0
|
||||
|
||||
Code_Cls:
|
||||
mov ah,2
|
||||
|
@ -393,7 +397,185 @@ int 47h
|
|||
ret
|
||||
errorrefreshing db 'Impossible de lire le support',0
|
||||
|
||||
extcom db '.EXE',0
|
||||
extcom db '.COM',0
|
||||
|
||||
Code_Mem:
|
||||
mov si,offset msgs
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov si,offset menu
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov ah,18h
|
||||
int 47h
|
||||
xor cx,cx
|
||||
listmcb:
|
||||
mov ah,4
|
||||
int 49h
|
||||
jc fino
|
||||
inc cx
|
||||
mov ah,18h
|
||||
int 47h
|
||||
push gs
|
||||
pop ds
|
||||
mov bh,0
|
||||
mov si,MB.Names
|
||||
mov ah,14h
|
||||
int 47h
|
||||
mov bh,15
|
||||
xor edx,edx
|
||||
mov dx,ds:[MB.Sizes]
|
||||
shl edx,4
|
||||
mov ah,0Fh
|
||||
int 47h
|
||||
mov bh,24
|
||||
cmp ds:[MB.IsResident],true
|
||||
push cs
|
||||
pop ds
|
||||
jne notresident
|
||||
mov si,offset resident
|
||||
mov ah,14h
|
||||
int 47h
|
||||
jmp suitelistmcb
|
||||
notresident:
|
||||
mov si,offset nonresident
|
||||
mov ah,14h
|
||||
int 47h
|
||||
suitelistmcb:
|
||||
mov bh,30
|
||||
cmp gs:[MB.Reference],0
|
||||
je next
|
||||
cmp gs:[MB.Reference],1000h
|
||||
jb next
|
||||
mov ax,gs:[MB.Reference]
|
||||
dec ax
|
||||
dec ax
|
||||
mov ds,ax
|
||||
mov si,MB.Names
|
||||
mov ah,14h
|
||||
int 47h
|
||||
next:
|
||||
mov bh,46
|
||||
xor edx,edx
|
||||
mov dx,gs
|
||||
inc dx
|
||||
inc dx
|
||||
push cx
|
||||
mov cx,16
|
||||
mov ah,11h
|
||||
int 47h
|
||||
mov ah,6h
|
||||
int 47h
|
||||
pop cx
|
||||
jmp listmcb
|
||||
fino:
|
||||
ret
|
||||
resident db 'oui',0
|
||||
nonresident db 'non',0
|
||||
msgs db 'Plan de la memoire',0
|
||||
menu db 'Nom Taille Res Parent Mem',0
|
||||
|
||||
|
||||
;converti le jeux scancode/ascii en fr ax->ax
|
||||
convertfr:
|
||||
push dx si
|
||||
mov si,offset fr
|
||||
searchtouch:
|
||||
mov dx,cs:[si]
|
||||
cmp dx,0
|
||||
je endofconv
|
||||
add si,4
|
||||
cmp dx,ax
|
||||
jne searchtouch
|
||||
mov ax,cs:[si-2]
|
||||
endofconv:
|
||||
pop dx si
|
||||
ret
|
||||
|
||||
fr: db '1', 02, '&', 02
|
||||
db '!', 02, '1', 02
|
||||
db '2', 03, '‚', 03
|
||||
db '@', 03, '2', 03
|
||||
db '3', 04, '"', 04
|
||||
db '#', 04, '3', 04
|
||||
db '4', 05, 39, 05
|
||||
db '$', 05, '4', 05
|
||||
db '5', 06, '(', 06
|
||||
db '%', 06, '5', 06
|
||||
db '6', 07, '-', 07
|
||||
db '^', 07, '6', 07
|
||||
db '7', 08, 'Š', 08
|
||||
db '&', 08, '7', 08
|
||||
db '8', 09, '_', 09
|
||||
db '*', 09, '8', 09
|
||||
db '9', 10, '‡', 10
|
||||
db '(', 10, '9', 10
|
||||
db '0', 11, '…', 11
|
||||
db ')', 11, '0', 11
|
||||
db '-', 12, ')', 12
|
||||
db '_', 12, 'ø', 12
|
||||
db 'Q', 16, 'A', 16
|
||||
db 'q', 16, 'a', 16
|
||||
db 'W', 17, 'Z', 17
|
||||
db 'w', 17, 'z', 17
|
||||
db '{', 26, '‰', 26
|
||||
db '[', 26, 'ˆ', 26
|
||||
db ']', 27, '$', 27
|
||||
db '}', 27, 'œ', 27
|
||||
db 'A', 30, 'Q', 30
|
||||
db 'a', 30, 'q', 30
|
||||
db ':', 39, 'M', 39
|
||||
db ';', 39, 'm', 39
|
||||
db 39, 40, '—', 40
|
||||
db '"', 40, '%', 40
|
||||
db 00, 40, '%', 40
|
||||
db '\', 43, '*', 43
|
||||
db '|', 43, 'æ', 43
|
||||
db 'Z', 44, 'W', 44
|
||||
db 'z', 44, 'w', 44
|
||||
db 'm', 50, ',', 50
|
||||
db 'M', 50, '?', 50
|
||||
db ',', 51, ';', 51
|
||||
db '<', 51, '.', 51
|
||||
db '.', 52, ':', 52
|
||||
db '>', 52, '/', 52
|
||||
db '?', 53, 'õ', 53
|
||||
db '/', 53, '!', 53
|
||||
db '\', 86, '<', 86
|
||||
db '|', 86, '>', 86
|
||||
db 00, 79h, '~', 03
|
||||
db 00, 7Ah, '#', 04
|
||||
db 00, 7Bh, '{', 05
|
||||
db 00, 7Ch, '[', 06
|
||||
db 00, 7Dh, '|', 07
|
||||
db 00, 7Eh, '`', 08
|
||||
db 00, 7Fh, '\', 09
|
||||
db 00, 80h, '^', 10
|
||||
db 00, 81h, '@', 11
|
||||
db 00, 82h, ']', 12
|
||||
db 00, 83h, '}', 13
|
||||
db 00, 00, 00, 00
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
commands dw Str_Exit ,Code_Exit ,Syn_Exit ,Help_Exit
|
||||
dw Str_Version,Code_Version,Syn_Version,Help_Version
|
||||
|
@ -404,17 +586,19 @@ commands dw Str_Exit ,Code_Exit ,Syn_Exit ,Help_Exit
|
|||
dw Str_Dir ,Code_Dir ,Syn_Dir ,Help_Dir
|
||||
dw Str_refresh ,Code_refresh ,Syn_refresh ,Help_refresh
|
||||
dw Str_cd ,Code_cd ,Syn_cd ,Help_cd
|
||||
dw Str_Mem ,Code_Mem ,Syn_Mem ,Help_Mem
|
||||
dw 0
|
||||
|
||||
Str_Exit db 'QUIT',0
|
||||
Str_Version db 'VERS',0
|
||||
Str_Cls db 'EFFAC',0
|
||||
Str_Reboot db 'REDEM',0
|
||||
Str_Cls db 'CLEAR',0
|
||||
Str_Reboot db 'REBOOT',0
|
||||
Str_Command db 'CMDS',0
|
||||
Str_Mode db 'MODE',0
|
||||
Str_Dir db 'VOIR',0
|
||||
Str_refresh db 'LIRE',0
|
||||
Str_cd db 'CH',0
|
||||
Str_Dir db 'DIR',0
|
||||
Str_refresh db 'DISK',0
|
||||
Str_cd db 'CD',0
|
||||
Str_Mem db 'MEM',0
|
||||
Syn_Exit db 0
|
||||
Syn_Version db 0
|
||||
Syn_Cls db 0
|
||||
|
@ -424,6 +608,7 @@ Syn_Mode db 'FFH',0
|
|||
Syn_Dir db 0
|
||||
Syn_refresh db 0
|
||||
Syn_cd db '@',0
|
||||
Syn_Mem db 0
|
||||
Help_Exit db 0
|
||||
Help_Version db 0
|
||||
Help_Cls db 0
|
||||
|
@ -432,18 +617,18 @@ Help_Command db 0
|
|||
Help_Mode db 0
|
||||
Help_Dir db 0
|
||||
Help_refresh db 0
|
||||
Help_cd db 0
|
||||
Help_cd db 0
|
||||
Help_Mem db 0
|
||||
derror db 'Erreur de Syntaxe !',0
|
||||
Error_Syntax db 'La commande ou l''executable n''existe pas ! F1 pour ',0
|
||||
prompt db '>',0
|
||||
msg db 'Interpreteur de commande COS V1.1',0
|
||||
msg db 'Interpreteur de commande COS V1.8',0
|
||||
|
||||
include str0.asm
|
||||
|
||||
dir equ $
|
||||
buffer equ $+128
|
||||
buffer2 equ $+128+512
|
||||
vga equ $+128+512+512
|
||||
dir db 32 dup (0)
|
||||
buffer db 256 dup (0)
|
||||
buffer2 db 256 dup (0)
|
||||
|
||||
|
||||
end start
|
||||
|
|
|
@ -2,15 +2,15 @@ lnk_boot = tlink /x
|
|||
asm= tasm /t/m5/zi
|
||||
lnk= tlink /x/t
|
||||
|
||||
all: ex-tasm.exe ex-nasm.exe
|
||||
all: ex-tasm.com ex-nasm.com
|
||||
|
||||
ex-tasm.exe: ex-tasm.asm
|
||||
ex-tasm.com: ex-tasm.asm
|
||||
$(asm) ex-tasm
|
||||
$(lnk) ex-tasm
|
||||
ren ex-tasm.com ex-tasm.exe
|
||||
ren ex-tasm.com ex-tasm.com
|
||||
|
||||
ex-nasm.exe: ex-nasm.asm
|
||||
nasm ex-nasm.asm -o ex-nasm.exe
|
||||
ex-nasm.com: ex-nasm.asm
|
||||
nasm ex-nasm.asm -o ex-nasm.com
|
||||
|
||||
clean:
|
||||
del *.obj
|
||||
|
|
Binary file not shown.
|
@ -0,0 +1,2 @@
|
|||
True equ 1
|
||||
False equ 0
|
|
@ -0,0 +1,11 @@
|
|||
MB struc
|
||||
Check dw 'NH'
|
||||
IsNotLast db 0
|
||||
IsResident db 0
|
||||
Reference dw 0
|
||||
Sizes dw 0
|
||||
Names db 24 dup (0)
|
||||
MB ends
|
||||
|
||||
Free equ 0
|
||||
memorystart equ 1000h
|
|
@ -10,7 +10,7 @@ ent equ 32h
|
|||
start:
|
||||
jmp CopyCOS
|
||||
|
||||
Message db 0Dh,0Ah,'COS 2000 V3.02Fr programme d''installation',0Dh,0AH,'Inserez une disquette formatee et appuyez sur entre...',0Dh,0AH,'Attention le contenu de celle ci peut etre altere !!!',0Dh,0AH,'$'
|
||||
Message db 0Dh,0Ah,'COS 2000 V1.2Fr programme d''installation',0Dh,0AH,'Inserez une disquette formatee et appuyez sur entre...',0Dh,0AH,'Attention le contenu de celle ci peut etre altere !!!',0Dh,0AH,'$'
|
||||
Message2 db 0Dh,0AH,'Creation du secteur de demarrage...',0Dh,0Ah,'$'
|
||||
Message3 db 0Dh,0AH,'Copie des fichiers systeme...',0Dh,0Ah,'$'
|
||||
Errormsg db 0Dh,0AH,'Erreur d''installation, contactez moi a COS2000@MULTIMANIA.COM !',0Dh,0AH,'$'
|
||||
|
|
Binary file not shown.
|
@ -0,0 +1,4 @@
|
|||
This file is used by the project manager only and should be treated like the project file
|
||||
|
||||
|
||||
main
|
|
@ -0,0 +1,120 @@
|
|||
<?xml version='1.0' encoding='utf-8' ?>
|
||||
<!-- C++Builder XML Project -->
|
||||
<PROJECT>
|
||||
<MACROS>
|
||||
<VERSION value="BCB.06.00"/>
|
||||
<PROJECT value="setup.exe"/>
|
||||
<OBJFILES value="Unit1.obj"/>
|
||||
<RESFILES value="Setup.res"/>
|
||||
<IDLFILES value=""/>
|
||||
<IDLGENFILES value=""/>
|
||||
<DEFFILE value=""/>
|
||||
<RESDEPEN value="$(RESFILES)"/>
|
||||
<LIBFILES value=""/>
|
||||
<LIBRARIES value=""/>
|
||||
<SPARELIBS value=""/>
|
||||
<PACKAGES value="vcl.bpi rtl.bpi dbrtl.bpi adortl.bpi vcldb.bpi vclx.bpi bdertl.bpi
|
||||
vcldbx.bpi ibxpress.bpi dsnap.bpi cds.bpi bdecds.bpi qrpt.bpi teeui.bpi
|
||||
teedb.bpi tee.bpi dss.bpi teeqr.bpi visualclx.bpi visualdbclx.bpi
|
||||
dsnapcrba.bpi dsnapcon.bpi bcbsmp.bpi vclie.bpi xmlrtl.bpi inet.bpi
|
||||
inetdbbde.bpi inetdbxpress.bpi inetdb.bpi nmfast.bpi webdsnap.bpi
|
||||
bcbie.bpi websnap.bpi soaprtl.bpi dclocx.bpi dbexpress.bpi dbxcds.bpi
|
||||
indy.bpi bcb2kaxserver.bpi pop.bpi IcsBcb50.bpi bcbshlctrls.bpi"/>
|
||||
<PATHCPP value=".;"/>
|
||||
<PATHPAS value=".;"/>
|
||||
<PATHRC value=".;"/>
|
||||
<PATHASM value=".;"/>
|
||||
<DEBUGLIBPATH value="$(BCB)\lib\debug"/>
|
||||
<RELEASELIBPATH value="$(BCB)\lib\release"/>
|
||||
<LINKER value="ilink32"/>
|
||||
<USERDEFINES value=""/>
|
||||
<SYSDEFINES value="NO_STRICT;_NO_VCL;_RTLDLL"/>
|
||||
<MAINSOURCE value="Setup.bpf"/>
|
||||
<INCLUDEPATH value=""..\Nouveau dossier (2)";$(BCB)\include;$(BCB)\include\vcl"/>
|
||||
<LIBPATH value=""..\Nouveau dossier (2)";$(BCB)\Projects\Lib;$(BCB)\lib\obj;$(BCB)\lib"/>
|
||||
<WARNINGS value="-w-par"/>
|
||||
<OTHERFILES value=""/>
|
||||
</MACROS>
|
||||
<OPTIONS>
|
||||
<IDLCFLAGS value="-I"..\Nouveau dossier (2)" -I$(BCB)\include -I$(BCB)\include\vcl
|
||||
-src_suffix cpp -boa"/>
|
||||
<CFLAG1 value="-O2 -H=$(BCB)\lib\vcl60.csm -Hc -Vx -Ve -X- -a8 -b- -k- -vi -tWC -tWM- -c"/>
|
||||
<PFLAGS value="-$Y- -$L- -$D- -$A8 -v -JPHNE -M"/>
|
||||
<RFLAGS value=""/>
|
||||
<AFLAGS value="/mx /w2 /zn"/>
|
||||
<LFLAGS value="-D"" -ap -Tpe -x -Gn"/>
|
||||
<OTHERFILES value=""/>
|
||||
</OPTIONS>
|
||||
<LINKER>
|
||||
<ALLOBJ value="c0x32.obj $(OBJFILES)"/>
|
||||
<ALLRES value="$(RESFILES)"/>
|
||||
<ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib cw32i.lib"/>
|
||||
<OTHERFILES value=""/>
|
||||
</LINKER>
|
||||
<FILELIST>
|
||||
<FILE FILENAME="Setup.res" FORMNAME="" UNITNAME="Setup.res" CONTAINERID="ResTool" DESIGNCLASS="" LOCALCOMMAND=""/>
|
||||
<FILE FILENAME="Setup.bpf" FORMNAME="" UNITNAME="Setup" CONTAINERID="BPF" DESIGNCLASS="" LOCALCOMMAND=""/>
|
||||
<FILE FILENAME="Unit1.cpp" FORMNAME="" UNITNAME="Unit1" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
|
||||
</FILELIST>
|
||||
<BUILDTOOLS>
|
||||
</BUILDTOOLS>
|
||||
|
||||
<IDEOPTIONS>
|
||||
[Version Info]
|
||||
IncludeVerInfo=0
|
||||
AutoIncBuild=0
|
||||
MajorVer=1
|
||||
MinorVer=0
|
||||
Release=0
|
||||
Build=0
|
||||
Debug=0
|
||||
PreRelease=0
|
||||
Special=0
|
||||
Private=0
|
||||
DLL=0
|
||||
Locale=1036
|
||||
CodePage=1252
|
||||
|
||||
[Version Info Keys]
|
||||
CompanyName=
|
||||
FileDescription=
|
||||
FileVersion=1.0.0.0
|
||||
InternalName=
|
||||
LegalCopyright=
|
||||
LegalTrademarks=
|
||||
OriginalFilename=
|
||||
ProductName=
|
||||
ProductVersion=1.0.0.0
|
||||
Comments=
|
||||
|
||||
[Debugging]
|
||||
DebugSourceDirs=$(BCB)\source\vcl
|
||||
|
||||
[Parameters]
|
||||
RunParams=
|
||||
Launcher=
|
||||
UseLauncher=0
|
||||
DebugCWD=
|
||||
HostApplication=
|
||||
RemoteHost=
|
||||
RemotePath=
|
||||
RemoteLauncher=
|
||||
RemoteCWD=
|
||||
RemoteDebug=0
|
||||
|
||||
[Compiler]
|
||||
ShowInfoMsgs=0
|
||||
LinkDebugVcl=0
|
||||
LinkCGLIB=0
|
||||
|
||||
[CORBA]
|
||||
AddServerUnit=1
|
||||
AddClientUnit=1
|
||||
PrecompiledHeaders=1
|
||||
|
||||
[Language]
|
||||
ActiveLang=
|
||||
ProjectLang=
|
||||
RootDir=
|
||||
</IDEOPTIONS>
|
||||
</PROJECT>
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,135 @@
|
|||
//---------------------------------------------------------------------------
|
||||
#include <windows.h>
|
||||
#include <winbase.h>
|
||||
#include <winioctl.h>
|
||||
#include <io.h>
|
||||
#include <stdio.h>
|
||||
#include <fcntl.h>
|
||||
#include <dir.h>
|
||||
#pragma hdrstop
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
char * GetLastErrorString(void)
|
||||
{
|
||||
LPVOID lpMsgBuf;
|
||||
|
||||
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
|
||||
NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||
(LPTSTR) &lpMsgBuf, 0, NULL);
|
||||
|
||||
return (char *)lpMsgBuf;
|
||||
}
|
||||
|
||||
|
||||
#pragma argsused
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
DWORD dwNotUsed;
|
||||
DWORD error=0;
|
||||
HANDLE hDrive;
|
||||
DISK_GEOMETRY dg_flop_geom;
|
||||
char lecteur[4]="a:\0";
|
||||
char device[7]="\\\\.\\a:\0";
|
||||
int fdboot;
|
||||
DWORD dwBsWritten;
|
||||
char * buffer;
|
||||
char bootfile[14]="data/boot.bin\0";
|
||||
struct ffblk files;
|
||||
int done;
|
||||
int number=0;
|
||||
char src[80];
|
||||
char dest[80];
|
||||
printf("Installation de COS2000\nInserez une disquette et appuyer sur une touche...\n");
|
||||
getchar();
|
||||
hDrive = CreateFile(device, GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL);
|
||||
printf("Ouverture du peripherique %s\n",lecteur);
|
||||
if (hDrive == INVALID_HANDLE_VALUE) {
|
||||
printf("Erreur : %s\n",GetLastErrorString());
|
||||
error=1;
|
||||
}
|
||||
if(error!=1&&printf("Determination de la geometrie \n")&&DeviceIoControl(hDrive, IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL,0, &dg_flop_geom, sizeof(dg_flop_geom),&dwNotUsed, NULL) == FALSE) {
|
||||
printf("Erreur : %s\n",GetLastErrorString());
|
||||
error=1;
|
||||
}
|
||||
if(error!=1&&(dg_flop_geom.MediaType==FixedMedia||dg_flop_geom.MediaType==RemovableMedia||dg_flop_geom.MediaType==Unknown))
|
||||
{
|
||||
printf("Erreur : Ceci n'est pas une disquette !\n");
|
||||
error=1;
|
||||
}
|
||||
if (error!=1&&printf("Positionnement sur le secteur 0\n")&&SetFilePointer(hDrive, 0, NULL, FILE_BEGIN) == -1) {
|
||||
printf("Erreur : %s\n",GetLastErrorString());
|
||||
error=1;
|
||||
}
|
||||
if (error!=1)
|
||||
{
|
||||
printf("Pistes :%u Secteurs:%u Tetes:%u Taille:%u\n",dg_flop_geom.Cylinders.LowPart,dg_flop_geom.SectorsPerTrack,dg_flop_geom.TracksPerCylinder,dg_flop_geom.BytesPerSector);
|
||||
}
|
||||
else
|
||||
{
|
||||
CloseHandle(hDrive);
|
||||
}
|
||||
if (hDrive == NULL||dg_flop_geom.TracksPerCylinder>2||dg_flop_geom.TracksPerCylinder==0)
|
||||
{
|
||||
printf("Aucun support valide detecte !");
|
||||
error=1;
|
||||
}
|
||||
if (error!=1)
|
||||
{
|
||||
printf("Allocation de memoire\n");
|
||||
buffer = (char *)malloc(dg_flop_geom.BytesPerSector);
|
||||
printf("Ouverture et installation du fichier de boot %s\n",bootfile);
|
||||
}
|
||||
if (error!=1&&(fdboot = _rtl_open(bootfile,O_RDONLY | O_BINARY)) == -1 )
|
||||
{
|
||||
printf("Erreur : Fichier de boot introuvable\n");
|
||||
error=1;
|
||||
}
|
||||
if (error!=1&&_read(fdboot, buffer, dg_flop_geom.BytesPerSector)!= dg_flop_geom.BytesPerSector)
|
||||
{
|
||||
printf("Erreur : Fichier de boot de taille incorrecte !\n");
|
||||
error=1;
|
||||
}
|
||||
if (error!=1&&WriteFile(hDrive, buffer, dg_flop_geom.BytesPerSector, &dwBsWritten, NULL) == 0)
|
||||
{
|
||||
printf("Ecriture impossible sur le secteur de boot !\n");
|
||||
error=1;
|
||||
}
|
||||
if (error!=1)
|
||||
{
|
||||
_rtl_close(fdboot);
|
||||
printf("Determination des fichiers a copier\n\n");
|
||||
done = findfirst("data\\*.*",&files,0);
|
||||
while (!done)
|
||||
{
|
||||
number++;
|
||||
done = findnext(&files);
|
||||
}
|
||||
printf("Copie des fichiers de cos2000\n");
|
||||
done = findfirst("data\\*.*",&files,0);
|
||||
while (!done)
|
||||
{
|
||||
printf("%s\n",files.ff_name);
|
||||
sprintf(src, "data\\%s",files.ff_name);
|
||||
sprintf(dest, "%s\\%s",lecteur,files.ff_name);
|
||||
if (!CopyFile(src,dest,false))
|
||||
{
|
||||
printf("Erreur : fichier impossible a copier %s\n",GetLastErrorString());
|
||||
error=1;
|
||||
break;
|
||||
}
|
||||
done = findnext(&files);
|
||||
}
|
||||
if (!error)
|
||||
{
|
||||
printf("Installation terminee !\nVeuillez redemarrer votre PC afin de charger le systeme");
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Installation echoué !");
|
||||
}
|
||||
free(buffer);
|
||||
}
|
||||
getchar();
|
||||
return 0;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
|
@ -2,7 +2,7 @@ lnk_boot = tlink /x
|
|||
asm= tasm /t/m5/zi
|
||||
lnk= tlink /x/t
|
||||
|
||||
all: boot.bin clavier.sys 8259a.sys disque.sys heure.sys horloge.sys manette.sys port.sys souris.sys systeme.sys video.sys
|
||||
all: boot.bin clavier.sys 8259a.sys disque.sys heure.sys horloge.sys manette.sys port.sys souris.sys systeme.sys video.sys mcb.sys
|
||||
|
||||
boot.bin: boot.asm
|
||||
$(asm) boot
|
||||
|
@ -59,6 +59,11 @@ video.sys: video.asm
|
|||
$(lnk) video
|
||||
ren video.com video.sys
|
||||
|
||||
mcb.sys: mcb.asm
|
||||
$(asm) mcb
|
||||
$(lnk) mcb
|
||||
ren mcb.com mcb.sys
|
||||
|
||||
clean:
|
||||
del *.obj
|
||||
del *.exe
|
||||
|
|
|
@ -15,35 +15,40 @@ tsr:
|
|||
db 2eh,0ffh,1eh
|
||||
dw offsets
|
||||
cli
|
||||
mov cs:feax,eax
|
||||
in al,60h
|
||||
add dword ptr cs:popes,1
|
||||
cmp cs:isstate,1
|
||||
jne nostate
|
||||
cmp al,57
|
||||
jne endof
|
||||
mov cs:isstate,0
|
||||
jmp endof
|
||||
nostate:
|
||||
je endofforce
|
||||
mov cs:isstate,1
|
||||
mov cs:eaxr,eax
|
||||
in al,60h
|
||||
cmp al,68
|
||||
je F10
|
||||
cmp al,87
|
||||
je F11
|
||||
cmp al,88
|
||||
je F12
|
||||
endof:
|
||||
mov eax,cs:feax
|
||||
endof:
|
||||
mov cs:isstate,0
|
||||
mov eax,cs:eaxr
|
||||
endofforce:
|
||||
sti
|
||||
iret
|
||||
isstate db 0
|
||||
infos db 40 dup (0)
|
||||
feax dd 0
|
||||
|
||||
F10:
|
||||
mov ax,6000h
|
||||
push ax
|
||||
mov di,0100h
|
||||
push di
|
||||
sti
|
||||
db 0CBh
|
||||
push cs
|
||||
pop ds
|
||||
mov si,offset com
|
||||
mov ah,5
|
||||
int 49h
|
||||
mov cs:isstate,0
|
||||
push gs
|
||||
push 0100h
|
||||
db 0CBh
|
||||
|
||||
com db 'COMMANDE.EXE',0
|
||||
|
||||
F11:
|
||||
push ax di es
|
||||
|
@ -65,154 +70,230 @@ notabove:
|
|||
|
||||
|
||||
f12:
|
||||
mov cs:isstate,1
|
||||
pop word ptr cs:fip
|
||||
pop word ptr cs:fcs
|
||||
pop dword ptr cs:ffl
|
||||
mov cs:fesp,esp
|
||||
push ds es
|
||||
pusha
|
||||
push word ptr cs:fip
|
||||
push gs
|
||||
push fs
|
||||
push ss
|
||||
push es
|
||||
push ds
|
||||
push word ptr cs:fcs
|
||||
push dword ptr cs:fesp
|
||||
push ebp
|
||||
push edi
|
||||
push esi
|
||||
push edx
|
||||
push ecx
|
||||
push ebx
|
||||
push eax
|
||||
push dword ptr cs:ffl
|
||||
push cs
|
||||
push cs
|
||||
pop es
|
||||
pop ds
|
||||
mov ah,26
|
||||
int 47h
|
||||
mov ah,2
|
||||
int 47h
|
||||
mov ah,21
|
||||
mov cl,4
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset reg
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov ah,21
|
||||
mov cl,7
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset fla
|
||||
int 47h
|
||||
pop edx
|
||||
mov cx,32
|
||||
mov ah,11
|
||||
int 47h
|
||||
mov ah,5
|
||||
int 47h
|
||||
mov ah,10
|
||||
int 47h
|
||||
mov si,offset regs
|
||||
mov bx,8+7
|
||||
mov ah,21
|
||||
mov cl,6
|
||||
int 47h
|
||||
showallREG:
|
||||
mov ah,6
|
||||
int 47h
|
||||
cmp bx,8
|
||||
jb nodr
|
||||
pop edx
|
||||
mov cx,32
|
||||
jmp popo
|
||||
nodr:
|
||||
mov ah,21
|
||||
mov cl,1
|
||||
int 47h
|
||||
xor edx,edx
|
||||
pop dx
|
||||
mov cx,16
|
||||
popo:
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,10
|
||||
int 47h
|
||||
mov ah,5
|
||||
int 47h
|
||||
push si
|
||||
mov si,offset gr
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,8
|
||||
int 47h
|
||||
mov si,offset dr
|
||||
mov ah,13
|
||||
int 47h
|
||||
pop si
|
||||
add si,5
|
||||
dec bx
|
||||
jnz showallreg
|
||||
mov ah,34
|
||||
mov di,offset infos
|
||||
int 47h
|
||||
mov ah,25
|
||||
mov bl,cs:infos
|
||||
xor bh,bh
|
||||
dec bl
|
||||
int 47h
|
||||
mov si,offset app
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,32
|
||||
mov bl,cs:infos
|
||||
xor bh,bh
|
||||
mov di,ax
|
||||
dec di
|
||||
mov cl,116
|
||||
int 47h
|
||||
pop es ds
|
||||
sti
|
||||
waitt:
|
||||
cmp cs:isstate,0
|
||||
jne waitt
|
||||
mov ah,27
|
||||
int 47h
|
||||
popa
|
||||
pop es ds
|
||||
push dword ptr cs:ffl
|
||||
push word ptr cs:fcs
|
||||
push word ptr cs:fip
|
||||
jmp endof
|
||||
|
||||
reg db ' Etats des registres',0
|
||||
fla db 'Eflags:',0
|
||||
regs db 'EAX:',0
|
||||
db 'EBX:',0
|
||||
db 'ECX:',0
|
||||
db 'EDX:',0
|
||||
db 'ESI:',0
|
||||
db 'EDI:',0
|
||||
db 'EBP:',0
|
||||
db 'ESP:',0
|
||||
db ' CS:',0
|
||||
db ' DS:',0
|
||||
db ' ES:',0
|
||||
db ' FS:',0
|
||||
db ' GS:',0
|
||||
db ' SS:',0
|
||||
db ' IP:',0
|
||||
gr db '(',0
|
||||
dr db ')',0
|
||||
app db 'Appuyez sur espace pour quitter...',0
|
||||
ffl dd 0
|
||||
fcs dw 0
|
||||
fip dw 0
|
||||
fesp dd 0
|
||||
feax dd 0
|
||||
showreg:
|
||||
pushf
|
||||
pushad
|
||||
mov bp,sp
|
||||
mov ax,ss:[bp+28h]
|
||||
mov cs:[csr],ax
|
||||
mov ax,ss:[bp+26h]
|
||||
mov cs:[ipr],ax
|
||||
mov ax,ss:[bp+2Ah]
|
||||
mov cs:[flr],ax
|
||||
mov cs:[ebxr],ebx
|
||||
mov cs:[ecxr],ecx
|
||||
mov cs:[edxr],edx
|
||||
mov cs:[esir],esi
|
||||
mov cs:[edir],edi
|
||||
mov cs:[espr],esp
|
||||
mov cs:[ebpr],ebp
|
||||
mov cs:[dsr],ds
|
||||
mov cs:[esr],es
|
||||
mov cs:[fsr],fs
|
||||
mov cs:[gsr],gs
|
||||
mov cs:[ssr],ss
|
||||
push ds
|
||||
pop fs
|
||||
push cs
|
||||
pop ds
|
||||
mov ah,28h
|
||||
int 47h
|
||||
mov ax,0002
|
||||
int 47H
|
||||
mov ah,2
|
||||
int 47h
|
||||
mov si,offset etat
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov si,offset reg
|
||||
mov di,offset regdata
|
||||
mov bx,7
|
||||
showregs:
|
||||
cmp byte ptr cs:[si+4],":"
|
||||
jne endshowregs
|
||||
mov ah,13
|
||||
int 47h
|
||||
cmp byte ptr cs:[si+3],"g"
|
||||
je segsss
|
||||
cmp byte ptr cs:[si+2]," "
|
||||
je segsss
|
||||
mov edx,cs:[di]
|
||||
mov cx,32
|
||||
mov ah,0Ah
|
||||
int 47h
|
||||
add di,4
|
||||
jmp showmax
|
||||
segsss:
|
||||
xor edx,edx
|
||||
mov dx,cs:[di]
|
||||
mov cx,16
|
||||
mov ah,0Ah
|
||||
int 47h
|
||||
push si
|
||||
mov ah,13
|
||||
mov si,offset blank
|
||||
int 47h
|
||||
pop si
|
||||
add di,2
|
||||
showmax:
|
||||
add si,7
|
||||
mov ebp,edx
|
||||
push si
|
||||
mov si,offset beginds
|
||||
mov ah,13
|
||||
int 47h
|
||||
pop si
|
||||
mov cx,8
|
||||
mov al,0
|
||||
mov bx,bp
|
||||
letshow:
|
||||
mov dl,fs:[bx]
|
||||
inc bx
|
||||
mov ah,0Ah
|
||||
int 47h
|
||||
inc al
|
||||
cmp al,10
|
||||
jb letshow
|
||||
push si
|
||||
mov si,offset ende
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov si,offset begines
|
||||
mov ah,13
|
||||
int 47h
|
||||
pop si
|
||||
mov bx,bp
|
||||
mov cx,8
|
||||
mov al,0
|
||||
letshow2:
|
||||
mov dl,es:[bx]
|
||||
inc bx
|
||||
mov ah,0Ah
|
||||
int 47h
|
||||
inc al
|
||||
cmp al,10
|
||||
jb letshow2
|
||||
push si
|
||||
mov si,offset ende
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov si,offset beginint
|
||||
mov ah,13
|
||||
int 47h
|
||||
pop si
|
||||
mov edx,ebp
|
||||
mov ah,8
|
||||
int 47h
|
||||
push si
|
||||
mov si,offset endint
|
||||
mov ah,13
|
||||
int 47h
|
||||
pop si
|
||||
mov ah,6
|
||||
int 47h
|
||||
jmp showregs
|
||||
endshowregs:
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov si,offset pile
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov bp,sp
|
||||
mov di,0ffffh
|
||||
sub di,bp
|
||||
xor si,si
|
||||
showstack:
|
||||
mov dl,'+'
|
||||
mov ah,07h
|
||||
int 47h
|
||||
mov ah,0Ah
|
||||
mov cx,8
|
||||
mov dx,si
|
||||
int 47h
|
||||
mov dl,':'
|
||||
mov ah,07h
|
||||
int 47h
|
||||
mov dx,ss:[bp+si]
|
||||
mov ah,0Ah
|
||||
mov cx,16
|
||||
int 47h
|
||||
mov ah,06
|
||||
int 47h
|
||||
inc si
|
||||
inc si
|
||||
cmp si,di
|
||||
jb showstack
|
||||
|
||||
mov ah,0ah
|
||||
mov edx,cs:popes
|
||||
mov cx,32
|
||||
int 47h
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
xor ax,ax
|
||||
int 16h
|
||||
mov ah,29h
|
||||
int 47h
|
||||
popad
|
||||
popf
|
||||
jmp endof
|
||||
|
||||
popes dd 0
|
||||
|
||||
regdata:
|
||||
eaxr dd 0
|
||||
ebxr dd 0
|
||||
ecxr dd 0
|
||||
edxr dd 0
|
||||
esir dd 0
|
||||
edir dd 0
|
||||
espr dd 0
|
||||
ebpr dd 0
|
||||
ipr dw 0
|
||||
csr dw 0
|
||||
dsr dw 0
|
||||
esr dw 0
|
||||
fsr dw 0
|
||||
gsr dw 0
|
||||
ssr dw 0
|
||||
flr dw 0
|
||||
|
||||
etat db ' Etat des registres processeurs',0
|
||||
|
||||
reg db "eax : ",0
|
||||
db "ebx : ",0
|
||||
db "ecx : ",0
|
||||
db "edx : ",0
|
||||
db "esi : ",0
|
||||
db "edi : ",0
|
||||
db "esp : ",0
|
||||
db "ebp : ",0
|
||||
db "ip : ",0
|
||||
db "cs : ",0
|
||||
db "ds : ",0
|
||||
db "es : ",0
|
||||
db "fs : ",0
|
||||
db "gs : ",0
|
||||
db "ss : ",0
|
||||
db "flag: ",0
|
||||
|
||||
pile db 'Stack :',0
|
||||
|
||||
blank db ' ',0
|
||||
beginint db ' (',0
|
||||
endint db ') ',0
|
||||
begines db ' es[',0
|
||||
beginds db ' ds[',0
|
||||
ende db '] ',0
|
||||
end start
|
||||
|
|
207
noyau/disque.asm
207
noyau/disque.asm
|
@ -68,6 +68,8 @@ tables dw readsector
|
|||
dw readcluster
|
||||
dw writecluster
|
||||
dw getdir
|
||||
dw projfile
|
||||
dw execfile
|
||||
|
||||
maxfunc equ 24
|
||||
|
||||
|
@ -95,24 +97,30 @@ AdressDirectory dw 0 ;En cluster
|
|||
firstsearch dw 1 ;Premiere requete ?
|
||||
|
||||
getfat:
|
||||
push ax bx dx si
|
||||
push ax bx dx si ds gs
|
||||
mov dx,cs
|
||||
push cs
|
||||
pop ds
|
||||
mov si,offset datafat
|
||||
mov ah,9
|
||||
int 49h
|
||||
mov ax,cx
|
||||
mov bx,ax
|
||||
and bx,0000000000000001b
|
||||
shr ax,1
|
||||
mov cx,3
|
||||
mul cx
|
||||
mov si,offset bufferfat
|
||||
xor si,si
|
||||
add si,ax
|
||||
cmp bx,0h
|
||||
jnz evenfat
|
||||
oddfat:
|
||||
mov dx,cs:[si]
|
||||
mov dx,gs:[si]
|
||||
and dx,0FFFh
|
||||
mov cx,dx
|
||||
jmp endfat
|
||||
evenfat:
|
||||
mov dx,cs:[si+1]
|
||||
mov dx,gs:[si+1]
|
||||
and dx,0FFF0h
|
||||
shr dx,4
|
||||
mov cx,dx
|
||||
|
@ -120,11 +128,11 @@ endfat:
|
|||
cmp dx,0FF0h
|
||||
jbe nocarry
|
||||
stc
|
||||
pop si dx bx ax
|
||||
pop gs ds si dx bx ax
|
||||
ret
|
||||
nocarry:
|
||||
clc
|
||||
pop si dx bx ax
|
||||
pop gs ds si dx bx ax
|
||||
ret
|
||||
|
||||
;============loadfile (Fonction 4)===============
|
||||
|
@ -155,6 +163,100 @@ errorload:
|
|||
mov ecx,0
|
||||
pop di bx eax
|
||||
ret
|
||||
|
||||
;============execfile (Fonction 18)===============
|
||||
;Execute le fichier ds:si
|
||||
;-> AH=18
|
||||
;<- Flag Carry si erreur
|
||||
;=====================================================
|
||||
execfile:
|
||||
pushf
|
||||
push bp dx
|
||||
mov bp,sp
|
||||
mov dx,ss:[bp+10]
|
||||
pushad
|
||||
push ds es fs gs
|
||||
call projfile
|
||||
jc reallyerror
|
||||
push es
|
||||
pop gs
|
||||
mov ah,6
|
||||
int 49h
|
||||
push es
|
||||
push cs
|
||||
mov ax,offset arrive
|
||||
push ax
|
||||
push es
|
||||
push 0100h
|
||||
push es
|
||||
push es
|
||||
push es
|
||||
pop ds
|
||||
pop fs
|
||||
pop gs
|
||||
push 7202h
|
||||
popf
|
||||
sti
|
||||
db 0CBh
|
||||
arrive:
|
||||
cli
|
||||
pop gs
|
||||
mov ah,01
|
||||
int 49h
|
||||
pop gs fs es ds
|
||||
popad
|
||||
pop dx bp
|
||||
popf
|
||||
ret
|
||||
reallyerror:
|
||||
pop gs fs es ds
|
||||
popad
|
||||
pop dx bp
|
||||
popf
|
||||
stc
|
||||
ret
|
||||
|
||||
;============projfile (Fonction 17)===============
|
||||
;Charge le fichier ds:si sur un bloc mémoire -> ecx taille -> es bloc
|
||||
;-> AH=17
|
||||
;<- Flag Carry si erreur
|
||||
;=====================================================
|
||||
projfile:
|
||||
push eax bx di ds gs
|
||||
push cs
|
||||
pop es
|
||||
call uppercase
|
||||
mov ah,5
|
||||
int 49h
|
||||
jnc errorload2
|
||||
mov di,offset tempfit
|
||||
call searchfile
|
||||
jne errorload2
|
||||
jc errorload2
|
||||
mov eax,cs:tempfit.FileSize
|
||||
mov ecx,eax
|
||||
add ecx,100h
|
||||
push eax
|
||||
mov ah,2
|
||||
int 49h
|
||||
pop eax
|
||||
jc errorload2
|
||||
push gs
|
||||
pop es
|
||||
mov cx,cs:tempfit.FileGroup
|
||||
mov di,100h
|
||||
call loadway
|
||||
jc errorload2
|
||||
clc
|
||||
mov ecx,eax
|
||||
pop gs ds di bx eax
|
||||
ret
|
||||
errorload2:
|
||||
stc
|
||||
mov ecx,0
|
||||
pop gs ds di bx eax
|
||||
ret
|
||||
|
||||
|
||||
tempfit db 32 dup (0)
|
||||
|
||||
|
@ -211,7 +313,6 @@ errorsearch:
|
|||
;Transforme la chaine ds:si en maj
|
||||
uppercase:
|
||||
push si ax
|
||||
mov di,si
|
||||
uppercaser:
|
||||
mov al,ds:[si]
|
||||
cmp al,0
|
||||
|
@ -292,6 +393,7 @@ AdjustLast:
|
|||
mov cx,dx
|
||||
push cs
|
||||
pop ds
|
||||
cld
|
||||
rep movsb
|
||||
zeroload:
|
||||
clc
|
||||
|
@ -308,7 +410,7 @@ noway:
|
|||
;<- Flag Carry si erreur
|
||||
;=====================================================
|
||||
InitDrive:
|
||||
push eax bx cx edx di ds es
|
||||
push eax bx cx edx di ds es gs
|
||||
push cs
|
||||
pop ds
|
||||
push cs
|
||||
|
@ -327,9 +429,9 @@ againtry:
|
|||
dec di
|
||||
jnz againtry
|
||||
oknoagaintry:
|
||||
mov cs:lastseg,0
|
||||
mov cs:lastoff,0
|
||||
mov cs:LastRead,0
|
||||
mov lastseg,0
|
||||
mov lastoff,0
|
||||
mov LastRead,0
|
||||
mov ax,myboot.sectorsize
|
||||
mov bl,myboot.SectorsPerCluster
|
||||
xor bh,bh
|
||||
|
@ -370,9 +472,28 @@ oknoagaintry:
|
|||
mov adressdirectory,0
|
||||
mov firstsearch,1
|
||||
mov currentdirstr,0
|
||||
mov di,offset bufferfat
|
||||
xor eax,eax
|
||||
mov ax,myboot.SectorsPerFat
|
||||
mul myboot.SectorSize
|
||||
shl edx,16
|
||||
add edx,eax
|
||||
mov ecx,edx
|
||||
mov dx,cs
|
||||
mov si,offset datafat
|
||||
mov ah,9
|
||||
int 49h
|
||||
jnc hadafatbloc
|
||||
mov si,offset datafat
|
||||
mov ah,2
|
||||
int 49h
|
||||
mov ah,3
|
||||
int 49h
|
||||
hadafatbloc:
|
||||
xor di,di
|
||||
mov dx,myboot.SectorsPerFat
|
||||
mov cx,AdressFat
|
||||
push gs
|
||||
pop es
|
||||
SeeFat:
|
||||
call readsector
|
||||
jc ErrorInit
|
||||
|
@ -381,12 +502,14 @@ SeeFat:
|
|||
dec dx
|
||||
jnz seefat
|
||||
clc
|
||||
pop es ds di edx cx bx eax
|
||||
pop gs es ds di edx cx bx eax
|
||||
ret
|
||||
ErrorInit:
|
||||
stc
|
||||
pop es ds di edx cx bx eax
|
||||
pop gs es ds di edx cx bx eax
|
||||
ret
|
||||
|
||||
datafat db '/fat',0
|
||||
|
||||
;=============FindFirstFile (Fonction 7)==============
|
||||
;Renvois dans ES:DI un bloc d'info
|
||||
|
@ -648,10 +771,9 @@ lastoff dw 0
|
|||
;=====================================================
|
||||
WriteSector:
|
||||
push ax bx cx dx si es
|
||||
cmp cs:Lastread,cx
|
||||
jne nodestruct
|
||||
mov cs:Lastread,0ffffh
|
||||
nodestruct:
|
||||
mov cs:lastseg,0
|
||||
mov cs:lastoff,0
|
||||
mov cs:LastRead,0FFFFh
|
||||
push ds
|
||||
pop es
|
||||
mov ax,cx
|
||||
|
@ -667,7 +789,7 @@ nodestruct:
|
|||
xchg cl,ch
|
||||
shl cl,6
|
||||
or cl, bl
|
||||
mov bx,si
|
||||
mov bx,si
|
||||
mov SI, 4
|
||||
mov AL,1
|
||||
TryAgains:
|
||||
|
@ -716,25 +838,30 @@ getserial:
|
|||
;<- Flag Carry si erreur, Flag Equal si secteurs égaux
|
||||
;=====================================================
|
||||
VerifySector:
|
||||
push bx cx si di ds es
|
||||
push ecx si di ds es
|
||||
push cs
|
||||
pop es
|
||||
push cs
|
||||
pop ds
|
||||
mov bx,offset bufferread
|
||||
call ReadSector
|
||||
jc errorverify
|
||||
mov di,offset bufferread
|
||||
call ReadSector
|
||||
mov si,offset bufferread
|
||||
call inverse
|
||||
call WriteSector
|
||||
jc errorverify
|
||||
mov bx,offset bufferwrite
|
||||
call ReadSector
|
||||
|
||||
mov di,offset bufferwrite
|
||||
call ReadSector
|
||||
mov si,offset bufferwrite
|
||||
call inverse
|
||||
jc errorverify
|
||||
mov bx,offset bufferread
|
||||
|
||||
mov si,offset bufferread
|
||||
call inverse
|
||||
call WriteSector
|
||||
jc errorverify
|
||||
|
||||
xor ecx,ecx
|
||||
mov cx,cs:myboot.SectorSize
|
||||
shr cx,2
|
||||
mov si,offset bufferread
|
||||
|
@ -742,18 +869,19 @@ VerifySector:
|
|||
cld
|
||||
rep cmpsd
|
||||
errorverify:
|
||||
pop es ds di si cx bx
|
||||
pop es ds di si ecx
|
||||
ret
|
||||
|
||||
Inverse:
|
||||
mov si,cs:myboot.sectorsize
|
||||
shr si,2
|
||||
push si cx
|
||||
xor cx,cx
|
||||
invert:
|
||||
shl si,2
|
||||
not dword ptr [bx+si-4]
|
||||
shr si,2
|
||||
dec si
|
||||
jnz invert
|
||||
not dword ptr [si]
|
||||
add si,4
|
||||
add cx,4
|
||||
cmp cx,cs:myboot.sectorsize
|
||||
jb invert
|
||||
pop cx si
|
||||
ret
|
||||
|
||||
VerifySector2:
|
||||
|
@ -788,6 +916,7 @@ decompression:
|
|||
mov cl,ah
|
||||
xor ah,ah
|
||||
xor ch,ch
|
||||
cld
|
||||
rep stosb
|
||||
add si,5
|
||||
sub dx,5
|
||||
|
@ -954,11 +1083,9 @@ getdir:
|
|||
pop es ds di si cx ax
|
||||
clc
|
||||
ret
|
||||
|
||||
|
||||
bufferread equ $
|
||||
bufferwrite equ $+2048
|
||||
bufferentry equ $+2048+2048
|
||||
bufferFat equ $+2048+2048+2048
|
||||
|
||||
bufferread db 512 dup (0)
|
||||
bufferwrite db 512 dup (0)
|
||||
bufferentry db 512 dup (0)
|
||||
|
||||
end start
|
||||
|
|
398
noyau/mcb.asm
398
noyau/mcb.asm
|
@ -1,18 +1,147 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0100h
|
||||
|
||||
include ..\include\mem.h
|
||||
include ..\include\divers.h
|
||||
|
||||
start:
|
||||
maxfunc equ 10
|
||||
|
||||
jmp tsr ;Saute à la routine résidente
|
||||
nameed db 'MB' ;Nom drivers
|
||||
id dw 1234h ;Identifiant drivers
|
||||
Tsr:
|
||||
cli ;Désactive interruptions logiciellement
|
||||
cmp ax,cs:ID ;Compare si test de chargement
|
||||
jne nomore ;Si pas test alors on continu
|
||||
rol ax,3*4 ;Rotation de 3 chiffre de l'ID pour montrer que le drivers est chargé
|
||||
jmp itsok ;On termine l'int avec notre code d'ID preuve du bon chargement de VIDEO
|
||||
nomore:
|
||||
cmp ah,maxfunc
|
||||
jbe noerrorint
|
||||
stc
|
||||
jmp itsok
|
||||
noerrorint:
|
||||
clc
|
||||
push bx
|
||||
mov bl,ah ;On calcule d'aprés le n° de fonction
|
||||
xor bh,bh ;quel sera l'entrée dans la table indexée
|
||||
shl bx,1 ;des adresses fonctions.
|
||||
mov bx,cs:[bx+tables] ;On récupère cette adresse depuis la table
|
||||
mov cs:current,bx ;On la stocke temporairement pour obtenir les registres d'origine
|
||||
pop bx
|
||||
clc
|
||||
call cs:current ;Puis on execute la fonction
|
||||
itsok:
|
||||
push bp
|
||||
mov bp,sp ;On prend sp dans bp pour adresser la pile
|
||||
jnc noerror ;La fonction appelée a renvoyer une erreur : Flag CARRY ?
|
||||
or byte ptr [bp+6],1b;Si oui on le retranscrit sur le registre FLAG qui sera dépilé lors du IRET
|
||||
;xor eax,eax
|
||||
;mov ax,cs ;On récupère le segment et l'offset puis en renvoie l'adresse physique
|
||||
;shl eax,4 ;de l'erreur.
|
||||
;add ax,cs:current
|
||||
jmp endofint ;on termine l'int
|
||||
noerror:
|
||||
and byte ptr [bp+6],0FEh;Si pas d'erreur on efface le Bit CARRY du FLAG qui sera dépilé lors du IRET
|
||||
endofint:
|
||||
pop bp
|
||||
sti ;On réactive les interruptions logiciellement
|
||||
iret ;Puis on retourne au programme appelant.
|
||||
|
||||
current dw 0 ;Mot temporaire qui contient l'adresse de la fonction appelée
|
||||
tables dw MBinit ;Table qui contient les adresses de toutes les fonctions de VIDEO (WORD)
|
||||
dw MBFree
|
||||
dw MBCreate
|
||||
dw MBresident
|
||||
dw MBGet
|
||||
dw MBFind
|
||||
dw MBChown
|
||||
dw MBAlloc
|
||||
dw MBclean
|
||||
dw MBfindsb
|
||||
|
||||
FirstMB dw 0
|
||||
|
||||
;Initialise les blocs de mémoire
|
||||
;Mise a nivo de la mémoire (jonction de blocs libre)
|
||||
MBclean:
|
||||
push ax bx dx es gs
|
||||
mov bx,cs:firstmb
|
||||
dec bx
|
||||
dec bx
|
||||
xor ax,ax
|
||||
xor dx,dx
|
||||
searchfree3:
|
||||
mov gs,bx
|
||||
cmp gs:[MB.Check],'NH'
|
||||
jne erroronsearch
|
||||
inc bx
|
||||
inc bx
|
||||
add bx,gs:[MB.Sizes]
|
||||
cmp word ptr gs:[MB.Sizes],0
|
||||
je erroronsearch
|
||||
cmp gs:[MB.Reference],Free
|
||||
jne notfreeatall
|
||||
cmp ax,0
|
||||
je notmeetafree
|
||||
add dx,gs:[MB.Sizes]
|
||||
mov word ptr gs:[MB.Check],0
|
||||
mov dword ptr gs:[MB.Names],0
|
||||
mov dword ptr gs:[MB.Names+4],0
|
||||
inc dx
|
||||
inc dx
|
||||
jmp nottrigered
|
||||
notmeetafree:
|
||||
xor dx,dx
|
||||
mov ax,gs
|
||||
jmp nottrigered
|
||||
notfreeatall:
|
||||
cmp ax,0
|
||||
je nottrigered
|
||||
mov es,ax
|
||||
add es:[MB.Sizes],dx
|
||||
xor ax,ax
|
||||
nottrigered:
|
||||
cmp gs:[MB.IsNotLast],true
|
||||
je searchfree3
|
||||
cmp ax,0
|
||||
je reallyfinish
|
||||
mov es,ax
|
||||
add es:[MB.Sizes],dx
|
||||
mov es:[MB.IsNotLast],False
|
||||
reallyfinish:
|
||||
clc
|
||||
pop gs es dx bx ax
|
||||
ret
|
||||
erroronsearch:
|
||||
stc
|
||||
pop gs es dx bx ax
|
||||
ret
|
||||
|
||||
|
||||
;Initialise les blocs de mémoire en prenant memorystart pour segment de base
|
||||
MBinit:
|
||||
push ax cx es
|
||||
mov ax,gs
|
||||
mov cs:Firstmb,ax
|
||||
cmp cs:FirstMB,0
|
||||
jne notforfree
|
||||
mov ax,memorystart
|
||||
mov cs:Firstmb,ax
|
||||
mov cx,0A000h
|
||||
sub cx,ax
|
||||
dec ax
|
||||
dec ax
|
||||
mov es,ax
|
||||
mov cx,0A000h
|
||||
sub cx,ax
|
||||
dec cx
|
||||
mov es:[MB.Reference],Free
|
||||
mov es:[MB.Sizes],cx
|
||||
mov es:[MB.Check],'NH'
|
||||
cmp es:[MB.Check],'NH'
|
||||
je notforfree
|
||||
mov es:[MB.Reference],Free
|
||||
mov es:[MB.Sizes],cx
|
||||
mov es:[MB.Check],'NH'
|
||||
mov dword ptr es:[MB.Names],'eerF'
|
||||
mov dword ptr es:[MB.Names+4],0
|
||||
mov es:[MB.IsNotLast],False
|
||||
clc
|
||||
pop es cx ax
|
||||
|
@ -24,51 +153,235 @@ notforfree:
|
|||
|
||||
;Libère le bloc de mémoire GS
|
||||
MBFree:
|
||||
push bx es
|
||||
push ax bx es
|
||||
mov bx,gs
|
||||
dec bx
|
||||
mov ax,bx
|
||||
dec bx
|
||||
dec bx
|
||||
mov es,bx
|
||||
cmp es:[MB.Check],'NH'
|
||||
je notforfree
|
||||
mov es:[MB.IsResident],0
|
||||
cmp es:[MB.Reference],Free
|
||||
je wasfree
|
||||
cmp es:[MB.IsResident],true
|
||||
je wasfree
|
||||
mov es:[MB.IsResident],false
|
||||
mov es:[MB.Reference],Free
|
||||
mov dword ptr es:[MB.Names],'eerF'
|
||||
mov dword ptr es:[MB.Names+4],0
|
||||
mov bx,cs:firstmb
|
||||
dec bx
|
||||
dec bx
|
||||
searchtofree:
|
||||
mov gs,bx
|
||||
cmp gs:[MB.Check],'NH'
|
||||
jne wasfree
|
||||
inc bx
|
||||
inc bx
|
||||
add bx,gs:[MB.Sizes]
|
||||
cmp word ptr gs:[MB.Sizes],0
|
||||
je wasfree
|
||||
cmp ax,gs:[MB.Reference]
|
||||
jne nottofree
|
||||
mov gs:[MB.IsResident],false
|
||||
mov gs:[MB.Reference],Free
|
||||
mov dword ptr gs:[MB.Names],'eerF'
|
||||
mov dword ptr gs:[MB.Names+4],0
|
||||
nottofree:
|
||||
cmp gs:[MB.IsNotLast],true
|
||||
je searchtofree
|
||||
call MBclean
|
||||
pop es bx ax
|
||||
ret
|
||||
wasfree:
|
||||
stc
|
||||
pop es bx ax
|
||||
ret
|
||||
|
||||
;Change le proprietaire de GS a dx
|
||||
MBChown:
|
||||
push bx es
|
||||
mov bx,gs
|
||||
dec bx
|
||||
dec bx
|
||||
mov es,bx
|
||||
cmp es:[MB.Reference],Free
|
||||
je wasfree2
|
||||
mov es:[MB.Reference],dx
|
||||
pop es bx
|
||||
ret
|
||||
ret
|
||||
wasfree2:
|
||||
stc
|
||||
pop es bx
|
||||
ret
|
||||
|
||||
;Alloue un bloc de CX caractere pour le process visé -> GS
|
||||
MBAlloc:
|
||||
push dx si bp ds
|
||||
mov bp,sp
|
||||
mov dx,ss:[bp+12]
|
||||
push cs
|
||||
pop ds
|
||||
mov si,offset data
|
||||
call MBCreate
|
||||
call MBChown
|
||||
pop ds bp si dx
|
||||
ret
|
||||
|
||||
data db '/Data',0
|
||||
|
||||
;Creér un bloc de nom ds:si de taille cx (octets) -> n°segement dans GS
|
||||
;Renvoie en GS le MB n° cx carry quand terminé
|
||||
MBGet:
|
||||
push bx dx
|
||||
mov bx,cs:firstmb
|
||||
dec bx
|
||||
dec bx
|
||||
xor dx,dx
|
||||
searchfree2:
|
||||
mov gs,bx
|
||||
cmp gs:[MB.Check],'NH'
|
||||
jne itsend
|
||||
inc bx
|
||||
inc bx
|
||||
add bx,gs:[MB.Sizes]
|
||||
cmp word ptr gs:[MB.Sizes],0
|
||||
je itsend
|
||||
cmp dx,cx
|
||||
je foundmcb
|
||||
ja itsend
|
||||
inc dx
|
||||
cmp gs:[MB.IsNotLast],true
|
||||
je searchfree2
|
||||
itsend:
|
||||
stc
|
||||
pop dx bx
|
||||
ret
|
||||
foundmcb:
|
||||
clc
|
||||
pop dx bx
|
||||
ret
|
||||
|
||||
;Renvoie en GS le MCB qui correspond a ds:si
|
||||
MBFind:
|
||||
push ax bx si di
|
||||
mov bx,cs:firstmb
|
||||
dec bx
|
||||
dec bx
|
||||
mov di,MB.Names
|
||||
search:
|
||||
mov gs,bx
|
||||
cmp gs:[MB.Check],'NH'
|
||||
jne itsend2
|
||||
inc bx
|
||||
inc bx
|
||||
add bx,gs:[MB.Sizes]
|
||||
cmp word ptr gs:[MB.Sizes],0
|
||||
je itsend2
|
||||
push si di
|
||||
cmpnames:
|
||||
mov al,gs:[di]
|
||||
cmp al,ds:[si]
|
||||
jne ok
|
||||
cmp al,0
|
||||
je ok
|
||||
inc si
|
||||
inc di
|
||||
jmp cmpnames
|
||||
ok:
|
||||
pop di si
|
||||
je foundmcb2
|
||||
cmp gs:[MB.IsNotLast],true
|
||||
je search
|
||||
itsend2:
|
||||
stc
|
||||
pop di si bx ax
|
||||
ret
|
||||
foundmcb2:
|
||||
mov bx,gs
|
||||
inc bx
|
||||
inc bx
|
||||
mov gs,bx
|
||||
clc
|
||||
pop di si bx ax
|
||||
ret
|
||||
|
||||
;Renvoie en GS le sous mcb qui correspond a ds:si et qui appartien a dx
|
||||
MBFindsb:
|
||||
push ax bx si di
|
||||
mov bx,cs:firstmb
|
||||
dec bx
|
||||
dec bx
|
||||
mov di,MB.Names
|
||||
search2:
|
||||
mov gs,bx
|
||||
cmp gs:[MB.Check],'NH'
|
||||
jne itsend3
|
||||
inc bx
|
||||
inc bx
|
||||
add bx,gs:[MB.Sizes]
|
||||
cmp word ptr gs:[MB.Sizes],0
|
||||
je itsend3
|
||||
push si di
|
||||
cmpnames2:
|
||||
mov al,gs:[di]
|
||||
cmp al,ds:[si]
|
||||
jne ok2
|
||||
cmp al,0
|
||||
je ok2
|
||||
inc si
|
||||
inc di
|
||||
jmp cmpnames2
|
||||
ok2:
|
||||
pop di si
|
||||
jne notfoundmcb2
|
||||
cmp gs:[MB.Reference],dx
|
||||
je foundmcb3
|
||||
notfoundmcb2:
|
||||
cmp gs:[MB.IsNotLast],true
|
||||
je search2
|
||||
itsend3:
|
||||
stc
|
||||
pop di si bx ax
|
||||
ret
|
||||
foundmcb3:
|
||||
mov bx,gs
|
||||
inc bx
|
||||
inc bx
|
||||
mov gs,bx
|
||||
clc
|
||||
pop di si bx ax
|
||||
ret
|
||||
|
||||
;Creér un bloc de nom ds:si de taille cx (octets) -> n°segment dans GS
|
||||
MBCreate:
|
||||
push bp
|
||||
mov bp,sp
|
||||
mov gs,ss:[bp+6]
|
||||
push ax bx cx dx si di es
|
||||
shr cx,4
|
||||
inc cx
|
||||
mov bx,cs:firstmb
|
||||
dec bx
|
||||
dec bx
|
||||
mov dl,1
|
||||
searchfree:
|
||||
cmp dl,False
|
||||
je wasntgood
|
||||
mov es,bx
|
||||
cmp es:[MB.Check],'NH'
|
||||
jne wasntgood
|
||||
cmp es:[MB.IsNotLast],True
|
||||
sete dl
|
||||
cmp es:[MB.Reference],Free
|
||||
je weregood
|
||||
cmp dl,False
|
||||
je wasntgood
|
||||
notsogood:
|
||||
inc bx
|
||||
add bx,es:[MB.Sizes]
|
||||
jmp searchfree
|
||||
weregood:
|
||||
jne notsogood
|
||||
mov ax,es:[MB.Sizes]
|
||||
cmp cx,ax
|
||||
ja notsogood
|
||||
mov es:[MB.IsNotLast],True
|
||||
mov es:[MB.Reference],cs
|
||||
mov word ptr es:[MB.Check],'NH'
|
||||
mov es:[MB.IsNotLast],True
|
||||
mov es:[MB.Reference],gs
|
||||
mov es:[MB.IsResident],False
|
||||
mov es:[MB.Sizes],cx
|
||||
mov di,MB.Names
|
||||
mov di,MB.Names
|
||||
push ax cx
|
||||
mov cx,8
|
||||
mov cx,32
|
||||
loops:
|
||||
mov dh,[si]
|
||||
inc si
|
||||
|
@ -84,14 +397,16 @@ endofloops:
|
|||
mov al,0
|
||||
rep stosb
|
||||
pop cx ax
|
||||
mov word ptr es:[MB.Check],'NH'
|
||||
sub ax,cx
|
||||
inc bx
|
||||
inc bx
|
||||
sub ax,cx
|
||||
dec ax
|
||||
js nofree
|
||||
inc bx
|
||||
mov gs,bx
|
||||
add bx,cx
|
||||
mov es,bx
|
||||
dec ax
|
||||
cmp ax,0
|
||||
je nofree
|
||||
mov es:[MB.Sizes],cx
|
||||
add cx,bx
|
||||
mov es,cx
|
||||
mov es:[MB.IsNotLast],dl
|
||||
mov es:[MB.IsResident],False
|
||||
mov es:[MB.Reference],Free
|
||||
|
@ -100,20 +415,31 @@ endofloops:
|
|||
mov dword ptr es:[MB.Names+4],0
|
||||
mov es:[MB.Check],'NH'
|
||||
nofree:
|
||||
mov gs,bx
|
||||
clc
|
||||
pop es di si dx cx bx ax
|
||||
pop bp
|
||||
ret
|
||||
wasntgood:
|
||||
stc
|
||||
pop es di si dx cx bx ax
|
||||
pop bp
|
||||
ret
|
||||
notsogood:
|
||||
inc bx
|
||||
inc bx
|
||||
add bx,es:[MB.Sizes]
|
||||
jmp searchfree
|
||||
|
||||
;Rend le segment GS résident
|
||||
MBresident:
|
||||
push bx es
|
||||
mov bx,gs
|
||||
dec bx
|
||||
dec bx
|
||||
mov es,bx
|
||||
mov es:[MB.IsResident],True
|
||||
pop es bx
|
||||
ret
|
||||
|
||||
end start
|
||||
|
|
|
@ -6,6 +6,7 @@ smart
|
|||
org 0100h
|
||||
|
||||
include ..\include\fat.h
|
||||
include ..\include\mem.h
|
||||
|
||||
start:
|
||||
push cs
|
||||
|
@ -16,39 +17,17 @@ pop ds
|
|||
pop es
|
||||
pop fs
|
||||
pop gs
|
||||
;xor ax,ax
|
||||
;mov ds,ax
|
||||
;mov si,7C00h
|
||||
mov si,offset eepop
|
||||
xor ax,ax
|
||||
mov ds,ax
|
||||
mov si,7C00h
|
||||
mov di,offset myboot
|
||||
mov cx,type bootsector
|
||||
push cs
|
||||
pop es
|
||||
rep movsb
|
||||
push cs
|
||||
pop ds
|
||||
jmp noone
|
||||
|
||||
eepop db 0,0,0
|
||||
bootdb db 'COS2000A' ;Fabricant + n°série Formatage
|
||||
sizec dw 512 ;octet/secteur
|
||||
db 1 ;secteur/cluster
|
||||
reserv dw 1 ;secteur reserv‚
|
||||
nbfat db 2 ;nb de copie de la FAT
|
||||
nbfit dw 224 ;taille rep racine
|
||||
allclu dw 2880 ;nb secteur du volume si < 32 még
|
||||
db 0F0h ;Descripteur de média
|
||||
fatsize dw 9 ;secteur/FAT
|
||||
nbtrack dw 18 ;secteur/piste
|
||||
head dw 2 ;nb de tˆteb de lecture/écriture
|
||||
hidden dd 0 ;nombre de secteur cach‚s
|
||||
dd 0 ;si nbsecteur = 0 nbsect ; the number of sectors
|
||||
bootdrv db 0 ;Lecteur de d‚marrage
|
||||
bootsig db 0 ;NA
|
||||
db 29h ;boot signature 29h
|
||||
bootsig2 dd 01020304h ;no de serie
|
||||
pope db 'COS2000 ' ;nom de volume
|
||||
db 'FAT12 ' ;FAT
|
||||
|
||||
|
||||
xor ax,ax
|
||||
mov es,ax
|
||||
mov di,1Eh*4
|
||||
|
@ -70,11 +49,17 @@ noone:
|
|||
pop es
|
||||
pop fs
|
||||
pop gs
|
||||
|
||||
mov si,offset present
|
||||
mov bl,4
|
||||
call showstr
|
||||
mov si,offset premice2
|
||||
mov bl,7
|
||||
call showstr
|
||||
call MBinit
|
||||
jc nomem1
|
||||
call InitDrive
|
||||
|
||||
mov si,offset premice
|
||||
mov bx,7
|
||||
mov bl,7
|
||||
call showstr
|
||||
mov si,offset next
|
||||
call showstr
|
||||
|
@ -87,30 +72,19 @@ noone:
|
|||
mov di,offset loadinglist
|
||||
call loadfile
|
||||
jc noconfread
|
||||
|
||||
mov si,offset debut
|
||||
mov bx,7
|
||||
mov bl,7
|
||||
call showstr
|
||||
mov bx,500h
|
||||
xor cx,cx
|
||||
mov si,offset loadinglist
|
||||
suiteloading:
|
||||
call readline
|
||||
jc noconfload
|
||||
push bx si
|
||||
mov bl,7
|
||||
push si
|
||||
mov si,offset next
|
||||
call showstr
|
||||
pop si bx
|
||||
call showstr
|
||||
mov dx,bx
|
||||
push bx si
|
||||
mov bx,7
|
||||
mov si,offset address
|
||||
call showstr
|
||||
mov cx,16
|
||||
call showhex
|
||||
mov si,offset addressend
|
||||
pop si
|
||||
call showstr
|
||||
xor bp,bp
|
||||
mov dx,ax
|
||||
|
@ -129,14 +103,15 @@ noadder:
|
|||
mov bp,1
|
||||
sub dx,68h
|
||||
haveirq:
|
||||
push si
|
||||
mov si,offset irqs
|
||||
call showstr
|
||||
mov cx,4
|
||||
call showhex
|
||||
mov si,offset irqsend
|
||||
call showstr
|
||||
pop si
|
||||
noadd:
|
||||
pop si bx
|
||||
cmp bp,1
|
||||
jne install
|
||||
call replacehandler
|
||||
|
@ -145,11 +120,24 @@ install:
|
|||
call installhandler
|
||||
suites:
|
||||
jc nohandlerload
|
||||
add bx,0F00h
|
||||
mov dx,es
|
||||
mov bl,7
|
||||
push si
|
||||
mov si,offset address
|
||||
call showstr
|
||||
mov cx,16
|
||||
call showhex
|
||||
mov si,offset addressend
|
||||
call showstr
|
||||
inc cx
|
||||
pop si
|
||||
call nextline
|
||||
jnz suiteloading
|
||||
|
||||
|
||||
;initialisation des MCBs
|
||||
mov ah,0
|
||||
int 49h
|
||||
|
||||
mov si,offset fini
|
||||
mov bl,7
|
||||
call showstr
|
||||
|
@ -157,13 +145,10 @@ suites:
|
|||
call showstr
|
||||
mov si,offset prompt
|
||||
call showstr
|
||||
mov ax,6000h
|
||||
mov es,ax
|
||||
push ax
|
||||
mov di,0100h
|
||||
push di
|
||||
call loadfile
|
||||
call projfile
|
||||
jc nopromptload
|
||||
push es
|
||||
push 0100h
|
||||
push 7202h
|
||||
popf
|
||||
push es
|
||||
|
@ -191,6 +176,19 @@ noconfread:
|
|||
mov bl,4
|
||||
call showstr
|
||||
jmp erroron
|
||||
|
||||
nomem1:
|
||||
mov si,offset premice2e
|
||||
mov bl,4
|
||||
call showstr
|
||||
jmp erroron
|
||||
|
||||
nomem2:
|
||||
mov si,offset premice3e
|
||||
mov bl,4
|
||||
call showstr
|
||||
jmp erroron
|
||||
|
||||
|
||||
noconfload:
|
||||
mov di,si
|
||||
|
@ -235,28 +233,35 @@ confe db 0Dh,0Ah,'Erreur dans le fichier de configuration a la ligne ',0
|
|||
confee db 0Dh,0Ah,'Erreur de lecture du fichier de configuration',0
|
||||
confe2 db ' caractere ',0
|
||||
erreur db 0Dh,0Ah,'Pressez une touche pour redemarrer...',0
|
||||
|
||||
present db 0Dh,0Ah,'COS2000 Version 1.2',0
|
||||
premice2 db 0Dh,0Ah,'Initialisation de la memoire',0
|
||||
premice2e db 0Dh,0Ah,'Erreur lors de l''initialisation memoire',0
|
||||
premice3e db 0Dh,0Ah,'Erreur lors de la reservation memoire',0
|
||||
;==positionne si sur l'entrée suivante de la loading liste jusqu'a equal
|
||||
nextline:
|
||||
push ax cx di
|
||||
push cs
|
||||
pop es
|
||||
mov di,si
|
||||
mov al,0Ah
|
||||
mov cx,20
|
||||
cld
|
||||
repnz scasb
|
||||
mov si,di
|
||||
cmp byte ptr [di],0
|
||||
pop di cx ax
|
||||
ret
|
||||
|
||||
;==Lit la loading list et initialise SI(Fichier) BX(adresse) AX(interruption)
|
||||
;==Lit la loading list et initialise SI(Fichier) AX(interruption)
|
||||
readline:
|
||||
push cx dx di es
|
||||
push ds
|
||||
push cs
|
||||
pop es
|
||||
;Voir taille de la ligne -> DX
|
||||
mov di,si
|
||||
mov al,0Dh
|
||||
mov cx,20
|
||||
cld
|
||||
repne scasb
|
||||
sub cx,20
|
||||
neg cx
|
||||
|
@ -334,14 +339,23 @@ ShowHex:
|
|||
neg cx
|
||||
shl edx,cl
|
||||
shr di,2
|
||||
mov ah,0Eh
|
||||
mov ah,09h
|
||||
and bx,1111b
|
||||
Hexaize:
|
||||
rol edx,4
|
||||
mov si,dx
|
||||
and si,1111b
|
||||
mov al,[si+offset tab]
|
||||
int 10h
|
||||
push cx
|
||||
mov cx,1
|
||||
cmp al,32
|
||||
jb control2
|
||||
mov ah,09h
|
||||
int 10h
|
||||
control2:
|
||||
mov ah,0Eh
|
||||
int 10h
|
||||
pop cx
|
||||
dec di
|
||||
jnz Hexaize
|
||||
pop di si edx cx bx ax
|
||||
|
@ -350,29 +364,298 @@ Tab db '0123456789ABCDEF'
|
|||
|
||||
;==============================Affiche une chaine DS:SI de couleur BL==============
|
||||
showstr:
|
||||
push ax bx si
|
||||
push ax bx cx si
|
||||
mov cx,1
|
||||
again:
|
||||
lodsb
|
||||
or al,al
|
||||
jz fin
|
||||
and bx,0111b
|
||||
cmp al,32
|
||||
jb control
|
||||
mov ah,09h
|
||||
int 10h
|
||||
control:
|
||||
mov ah,0Eh
|
||||
and bx,1111b
|
||||
int 10h
|
||||
jmp again
|
||||
fin:
|
||||
pop si bx ax
|
||||
pop si cx bx ax
|
||||
ret
|
||||
|
||||
|
||||
;================================================
|
||||
;Routine de débogage
|
||||
;================================================
|
||||
regdata:
|
||||
eaxr dd 0
|
||||
ebxr dd 0
|
||||
ecxr dd 0
|
||||
edxr dd 0
|
||||
esir dd 0
|
||||
edir dd 0
|
||||
espr dd 0
|
||||
ebpr dd 0
|
||||
csr dw 0
|
||||
dsr dw 0
|
||||
esr dw 0
|
||||
fsr dw 0
|
||||
gsr dw 0
|
||||
ssr dw 0
|
||||
|
||||
reg db 0Dh,0Ah,"eax : ",0
|
||||
db 0Dh,0Ah,"ebx : ",0
|
||||
db 0Dh,0Ah,"ecx : ",0
|
||||
db 0Dh,0Ah,"edx : ",0
|
||||
db 0Dh,0Ah,"esi : ",0
|
||||
db 0Dh,0Ah,"edi : ",0
|
||||
db 0Dh,0Ah,"esp : ",0
|
||||
db 0Dh,0Ah,"ebp : ",0
|
||||
db 0Dh,0Ah,"cs : ",0
|
||||
db 0Dh,0Ah,"ds : ",0
|
||||
db 0Dh,0Ah,"es : ",0
|
||||
db 0Dh,0Ah,"fs : ",0
|
||||
db 0Dh,0Ah,"gs : ",0
|
||||
db 0Dh,0Ah,"ss : ",0
|
||||
|
||||
showreg:
|
||||
pushad
|
||||
pushf
|
||||
push ds
|
||||
mov cs:[eaxr],eax
|
||||
mov cs:[ebxr],ebx
|
||||
mov cs:[ecxr],ecx
|
||||
mov cs:[edxr],edx
|
||||
mov cs:[esir],esi
|
||||
mov cs:[edir],edi
|
||||
mov cs:[espr],esp
|
||||
mov cs:[ebpr],ebp
|
||||
mov cs:[csr],cs
|
||||
mov cs:[dsr],ds
|
||||
mov cs:[esr],es
|
||||
mov cs:[fsr],fs
|
||||
mov cs:[gsr],gs
|
||||
mov cs:[ssr],ss
|
||||
push cs
|
||||
pop ds
|
||||
mov si,offset poppp
|
||||
call Showstr
|
||||
mov si,offset reg
|
||||
mov di,offset regdata
|
||||
mov bx,7
|
||||
showregs:
|
||||
cmp byte ptr cs:[si+6],":"
|
||||
jne endshowregs
|
||||
call Showstr
|
||||
cmp byte ptr cs:[si+4]," "
|
||||
je segsss
|
||||
mov edx,cs:[di]
|
||||
mov cx,32
|
||||
call Showhex
|
||||
add di,4
|
||||
jmp showmax
|
||||
segsss:
|
||||
mov dx,cs:[di]
|
||||
mov cx,16
|
||||
call Showhex
|
||||
add di,2
|
||||
showmax:
|
||||
add si,9
|
||||
mov bp,dx
|
||||
push si
|
||||
mov si,offset beginds
|
||||
call showstr
|
||||
mov si,bp
|
||||
mov cx,8
|
||||
mov al,0
|
||||
letshow:
|
||||
mov dl,ds:[si]
|
||||
inc si
|
||||
call showhex
|
||||
inc al
|
||||
cmp al,10
|
||||
jb letshow
|
||||
mov si,offset ende
|
||||
call showstr
|
||||
mov si,offset begines
|
||||
call showstr
|
||||
mov si,bp
|
||||
mov cx,8
|
||||
mov al,0
|
||||
letshow2:
|
||||
mov dl,es:[si]
|
||||
inc si
|
||||
call showhex
|
||||
inc al
|
||||
cmp al,10
|
||||
jb letshow2
|
||||
mov si,offset ende
|
||||
call showstr
|
||||
pop si
|
||||
jmp showregs
|
||||
endshowregs:
|
||||
mov si,offset poppp
|
||||
call Showstr
|
||||
xor ax,ax
|
||||
int 16h
|
||||
pop ds
|
||||
popf
|
||||
popad
|
||||
ret
|
||||
begines db ' es[',0
|
||||
beginds db ' ds[',0
|
||||
ende db '] ',0
|
||||
|
||||
;vide ES pour 200 octets (pour test)
|
||||
showmem:
|
||||
pushad
|
||||
pushf
|
||||
mov si,offset poppp
|
||||
mov bx,7
|
||||
call Showstr
|
||||
mov dx,es
|
||||
mov cx,16
|
||||
mov bx,7
|
||||
call ShowHex
|
||||
mov si,offset poppp
|
||||
mov bx,7
|
||||
call Showstr
|
||||
xor si,si
|
||||
loopererr:
|
||||
mov dx,es:[si]
|
||||
mov cx,8
|
||||
mov bx,7
|
||||
call ShowHex
|
||||
inc si
|
||||
cmp si,200
|
||||
jb loopererr
|
||||
mov si,offset poppp
|
||||
mov bx,7
|
||||
call Showstr
|
||||
xor ax,ax
|
||||
int 16h
|
||||
popf
|
||||
popad
|
||||
ret
|
||||
|
||||
poppp db 0Ah,0Dh,'*********',0Ah,0Dh,0
|
||||
|
||||
;================================================
|
||||
;Routine de gestion de la mémoire
|
||||
;================================================
|
||||
|
||||
include ..\include\mem.h
|
||||
|
||||
FirstMB dw 0
|
||||
|
||||
|
||||
;Initialise les blocs de mémoire en prenant GS pour segment de base
|
||||
MBinit:
|
||||
push ax cx es
|
||||
mov ax,memorystart
|
||||
mov cs:Firstmb,ax
|
||||
mov cx,0A000h
|
||||
sub cx,ax
|
||||
dec ax
|
||||
dec ax
|
||||
mov es,ax
|
||||
mov es:[MB.Reference],Free
|
||||
mov es:[MB.Sizes],cx
|
||||
mov es:[MB.Check],'NH'
|
||||
mov dword ptr es:[MB.Names],'eerF'
|
||||
mov dword ptr es:[MB.Names+4],0
|
||||
mov es:[MB.IsNotLast],False
|
||||
clc
|
||||
pop es cx ax
|
||||
ret
|
||||
notforfree:
|
||||
stc
|
||||
pop es cx ax
|
||||
ret
|
||||
|
||||
;Creér un bloc de nom ds:si de taille cx (octets) -> n°segment dans GS
|
||||
MBCreate:
|
||||
push ax bx cx dx si di es
|
||||
shr cx,4
|
||||
inc cx
|
||||
mov bx,cs:firstmb
|
||||
dec bx
|
||||
dec bx
|
||||
mov dl,1
|
||||
searchfree:
|
||||
cmp dl,False
|
||||
je wasntgood
|
||||
mov es,bx
|
||||
cmp es:[MB.Check],'NH'
|
||||
jne wasntgood
|
||||
cmp es:[MB.IsNotLast],True
|
||||
sete dl
|
||||
cmp es:[MB.Reference],Free
|
||||
jne notsogood
|
||||
mov ax,es:[MB.Sizes]
|
||||
cmp cx,ax
|
||||
ja notsogood
|
||||
mov word ptr es:[MB.Check],'NH'
|
||||
mov es:[MB.IsNotLast],True
|
||||
mov es:[MB.Reference],cs
|
||||
mov es:[MB.IsResident],True
|
||||
mov es:[MB.Sizes],cx
|
||||
mov di,MB.Names
|
||||
push ax cx
|
||||
mov cx,32
|
||||
loops:
|
||||
mov dh,[si]
|
||||
inc si
|
||||
dec cx
|
||||
jz endofloops
|
||||
cmp dh,0
|
||||
je endofloops
|
||||
mov es:[di],dh
|
||||
inc di
|
||||
jmp loops
|
||||
endofloops:
|
||||
inc cx
|
||||
mov al,0
|
||||
rep stosb
|
||||
pop cx ax
|
||||
sub ax,cx
|
||||
dec ax
|
||||
dec ax
|
||||
;js nofree
|
||||
inc bx
|
||||
inc bx
|
||||
mov gs,bx
|
||||
add bx,cx
|
||||
mov es,bx
|
||||
mov es:[MB.IsNotLast],dl
|
||||
mov es:[MB.IsResident],False
|
||||
mov es:[MB.Reference],Free
|
||||
mov es:[MB.Sizes],ax
|
||||
mov dword ptr es:[MB.Names],'eerF'
|
||||
mov dword ptr es:[MB.Names+4],0
|
||||
mov es:[MB.Check],'NH'
|
||||
nofree:
|
||||
clc
|
||||
pop es di si dx cx bx ax
|
||||
ret
|
||||
wasntgood:
|
||||
stc
|
||||
pop es di si dx cx bx ax
|
||||
ret
|
||||
notsogood:
|
||||
inc bx
|
||||
inc bx
|
||||
add bx,es:[MB.Sizes]
|
||||
jmp searchfree
|
||||
|
||||
;================================================
|
||||
;Routine de gestion de handler
|
||||
;================================================
|
||||
|
||||
;remplace le handler pointer par ds:si en bx:100h interruption ax
|
||||
;remplace le handler pointer par ds:si en bloc:100h interruption ax
|
||||
replacehandler:
|
||||
push ax bx cx si di ds es
|
||||
mov es,bx
|
||||
mov di,0100h
|
||||
call loadfile
|
||||
push ax bx cx si di ds
|
||||
call projfile
|
||||
jc reph
|
||||
mov bx,ax
|
||||
call getint
|
||||
|
@ -380,36 +663,34 @@ mov es:[102h],si
|
|||
mov es:[104h],ds
|
||||
call setint
|
||||
reph:
|
||||
pop es ds di si cx bx ax
|
||||
pop ds di si cx bx ax
|
||||
ret
|
||||
|
||||
;install le handler pointer par ds:si en bx:100h interruption ax
|
||||
;install le handler pointer par ds:si en bloc:100h interruption ax -> es
|
||||
installhandler:
|
||||
push bx cx di es
|
||||
mov es,bx
|
||||
mov di,100h
|
||||
call loadfile
|
||||
push bx cx
|
||||
call projfile
|
||||
jc insh
|
||||
mov bx,ax
|
||||
call setint
|
||||
insh:
|
||||
pop es di cx bx
|
||||
pop cx bx
|
||||
ret
|
||||
|
||||
;met es:di le handle de l'int bx
|
||||
;met es:100h le handle de l'int bx
|
||||
setint:
|
||||
push ax bx ds
|
||||
cli
|
||||
shl bx,2
|
||||
xor ax,ax
|
||||
mov ds,ax
|
||||
mov ds:[bx],di
|
||||
mov word ptr ds:[bx],0100h
|
||||
mov ds:[bx+2],es
|
||||
pop ds bx ax
|
||||
sti
|
||||
ret
|
||||
|
||||
;met ds:si le handle de l'int bx
|
||||
;met dans ds:si le handle de l'int bx
|
||||
getint:
|
||||
push ax bx es
|
||||
shl bx,2
|
||||
|
@ -480,6 +761,41 @@ nocarry:
|
|||
pop si dx bx ax
|
||||
ret
|
||||
|
||||
;============projfile (Fonction 17)===============
|
||||
;Charge le fichier ds:si sur un bloc mémoire -> ecx taille -> es bloc
|
||||
;-> AH=17
|
||||
;<- Flag Carry si erreur
|
||||
;=====================================================
|
||||
projfile:
|
||||
push eax bx di gs
|
||||
push cs
|
||||
pop es
|
||||
call uppercase
|
||||
mov di,offset tempfit
|
||||
call searchfile
|
||||
jne errorload
|
||||
jc errorload
|
||||
mov eax,cs:tempfit.FileSize
|
||||
mov ecx,eax
|
||||
add ecx,100h
|
||||
call MBCreate
|
||||
jc errorload
|
||||
push gs
|
||||
pop es
|
||||
mov cx,cs:tempfit.FileGroup
|
||||
mov di,100h
|
||||
call loadway
|
||||
jc errorload
|
||||
clc
|
||||
mov ecx,eax
|
||||
pop gs di bx eax
|
||||
ret
|
||||
errorload:
|
||||
stc
|
||||
mov ecx,0
|
||||
pop gs di bx eax
|
||||
ret
|
||||
|
||||
;============loadfile (Fonction 4)===============
|
||||
;Charge le fichier ds:si en es:di ->ecx taille
|
||||
;-> AH=4
|
||||
|
@ -498,12 +814,12 @@ loadfile:
|
|||
mov cx,cs:tempfit.FileGroup
|
||||
mov eax,cs:tempfit.FileSize
|
||||
call loadway
|
||||
jc errorload
|
||||
jc errorload2
|
||||
clc
|
||||
;mov ecx,eax
|
||||
pop di bx eax
|
||||
ret
|
||||
errorload:
|
||||
errorload2:
|
||||
stc
|
||||
mov ecx,0
|
||||
pop di bx eax
|
||||
|
@ -652,7 +968,7 @@ zeroload:
|
|||
ret
|
||||
noway:
|
||||
stc
|
||||
pop es ds ebp di si dx bx eax
|
||||
pop es ds ecx di si dx bx eax
|
||||
ret
|
||||
|
||||
;=============INITDRIVE (Fonction 04H)===============
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
mcb.sys(49)
|
||||
video.sys(47)
|
||||
horloge.sys(8)
|
||||
8259a.sys(50)
|
||||
disque.sys(48)
|
||||
souris.sys(74)
|
||||
heure.sys(8)
|
||||
clavier.sys(9)
|
||||
heure.sys(8)
|
||||
port.sys(D)
|
454
noyau/video.asm
454
noyau/video.asm
|
@ -100,6 +100,7 @@ tables dw setvideomode ;Table qui contient les adresses de toutes les fonctions
|
|||
dw showname
|
||||
dw showattr
|
||||
dw showsize
|
||||
dw getchar
|
||||
|
||||
;================================Table des modes videos (64 BYTES) ============================================
|
||||
;40*25 16 couleurs
|
||||
|
@ -226,7 +227,7 @@ Attribs equ 03C0h
|
|||
graphics equ 03CEh
|
||||
statut equ 03DAh
|
||||
|
||||
maxfunc equ 48
|
||||
maxfunc equ 39h
|
||||
maxmode equ 9
|
||||
planesize equ 64000
|
||||
;============================================Fonctions de l'int VIDEO===========================================
|
||||
|
@ -1274,6 +1275,20 @@ getxy:
|
|||
;=====================================
|
||||
setxy:
|
||||
push ax bx cx dx
|
||||
; xor ax,ax
|
||||
; int 16h
|
||||
; mov cl,cs:lines
|
||||
; dec cl
|
||||
; sub cl,bl
|
||||
; neg cl
|
||||
; js zero
|
||||
; xor ch,ch
|
||||
; inc cl
|
||||
; jmp nozero
|
||||
;zero:
|
||||
; mov cx,0
|
||||
;nozero:
|
||||
; call scrolldown
|
||||
mov cs:x,bh
|
||||
mov cs:y,bl
|
||||
mov al,bl
|
||||
|
@ -1298,6 +1313,7 @@ setxy:
|
|||
oktext:
|
||||
mov ax,0B800h
|
||||
mov es,ax
|
||||
call setcursor
|
||||
endofsetxy:
|
||||
pop dx cx bx ax
|
||||
ret
|
||||
|
@ -1507,12 +1523,59 @@ waitr:
|
|||
pop dx ax
|
||||
ret
|
||||
|
||||
;Renvoie le caractère sur le curseur en dl
|
||||
getchar:
|
||||
push ax di es
|
||||
mov ax,0B800h
|
||||
mov es,ax
|
||||
mov di,cs:xy
|
||||
mov dl,es:[di]
|
||||
pop es di ax
|
||||
ret
|
||||
|
||||
;Ecrit le caractère ASCII CL attribut CH aprés le curseur, en le mettant à jours
|
||||
charout:
|
||||
push ax bx cx dx di es
|
||||
cmp byte ptr cs:graphics,1
|
||||
jne textaccess
|
||||
mov dx,cx
|
||||
call emulatechar
|
||||
jmp adjusttext
|
||||
textaccess:
|
||||
mov ax,0B800h
|
||||
mov es,ax
|
||||
mov di,cs:xy
|
||||
mov es:[di],cx
|
||||
add cs:xy,2
|
||||
adjusttext:
|
||||
inc cs:x
|
||||
mov cl,cs:columns
|
||||
cmp cs:x,cl
|
||||
jb noadjusted
|
||||
call showline
|
||||
noadjusted:
|
||||
call setcursor
|
||||
pop es di dx cx bx ax
|
||||
ret
|
||||
|
||||
setcursor:
|
||||
push ax cx dx
|
||||
mov dx,CCRT
|
||||
mov al,0Eh
|
||||
mov cx,cs:xy
|
||||
shr cx,1
|
||||
mov ah,ch
|
||||
out dx,ax
|
||||
mov ah,cl
|
||||
inc al
|
||||
out dx,ax
|
||||
pop dx cx ax
|
||||
ret
|
||||
|
||||
|
||||
;Ecrit le caractère ASCII CL attribut CH aprés le curseur graphique, en le mettant à jours en mode graphique
|
||||
emulatechar:
|
||||
push ax bx cx dx di
|
||||
mov dx,cx
|
||||
mov di,dx
|
||||
and di,11111111b
|
||||
shl di,3
|
||||
|
@ -1548,198 +1611,315 @@ transparent:
|
|||
mov cx,cs:linesize
|
||||
shl cx,2
|
||||
cmp cs:xg,cx
|
||||
jb adjusttext
|
||||
jb ended
|
||||
mov cs:xg,0
|
||||
add cs:yg,8
|
||||
jmp adjusttext
|
||||
textaccess:
|
||||
mov ax,0B800h
|
||||
mov es,ax
|
||||
mov di,cs:xy
|
||||
mov es:[di],cx
|
||||
add cs:xy,2
|
||||
adjusttext:
|
||||
inc cs:x
|
||||
mov cl,cs:columns
|
||||
cmp cs:x,cl
|
||||
jb noadjusted
|
||||
call showline
|
||||
noadjusted:
|
||||
;mov dx,3D4h
|
||||
;mov al,0Eh
|
||||
;mov di,offset xy
|
||||
;mov ah,cs:[di]
|
||||
;out dx,ax
|
||||
;mov ah,cs:[di+1]
|
||||
;dec al
|
||||
;out dx,ax
|
||||
pop es di dx cx bx ax
|
||||
ret
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
;===================================sauve l'ecran rapidement================
|
||||
SaveScreen:
|
||||
push cx si di ds es
|
||||
mov cx,0B800H
|
||||
mov ds,cx
|
||||
push cs
|
||||
pop es
|
||||
mov cx,cs:pagesize
|
||||
shr cx,2
|
||||
xor si,si
|
||||
mov di,offset Copy2
|
||||
cld
|
||||
rep movsd
|
||||
pop es ds di si cx
|
||||
ended:
|
||||
pop di dx cx bx ax
|
||||
ret
|
||||
|
||||
|
||||
|
||||
;sauve l'ecran dans un bloc de mémoire
|
||||
savescreen:
|
||||
push ax cx dx si di bp ds es gs
|
||||
mov bp,sp
|
||||
mov dx,ss:[bp+22]
|
||||
mov ah,2
|
||||
mov cx,cs:pagesize
|
||||
push cs
|
||||
pop ds
|
||||
mov si,offset data3
|
||||
int 49h
|
||||
mov ah,6
|
||||
int 49h
|
||||
push gs
|
||||
pop es
|
||||
xor di,di
|
||||
call savescreento
|
||||
pop gs es ds bp di si dx cx ax
|
||||
ret
|
||||
|
||||
data3 db '/vgascreen',0
|
||||
|
||||
|
||||
;===================================sauve l'ecran rapidement en es:di================
|
||||
SaveScreento:
|
||||
push cx si di ds
|
||||
mov cx,0B800H
|
||||
mov cx,0B800h
|
||||
mov ds,cx
|
||||
xor ecx,ecx
|
||||
mov cx,cs:pagesize
|
||||
shr cx,2
|
||||
xor si,si
|
||||
cld
|
||||
rep movsd
|
||||
pop ds di si cx
|
||||
ret
|
||||
|
||||
;===================================sauve l'ecran rapidement================
|
||||
Savepage1:
|
||||
push cx si di ds es
|
||||
mov cx,0B800H
|
||||
mov ds,cx
|
||||
push cs
|
||||
pop es
|
||||
mov cx,cs:pagesize
|
||||
shr cx,2
|
||||
xor si,si
|
||||
mov di,offset Copy
|
||||
cld
|
||||
rep movsd
|
||||
pop es ds di si cx
|
||||
ret
|
||||
|
||||
;===================================sauve l'ecran rapidement================
|
||||
RestoreScreen:
|
||||
push cx si di ds es
|
||||
mov cx,0B800H
|
||||
mov es,cx
|
||||
;===================================sauve les parametres en es:di================
|
||||
Saveparamto:
|
||||
push ecx si di ds
|
||||
push cs
|
||||
pop ds
|
||||
xor ecx,ecx
|
||||
mov cx,datablocksize
|
||||
mov si,offset datablock
|
||||
cld
|
||||
rep movsb
|
||||
pop ds di si ecx
|
||||
ret
|
||||
|
||||
;===================================restore les parametres depuis en ds:si================
|
||||
Restoreparamfrom:
|
||||
push ecx si di es
|
||||
push cs
|
||||
pop es
|
||||
xor ecx,ecx
|
||||
mov cx,datablocksize
|
||||
mov di,offset datablock
|
||||
cld
|
||||
rep movsb
|
||||
pop es di si ecx
|
||||
ret
|
||||
|
||||
;sauve la page1 dans un bloc de mémoire
|
||||
Savepage1:
|
||||
push ax cx dx si di bp ds es gs
|
||||
mov bp,sp
|
||||
mov dx,ss:[bp+22]
|
||||
mov ah,2
|
||||
mov cx,cs:pagesize
|
||||
push cs
|
||||
pop ds
|
||||
mov si,offset data4
|
||||
int 49h
|
||||
mov ah,6
|
||||
int 49h
|
||||
push gs
|
||||
pop es
|
||||
xor di,di
|
||||
call Savepage1to
|
||||
pop gs es ds bp di si dx cx ax
|
||||
ret
|
||||
|
||||
data4 db '/vgapage1',0
|
||||
|
||||
;===================================sauve l'ecran rapidement================
|
||||
Savepage1to:
|
||||
push ecx si di ds
|
||||
mov cx,0B800H
|
||||
mov ds,cx
|
||||
xor ecx,ecx
|
||||
mov cx,cs:pagesize
|
||||
shr cx,2
|
||||
mov si,offset Copy2
|
||||
xor di,di
|
||||
mov si,cs:pagesize
|
||||
cld
|
||||
rep movsd
|
||||
pop es ds di si cx
|
||||
pop ds di si ecx
|
||||
ret
|
||||
|
||||
;R‚cupŠre l'ecran de la carte depuis son bloc mémoire
|
||||
RestoreScreen:
|
||||
push ax dx si bp ds gs
|
||||
mov bp,sp
|
||||
mov dx,ss:[bp+16]
|
||||
push cs
|
||||
pop ds
|
||||
mov si,offset data3
|
||||
mov ah,9
|
||||
int 49h
|
||||
push gs
|
||||
pop ds
|
||||
xor si,si
|
||||
call restorescreenfrom
|
||||
pop gs ds bp si dx ax
|
||||
ret
|
||||
|
||||
;===================================restore l'ecran rapidement de ds:si================
|
||||
RestoreScreenfrom:
|
||||
push cx si di ds es
|
||||
push ecx si di ds es
|
||||
mov cx,0B800H
|
||||
mov es,cx
|
||||
xor ecx,ecx
|
||||
mov cx,cs:pagesize
|
||||
shr cx,2
|
||||
xor di,di
|
||||
cld
|
||||
rep movsd
|
||||
pop es ds di si cx
|
||||
ret
|
||||
pop es ds di si ecx
|
||||
ret
|
||||
|
||||
|
||||
|
||||
;===============================Page2to1============================
|
||||
Page2to1:
|
||||
push cx si di ds es
|
||||
push ecx si di ds es
|
||||
mov cx,0B800H
|
||||
mov es,cx
|
||||
mov ds,cx
|
||||
xor ecx,ecx
|
||||
mov cx,cs:pagesize
|
||||
shr cx,2
|
||||
mov si,4000
|
||||
mov si,cs:pagesize
|
||||
xor di,di
|
||||
cld
|
||||
rep movsd
|
||||
pop es ds di si cx
|
||||
pop es ds di si ecx
|
||||
ret
|
||||
|
||||
;===============================Page1to2============================
|
||||
Page1to2:
|
||||
push cx si di ds es
|
||||
push ecx si di ds es
|
||||
mov cx,0B800H
|
||||
mov es,cx
|
||||
mov ds,cx
|
||||
xor ecx,ecx
|
||||
mov cx,cs:pagesize
|
||||
shr cx,2
|
||||
mov di,4000
|
||||
mov di,cs:pagesize
|
||||
xor si,si
|
||||
cld
|
||||
rep movsd
|
||||
pop ds es di si cx
|
||||
pop ds es di si ecx
|
||||
ret
|
||||
|
||||
|
||||
;===============================xchgPages============================
|
||||
xchgPages:
|
||||
push cx si di ds es
|
||||
call savepage1
|
||||
call page2to1
|
||||
mov cx,0B800H
|
||||
mov es,cx
|
||||
push cs
|
||||
pop ds
|
||||
mov cx,cs:pagesize
|
||||
shr cx,2
|
||||
mov si,offset Copy
|
||||
mov di,4000
|
||||
rep movsd
|
||||
pop es ds di si cx
|
||||
ret
|
||||
|
||||
;Sauve l'‚tat de la carte en es:di
|
||||
savestate:
|
||||
push cx si di ds
|
||||
push cs
|
||||
pop ds
|
||||
mov cx,datablocksize
|
||||
mov si,offset lines
|
||||
push ax cx dx si di bp ds es gs
|
||||
mov bp,sp
|
||||
mov dx,ss:[bp+22]
|
||||
mov ah,2
|
||||
mov cx,datablocksize
|
||||
add cx,cs:pagesize
|
||||
add cx,3*256
|
||||
push cs
|
||||
pop ds
|
||||
mov si,offset data4
|
||||
int 49h
|
||||
mov ah,6
|
||||
int 49h
|
||||
push gs
|
||||
pop es
|
||||
xor di,di
|
||||
call savescreento
|
||||
call Page2to1
|
||||
push gs
|
||||
pop ds
|
||||
xor si,si
|
||||
mov cx,0B800H
|
||||
mov es,cx
|
||||
mov di,cs:pagesize
|
||||
xor ecx,ecx
|
||||
mov cx,cs:pagesize
|
||||
shr cx,2
|
||||
cld
|
||||
rep movsb
|
||||
call savescreento
|
||||
pop ds di si cx
|
||||
rep movsd
|
||||
mov ah,01h
|
||||
int 49h
|
||||
pop gs es ds bp di si dx cx ax
|
||||
ret
|
||||
|
||||
;R‚cupŠre l'‚tat de la carte en ds:si
|
||||
restorestate:
|
||||
push ax cx si di es
|
||||
mov al,[si+7]
|
||||
cmp cs:mode,al
|
||||
je nochangemode
|
||||
mov ah,0
|
||||
call setvideomode
|
||||
nochangemode:
|
||||
push cs
|
||||
pop es
|
||||
mov cx,datablocksize
|
||||
mov di,offset lines
|
||||
cld
|
||||
rep movsb
|
||||
call restorescreenfrom
|
||||
pop es di si cx ax
|
||||
ret
|
||||
|
||||
;sauve le DAC
|
||||
;Sauve l'‚tat de la carte dans un bloc mémoire
|
||||
savestate:
|
||||
push ax cx dx si di bp ds es gs
|
||||
mov bp,sp
|
||||
mov dx,ss:[bp+22]
|
||||
mov ah,2
|
||||
mov cx,datablocksize
|
||||
add cx,cs:pagesize
|
||||
add cx,3*256
|
||||
push cs
|
||||
pop ds
|
||||
mov si,offset data
|
||||
int 49h
|
||||
mov ah,6
|
||||
int 49h
|
||||
push gs
|
||||
pop es
|
||||
xor di,di
|
||||
call saveparamto
|
||||
add di,datablocksize
|
||||
call savescreento
|
||||
add di,cs:pagesize
|
||||
call savedacto
|
||||
pop gs es ds bp di si dx cx ax
|
||||
ret
|
||||
|
||||
data db '/vga',0
|
||||
|
||||
;R‚cupŠre l'‚tat de la carte depuis son bloc mémoire
|
||||
restorestate:
|
||||
push ax dx si bp ds gs
|
||||
mov bp,sp
|
||||
mov dx,ss:[bp+16]
|
||||
push cs
|
||||
pop ds
|
||||
mov si,offset data
|
||||
mov ah,9
|
||||
int 49h
|
||||
push gs
|
||||
pop ds
|
||||
mov al,ds:[7]
|
||||
cmp cs:mode,al
|
||||
je nochangemode
|
||||
mov ah,0
|
||||
call setvideomode
|
||||
nochangemode:
|
||||
xor si,si
|
||||
call restoreparamfrom
|
||||
add si,datablocksize
|
||||
call restorescreenfrom
|
||||
add si,cs:pagesize
|
||||
call restoredacfrom
|
||||
pop gs ds bp si dx ax
|
||||
ret
|
||||
|
||||
;sauve le DAC dans un bloc de mémoire
|
||||
savedac:
|
||||
push ax cx dx si di bp ds es gs
|
||||
mov bp,sp
|
||||
mov dx,ss:[bp+22]
|
||||
mov ah,2
|
||||
mov cx,3*256
|
||||
push cs
|
||||
pop ds
|
||||
mov si,offset data2
|
||||
int 49h
|
||||
mov ah,6
|
||||
int 49h
|
||||
push gs
|
||||
pop es
|
||||
xor di,di
|
||||
call savedacto
|
||||
pop gs es ds bp di si dx cx ax
|
||||
ret
|
||||
|
||||
data2 db '/vgadac',0
|
||||
|
||||
;R‚cupŠre le dac depuis son bloc mémoire
|
||||
restoredac:
|
||||
push ax dx si bp ds gs
|
||||
mov bp,sp
|
||||
mov dx,ss:[bp+16]
|
||||
push cs
|
||||
pop ds
|
||||
mov si,offset data2
|
||||
mov ah,9
|
||||
int 49h
|
||||
push gs
|
||||
pop ds
|
||||
xor si,si
|
||||
call restoredacfrom
|
||||
pop gs ds bp si dx ax
|
||||
ret
|
||||
|
||||
;sauve le DAC en es:di
|
||||
savedacto:
|
||||
push ax cx dx di
|
||||
mov dx,3C7h
|
||||
mov cx,256
|
||||
mov di,offset dac
|
||||
save:
|
||||
mov al,cl
|
||||
dec al
|
||||
|
@ -1747,13 +1927,13 @@ out dx,al
|
|||
inc dx
|
||||
inc dx
|
||||
in al,dx
|
||||
mov cs:[di],al
|
||||
mov es:[di],al
|
||||
inc di
|
||||
in al,dx
|
||||
mov cs:[di],al
|
||||
mov es:[di],al
|
||||
inc di
|
||||
in al,dx
|
||||
mov cs:[di],al
|
||||
mov es:[di],al
|
||||
inc di
|
||||
dec dx
|
||||
dec dx
|
||||
|
@ -1762,25 +1942,24 @@ jne save
|
|||
pop di dx cx ax
|
||||
ret
|
||||
|
||||
;restore le DAC
|
||||
restoredac:
|
||||
;restore le DAC depuis ds:si
|
||||
restoredacfrom:
|
||||
push ax cx dx si
|
||||
xor ax,ax
|
||||
mov dx,3C8h
|
||||
mov cx,256
|
||||
mov si,offset dac
|
||||
save2:
|
||||
mov al,cl
|
||||
dec al
|
||||
out dx,al
|
||||
inc dx
|
||||
mov al,cs:[si]
|
||||
mov al,ds:[si]
|
||||
inc si
|
||||
out dx,al
|
||||
mov al,cs:[si]
|
||||
mov al,ds:[si]
|
||||
inc si
|
||||
out dx,al
|
||||
mov al,cs:[si]
|
||||
mov al,ds:[si]
|
||||
inc si
|
||||
out dx,al
|
||||
dec dx
|
||||
|
@ -1814,8 +1993,5 @@ include ..\include\pol8x8.inc
|
|||
font8x16:
|
||||
include ..\include\pol8x16.inc
|
||||
|
||||
copy equ $
|
||||
copy2 equ $+8192
|
||||
dac equ $+8192+8192
|
||||
|
||||
end start
|
||||
|
|
|
@ -2,56 +2,61 @@ lnk_boot = tlink /x
|
|||
asm= tasm /t/m5/zi
|
||||
lnk= tlink /x/t
|
||||
|
||||
all: detect.exe editeur.exe gestion.exe logo.exe pmode.exe souris.exe test.exe verifier.exe volume.exe
|
||||
all: detect.com editeur.com gestion.com logo.com pmode.com souris.com test.com verifier.com volume.com memoire.com
|
||||
|
||||
detect.exe: detect.asm
|
||||
memoire.com: memoire.asm
|
||||
$(asm) memoire
|
||||
$(lnk) memoire
|
||||
ren memoire.com memoire.com
|
||||
|
||||
detect.com: detect.asm
|
||||
$(asm) detect
|
||||
$(lnk) detect
|
||||
ren detect.com detect.exe
|
||||
ren detect.com detect.com
|
||||
|
||||
editeur.exe: editeur.asm
|
||||
editeur.com: editeur.asm
|
||||
$(asm) editeur
|
||||
$(lnk) editeur
|
||||
ren editeur.com editeur.exe
|
||||
ren editeur.com editeur.com
|
||||
|
||||
gestion.exe: gestion.asm
|
||||
gestion.com: gestion.asm
|
||||
$(asm) gestion
|
||||
$(lnk) gestion
|
||||
ren gestion.com gestion.exe
|
||||
ren gestion.com gestion.com
|
||||
|
||||
logo.exe: logo.asm
|
||||
logo.com: logo.asm
|
||||
$(asm) logo
|
||||
$(lnk) logo
|
||||
ren logo.com logo.exe
|
||||
ren logo.com logo.com
|
||||
|
||||
pmode.exe: pmode.asm
|
||||
pmode.com: pmode.asm
|
||||
$(asm) pmode
|
||||
$(lnk) pmode
|
||||
ren pmode.com pmode.exe
|
||||
ren pmode.com pmode.com
|
||||
|
||||
souris.exe: souris.asm
|
||||
souris.com: souris.asm
|
||||
$(asm) souris
|
||||
$(lnk) souris
|
||||
ren souris.com souris.exe
|
||||
ren souris.com souris.com
|
||||
|
||||
test.exe: test.asm
|
||||
test.com: test.asm
|
||||
$(asm) test
|
||||
$(lnk) test
|
||||
ren test.com test.exe
|
||||
ren test.com test.com
|
||||
|
||||
verifier.exe: verifier.asm
|
||||
verifier.com: verifier.asm
|
||||
$(asm) verifier
|
||||
$(lnk) verifier
|
||||
ren verifier.com verifier.exe
|
||||
ren verifier.com verifier.com
|
||||
|
||||
volume.exe: volume.asm
|
||||
volume.com: volume.asm
|
||||
$(asm) volume
|
||||
$(lnk) volume
|
||||
ren volume.com volume.exe
|
||||
ren volume.com volume.com
|
||||
|
||||
clean:
|
||||
del *.obj
|
||||
del *.exe
|
||||
del *.com
|
||||
del *.com
|
||||
del *.sys
|
||||
del *.err
|
||||
|
|
|
@ -157,15 +157,13 @@ xor cl,cl
|
|||
inc al
|
||||
cmp al,16
|
||||
jbe search
|
||||
xor ax,ax
|
||||
int 16h
|
||||
db 0CBh
|
||||
|
||||
msg3 db ' Classe :',0
|
||||
msg1 db 'Peripherique :',0
|
||||
msg2 db ' Constructeur :',0
|
||||
msg4 db ' iD :',0
|
||||
msg db 'COS2000 hardware detecteur V1.1',0
|
||||
msg db 'COS2000 hardware detecteur V1.6',0
|
||||
pcivers db 'BIOS PCI version ',0
|
||||
pcivers2 db ' a ete detecte !',0
|
||||
nbbuses db 'Nombre de bus : ',0
|
||||
|
|
|
@ -8,6 +8,8 @@ start:
|
|||
mov ax,0305h
|
||||
mov bx,0008h
|
||||
int 16h
|
||||
mov ah,28h
|
||||
int 47h
|
||||
mov ax,0002
|
||||
int 47H
|
||||
mov ah,2
|
||||
|
@ -285,7 +287,7 @@ cursor:
|
|||
suit7:
|
||||
cmp ax,4200h
|
||||
jne adres
|
||||
mov ah,27
|
||||
mov ah,29h
|
||||
int 47h
|
||||
db 0CBH ; +++++++
|
||||
ret
|
||||
|
|
|
@ -161,6 +161,9 @@ tre3:
|
|||
tre4:
|
||||
cmp ah,67
|
||||
jne endof
|
||||
mov ah,15h
|
||||
mov cl,7
|
||||
int 47h
|
||||
db 0CBh
|
||||
|
||||
;selectionne la ligne xx
|
||||
|
@ -184,11 +187,11 @@ ret
|
|||
xx dw 1
|
||||
xxold dw 0
|
||||
menu db '[F1] Lire disque [F9] Quitter ',0
|
||||
msg1 db ' Gestionnaire de fichier Version 1.0 ',0
|
||||
msg1 db ' Gestionnaire de fichier Version 1.5 ',0
|
||||
msg2 db 'Programme en cours de chargement',0
|
||||
prompt db '--------------------------------------------------------------------------------',0
|
||||
infos db 'Nom Ext. Date creation Date modification Taille Attributs',0
|
||||
|
||||
bufferentry equ $
|
||||
bufferentry db 512 dup (0)
|
||||
|
||||
end start
|
||||
|
|
|
@ -5,18 +5,27 @@ org 0100h
|
|||
|
||||
|
||||
start:
|
||||
mov ah,7
|
||||
mov cx,65535
|
||||
int 49h
|
||||
jc problem3
|
||||
push gs
|
||||
pop es
|
||||
mov ah,7
|
||||
mov cx,65535
|
||||
int 49h
|
||||
jc problem3
|
||||
mov si,offset logo
|
||||
mov ah,4
|
||||
xor di,di
|
||||
mov bx,8000h
|
||||
mov es,bx
|
||||
int 48h
|
||||
jc problem
|
||||
|
||||
|
||||
push es
|
||||
pop ds
|
||||
mov bx,7000h
|
||||
mov es,bx
|
||||
push gs
|
||||
pop es
|
||||
xor si,si
|
||||
xor di,di
|
||||
mov ah,6
|
||||
|
@ -27,9 +36,9 @@ push es
|
|||
pop ds
|
||||
xor si,si
|
||||
|
||||
mov ax,0008h
|
||||
mov ah,28h
|
||||
int 47h
|
||||
mov ah,38
|
||||
mov ax,0008h
|
||||
int 47h
|
||||
mov ah,2
|
||||
int 47h
|
||||
|
@ -47,10 +56,8 @@ mov si,offset poper
|
|||
int 47h
|
||||
mov ax,0
|
||||
int 16h
|
||||
mov ah,39
|
||||
int 47h
|
||||
mov ax,0004
|
||||
int 47h
|
||||
mov ah,29h
|
||||
int 47h
|
||||
db 0CBH
|
||||
|
||||
problem:
|
||||
|
@ -73,10 +80,21 @@ mov ax,0
|
|||
int 16h
|
||||
db 0CBh
|
||||
|
||||
problem3:
|
||||
push cs
|
||||
pop ds
|
||||
mov ah,13
|
||||
mov si,offset error3
|
||||
int 47h
|
||||
mov ax,0
|
||||
int 16h
|
||||
db 0CBh
|
||||
|
||||
poper db 'COS2000 en mode graphique',0
|
||||
logo db 'cos.rip',0
|
||||
ok1 db 'Chargement de l''image OK',0
|
||||
ok2 db 'Decompression de l''image OK',0
|
||||
error3 db 'Une erreur est apparue lors de l''allocation de mémoire',0
|
||||
error db 'Une erreur est apparue lors du chargement de l''image',0
|
||||
error2 db 'Une erreur est apparue lors de la decompression de l''image',0
|
||||
end start
|
||||
|
|
|
@ -0,0 +1,89 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0100h
|
||||
|
||||
include ..\include\mem.h
|
||||
include ..\include\divers.h
|
||||
|
||||
start:
|
||||
mov si,offset msg
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov si,offset menu
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
xor cx,cx
|
||||
listmcb:
|
||||
mov ah,4
|
||||
int 49h
|
||||
jc fino
|
||||
inc cx
|
||||
mov ah,18h
|
||||
int 47h
|
||||
push gs
|
||||
pop ds
|
||||
mov bh,0
|
||||
mov si,MB.Names
|
||||
mov ah,14h
|
||||
int 47h
|
||||
mov bh,15
|
||||
xor edx,edx
|
||||
mov dx,ds:[MB.Sizes]
|
||||
shl edx,4
|
||||
mov ah,0Fh
|
||||
int 47h
|
||||
mov bh,24
|
||||
cmp ds:[MB.IsResident],true
|
||||
push cs
|
||||
pop ds
|
||||
jne notresident
|
||||
mov si,offset resident
|
||||
mov ah,14h
|
||||
int 47h
|
||||
jmp suitelistmcb
|
||||
notresident:
|
||||
mov si,offset nonresident
|
||||
mov ah,14h
|
||||
int 47h
|
||||
suitelistmcb:
|
||||
mov bh,30
|
||||
cmp gs:[MB.Reference],0
|
||||
je next
|
||||
cmp gs:[MB.Reference],1000h
|
||||
jb next
|
||||
mov ax,gs:[MB.Reference]
|
||||
dec ax
|
||||
dec ax
|
||||
mov ds,ax
|
||||
mov si,MB.Names
|
||||
mov ah,14h
|
||||
int 47h
|
||||
next:
|
||||
mov bh,46
|
||||
xor edx,edx
|
||||
mov dx,gs
|
||||
inc dx
|
||||
inc dx
|
||||
push cx
|
||||
mov cx,16
|
||||
mov ah,11h
|
||||
int 47h
|
||||
pop cx
|
||||
mov ah,6h
|
||||
int 47h
|
||||
jmp listmcb
|
||||
fino:
|
||||
db 0CBh
|
||||
resident db 'oui',0
|
||||
nonresident db 'non',0
|
||||
msg db 'Memory manager V1.5',0
|
||||
menu db 'Nom | Taille | Res | Parent | Mem',0
|
||||
|
||||
end start
|
|
@ -6,8 +6,12 @@ smart
|
|||
org 0100h
|
||||
|
||||
start:
|
||||
mov si,offset message
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,2
|
||||
int 74h
|
||||
db 0CBh
|
||||
|
||||
message db 'Activation de la souris',0
|
||||
end start
|
||||
|
|
|
@ -6,7 +6,7 @@ org 0100h
|
|||
|
||||
|
||||
start:
|
||||
mov ah,26
|
||||
mov ah,28h
|
||||
int 47h
|
||||
mov ax,0001
|
||||
int 47h
|
||||
|
@ -19,7 +19,6 @@ int 47h
|
|||
mov ah,6
|
||||
int 47h
|
||||
int 47h
|
||||
|
||||
mov ah,21
|
||||
mov cl,3
|
||||
int 47h
|
||||
|
@ -38,7 +37,6 @@ mov ah,8
|
|||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
|
||||
mov ah,21
|
||||
mov cl,4
|
||||
int 47h
|
||||
|
@ -59,7 +57,6 @@ mov ah,9
|
|||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
|
||||
mov ah,21
|
||||
mov cl,5
|
||||
int 47h
|
||||
|
@ -80,7 +77,6 @@ mov cx,32
|
|||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
|
||||
mov ah,21
|
||||
mov cl,6
|
||||
int 47h
|
||||
|
@ -101,7 +97,6 @@ mov cx,16
|
|||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
|
||||
mov ah,21
|
||||
mov cl,7
|
||||
int 47h
|
||||
|
@ -120,7 +115,6 @@ mov ah,7
|
|||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
|
||||
mov ah,21
|
||||
mov cl,8
|
||||
int 47h
|
||||
|
@ -139,7 +133,6 @@ mov ah,13
|
|||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
|
||||
mov ah,21
|
||||
mov cl,9
|
||||
int 47h
|
||||
|
@ -158,7 +151,6 @@ mov ah,44
|
|||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
|
||||
mov ah,13
|
||||
mov si,offset text72
|
||||
int 47h
|
||||
|
@ -174,19 +166,17 @@ mov ah,45
|
|||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
|
||||
|
||||
|
||||
mov ax,0
|
||||
int 16h
|
||||
|
||||
|
||||
|
||||
mov ah,2
|
||||
int 47h
|
||||
mov ah,30
|
||||
int 47h
|
||||
mov ah,2
|
||||
int 47h
|
||||
|
||||
mov ah,21
|
||||
mov cl,5
|
||||
int 47h
|
||||
|
@ -294,14 +284,14 @@ mov ah,33
|
|||
int 47h
|
||||
dec bp
|
||||
jnz go4
|
||||
mov ah,27
|
||||
int 47h
|
||||
mov ah,14h
|
||||
xor bx,bx
|
||||
mov si,offset texte3
|
||||
mov ah,20
|
||||
int 47h
|
||||
mov ax,0
|
||||
int 16h
|
||||
mov ah,29h
|
||||
int 47h
|
||||
db 0CBh
|
||||
|
||||
put:
|
||||
|
|
|
@ -5,10 +5,10 @@ org 0100h
|
|||
|
||||
|
||||
start:
|
||||
mov ah,28h
|
||||
int 47H
|
||||
mov ax,0002
|
||||
int 47H
|
||||
mov ah,26
|
||||
int 47H
|
||||
replay:
|
||||
mov ah,2
|
||||
int 47h
|
||||
|
@ -25,12 +25,16 @@ int 47h
|
|||
mov bx,0231h
|
||||
mov si,offset msgapp
|
||||
int 47h
|
||||
mov bp,1000h
|
||||
VerifAll:
|
||||
mov ah,1
|
||||
int 16h
|
||||
cmp al,32
|
||||
jz nokey
|
||||
cmp al,' '
|
||||
je enend
|
||||
nokey:
|
||||
mov ax,cx
|
||||
inc ax
|
||||
mov si,100
|
||||
mul si
|
||||
mov si,2880
|
||||
|
@ -43,8 +47,9 @@ VerifAll:
|
|||
mov ah,13
|
||||
mov si,offset po
|
||||
int 47h
|
||||
mov ah,15
|
||||
mov ah,15
|
||||
mov dx,cx
|
||||
inc dx
|
||||
mov bx,0A10h
|
||||
int 47h
|
||||
mov ah,13
|
||||
|
@ -83,8 +88,8 @@ int 47h
|
|||
someof:
|
||||
mov ah,0
|
||||
int 16h
|
||||
mov ah,27
|
||||
int 47h
|
||||
mov ah,29h
|
||||
int 47H
|
||||
db 0CBH
|
||||
errors:
|
||||
mov ah,21
|
||||
|
@ -96,7 +101,9 @@ mov si,offset errore
|
|||
int 47h
|
||||
mov ah,0
|
||||
int 16h
|
||||
jmp replay
|
||||
mov ah,29h
|
||||
int 47H
|
||||
db 0CBH
|
||||
|
||||
|
||||
|
||||
|
@ -106,7 +113,7 @@ error2 db 'Le disque est defectueux, appuyez sur une touche pour quitter',0
|
|||
po db ' %',0
|
||||
msgapp db '<Pressez espace pour quitter>',0
|
||||
msg db '- Test de surface du disque -',0
|
||||
msg2 db ' cluster tested. ',0
|
||||
msg2 db ' cluster testes. ',0
|
||||
msg3 db ' cluster defectueux. ',0
|
||||
;->Increment CX
|
||||
gauge:
|
||||
|
|
|
@ -8,6 +8,8 @@ start:
|
|||
mov ax,0305h
|
||||
mov bx,0008h
|
||||
int 16h
|
||||
mov ah,28h
|
||||
int 47H
|
||||
mov ax,0002
|
||||
int 47H
|
||||
mov ah,2
|
||||
|
@ -15,6 +17,10 @@ start:
|
|||
mov ah,43
|
||||
int 47h
|
||||
xor bp,bp
|
||||
push cs
|
||||
push cs
|
||||
pop es
|
||||
pop ds
|
||||
Adres:
|
||||
mov di,offset infos
|
||||
mov ah,34
|
||||
|
@ -24,7 +30,7 @@ Adres:
|
|||
pop es
|
||||
mov cx,sect
|
||||
mov di,offset buffer
|
||||
mov ax,0001h
|
||||
mov ah,0h
|
||||
int 48h
|
||||
jnc noerror
|
||||
errtr:
|
||||
|
@ -203,9 +209,9 @@ waitst:
|
|||
jne tre
|
||||
mov dword ptr [pope],'WEIV'
|
||||
push cs
|
||||
pop es
|
||||
pop ds
|
||||
mov cx,sect
|
||||
mov bx,offset buffer
|
||||
mov si,offset buffer
|
||||
mov ah,1
|
||||
int 48h
|
||||
jnc adres
|
||||
|
@ -282,6 +288,8 @@ cursor:
|
|||
suit7:
|
||||
cmp ax,4200h
|
||||
jne adres2
|
||||
mov ah,29h
|
||||
int 47H
|
||||
db 0CBH
|
||||
ret
|
||||
|
||||
|
@ -292,7 +300,7 @@ calc1:
|
|||
shl ax,2
|
||||
shl dx,1
|
||||
add ax,dx
|
||||
add ax,25
|
||||
add ax,27
|
||||
mov bx,YY
|
||||
mov dx,yy
|
||||
shl bx,5
|
||||
|
@ -315,6 +323,7 @@ calc2:
|
|||
shl si,5
|
||||
shl dx,7
|
||||
add si,dx
|
||||
add si,2
|
||||
mov dx,xx
|
||||
shl dx,1
|
||||
add si,dx
|
||||
|
@ -374,7 +383,7 @@ spaces db '
|
|||
showbuffer db 35 dup (0FFh)
|
||||
oldmode db 0
|
||||
infos db 40 dup (0)
|
||||
buffer equ $
|
||||
buffer db 2048 dup (0)
|
||||
|
||||
end start
|
||||
|
||||
|
|
Loading…
Reference in New Issue