From ef5df22a06944e1794fe068335d1ec8ea672b2ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Thu, 28 Oct 2004 15:48:48 +0000 Subject: [PATCH 01/64] feat: ajout du pilote lpt.sys --- noyau/systeme.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/noyau/systeme.ini b/noyau/systeme.ini index 0b7f37e..12eec77 100644 --- a/noyau/systeme.ini +++ b/noyau/systeme.ini @@ -3,5 +3,5 @@ horloge.sys(8) 8259a.sys(50) disque.sys(48) souris.sys(74) -clavier.sys(9) -heure.sys(8) \ No newline at end of file +heure.sys(8) +port.sys(D) \ No newline at end of file From 22f45183fd4116b4db53811ee51f35a73b065ca1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Fri, 29 Oct 2004 16:32:48 +0000 Subject: [PATCH 02/64] =?UTF-8?q?feat:=20prise=20en=20charge=20des=20blocs?= =?UTF-8?q?=20de=20m=C3=A9moire=20dans=20le=20chargement?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- noyau/mcb.asm | 128 +++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 101 insertions(+), 27 deletions(-) diff --git a/noyau/mcb.asm b/noyau/mcb.asm index 22dac0d..22d8d29 100644 --- a/noyau/mcb.asm +++ b/noyau/mcb.asm @@ -1,18 +1,81 @@ +.model tiny +.486 +smart +.code + +org 0100h + +include ..\include\mem.h +include ..\include\divers.h + +start: +maxfunc equ 4 + + 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 + FirstMB dw 0 -;Initialise les blocs de mémoire +;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 + 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' + 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 @@ -26,7 +89,8 @@ notforfree: MBFree: push bx es mov bx,gs - dec bx + dec bx + dec bx mov es,bx cmp es:[MB.Check],'NH' je notforfree @@ -35,40 +99,42 @@ MBFree: mov dword ptr es:[MB.Names],'eerF' mov dword ptr es:[MB.Names+4],0 pop es bx - ret + ret -;Creér un bloc de nom ds:si de taille cx (octets) -> n°segement dans GS +;Renvoie en GS le MB n° bx +MBGet: + + +;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 - 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 word ptr es:[MB.Check],'NH' + mov es:[MB.IsNotLast],True mov es:[MB.Reference],cs 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 +150,15 @@ endofloops: mov al,0 rep stosb pop cx ax - mov word ptr es:[MB.Check],'NH' sub ax,cx dec ax - js nofree - inc bx + dec ax + ;js nofree + inc bx + inc bx mov gs,bx add bx,cx - mov es,bx + mov es,bx mov es:[MB.IsNotLast],dl mov es:[MB.IsResident],False mov es:[MB.Reference],Free @@ -107,6 +174,11 @@ wasntgood: stc pop es di si dx cx bx ax ret +notsogood: + inc bx + inc bx + add bx,es:[MB.Sizes] + jmp searchfree ;Rend le segment GS résident MBresident: @@ -117,3 +189,5 @@ MBresident: mov es:[MB.IsResident],True pop es bx ret + +end start From 0190b45438cb8037c8eb6313a9c6eb435a151044 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Fri, 29 Oct 2004 16:35:08 +0000 Subject: [PATCH 03/64] =?UTF-8?q?feat:=20prise=20en=20charge=20des=20blocs?= =?UTF-8?q?=20de=20m=C3=A9moire=20dans=20le=20noyau?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- noyau/systeme.asm | 241 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 223 insertions(+), 18 deletions(-) diff --git a/noyau/systeme.asm b/noyau/systeme.asm index b9624ea..b711145 100644 --- a/noyau/systeme.asm +++ b/noyau/systeme.asm @@ -6,6 +6,7 @@ smart org 0100h include ..\include\fat.h +include ..\include\mem.h start: push cs @@ -70,11 +71,15 @@ noone: pop es pop fs pop gs - + 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 @@ -89,23 +94,25 @@ noone: 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 cx,19000 + call MBCreate + jc nomem2 + push si mov bl,7 mov si,offset next call showstr - pop si bx + pop si call showstr - mov dx,bx - push bx si - mov bx,7 + mov dx,gs + push si + mov bl,7 mov si,offset address call showstr mov cx,16 @@ -136,7 +143,7 @@ haveirq: mov si,offset irqsend call showstr noadd: - pop si bx + pop si cmp bp,1 jne install call replacehandler @@ -145,7 +152,6 @@ install: call installhandler suites: jc nohandlerload - add bx,0F00h inc cx call nextline jnz suiteloading @@ -191,6 +197,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,7 +254,9 @@ 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 - +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 @@ -334,14 +355,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,26 +380,200 @@ 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 gestion de la mémoire +;================================================ + +include ..\include\mem.h + +FirstMB dw 0 + +;vide GS pour 200 octets (pour test) +erroresu: +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 + + +;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 + +;Libère le bloc de mémoire GS +MBFree: + push bx es + mov bx,gs + dec bx + dec bx + mov es,bx + cmp es:[MB.Check],'NH' + je notforfree + mov es:[MB.IsResident],0 + mov es:[MB.Reference],Free + mov dword ptr es:[MB.Names],'eerF' + mov dword ptr es:[MB.Names+4],0 + pop es bx + 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],False + 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 + +;Rend le segment GS résident +MBresident: + push bx es + mov bx,gs + dec bx + mov es,bx + mov es:[MB.IsResident],True + pop es bx + ret ;================================================ ;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 gs:100h interruption ax replacehandler: push ax bx cx si di ds es +mov bx,gs mov es,bx mov di,0100h call loadfile @@ -386,6 +590,7 @@ ret ;install le handler pointer par ds:si en bx:100h interruption ax installhandler: push bx cx di es +mov bx,gs mov es,bx mov di,100h call loadfile From 6a4fba7f9a99b1d047fc13d3ced7b8018f03ce2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Fri, 29 Oct 2004 16:38:22 +0000 Subject: [PATCH 04/64] feat: ajout de declarations diverses --- include/divers.h | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 include/divers.h diff --git a/include/divers.h b/include/divers.h new file mode 100644 index 0000000..33c09b6 --- /dev/null +++ b/include/divers.h @@ -0,0 +1,2 @@ +True equ 1 +False equ 0 From 7e4d39175eafddfde4f1daef68636a44fb95e046 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Fri, 29 Oct 2004 16:39:12 +0000 Subject: [PATCH 05/64] =?UTF-8?q?feat:=20ajout=20des=20declaration=20pour?= =?UTF-8?q?=20la=20gestion=20des=20blocs=20de=20m=C3=A9moire?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/mem.h | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 include/mem.h diff --git a/include/mem.h b/include/mem.h new file mode 100644 index 0000000..9053805 --- /dev/null +++ b/include/mem.h @@ -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 From 2cc7825eb223762ed9b34df788858ebf9a1997b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Fri, 29 Oct 2004 16:39:58 +0000 Subject: [PATCH 06/64] =?UTF-8?q?feat:=20ajout=20des=20pilotes=20de=20gest?= =?UTF-8?q?ion=20de=20la=20m=C3=A9moire?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- noyau/systeme.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/noyau/systeme.ini b/noyau/systeme.ini index 12eec77..7121430 100644 --- a/noyau/systeme.ini +++ b/noyau/systeme.ini @@ -1,3 +1,4 @@ +mem.sys(49) video.sys(47) horloge.sys(8) 8259a.sys(50) From 829f9b4721aa507fd926c9b54be709ca01e60de0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Fri, 29 Oct 2004 17:20:55 +0000 Subject: [PATCH 07/64] =?UTF-8?q?fix:=20correction=20du=20nom=20de=20gesti?= =?UTF-8?q?onnaire=20de=20m=C3=A9moire=20vers=20mcb.sys?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- noyau/systeme.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noyau/systeme.ini b/noyau/systeme.ini index 7121430..0fd6786 100644 --- a/noyau/systeme.ini +++ b/noyau/systeme.ini @@ -1,4 +1,4 @@ -mem.sys(49) +mcb.sys(49) video.sys(47) horloge.sys(8) 8259a.sys(50) From 09f8882cb86911bf5af25fbd6370a0201e900c8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Fri, 29 Oct 2004 18:22:55 +0000 Subject: [PATCH 08/64] fix: correction de bogue multiple permettant a ce pilote de fonctionner et ajout d'une fonction de listage des blocs --- noyau/mcb.asm | 53 +++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 47 insertions(+), 6 deletions(-) diff --git a/noyau/mcb.asm b/noyau/mcb.asm index 22d8d29..098ef0a 100644 --- a/noyau/mcb.asm +++ b/noyau/mcb.asm @@ -9,7 +9,7 @@ include ..\include\mem.h include ..\include\divers.h start: -maxfunc equ 4 +maxfunc equ 5 jmp tsr ;Saute à la routine résidente nameed db 'MB' ;Nom drivers @@ -45,7 +45,7 @@ itsok: ;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 + 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: @@ -58,12 +58,15 @@ tables dw MBinit ;Table qui contient les adresses de toutes les fonctions de VI dw MBFree dw MBCreate dw MBresident - + dw MBGet + FirstMB dw 0 ;Initialise les blocs de mémoire en prenant memorystart pour segment de base MBinit: push ax cx es + cmp cs:FirstMB,0 + jne notforfree mov ax,memorystart mov cs:Firstmb,ax mov cx,0A000h @@ -71,6 +74,8 @@ MBinit: dec ax dec ax mov es,ax + cmp es:[MB.Check],'NH' + je notforfree mov es:[MB.Reference],Free mov es:[MB.Sizes],cx mov es:[MB.Check],'NH' @@ -93,16 +98,52 @@ MBFree: dec bx mov es,bx cmp es:[MB.Check],'NH' - je notforfree - mov es:[MB.IsResident],0 + je wasfree + 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 pop es bx ret +wasfree: + stc + pop es bx + ret -;Renvoie en GS le MB n° bx +;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 ;Creér un bloc de nom ds:si de taille cx (octets) -> n°segment dans GS From 819d3e819cf0ad335401abae1000f6f5b78446fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Fri, 29 Oct 2004 18:24:09 +0000 Subject: [PATCH 09/64] =?UTF-8?q?feat:=20petit=20programme=20de=20gestion?= =?UTF-8?q?=20de=20la=20m=C3=A9moire,=20pour=20l'instant=20en=20visualisat?= =?UTF-8?q?ion=20seulement?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- programs/memoire.asm | 70 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 programs/memoire.asm diff --git a/programs/memoire.asm b/programs/memoire.asm new file mode 100644 index 0000000..8c09652 --- /dev/null +++ b/programs/memoire.asm @@ -0,0 +1,70 @@ +.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 ah,0 +int 49h + +xor cx,cx +listmcb: +mov ah,06h +int 47h +mov ah,4 +int 49h +jc fino +inc cx +push gs +pop ds +mov si,MB.Names +mov ah,0Dh +int 47h +mov ah,05h +int 47h +xor edx,edx +mov dx,ds:[MB.Sizes] +shl edx,4 +mov ah,08 +int 47h +mov ah,05h +int 47h +push cs +pop ds +cmp ds:[MB.Sizes],true +jne notresident +mov si,offset resident +mov ah,0Dh +int 47h +mov ah,05h +int 47h +jmp listmcb +notresident: +mov si,offset nonresident +mov ah,0Dh +int 47h +fino: +push cs +pop ds +mov si,offset findesprog +mov ah,0Dh +int 47h +mov ax,0 +int 16h +db 0CBh +findesprog db '********* FIN ***********',0 +resident db 'Resident',0 +nonresident db 'Volatile',0 +msg db 'Memory manager V1.0',0 + +end start From df90101e7f7dfc5bb193d2a8b3b0554512eeeb66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Sat, 30 Oct 2004 18:51:59 +0000 Subject: [PATCH 10/64] =?UTF-8?q?fix:=20correctione=20du=20fonctionnement?= =?UTF-8?q?=20des=20blocs=20de=20m=C3=A9moire.=20rajout=20d'une=20fonction?= =?UTF-8?q?=20de=20projection=20en=20bloc=20m=C3=A9moire.=20utilisation=20?= =?UTF-8?q?de=20la=20fonction=20projfile=20pour=20le=20chargement=20des=20?= =?UTF-8?q?pilotes=20et=20de=20l'interpreteur.=20ajout=20de=20fonctions=20?= =?UTF-8?q?de=20d=C3=A9boguage=20temporaire?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- noyau/systeme.asm | 253 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 202 insertions(+), 51 deletions(-) diff --git a/noyau/systeme.asm b/noyau/systeme.asm index b711145..225dfb5 100644 --- a/noyau/systeme.asm +++ b/noyau/systeme.asm @@ -77,7 +77,6 @@ noone: call MBinit jc nomem1 call InitDrive - mov si,offset premice mov bl,7 call showstr @@ -92,7 +91,6 @@ noone: mov di,offset loadinglist call loadfile jc noconfread - mov si,offset debut mov bl,7 call showstr @@ -101,23 +99,11 @@ noone: suiteloading: call readline jc noconfload - mov cx,19000 - call MBCreate - jc nomem2 - push si mov bl,7 + push si mov si,offset next call showstr - pop si - call showstr - mov dx,gs - push si - mov bl,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 @@ -136,14 +122,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 cmp bp,1 jne install call replacehandler @@ -152,10 +139,21 @@ install: call installhandler suites: jc nohandlerload + 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 - + + mov si,offset fini mov bl,7 call showstr @@ -163,13 +161,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 di push 7202h popf push es @@ -260,24 +255,28 @@ 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 @@ -398,16 +397,132 @@ control: fin: pop si cx bx ax ret + + ;================================================ -;Routine de gestion de la mémoire +;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 -include ..\include\mem.h +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 -FirstMB dw 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 GS pour 200 octets (pour test) -erroresu: +;vide ES pour 200 octets (pour test) +showmem: pushad pushf mov si,offset poppp @@ -440,6 +555,14 @@ 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: @@ -570,13 +693,10 @@ MBresident: ;Routine de gestion de handler ;================================================ -;remplace le handler pointer par ds:si en gs: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 bx,gs -mov es,bx -mov di,0100h -call loadfile +push ax bx cx si di es ds +call projfile jc reph mov bx,ax call getint @@ -584,37 +704,34 @@ mov es:[102h],si mov es:[104h],ds call setint reph: -pop es ds di si cx bx ax +pop ds es 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 bx,gs -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 @@ -685,6 +802,40 @@ nocarry: pop si dx bx ax ret +;============projfile (Fonction 4)=============== +;Charge le fichier ds:si sur un bloc mémoire->ecx taille es:di +;-> AH=4 +;<- Flag Carry si erreur +;===================================================== +projfile: + push eax bx di gs + push cs + pop es + mov di,offset tempfit + call searchfile + jne errorload + jc errorload + mov eax,cs:tempfit.FileSize + mov ecx,eax + add ecx,19000 + 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 @@ -703,12 +854,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 @@ -857,7 +1008,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)=============== From 4d989b0e3e88e27084269bc73a8f0a6cbeff9a8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Sat, 30 Oct 2004 19:25:45 +0000 Subject: [PATCH 11/64] =?UTF-8?q?feat:=20int=C3=A9gration=20de=20la=20comm?= =?UTF-8?q?ande=20projfile=20de=20projection=20en=20bloc=20m=C3=A9moire?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- noyau/disque.asm | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/noyau/disque.asm b/noyau/disque.asm index e842a0b..b683d08 100644 --- a/noyau/disque.asm +++ b/noyau/disque.asm @@ -68,6 +68,7 @@ tables dw readsector dw readcluster dw writecluster dw getdir + dw projfile maxfunc equ 24 @@ -156,6 +157,44 @@ errorload: pop di bx eax 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 + mov di,offset tempfit + call searchfile + jne errorload + jc errorload + mov eax,cs:tempfit.FileSize + mov ecx,eax + add ecx,19000 + push ax + mov ah,2 + int 49h + pop ax + jc errorload2 + push gs + pop es + mov cx,cs:tempfit.FileGroup + mov di,100h + call loadway + jc errorload2 + clc + mov ecx,eax + pop gs di bx eax + ret +errorload2: + stc + mov ecx,0 + pop gs di bx eax + ret + + tempfit db 32 dup (0) ;=============SearchFile (Fonction 10)=============== From 0a8f8d59b464b287776decfa8de16fd35ac3497a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Sat, 30 Oct 2004 19:26:04 +0000 Subject: [PATCH 12/64] =?UTF-8?q?feat:=20ajout=20de=20l'initialisation=20d?= =?UTF-8?q?es=20pilote=20de=20bloc=20m=C3=A9moire?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- noyau/systeme.asm | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/noyau/systeme.asm b/noyau/systeme.asm index 225dfb5..b6af68a 100644 --- a/noyau/systeme.asm +++ b/noyau/systeme.asm @@ -153,6 +153,9 @@ suites: call nextline jnz suiteloading + ;initialisation des MCBs + mov ah,0 + int 49h mov si,offset fini mov bl,7 @@ -164,7 +167,7 @@ suites: call projfile jc nopromptload push es - push di + push 0100h push 7202h popf push es @@ -802,9 +805,9 @@ nocarry: pop si dx bx ax ret -;============projfile (Fonction 4)=============== -;Charge le fichier ds:si sur un bloc mémoire->ecx taille es:di -;-> AH=4 +;============projfile (Fonction 17)=============== +;Charge le fichier ds:si sur un bloc mémoire -> ecx taille -> es bloc +;-> AH=17 ;<- Flag Carry si erreur ;===================================================== projfile: From a4b18960f39f3be94de1b29f9ae336338c052ea2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Sat, 30 Oct 2004 19:26:33 +0000 Subject: [PATCH 13/64] =?UTF-8?q?feat:=20utilisation=20de=20la=20projectio?= =?UTF-8?q?n=20en=20bloque=20m=C3=A9moire=20pour=20le=20lancement=20d'appl?= =?UTF-8?q?ication?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- commande/commande.asm | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/commande/commande.asm b/commande/commande.asm index fc49c52..572e7a7 100644 --- a/commande/commande.asm +++ b/commande/commande.asm @@ -147,15 +147,12 @@ noaddext: 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,17 int 48h jc reallyerror push es + push 0100h + push es push es push es pop ds From 8a5dcd01723e0928a8442c6da035a83a720d015d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Sat, 30 Oct 2004 19:54:49 +0000 Subject: [PATCH 14/64] =?UTF-8?q?feat:=20utilisation=20de=20la=20fonction?= =?UTF-8?q?=20fileexec=20plutot=20que=20la=20fonction=20de=20projection=20?= =?UTF-8?q?en=20bloc=20m=C3=A9moire?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- commande/commande.asm | 32 +------------------------------- 1 file changed, 1 insertion(+), 31 deletions(-) diff --git a/commande/commande.asm b/commande/commande.asm index 572e7a7..7565e0e 100644 --- a/commande/commande.asm +++ b/commande/commande.asm @@ -141,38 +141,9 @@ 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 ah,17 + mov ah,18 int 48h jc reallyerror - push es - push 0100h - 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: @@ -440,7 +411,6 @@ msg db 'Interpreteur de commande COS V1.1',0 dir equ $ buffer equ $+128 buffer2 equ $+128+512 -vga equ $+128+512+512 end start From 4b570f79954f06433eee1527ae1e905c9a27c31c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Sat, 30 Oct 2004 19:55:45 +0000 Subject: [PATCH 15/64] =?UTF-8?q?feat:=20ajout=20de=20la=20fonction=20file?= =?UTF-8?q?exec=20permetant=20l'execution=20directe=20d'un=20fichier.=20La?= =?UTF-8?q?=20liberation=20de=20la=20m=C3=A9moire=20n'est=20pas=20encore?= =?UTF-8?q?=20prise=20en=20compte.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- noyau/disque.asm | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/noyau/disque.asm b/noyau/disque.asm index b683d08..54ca5ce 100644 --- a/noyau/disque.asm +++ b/noyau/disque.asm @@ -69,6 +69,7 @@ tables dw readsector dw writecluster dw getdir dw projfile + dw execfile maxfunc equ 24 @@ -156,6 +157,45 @@ errorload: mov ecx,0 pop di bx eax ret + +;============execfile (Fonction 18)=============== +;Execute le fichier ds:si +;-> AH=18 +;<- Flag Carry si erreur +;===================================================== +execfile: + pushad + pushf + push ds es fs gs + mov ah,17 + int 48h + jc reallyerror + 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 fs es ds + popf + popad + ret +reallyerror: + pop gs fs es ds + popf + popad + ret ;============projfile (Fonction 17)=============== ;Charge le fichier ds:si sur un bloc mémoire -> ecx taille -> es bloc From 0a0e9cc723426c2f745fdfcaa72820088ddda668 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Sat, 30 Oct 2004 20:36:00 +0000 Subject: [PATCH 16/64] =?UTF-8?q?fix:=20correction=20de=20bogues=20(sauts?= =?UTF-8?q?=20et=20flag=20carry)=20lors=20de=20l'echec=20de=20la=20project?= =?UTF-8?q?ion=20en=20m=C3=A9moire=20dans=20la=20fonction=20execfile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- noyau/disque.asm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/noyau/disque.asm b/noyau/disque.asm index 54ca5ce..e471718 100644 --- a/noyau/disque.asm +++ b/noyau/disque.asm @@ -166,9 +166,8 @@ errorload: execfile: pushad pushf - push ds es fs gs - mov ah,17 - int 48h + push ds es fs gs + call projfile jc reallyerror push cs mov ax,offset arrive @@ -195,6 +194,7 @@ reallyerror: pop gs fs es ds popf popad + stc ret ;============projfile (Fonction 17)=============== @@ -208,8 +208,8 @@ projfile: pop es mov di,offset tempfit call searchfile - jne errorload - jc errorload + jne errorload2 + jc errorload2 mov eax,cs:tempfit.FileSize mov ecx,eax add ecx,19000 From f94e485267f89b78ed01d0b5e3bdd9129435e00e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Sun, 31 Oct 2004 09:30:14 +0000 Subject: [PATCH 17/64] =?UTF-8?q?feat:=20rajout=20de=20la=20liberation=20d?= =?UTF-8?q?e=20la=20m=C3=A9moire=20via=20la=20fonction=20MBFREE=20dans=20l?= =?UTF-8?q?a=20fonction=20exec.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- noyau/disque.asm | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/noyau/disque.asm b/noyau/disque.asm index e471718..639165a 100644 --- a/noyau/disque.asm +++ b/noyau/disque.asm @@ -169,6 +169,7 @@ execfile: push ds es fs gs call projfile jc reallyerror + push es push cs mov ax,offset arrive push ax @@ -186,6 +187,9 @@ execfile: db 0CBh arrive: cli + pop gs + mov ah,01 + int 49h pop gs fs es ds popf popad @@ -203,9 +207,13 @@ reallyerror: ;<- Flag Carry si erreur ;===================================================== projfile: - push eax bx di gs + 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 @@ -226,12 +234,12 @@ projfile: jc errorload2 clc mov ecx,eax - pop gs di bx eax + pop gs ds di bx eax ret errorload2: stc mov ecx,0 - pop gs di bx eax + pop gs ds di bx eax ret From 0af23ddb3151bf87f033091bb3f30f9386f0820a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Sun, 31 Oct 2004 09:31:20 +0000 Subject: [PATCH 18/64] =?UTF-8?q?fix:=20correction=20de=20bogues=20dans=20?= =?UTF-8?q?la=20fonction=20MBCreate=20:=20le=20segment=20reserv=C3=A9=20n'?= =?UTF-8?q?etait=20pas=20correctement=20renvoy=C3=A9=20si=20l'espace=20m?= =?UTF-8?q?=C3=A9moire=20etait=20pile.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- noyau/mcb.asm | 256 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 246 insertions(+), 10 deletions(-) diff --git a/noyau/mcb.asm b/noyau/mcb.asm index 098ef0a..e1d75a0 100644 --- a/noyau/mcb.asm +++ b/noyau/mcb.asm @@ -59,6 +59,7 @@ tables dw MBinit ;Table qui contient les adresses de toutes les fonctions de VI dw MBCreate dw MBresident dw MBGet + dw MBFind FirstMB dw 0 @@ -93,12 +94,16 @@ notforfree: ;Libère le bloc de mémoire GS MBFree: push bx es + pushad + mov dx,gs + mov cx,16 + mov ah,0ah + int 47h + popad mov bx,gs dec bx dec bx mov es,bx - cmp es:[MB.Check],'NH' - je wasfree cmp es:[MB.Reference],Free je wasfree cmp es:[MB.IsResident],true @@ -145,6 +150,235 @@ foundmcb: pop dx bx ret + + + + + +;==============================Affiche le nombre nb hexa en EDX de taille CX et couleur BL============== +ShowHex: + push ax bx cx edx si di + mov di,cx + sub cx,32 + neg cx + shl edx,cl + shr di,2 + mov ah,09h + and bx,1111b +Hexaize: + rol edx,4 + mov si,dx + and si,1111b + mov al,cs:[si+offset tab] + 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 + ret +Tab db '0123456789ABCDEF' + +;==============================Affiche une chaine DS:SI de couleur BL============== +showstr: + 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 + int 10h + jmp again + fin: + 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 + + + + +poppp db '*********',0 + + + + + +;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: + clc + pop di si bx ax + ret + ;Creér un bloc de nom ds:si de taille cx (octets) -> n°segment dans GS MBCreate: @@ -172,7 +406,6 @@ searchfree: mov es:[MB.IsNotLast],True mov es:[MB.Reference],cs mov es:[MB.IsResident],False - mov es:[MB.Sizes],cx mov di,MB.Names push ax cx mov cx,32 @@ -191,15 +424,17 @@ endofloops: mov al,0 rep stosb pop cx ax - sub ax,cx + inc bx + inc bx + sub ax,cx dec ax dec ax - ;js nofree - inc bx - inc bx - mov gs,bx - add bx,cx - mov es,bx + cmp ax,0 + js nofree + 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 @@ -208,6 +443,7 @@ 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 ret From 753debd849b3e8ed1a75d633b6b964b9a07e7bcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Sun, 31 Oct 2004 11:44:57 +0000 Subject: [PATCH 19/64] =?UTF-8?q?feat:=20finalisation=20de=20la=20verifica?= =?UTF-8?q?tion=20d'unicit=C3=A9=20des=20processus=20Ajout=20de=20la=20ges?= =?UTF-8?q?tion=20des=20parents=20dans=20la=20fonction=20execfile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- noyau/disque.asm | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/noyau/disque.asm b/noyau/disque.asm index 639165a..ef7d524 100644 --- a/noyau/disque.asm +++ b/noyau/disque.asm @@ -164,11 +164,24 @@ errorload: ;<- Flag Carry si erreur ;===================================================== execfile: - pushad pushf + push bp dx + mov bp,sp + mov dx,ss:[bp+10] + mov ah,0Ah + mov cx,16 + int 47h + pushad push ds es fs gs call projfile jc reallyerror + mov ah,0Ah + mov cx,16 + int 47h + push es + pop gs + mov ah,6 + int 49h push es push cs mov ax,offset arrive @@ -191,13 +204,15 @@ execfile: mov ah,01 int 49h pop gs fs es ds - popf popad + pop dx bp + popf ret reallyerror: pop gs fs es ds - popf popad + pop dx bp + popf stc ret @@ -298,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 From 3cd3469cb08520431fd8e2abd9e15ad5b60eb622 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Sun, 31 Oct 2004 11:45:46 +0000 Subject: [PATCH 20/64] =?UTF-8?q?feat:=20finalisation=20de=20la=20fonction?= =?UTF-8?q?=20mbfind=20Ajout=20de=20la=20fonction=20mbchown=20qui=20permet?= =?UTF-8?q?=20de=20changer=20le=20parent=20d'un=20bloc=20m=C3=A9moire?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- noyau/mcb.asm | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/noyau/mcb.asm b/noyau/mcb.asm index e1d75a0..ec21352 100644 --- a/noyau/mcb.asm +++ b/noyau/mcb.asm @@ -9,7 +9,7 @@ include ..\include\mem.h include ..\include\divers.h start: -maxfunc equ 5 +maxfunc equ 7 jmp tsr ;Saute à la routine résidente nameed db 'MB' ;Nom drivers @@ -60,6 +60,7 @@ tables dw MBinit ;Table qui contient les adresses de toutes les fonctions de VI dw MBresident dw MBGet dw MBFind + dw MBChown FirstMB dw 0 @@ -94,12 +95,6 @@ notforfree: ;Libère le bloc de mémoire GS MBFree: push bx es - pushad - mov dx,gs - mov cx,16 - mov ah,0ah - int 47h - popad mov bx,gs dec bx dec bx @@ -118,6 +113,24 @@ wasfree: stc pop es bx 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 +wasfree2: + stc + pop es bx + ret + ;Renvoie en GS le MB n° cx carry quand terminé MBGet: @@ -382,6 +395,9 @@ foundmcb2: ;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 @@ -404,7 +420,7 @@ searchfree: ja notsogood mov word ptr es:[MB.Check],'NH' mov es:[MB.IsNotLast],True - mov es:[MB.Reference],cs + mov es:[MB.Reference],gs mov es:[MB.IsResident],False mov di,MB.Names push ax cx @@ -446,10 +462,12 @@ 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 From fee0c5a3336b5bda92b32200175b937174258ef4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Sun, 31 Oct 2004 11:46:21 +0000 Subject: [PATCH 21/64] =?UTF-8?q?feat:=20plus=20d'attente=20apr=C3=A9s=20u?= =?UTF-8?q?ne=20touche=20a=20la=20fin=20du=20programme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- programs/detect.asm | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/programs/detect.asm b/programs/detect.asm index 0e66e85..0750b2a 100644 --- a/programs/detect.asm +++ b/programs/detect.asm @@ -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.5',0 pcivers db 'BIOS PCI version ',0 pcivers2 db ' a ete detecte !',0 nbbuses db 'Nombre de bus : ',0 From 056902c2cfcc22e21cdbd1f051e58ff8a9774852 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Sun, 31 Oct 2004 11:46:47 +0000 Subject: [PATCH 22/64] feat: mise a nivo pour la gestion des blocs parent --- programs/memoire.asm | 69 +++++++++++++++++++++++++++----------------- 1 file changed, 43 insertions(+), 26 deletions(-) diff --git a/programs/memoire.asm b/programs/memoire.asm index 8c09652..3a8d3f4 100644 --- a/programs/memoire.asm +++ b/programs/memoire.asm @@ -14,57 +14,74 @@ mov ah,13 int 47h mov ah,6 int 47h -mov ah,0 -int 49h +mov si,offset menu +mov ah,13 +int 47h +mov ah,18h +int 47h xor cx,cx listmcb: -mov ah,06h -int 47h mov ah,4 int 49h jc fino inc cx +inc bl push gs pop ds +mov bh,0 mov si,MB.Names -mov ah,0Dh -int 47h -mov ah,05h +mov ah,14h int 47h +mov bh,15 xor edx,edx mov dx,ds:[MB.Sizes] shl edx,4 -mov ah,08 -int 47h -mov ah,05h +mov ah,0Fh int 47h push cs pop ds +mov bh,24 cmp ds:[MB.Sizes],true jne notresident mov si,offset resident -mov ah,0Dh +mov ah,14h int 47h -mov ah,05h -int 47h -jmp listmcb +jmp suitelistmcb notresident: mov si,offset nonresident -mov ah,0Dh +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 +jmp listmcb fino: -push cs -pop ds -mov si,offset findesprog -mov ah,0Dh -int 47h -mov ax,0 -int 16h db 0CBh -findesprog db '********* FIN ***********',0 -resident db 'Resident',0 -nonresident db 'Volatile',0 -msg db 'Memory manager V1.0',0 +resident db 'oui',0 +nonresident db 'non',0 +msg db 'Memory manager V1.2',0 +menu db 'Nom | Taille | Res | Parent | Mem',0 end start From c3c97b251b5e4012c5e53d90edcdfc3f9720a94f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Sun, 31 Oct 2004 12:23:52 +0000 Subject: [PATCH 23/64] =?UTF-8?q?fix:=20ajout=20de=20la=20gestion=20des=20?= =?UTF-8?q?blocs=20de=20m=C3=A9moire=20r=C3=A9sident=20et=20correction=20d?= =?UTF-8?q?es=20bogues?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- programs/memoire.asm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/programs/memoire.asm b/programs/memoire.asm index 3a8d3f4..d683079 100644 --- a/programs/memoire.asm +++ b/programs/memoire.asm @@ -39,10 +39,10 @@ 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 -mov bh,24 -cmp ds:[MB.Sizes],true jne notresident mov si,offset resident mov ah,14h @@ -81,7 +81,7 @@ fino: db 0CBh resident db 'oui',0 nonresident db 'non',0 -msg db 'Memory manager V1.2',0 +msg db 'Memory manager V1.3',0 menu db 'Nom | Taille | Res | Parent | Mem',0 end start From 76e868726917a635b14e6c4b47d76a4d8c7e41fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Sun, 31 Oct 2004 12:24:36 +0000 Subject: [PATCH 24/64] =?UTF-8?q?feat:=20suppression=20des=20fonction=20de?= =?UTF-8?q?=20gestion=20de=20blocs=20de=20m=C3=A9moire=20inutile=20et=20mi?= =?UTF-8?q?se=20en=20r=C3=A9sident=20syst=C3=A9matique=20des=20blocs=20m?= =?UTF-8?q?=C3=A9moire=20syst=C3=A8me?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- noyau/systeme.asm | 28 +--------------------------- 1 file changed, 1 insertion(+), 27 deletions(-) diff --git a/noyau/systeme.asm b/noyau/systeme.asm index b6af68a..81003ad 100644 --- a/noyau/systeme.asm +++ b/noyau/systeme.asm @@ -589,22 +589,6 @@ MBinit: notforfree: stc pop es cx ax - ret - -;Libère le bloc de mémoire GS -MBFree: - push bx es - mov bx,gs - dec bx - dec bx - mov es,bx - cmp es:[MB.Check],'NH' - je notforfree - mov es:[MB.IsResident],0 - mov es:[MB.Reference],Free - mov dword ptr es:[MB.Names],'eerF' - mov dword ptr es:[MB.Names+4],0 - pop es bx ret ;Creér un bloc de nom ds:si de taille cx (octets) -> n°segment dans GS @@ -632,7 +616,7 @@ searchfree: mov word ptr es:[MB.Check],'NH' mov es:[MB.IsNotLast],True mov es:[MB.Reference],cs - mov es:[MB.IsResident],False + mov es:[MB.IsResident],True mov es:[MB.Sizes],cx mov di,MB.Names push ax cx @@ -682,16 +666,6 @@ notsogood: add bx,es:[MB.Sizes] jmp searchfree -;Rend le segment GS résident -MBresident: - push bx es - mov bx,gs - dec bx - mov es,bx - mov es:[MB.IsResident],True - pop es bx - ret - ;================================================ ;Routine de gestion de handler ;================================================ From d5a9d98391e1a6900c48d3a7d63e9aecec7ccc4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Tue, 2 Nov 2004 21:54:19 +0000 Subject: [PATCH 25/64] =?UTF-8?q?feat:=20rajout=20de=20la=20fonction=20mba?= =?UTF-8?q?lloc=20qui=20permet=20a=20un=20programme=20utilisateur=20de=20r?= =?UTF-8?q?eserv=C3=A9=20un=20bloc=20m=C3=A9moire=20de=20data.=20Modificat?= =?UTF-8?q?ion=20de=20la=20commande=20mbfree=20afin=20de=20lib=C3=A9rer=20?= =?UTF-8?q?les=20sous=20blocs=20associ=C3=A9s.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- noyau/mcb.asm | 46 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/noyau/mcb.asm b/noyau/mcb.asm index ec21352..0027064 100644 --- a/noyau/mcb.asm +++ b/noyau/mcb.asm @@ -9,7 +9,7 @@ include ..\include\mem.h include ..\include\divers.h start: -maxfunc equ 7 +maxfunc equ 8 jmp tsr ;Saute à la routine résidente nameed db 'MB' ;Nom drivers @@ -61,6 +61,7 @@ tables dw MBinit ;Table qui contient les adresses de toutes les fonctions de VI dw MBGet dw MBFind dw MBChown + dw MBAlloc FirstMB dw 0 @@ -96,6 +97,7 @@ notforfree: MBFree: push bx es mov bx,gs + mov ax,bx dec bx dec bx mov es,bx @@ -107,6 +109,27 @@ MBFree: 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 pop es bx ret wasfree: @@ -131,6 +154,20 @@ wasfree2: 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 ;Renvoie en GS le MB n° cx carry quand terminé MBGet: @@ -161,12 +198,7 @@ itsend: foundmcb: clc pop dx bx - ret - - - - - + ret ;==============================Affiche le nombre nb hexa en EDX de taille CX et couleur BL============== ShowHex: From 7dbba040179325c623f3fad5f17f26fec223a85a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Wed, 3 Nov 2004 00:32:19 +0000 Subject: [PATCH 26/64] =?UTF-8?q?feat:=20rajout=20de=20la=20fonction=20mbc?= =?UTF-8?q?lean=20permettant=20de=20fusionner=20les=20espaces=20libres=20e?= =?UTF-8?q?t=20cela=20de=20maniere=20systematique=20lors=20d'une=20liberat?= =?UTF-8?q?ion=20de=20m=C3=A9moire.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- noyau/mcb.asm | 74 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 69 insertions(+), 5 deletions(-) diff --git a/noyau/mcb.asm b/noyau/mcb.asm index 0027064..a35ae65 100644 --- a/noyau/mcb.asm +++ b/noyau/mcb.asm @@ -9,7 +9,7 @@ include ..\include\mem.h include ..\include\divers.h start: -maxfunc equ 8 +maxfunc equ 9 jmp tsr ;Saute à la routine résidente nameed db 'MB' ;Nom drivers @@ -62,9 +62,66 @@ tables dw MBinit ;Table qui contient les adresses de toutes les fonctions de VI dw MBFind dw MBChown dw MBAlloc + dw MBclean FirstMB dw 0 +;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 @@ -95,7 +152,7 @@ notforfree: ;Libère le bloc de mémoire GS MBFree: - push bx es + push ax bx es mov bx,gs mov ax,bx dec bx @@ -129,12 +186,19 @@ searchtofree: mov dword ptr gs:[MB.Names+4],0 nottofree: cmp gs:[MB.IsNotLast],true - je searchtofree - pop es bx + je searchtofree + call MBclean + pop es bx ax ret wasfree: +pushad + mov ah,0Dh + mov cx,16 + mov dx,1999h + int 47h +popad stc - pop es bx + pop es bx ax ret ;Change le proprietaire de GS a dx From 1572c0277e5e3af8e4585a17201451a2e75a748c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Wed, 3 Nov 2004 00:33:59 +0000 Subject: [PATCH 27/64] =?UTF-8?q?feat:=20modification=20du=20programme=20q?= =?UTF-8?q?ui=20utilise=20des=20blocs=20de=20m=C3=A9moires=20pour=20le=20s?= =?UTF-8?q?tockage=20et=20la=20decompression=20du=20BMP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- programs/logo.asm | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/programs/logo.asm b/programs/logo.asm index 0b40be1..19854b7 100644 --- a/programs/logo.asm +++ b/programs/logo.asm @@ -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 @@ -48,7 +57,7 @@ int 47h mov ax,0 int 16h mov ah,39 -int 47h +int 47h mov ax,0004 int 47h db 0CBH @@ -73,10 +82,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 From d7590a458977bc304a8c2595e50a4f5cede220a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Wed, 3 Nov 2004 22:30:09 +0000 Subject: [PATCH 28/64] feat: ajout d'une recherche de sous bloc (mbfindsb) et correction d'un but concernant la commande de recherche de bloc mbfind. --- noyau/mcb.asm | 61 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 53 insertions(+), 8 deletions(-) diff --git a/noyau/mcb.asm b/noyau/mcb.asm index a35ae65..973cefd 100644 --- a/noyau/mcb.asm +++ b/noyau/mcb.asm @@ -9,7 +9,7 @@ include ..\include\mem.h include ..\include\divers.h start: -maxfunc equ 9 +maxfunc equ 10 jmp tsr ;Saute à la routine résidente nameed db 'MB' ;Nom drivers @@ -63,6 +63,7 @@ tables dw MBinit ;Table qui contient les adresses de toutes les fonctions de VI dw MBChown dw MBAlloc dw MBclean + dw MBfindsb FirstMB dw 0 @@ -191,12 +192,6 @@ nottofree: pop es bx ax ret wasfree: -pushad - mov ah,0Dh - mov cx,16 - mov dx,1999h - int 47h -popad stc pop es bx ax ret @@ -484,11 +479,61 @@ itsend2: 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 From f47656fd8844b0a5a503cfecf3713f81d7ecca06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Fri, 5 Nov 2004 00:57:03 +0000 Subject: [PATCH 29/64] =?UTF-8?q?fix:=20modification=20de=20la=20fonction?= =?UTF-8?q?=20verifsector=20qui=20pr=C3=A9sentait=20de=20nombreux=20bogues?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- noyau/disque.asm | 52 ++++++++++++++++++++++++------------------------ 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/noyau/disque.asm b/noyau/disque.asm index ef7d524..850948f 100644 --- a/noyau/disque.asm +++ b/noyau/disque.asm @@ -168,16 +168,10 @@ execfile: push bp dx mov bp,sp mov dx,ss:[bp+10] - mov ah,0Ah - mov cx,16 - int 47h pushad push ds es fs gs call projfile jc reallyerror - mov ah,0Ah - mov cx,16 - int 47h push es pop gs mov ah,6 @@ -749,10 +743,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 @@ -768,7 +761,7 @@ nodestruct: xchg cl,ch shl cl,6 or cl, bl - mov bx,si + mov bx,si mov SI, 4 mov AL,1 TryAgains: @@ -817,25 +810,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 @@ -843,18 +841,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 + jbe invert + pop cx si ret VerifySector2: @@ -889,6 +888,7 @@ decompression: mov cl,ah xor ah,ah xor ch,ch + cld rep stosb add si,5 sub dx,5 From 4a5372aa9dee57b8aea7378d491afda11ff9d712 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Fri, 5 Nov 2004 00:58:45 +0000 Subject: [PATCH 30/64] =?UTF-8?q?feat:=20modification=20de=20toutes=20les?= =?UTF-8?q?=20fonctions=20utilisant=20de=20la=20m=C3=A9moire=20afin=20qu'i?= =?UTF-8?q?l=20utilisent=20les=20mecanismes=20de=20r=C3=A9servation=20de?= =?UTF-8?q?=20blocs=20m=C3=A9moire.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- noyau/video.asm | 350 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 242 insertions(+), 108 deletions(-) diff --git a/noyau/video.asm b/noyau/video.asm index a1f3b37..29f5c09 100644 --- a/noyau/video.asm +++ b/noyau/video.asm @@ -1578,168 +1578,306 @@ noadjusted: +;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================ -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 - ret - ;===================================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 +1885,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 +1900,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 +1951,5 @@ include ..\include\pol8x8.inc font8x16: include ..\include\pol8x16.inc -copy equ $ -copy2 equ $+8192 -dac equ $+8192+8192 end start From 2d79e0a54146a15df5ff8de0f86b6e6df62f69da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Fri, 5 Nov 2004 00:59:48 +0000 Subject: [PATCH 31/64] =?UTF-8?q?feat:=20modification=20du=20programme=20a?= =?UTF-8?q?fin=20qu'il=20soit=20compatible=20avec=20les=20blocs=20m=C3=A9m?= =?UTF-8?q?oires?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- programs/editeur.asm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/programs/editeur.asm b/programs/editeur.asm index 1afa5f6..23c988c 100644 --- a/programs/editeur.asm +++ b/programs/editeur.asm @@ -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 From 1eff431dd6eb9dc8afb2bb912dffa5177fe0291f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Fri, 5 Nov 2004 01:00:15 +0000 Subject: [PATCH 32/64] =?UTF-8?q?fix:=20modification=20du=20programme=20af?= =?UTF-8?q?in=20qu'il=20soit=20compatible=20avec=20les=20blocs=20m=C3=A9mo?= =?UTF-8?q?ires=20et=20correction=20d'un=20bogue=20de=20couleur=20a=20la?= =?UTF-8?q?=20sortie=20du=20programme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- programs/gestion.asm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/programs/gestion.asm b/programs/gestion.asm index d729164..8266b9c 100644 --- a/programs/gestion.asm +++ b/programs/gestion.asm @@ -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 From 5b13a5616b9f82cd7c3f0a84e1548dec76da1a16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Fri, 5 Nov 2004 01:01:37 +0000 Subject: [PATCH 33/64] =?UTF-8?q?feat:=20modification=20du=20programme=20a?= =?UTF-8?q?fin=20qu'il=20soit=20compatible=20avec=20les=20blocs=20m=C3=A9m?= =?UTF-8?q?oires=20et=20les=20fonctions=20de=20restauration=20d'=C3=A9cran?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- programs/logo.asm | 8 +++----- programs/test.asm | 22 ++++++---------------- programs/verifier.asm | 17 +++++++++++------ programs/volume.asm | 6 +++++- 4 files changed, 25 insertions(+), 28 deletions(-) diff --git a/programs/logo.asm b/programs/logo.asm index 19854b7..d5a3b1a 100644 --- a/programs/logo.asm +++ b/programs/logo.asm @@ -36,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 @@ -56,10 +56,8 @@ mov si,offset poper int 47h mov ax,0 int 16h -mov ah,39 +mov ah,29h int 47h -mov ax,0004 -int 47h db 0CBH problem: diff --git a/programs/test.asm b/programs/test.asm index 49bbc1d..0b72193 100644 --- a/programs/test.asm +++ b/programs/test.asm @@ -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: diff --git a/programs/verifier.asm b/programs/verifier.asm index 8443dd3..e95066e 100644 --- a/programs/verifier.asm +++ b/programs/verifier.asm @@ -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 + jz nokey cmp al,32 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 @@ -106,7 +111,7 @@ error2 db 'Le disque est defectueux, appuyez sur une touche pour quitter',0 po db ' %',0 msgapp db '',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: diff --git a/programs/volume.asm b/programs/volume.asm index 518deeb..b8e2362 100644 --- a/programs/volume.asm +++ b/programs/volume.asm @@ -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 @@ -282,6 +284,8 @@ cursor: suit7: cmp ax,4200h jne adres2 + mov ah,29h + int 47H db 0CBH ret @@ -374,7 +378,7 @@ spaces db ' showbuffer db 35 dup (0FFh) oldmode db 0 infos db 40 dup (0) -buffer equ $ +buffer db 512 dup (0) end start From 5f1418ebc1265328c88f23730caed3b301384a7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Fri, 5 Nov 2004 01:06:44 +0000 Subject: [PATCH 34/64] build: ajout de la compilation de mcb.sys --- noyau/MAKEFILE | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/noyau/MAKEFILE b/noyau/MAKEFILE index 884139f..9cb29a7 100644 --- a/noyau/MAKEFILE +++ b/noyau/MAKEFILE @@ -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 From 9408661e06440e073bc7ec287b3934c9adc558f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Fri, 5 Nov 2004 01:15:50 +0000 Subject: [PATCH 35/64] build: ajout de la compilation du fichier memoire.exe --- programs/MAKEFILE | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/programs/MAKEFILE b/programs/MAKEFILE index dde9824..e7fd9fe 100644 --- a/programs/MAKEFILE +++ b/programs/MAKEFILE @@ -2,7 +2,12 @@ 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.exe editeur.exe gestion.exe logo.exe pmode.exe souris.exe test.exe verifier.exe volume.exe memoire.exe + +memoire.exe: memoire.asm + $(asm) memoire + $(lnk) memoire + ren memoire.com memoire.exe detect.exe: detect.asm $(asm) detect From 2dc6857104fec65441cbb8a916e5019cfce8c77c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Wed, 10 Nov 2004 11:54:51 +0000 Subject: [PATCH 36/64] =?UTF-8?q?fix:=20correction=20concernant=20les=20bu?= =?UTF-8?q?ffers=20pour=20evit=C3=A9=20les=20debordements=20de=20blocs=20m?= =?UTF-8?q?=C3=A9moire.correction=20concernant=20la=20saisie=20de=20comman?= =?UTF-8?q?de=20(caract=C3=A8res=20=C3=A9tendus).Ajout=20de=20la=20command?= =?UTF-8?q?e=20mem=20donnant=20le=20contenu=20de=20la=20m=C3=A9moire?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- commande/commande.asm | 120 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 111 insertions(+), 9 deletions(-) diff --git a/commande/commande.asm b/commande/commande.asm index 7565e0e..548dcb0 100644 --- a/commande/commande.asm +++ b/commande/commande.asm @@ -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 @@ -71,6 +74,8 @@ waitchar: norr: cmp al,0Dh je entere + cmp al,' ' + jb waitchar cmp di,offset buffer+256 je waitchar mov [di],al @@ -147,10 +152,6 @@ noaddext: xor bp,bp jmp replay reallyerror: - pop ax - pop ax - pop ax - pop ax mov ah,13 mov si,offset Error_Syntax int 47h @@ -362,6 +363,103 @@ int 47h errorrefreshing db 'Impossible de lire le support',0 extcom db '.EXE',0 + +Code_Mem: +mov si,offset msgs +mov ah,13 +int 47h +mov ah,6 +int 47h +mov si,offset menu +mov ah,13 +int 47h +mov ah,18h +int 47h +xor cx,cx +listmcb: +mov ah,4 +int 49h +jc fino +inc cx +inc bl +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 +jmp listmcb +fino: +ret +resident db 'oui',0 +nonresident db 'non',0 +msgs db 'Plan de la mémoire',0 +menu db 'Nom Taille Res Parent Mem',0 + + + + + + + + + + + + + + + + + + + + + + commands dw Str_Exit ,Code_Exit ,Syn_Exit ,Help_Exit dw Str_Version,Code_Version,Syn_Version,Help_Version @@ -372,6 +470,7 @@ 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 @@ -383,6 +482,7 @@ Str_Mode db 'MODE',0 Str_Dir db 'VOIR',0 Str_refresh db 'LIRE',0 Str_cd db 'CH',0 +Str_Mem db 'MEM',0 Syn_Exit db 0 Syn_Version db 0 Syn_Cls db 0 @@ -392,6 +492,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 @@ -400,7 +501,8 @@ 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 @@ -408,9 +510,9 @@ msg db 'Interpreteur de commande COS V1.1',0 include str0.asm -dir equ $ -buffer equ $+128 -buffer2 equ $+128+512 +dir db 32 dup (0) +buffer db 256 dup (0) +buffer2 db 256 dup (0) end start From 537fa9d76d679650fe3bc7dd32d4ffd6d8318e91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Wed, 10 Nov 2004 12:00:08 +0000 Subject: [PATCH 37/64] =?UTF-8?q?feat:=20usage=20de=20bloc=20de=20m=C3=A9m?= =?UTF-8?q?oire=20pour=20loger=20la=20FAT.correction=20permettant=20le=20c?= =?UTF-8?q?hargement=20des=20fichier=20a=20leur=20taille=20r=C3=A9elle=20e?= =?UTF-8?q?t=20correction=20des=20buffers=20pour=20eviter=20le=20debordeme?= =?UTF-8?q?nt=20de=20blocs=20m=C3=A9moire.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- noyau/disque.asm | 64 +++++++++++++++++++++++++++++++----------------- 1 file changed, 42 insertions(+), 22 deletions(-) diff --git a/noyau/disque.asm b/noyau/disque.asm index 850948f..598ddca 100644 --- a/noyau/disque.asm +++ b/noyau/disque.asm @@ -97,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 @@ -122,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)=============== @@ -229,11 +235,11 @@ projfile: jc errorload2 mov eax,cs:tempfit.FileSize mov ecx,eax - add ecx,19000 - push ax + add ecx,100h + push eax mov ah,2 int 49h - pop ax + pop eax jc errorload2 push gs pop es @@ -387,6 +393,7 @@ AdjustLast: mov cx,dx push cs pop ds + cld rep movsb zeroload: clc @@ -403,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 @@ -422,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 @@ -465,9 +472,22 @@ 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 si,offset datafat + mov ah,2 + int 49h + mov ah,3 + int 49h + xor di,di mov dx,myboot.SectorsPerFat mov cx,AdressFat + push gs + pop es SeeFat: call readsector jc ErrorInit @@ -476,12 +496,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 @@ -1055,11 +1077,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 From a5e57c63c3aa155d1a46d4fde9746664605e6c8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Wed, 10 Nov 2004 12:00:49 +0000 Subject: [PATCH 38/64] =?UTF-8?q?fix:=20correction=20d'un=20bogue=20lors?= =?UTF-8?q?=20de=20l'allocation=20m=C3=A9moire=20dans=20mbcreate?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- noyau/mcb.asm | 187 +------------------------------------------------- 1 file changed, 1 insertion(+), 186 deletions(-) diff --git a/noyau/mcb.asm b/noyau/mcb.asm index 973cefd..2b7ee99 100644 --- a/noyau/mcb.asm +++ b/noyau/mcb.asm @@ -257,191 +257,7 @@ itsend: foundmcb: clc pop dx bx - ret - -;==============================Affiche le nombre nb hexa en EDX de taille CX et couleur BL============== -ShowHex: - push ax bx cx edx si di - mov di,cx - sub cx,32 - neg cx - shl edx,cl - shr di,2 - mov ah,09h - and bx,1111b -Hexaize: - rol edx,4 - mov si,dx - and si,1111b - mov al,cs:[si+offset tab] - 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 - ret -Tab db '0123456789ABCDEF' - -;==============================Affiche une chaine DS:SI de couleur BL============== -showstr: - 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 - int 10h - jmp again - fin: - 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 - - - - -poppp db '*********',0 - - - - + ret ;Renvoie en GS le MCB qui correspond a ds:si MBFind: @@ -587,7 +403,6 @@ endofloops: dec ax dec ax cmp ax,0 - js nofree je nofree mov es:[MB.Sizes],cx add cx,bx From dc30bfd8f1fe240a843acc7ba997c2a9732b29fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Wed, 10 Nov 2004 12:01:56 +0000 Subject: [PATCH 39/64] =?UTF-8?q?fix:=20chargement=20des=20fichiers=20syst?= =?UTF-8?q?eme=20a=20leur=20taille=20r=C3=A9elle=20et=20correction=20d'un?= =?UTF-8?q?=20bogue=20dans=20l'affichage=20de=20leur=20occupation=20m?= =?UTF-8?q?=C3=A9moire?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- noyau/systeme.asm | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/noyau/systeme.asm b/noyau/systeme.asm index 81003ad..64cf4ee 100644 --- a/noyau/systeme.asm +++ b/noyau/systeme.asm @@ -672,7 +672,7 @@ notsogood: ;remplace le handler pointer par ds:si en bloc:100h interruption ax replacehandler: -push ax bx cx si di es ds +push ax bx cx si di ds call projfile jc reph mov bx,ax @@ -681,7 +681,7 @@ mov es:[102h],si mov es:[104h],ds call setint reph: -pop ds es di si cx bx ax +pop ds di si cx bx ax ret ;install le handler pointer par ds:si en bloc:100h interruption ax -> es @@ -788,13 +788,14 @@ 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,19000 + add ecx,100h call MBCreate jc errorload push gs From c7dcde1d6eee2c5fc390621eabc0cab5c68a6282 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Wed, 10 Nov 2004 12:06:48 +0000 Subject: [PATCH 40/64] =?UTF-8?q?feat:=20modification=20du=20programme=20a?= =?UTF-8?q?fin=20qu'il=20soit=20compatible=20avec=20les=20blocs=20m=C3=A9m?= =?UTF-8?q?oires=20BIS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- programs/gestion.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/programs/gestion.asm b/programs/gestion.asm index 8266b9c..6141ee8 100644 --- a/programs/gestion.asm +++ b/programs/gestion.asm @@ -192,6 +192,6 @@ 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 end start From a4b0815f42da49eb3dc1023edf19c864d50e6e03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Wed, 10 Nov 2004 12:26:45 +0000 Subject: [PATCH 41/64] fix: correction d'un bogue dans MBresident. --- noyau/mcb.asm | 1 + 1 file changed, 1 insertion(+) diff --git a/noyau/mcb.asm b/noyau/mcb.asm index 2b7ee99..aa586e1 100644 --- a/noyau/mcb.asm +++ b/noyau/mcb.asm @@ -436,6 +436,7 @@ MBresident: push bx es mov bx,gs dec bx + dec bx mov es,bx mov es:[MB.IsResident],True pop es bx From b85f27177b12a5a51bd0007d2a85233daa625c05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Wed, 10 Nov 2004 16:50:24 +0000 Subject: [PATCH 42/64] fix: correction sur le bogue lors du depassement de l'ecran --- programs/memoire.asm | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/programs/memoire.asm b/programs/memoire.asm index d683079..a176d4f 100644 --- a/programs/memoire.asm +++ b/programs/memoire.asm @@ -17,16 +17,16 @@ int 47h mov si,offset menu mov ah,13 int 47h -mov ah,18h +mov ah,6 int 47h - xor cx,cx listmcb: mov ah,4 int 49h jc fino inc cx -inc bl +mov ah,18h +int 47h push gs pop ds mov bh,0 @@ -76,6 +76,8 @@ mov cx,16 mov ah,11h int 47h pop cx +mov ah,6h +int 47h jmp listmcb fino: db 0CBh From 628a422717fd689aada746e01c96e134ae660811 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Wed, 10 Nov 2004 16:50:43 +0000 Subject: [PATCH 43/64] fix: correction sur le bogue lors du depassement de l'ecran dans la commande interne mem --- commande/commande.asm | 57 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 49 insertions(+), 8 deletions(-) diff --git a/commande/commande.asm b/commande/commande.asm index 548dcb0..fc258b7 100644 --- a/commande/commande.asm +++ b/commande/commande.asm @@ -72,8 +72,12 @@ 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 @@ -84,6 +88,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 @@ -370,9 +404,13 @@ 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 @@ -381,7 +419,8 @@ mov ah,4 int 49h jc fino inc cx -inc bl +mov ah,18h +int 47h push gs pop ds mov bh,0 @@ -430,13 +469,15 @@ 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 mémoire',0 +msgs db 'Plan de la memoire',0 menu db 'Nom Taille Res Parent Mem',0 @@ -475,13 +516,13 @@ commands dw Str_Exit ,Code_Exit ,Syn_Exit ,Help_Exit 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 From da960fb5fc641802034e47e1c8c25958d7831a0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Wed, 10 Nov 2004 19:24:14 +0000 Subject: [PATCH 44/64] fix: correction d'un bogue dans la fonction verifysector. --- noyau/disque.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noyau/disque.asm b/noyau/disque.asm index 598ddca..ee4fc15 100644 --- a/noyau/disque.asm +++ b/noyau/disque.asm @@ -874,7 +874,7 @@ invert: add si,4 add cx,4 cmp cx,cs:myboot.sectorsize - jbe invert + jb invert pop cx si ret From 4ae827bc4719542d04a5939b4e596c898556bede Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Wed, 10 Nov 2004 19:25:00 +0000 Subject: [PATCH 45/64] fix: correction d'un bogue lors de l'affichage d'erreur lecteur --- programs/verifier.asm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/programs/verifier.asm b/programs/verifier.asm index e95066e..8b9af11 100644 --- a/programs/verifier.asm +++ b/programs/verifier.asm @@ -30,7 +30,7 @@ VerifAll: mov ah,1 int 16h jz nokey - cmp al,32 + cmp al,' ' je enend nokey: mov ax,cx @@ -101,7 +101,9 @@ mov si,offset errore int 47h mov ah,0 int 16h -jmp replay + mov ah,29h + int 47H +db 0CBH From 4f63f2190634c144437dfa0404fd1e4d2a46ae9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Wed, 10 Nov 2004 19:25:24 +0000 Subject: [PATCH 46/64] fix: correction de la mauvaise declaration du buffer --- programs/gestion.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/programs/gestion.asm b/programs/gestion.asm index 6141ee8..3f341e7 100644 --- a/programs/gestion.asm +++ b/programs/gestion.asm @@ -192,6 +192,6 @@ msg2 db 'Programme en cours de chargement',0 prompt db '--------------------------------------------------------------------------------',0 infos db 'Nom Ext. Date creation Date modification Taille Attributs',0 -bufferentry db 512 +bufferentry db 512 dup (0) end start From d5a9a53cd67fe178bd976bd578f2817df10e2d7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Wed, 10 Nov 2004 19:30:08 +0000 Subject: [PATCH 47/64] feat: evite la creation d'un nouveau bloc memoire fat a chaque appel de la fonction initdrive --- noyau/disque.asm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/noyau/disque.asm b/noyau/disque.asm index ee4fc15..9778250 100644 --- a/noyau/disque.asm +++ b/noyau/disque.asm @@ -478,11 +478,17 @@ oknoagaintry: 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 From 9465b99c3ffed37c92082f627ad8a253098b33f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Thu, 11 Nov 2004 16:18:54 +0000 Subject: [PATCH 48/64] =?UTF-8?q?fix:=20f10=20correction=20de=20l'arret=20?= =?UTF-8?q?du=20programme=20vers=20commande.exe.=20Changement=20de=20focnt?= =?UTF-8?q?ionnement=20sur=20F12=20mais=20pas=20encore=20termin=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- noyau/clavier.asm | 411 +++++++++++++++++++++++++++------------------- 1 file changed, 246 insertions(+), 165 deletions(-) diff --git a/noyau/clavier.asm b/noyau/clavier.asm index cbc6cbc..83c32a6 100644 --- a/noyau/clavier.asm +++ b/noyau/clavier.asm @@ -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 From 6be56b4cce07e192d9c77b701719802d0e089231 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Thu, 11 Nov 2004 16:19:18 +0000 Subject: [PATCH 49/64] =?UTF-8?q?feat:=20pr=C3=A9paration=20au=20remagnage?= =?UTF-8?q?=20de=20la=20librairie=20video?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- noyau/video.asm | 96 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 69 insertions(+), 27 deletions(-) diff --git a/noyau/video.asm b/noyau/video.asm index 29f5c09..0c8b133 100644 --- a/noyau/video.asm +++ b/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,33 +1611,12 @@ 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 +ended: + pop di dx cx bx ax + ret From 29b1abf0ca93f89c88a1f9d20705aeca89ae942e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Thu, 11 Nov 2004 16:20:02 +0000 Subject: [PATCH 50/64] feat: execution des programme en COM plutot que exe --- commande/commande.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commande/commande.asm b/commande/commande.asm index fc258b7..9148052 100644 --- a/commande/commande.asm +++ b/commande/commande.asm @@ -396,7 +396,7 @@ 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 From bf1420d4b60b708976c3648434b1cfd3ad2780d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Thu, 11 Nov 2004 16:21:04 +0000 Subject: [PATCH 51/64] fix: correction d'un bogue d'affichage et d'un bogue de sauvegarde. --- programs/volume.asm | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/programs/volume.asm b/programs/volume.asm index b8e2362..49a0947 100644 --- a/programs/volume.asm +++ b/programs/volume.asm @@ -17,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 @@ -26,7 +30,7 @@ Adres: pop es mov cx,sect mov di,offset buffer - mov ax,0001h + mov ah,0h int 48h jnc noerror errtr: @@ -205,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 @@ -296,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 @@ -319,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 @@ -378,7 +383,7 @@ spaces db ' showbuffer db 35 dup (0FFh) oldmode db 0 infos db 40 dup (0) -buffer db 512 dup (0) +buffer db 2048 dup (0) end start From 20303cbb4f39acfff4a3850f69a7267f7c85e351 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Thu, 11 Nov 2004 17:03:41 +0000 Subject: [PATCH 52/64] =?UTF-8?q?feat:=20modification=20pour=20prise=20en?= =?UTF-8?q?=20charge=20clavier=20fran=C3=A7ais?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- commande/commande.asm | 83 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 79 insertions(+), 4 deletions(-) diff --git a/commande/commande.asm b/commande/commande.asm index 9148052..1b3aac0 100644 --- a/commande/commande.asm +++ b/commande/commande.asm @@ -58,6 +58,7 @@ noret: waitchar: mov ax,0 int 16h + call convertfr cmp ah,59 jne norr cmp bp,0 @@ -481,11 +482,85 @@ 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 From 056d43ea68a26cd8a3f37a4d588c05e004bf771a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Thu, 11 Nov 2004 19:47:25 +0000 Subject: [PATCH 53/64] docs: mise a jour avec description des API --- INFORMATIONS.md | 1223 +++++++++++++++++++++++++++++++++++++++++++++-- doc_origine.pdf | Bin 0 -> 151242 bytes 2 files changed, 1195 insertions(+), 28 deletions(-) create mode 100644 doc_origine.pdf diff --git a/INFORMATIONS.md b/INFORMATIONS.md index b6af644..308852e 100644 --- a/INFORMATIONS.md +++ b/INFORMATIONS.md @@ -11,6 +11,7 @@ Compatible Operating System Mode d’emploi Faire un programme pour COS Liste des APIs + Détail des APIs En cas de problème mailto:nicolas@palon.fr @@ -24,12 +25,20 @@ Comment l'installer ? Pour installer COS2000 : - Sous dos/windows + Sous dos/windows 9x Insérez une disquette 1.44 Mo vierge ou inutile dans votre lecteur. Lancez le programme SETUP.COM situé dans le dossier de COS2000. - Si celui ci ne détecte pas d'erreur, COS2000 est installé ! + + Sous windows NT/Xp + + Insérez une disquette 1.44 Mo vierge ou inutile dans votre lecteur. + Lancez le programme SETUP.EXE situé dans le dossier de COS2000. +- Si celui ci ne détecte pas d'erreur, COS2000 est installé ! + + Sous Linux Insérez une disquette 1.44 Mo vierge ou inutile dans votre lecteur. @@ -56,10 +65,10 @@ En plus des logiciels, l'interpr VERS Donne la version de COS2000. - EFFAC + CLEAR Efface l'écran. - REDEM + REBOOT Redémarre le PC. CMDS @@ -68,13 +77,16 @@ En plus des logiciels, l'interpr MODE [mode] Permet de changer de mode vidéo. [mode] doit être un entier compris entre 1 et 9. les modes au delà de 4 sont des modes graphiques à texte émulé. Il est déconseillé de les utiliser car il est parfois impossible de revenir aux modes texte. - LIRE + DISK Permet de lire un support disquette 1.44 Mo au format FAT12. - CH + CD Change le dossier actuel vers celui spécifié. - VOIR + DIR + Permet de lister le contenu du dossier actuel. + + MEM Permet de lister le contenu du dossier actuel. @@ -107,24 +119,25 @@ org 0100h ;Point d start: mov ah,0Dh mov si,offset msg - int 47h ;Afficher le texte pointé par DS:SI (Showstring0) + int 47h ;Afficher le texte (Showstring0) xor ax,ax int 16h ;Attendre l’appuie sur une touche db 0CBH ;retour far msg db ‘Hello World’,0 + end start Avec nasm [bits 16] ;16 bits -[org 0x0100] ;Point d’entré en 0100h -section .text ;Segment de code +[org 0x0100] ;Point d’entré en 0100h +section .text ;Segment de code start: mov ah,0x0D mov si,msg - int 0x47 ;Afficher le texte pointé par DS:SI (Showstring0) + int 0x47 ;Afficher le texte (Showstring0) xor ax,ax int 0x16 ;Attendre l’appuie sur une touche retf ;retour far @@ -147,14 +160,17 @@ Interruption 48h (Disquette uniquement) 05h compressrle 06h decompressrle 07h findfirstfile - 08h getfreespace - 09h searchfile - 0Ah getname - 0Bh getserial - 0Ch changedir - 0Dh readcluster - 0Eh writecluster - 0Fh getdir + 08h findnextfile + 09h getfreespace + 0Ah searchfile + 0Bh getname + 0Ch getserial + 0Dh changedir + 0Eh readcluster + 0Fh writecluster + 10h getdir +11h projfile +11h execfile port.sys : Gestionnaires port parallèle Interruption 0Dh (LPT1) ou 0Fh (LPT2) @@ -242,27 +258,1178 @@ Interruption 47h (VGA) 22h getinfos 23h loadbmp 24h showbmp - 25h clearscr + 25h viewbmp 26h savedac 27h restoredac 28h savestate 29h restorestate - 30h enablescroll - 31h disablescroll - 32h showdate - 33h showtime - 34h showname - 35h showattr - 36h showsize + 2Ah enablescroll + 2Bh disablescroll + 2Ch showdate + 2Dh showtime + 2Eh showname + 2Fh showattr + 30h showsize + 31h getchar + +mcb.sys : Gestionnaires de mémoire vive +Interruption 49h (MB) + +00h mbinit +01h mbfree +02h mbcreate +03h mbresident +04h mbget +05h mbfind +06h mbchown +07h mballoc +08h mbclean +09h mbfindsb -Pour l’instant je n’ai pas fait de guide détaillé de l’utilisation des fonctions de COS… A venir Les possibilités de COS2000 sont aujourd'hui très limitées car il est en cours de développement. + +Détail des APIs + +- Interruption 48h + +Readsector + + +Lit le secteur CX et le met en ES:DI. Met le flag carry à 1 si erreur. + + + +Paramètres +d’entrée AH=0 +CX +ES +DI + +Données en sortie Flag Carry + +Writesector + + +Ecrit le secteur CX avec les données pointés par DS:SI. Met le flag carry à 1 si erreur. + + +Paramètres +d’entrée AH=1 +CX +DS +SI + +Données en sortie Flag Carry + +Verifysector + + +Vérifie si le secteur CX n’est pas défectueux. Met le flag carry à 1 si erreur et flag equal à 0 si secteur défectueux. + + +Paramètres +d’entrée AH=2 +CX + +Données en sortie Flag Carry +Flag Equal + +Initdrive + + +Fonction initialisant le pilote et le matériel afin d’utiliser ultérieurement les fonctions de disque.sys. Met le flag carry à 1 si erreur. + + +Paramètres +d’entrée AH=3 + + +Données en sortie Flag Carry + +Loadfile + + +Charge le fichier dont le nom est pointé par DS:SI en mémoire dans ES:DI et renvoie le nombre d’octets lu en ECX. Met le flag carry à 1 si erreur. + + +Paramètres +d’entrée AH=4 +DS +SI +ES +DI + +Données en sortie ECX +Flag Carry + +Compressrle + + +Compresse le contenu de la mémoire pointé par DS:SI (selon une méthode RLE) et dont la taille est spécifié par CX. Le résultat sera mis en ES:DI ainsi que la nouvelle taille mémoire (octets) en BP. +Paramètres +d’entrée AH=5 +DS +SI +ES +DI +CX + +Données en sortie + +Decompressrle + + +Décompresse le contenu de la mémoire pointé par DS:SI (selon une méthode RLE) et dont la taille est spécifié par CX. Le résultat sera mis en ES:DI ainsi que la nouvelle taille mémoire (octets) en BP. +Paramètres +d’entrée AH=6 +DS +SI +ES +DI +CX + +Données en sortie + +Findfirstfile + + +Renvoie en ES:DI la première entrée du répertoire courant (format BRUT). Met le flag carry à 1 si erreur. Cette fonction prépare aussi l’usage de la fonction findnextfile. + +Format d’une entrée de répertoire : + +Entries Struc +FileName db 8 dup (0) +FilExt db 3 dup (0) +FileAttr db 0 +FileReserved db 0 +FileTimeCreaMs db 0 ;(*10 ms) +FileTimeCrea dw 0 +FileDateCrea dw 0 +FileDateAcc dw 0 +FileNotused dw 0 +FileTime dw 0 +FileDate dw 0 +FileGroup dw 0 +FileSize dd 0 +Entries Ends + +Paramètres +d’entrée AH=7 +ES +DI + +Données en sortie Flag Carry + +Findnextfile + + +Renvoie en ES:DI l’entrée suivante du répertoire courant (format BRUT). Met le flag carry à 1 si erreur. +Paramètres +d’entrée AH=8 +ES +DI + +Données en sortie Flag Carry + +Getfreespace + + +Renvoie en EDX l'espace disque libre du volume en octets. Met le flag carry à 1 si erreur. +Paramètres +d’entrée AH=9 + +Données en sortie EDX +Flag Carry + +Searchfile + + +Renvois dans ES:DI l’entrée de répertoire du fichier pointé par DS:SI. Met le flag equal a 0 si pas existant. Met le flag carry à un si erreur. +Paramètres +d’entrée AH=10 +DS +SI +ES +DI + + +Données en sortie Flag Equal +Flag Carry + + +Getname + + +Renvois dans ES:DI le nom du support courant. +Paramètres +d’entrée AH=11 +ES +DI + + +Données en sortie + + +Getserial + + +Renvois le numéro de série du support courant en EDX. +Paramètres +d’entrée AH=11 + +Données en sortie EDX + +Changedir + + +Change le répertoire courant a celui dont le nom est pointé par DS:SI. Met le flag carry à un si erreur. +Paramètres +d’entrée AH=13 +DS +SI + +Données en sortie Flag Carry + +Readcluster + + +Lit le cluster (groupe) CX et le met en ES:DI. Met le flag carry à 1 si erreur. +Paramètres +d’entrée AH=14 +ES +DI + +Données en sortie Flag Carry + +Writecluster + + +Ecrit le cluster (groupe) CX avec les données pointés par DS:SI. Met le flag carry à 1 si erreur. + +Paramètres +d’entrée AH=15 +ES +DI + +Données en sortie Flag Carry + +Getdir + + +Renvoie en ES:DI sous forme de chaîne a zéro terminal le nom du répertoire courant. +Paramètres +d’entrée AH=16 +ES +DI + +Données en sortie + +Projfile + + +Charge le fichier dont le nom est pointé par DS:SI dans un bloc mémoire. Renvoie en ECX le nombre d’octets lus et en ES l’adresse du bloc de mémoire. Met le flag carry à 1 si erreur. + +Paramètres +d’entrée AH=17 +DS +SI + +Données en sortie ECX +ES +Flag Carry + +Execfile + + +Exécute le fichier dont le nom est pointé par DS:SI. Met le flag carry à 1 si erreur. + +Paramètres +d’entrée AH=18 +DS +SI + +Données en sortie Flag Carry + +- Interruption 47h + +Setvideomode + + +Fixe le mode vidéo courant a dont le numéro est AL. Met le flag carry à 1 si erreur. + +MODES : +0 -> 40x25x16 couleurs en texte +1 -> 80x25x16 couleurs en texte +2 -> 80x50x16 couleurs en texte +3 -> 100x50x16 couleurs en texte +4 -> 100x60x16 couleurs en texte +5 -> 320x200x256 couleurs en graphique +6 -> 320x400x256 couleurs en graphique +7 -> 320x480x256 couleurs en graphique +8 -> 360x480x256 couleurs en graphique +9 -> 400x600x256 couleurs en graphique + +Les modes sont généralement utilisable avec une carte VGA 256ko, mais la plupart surexploitent le contrôleur vidéo donc ne fonctionne pas toujours. L’utilisation des fonctions caractères est disponible en mode graphique par l’usage de polices émulés mais beaucoup de bugs sont encore présent. + + +Paramètres +d’entrée AH=0 +AL + +Données en sortie Flag Carry + +Getvideomode + + +Retourne le mode vidéo courant a dans AL. + +Paramètres +d’entrée AH=1 + + +Données en sortie AL + +Getvideomode + + +Efface l’écran en mode graphique ou texte. + +Paramètres +d’entrée AH=2 + + +Données en sortie + +Setfont + + +Active la police de numéro CL parmi les 8 disponibles. + +Paramètres +d’entrée AH=3 +CL + +Données en sortie + +Getfont (PAS ENCORE IMPLEMENTE) + + +Récupère en CL le N° de police actif. + +Paramètres +d’entrée AH +CL + +Données en sortie + + +Loadfont + + +Charge une police pointée par DS:SI dans la carte vidéo sous le n° de police BL. La taille en hauteur de la police (en pixel) doit être renseigné dans CL Met le flag carry à 1 si erreur. + +Paramètres +d’entrée AH=4 +DS +SI +CL + +Données en sortie Flag Carry + +Showspace + + +Affiche un espace à l’écran après le curseur. + +Paramètres +d’entrée AH=5 + + +Données en sortie + +Showline + + +Affiche un retour a la ligne à l’écran après le curseur. + +Paramètres +d’entrée AH=6 + + +Données en sortie + +Showchar + + +Affiche un caractère dont le code ASCII est contenu dans DL à l’écran après le curseur. + +Paramètres +d’entrée AH=7 +DL + +Données en sortie + + +Showint + + +Affiche le nombre entier contenu dans EDX à l’écran après le curseur. + +Paramètres +d’entrée AH=8 +EDX + +Données en sortie + +Showsigned + + +Affiche le nombre entier signé contenu dans EDX à l’écran après le curseur. + +Paramètres +d’entrée AH=9 +EDX + +Données en sortie + +Showhex + + +Affiche le nombre hexadécimal contenu dans EDX et de taille CX bits à l’écran après le curseur. + +Paramètres +d’entrée AH=10 +EDX +CX + +Données en sortie + +ShowBin + + +Affiche le nombre binaire contenu dans EDX et de taille CX bits à l’écran après le curseur. + +Paramètres +d’entrée AH=11 +EDX +CX + +Données en sortie + +ShowString + + +Affiche la chaîne de caractère (type fixe) pointée par DS:SI à l’écran après le curseur. + +Chaîne de type fixe : + +Chaine db 24,‘c un chaine de type fixe’ + +Paramètres +d’entrée AH=12 +DS +SI + +Données en sortie + +ShowString0 + + +Affiche la chaîne de caractère (type zéro terminal) pointée par DS:SI à l’écran après le curseur. + +Chaîne de type zéro terminal: + +Chaine db ‘c un chaine de type zéro terminal’,0 + +Paramètres +d’entrée AH=13 +DS +SI + +Données en sortie + +Showchartat + + +Réalise la même fonction que la fonction showchar en spécifiant les coordonnées BL (y), BH (x) ou tout devra être affiché. + +Paramètres +d’entrée AH=14 +DL +BL BH + +Données en sortie + +Showintat + + +Réalise la même fonction que la fonction showint en spécifiant les coordonnées BL (y), BH (x) ou tout devra être affiché. + +Paramètres +d’entrée AH=15 +EDX +BL BH + +Données en sortie + +Showsignedat + + +Réalise la même fonction que la fonction showsigned en spécifiant les coordonnées BL (y), BH (x) ou tout devra être affiché. + +Paramètres +d’entrée AH=16 +EDX +BL BH + +Données en sortie + +Showhexat + + +Réalise la même fonction que la fonction showhex en spécifiant les coordonnées BL (y), BH (x) ou tout devra être affiché. + +Paramètres +d’entrée AH=17 +EDX +CX +BL BH + +Données en sortie + +Showbinat + + +Réalise la même fonction que la fonction showbin en spécifiant les coordonnées BL (y), BH (x) ou tout devra être affiché. + +Paramètres +d’entrée AH=18 +EDX +CX +BL BH + +Données en sortie + +Showstringat + + +Réalise la même fonction que la fonction showstring en spécifiant les coordonnées BL (y), BH (x) ou tout devra être affiché. + +Paramètres +d’entrée AH=19 +DS +SI +BL BH + +Données en sortie + +Showstring0at + + +Réalise la même fonction que la fonction showstring0 en spécifiant les coordonnées BL (y), BH (x) ou tout devra être affiché. + +Paramètres +d’entrée AH=20 +DS +SI +BL BH + +Données en sortie + +Setcolor + + +Change la couleur courante (attributs) pour les opérations textes a celle spécifié dans CL + +Paramètres +d’entrée AH=21 +CL + +Données en sortie + +Setcolor + + +Récupère dans CL la couleur courante (attributs) pour les opérations textes. + +Paramètres +d’entrée AH=22 + + +Données en sortie CL + +Setstyle (PAS ENCORE IMPLEMENTE) + + +Change le style (transparent ou non) courant pour les opérations graphique a celui spécifié dans CL + +Paramètres +d’entrée AH +CL + +Données en sortie + +Getstyle (PAS ENCORE IMPLEMENTE) + + +Récupère dans CL le style courant (transparent ou non) pour les opérations graphique. + +Paramètres +d’entrée AH + + +Données en sortie CL + +Scrolldown + + +Défile l’écran texte ou graphique de CX caractères vers le haut. + +Paramètres +d’entrée AH=23 +CX + +Données en sortie + +Getxy + + +Renvoie en BH les coordonnées x du curseur texte et en BL les coordonnées y du curseur texte. + +Paramètres +d’entrée AH=24 + + +Données en sortie BH BL + +Setxy + + +Fixe les coordonnées x du curseur texte a BH et les coordonnées y du curseur texte a L. + +Paramètres +d’entrée AH=25 +BH BL + +Données en sortie + +SaveScreen + + +Sauvegarde le contenu de l’écran dans un bloc mémoire appelé /vgascreen lié a l’application appelante. +Paramètres +d’entrée AH=26 + + +Données en sortie + +RestoreScreen + + +Restaure le contenu de l’écran précédemment sauvegardé dans un bloc mémoire. +Paramètres +d’entrée AH=27 + + +Données en sortie + +Page1to2 + + +Copie le contenu de la page vidéo n°1 dans la page vidéo n°2. Ne fonctionne qu’en mode texte. +Paramètres +d’entrée AH=28 + +Données en sortie + +Page2to1 + + +Copie le contenu de la page vidéo n°2 dans la page vidéo n°1. Ne fonctionne qu’en mode texte. +Paramètres +d’entrée AH=29 + +Données en sortie + +Xchgpage + + +Echange le contenu de la page vidéo n°2 dans la page vidéo n°1. Ne fonctionne qu’en mode texte. +Paramètres +d’entrée AH=30 + +Données en sortie + +Savepage1 + + +Sauvegarde le contenu de l’écran dans un bloc mémoire appelé /vgapage1 lié a l’application appelante. +Paramètres +d’entrée AH=31 + +Données en sortie + +Changelineattr (VA ETRE SUPPRIMER) + + +Modifie la couleur de la ligne N°DI a l’écran a celle contenue dans AL. +Paramètres +d’entrée AH=32 +AL +DI + +Données en sortie + +Waitretrace + + +Synchronisation avec la retrace verticale. +Paramètres +d’entrée AH=33 + + +Données en sortie + +Getvgainfos + + +Renvoie un bloc de donnée en ES:DI contenant l'état de la carte graphique. + +lines db 0 +columns db 0 +x db 0 +y db 0 +xy dw 0 +colors db 7 +mode db 0FFh +pagesize dw 0 +pages db 0 +font db 0 +graphic db 0 +xg dw 0 +yg dw 0 +style dw 0 +nbpage db 0 +pagesshowed db 0 +plane db 0 +xyg dw 0 +linesize dw 0 +adress dw 0 +base dw 0 +scrolling db 1 +Paramètres +d’entrée AH=34 +ES +SI + +Données en sortie + +Loadbmppalet + + +Charge la palette (DAC) du BMP pointée par DS:SI. +Paramètres +d’entrée AH=35 +DS +SI + +Données en sortie + +Showbmp + + +Affiche le BMP pointée par DS:SI en X:BX, Y:CX. +Paramètres +d’entrée AH=36 +DS +SI +BX +CX + +Données en sortie + +Viewbmp + + +Affiche le BMP pointée par DS:SI en X:BX, Y:CX avec la préparation de la palette. +Paramètres +d’entrée AH=3 +DS +SI +BX +CX + +Données en sortie + +Savedac + + +Sauvegarde le contenu de la palette (DAC) dans un bloc mémoire appelé /vgadac lié a l’application appelante. +Paramètres +d’entrée AH=38 + + +Données en sortie + +Savedac + + +Restaure le contenu de la palette (DAC) précédemment sauvegardé dans un bloc mémoire. +Paramètres +d’entrée AH=39 + + +Données en sortie + +Savestate + + +Sauvegarde l’etat complet de la carte graphique dans un bloc mémoire appelé /vga lié a l’application appelante. FONCTIONNE PEUT ETRE EN MODE GRAPHIQUE. +Paramètres +d’entrée AH=40 + + +Données en sortie + +Restorestate + + +Restaure l’etat complet de la carte graphique précédemment sauvegardé dans un bloc mémoire. FONCTIONNE PEUT ETRE EN MODE GRAPHIQUE. +Paramètres +d’entrée AH=41 + + +Données en sortie + +EnableScroll + + +Active le défilement automatique de l’écran lors de dépassements. +Paramètres +d’entrée AH=42 + + +Données en sortie + +DisableScroll + + + +Desactive le défilement automatique de l’écran lors de dépassements. +Paramètres +d’entrée AH=43 + + +Données en sortie + +Showdate + + +Affiche la date contenue dans DX à l’écran après le curseur. + +Paramètres +d’entrée AH=44 +DX + +Données en sortie + +Showtime + + +Affiche l’heure contenue dans à l’écran après le curseur. + +Paramètres +d’entrée AH=45 +DX + + +Données en sortie + +Showname + + +Affiche le nom de fichier pointé par DS:SI à l’écran après le curseur. + +Paramètres +d’entrée AH=46 +DS +SI + +Données en sortie + +Showattr + + +Affiche les attributs fichiers contenus dans DL à l’écran après le curseur. + +Paramètres +d’entrée AH=47 +DL + +Données en sortie + +Showsize + + +Affiche le la taille en octets (et multiples) contenue dans EDX à l’écran après le curseur. + +Paramètres +d’entrée AH=48 +EDX + +Données en sortie + +Getchar + + +Renvoie le caractère situé sous le curseur dans DL. + +Paramètres +d’entrée AH=49 + + +Données en sortie DL + +Setxyg (PAS ENCORE IMPLEMENTE) + + +Change les coordonnées du curseur graphique a X:BX,Y:CX. +Paramètres +d’entrée AH +BX CX + +Données en sortie + +Getxyg (PAS ENCORE IMPLEMENTE NI ECRIT) + + +Récupère les coordonnées du curseur graphique a X:BX,Y:CX. +Paramètres +d’entrée AH + + +Données en sortie BX CX + +Showpixel (PAS ENCORE IMPLEMENTE) + + +Affiche un pixel de couleur AL en X:BX,Y:CX. +Paramètres +d’entrée AH +BX CX +AL + +Données en sortie + +Getpixel (PAS ENCORE IMPLEMENTE) + + +Récupère la couleur du pixel en X:BX,Y:CX dans AL. +Paramètres +d’entrée AH +BX CX + + +Données en sortie AL + +- Interruption 49h + +Mbinit + + +Initialise les blocs de mémoire pour une utilisation futur des fonction MBs (inutile car le système le réalise au boot). Met le flag carry à 1 si erreur. + +Paramètres +d’entrée AH=0 + + +Données en sortie Flag Carry + +Mbfree + + +Libère le bloc de mémoire GS ainsi que tout les sous blocs de mémoire lié (fils). Un bloc de mémoire considéré résident ou un sous bloc résident ne sera pas libéré. Met le flag carry à 1 si erreur. + +Paramètres +d’entrée AH=1 +GS + +Données en sortie Flag Carry + +Mbcreate + + +Crée un bloc de CX caractères (octets) et de nom DS :SI. Retourne en GS le bloc de mémoire alloué et met le flag carry à 1 en cas d’erreur. +Paramètres +d’entrée AH=2 +DS +SI + +Données en sortie GS +Flag Carry + +Mbresident + + +Met le bloc GS en situation de bloc mémoire résident (non libérable). + +Paramètres +d’entrée AH=3 +GS + +Données en sortie + +Mbget + + +Renvoie en GS l’adresse du bloc mémoire situé en CX ème position. Met le flag carry à 1 si introuvable. + +Paramètres +d’entrée AH=4 + + +Données en sortie GS +Flag Carry + +Mbfind + + +Renvoie en GS le bloc de mémoire dont le nom correspond a la chaîne de caractère situé en DS:SI. Met le flag carry à 1 si introuvable. + +Paramètres +d’entrée AH=5 +DS +SI + +Données en sortie GS +Flag Carry + +Mbchown + + +Change le proprietaire (père) du bloc de mémoire GS a celui precisé par DX. + +Paramètres +d’entrée AH=6 +GS +DX + +Données en sortie Flag Carry + +Mballoc + + +Alloue un bloc de CX caractères (octets) pour le processus (programme) qui le demande. Retourne en GS le bloc de mémoire alloué et met le flag carry à 1 en cas d’erreur. +Paramètres +d’entrée AH=7 +CX + +Données en sortie GS +Flag Carry + +Mbclean + + +Nettoie un peu la mémoire pour fonctionner des blocs de mémoire libre contiguë. Généralement inutile car géré par le systeme. +Paramètres +d’entrée AH=8 + + +Données en sortie Flag Carry + +Mbfindsb + + +Renvoie en GS le sous bloc de mémoire dont le nom correspond a la chaîne de caractère situé en DS:SI et dont le propriétaire est DX. Met le flag carry à 1 si introuvable. + +Paramètres +d’entrée AH=9 +DS +SI +DX + +Données en sortie Flag Carry + +- Interruption 74h + +Cmdmouse + + +Envoie une commande AL à la souris via contrôleur clavier +Paramètres +d’entrée AH=0 +AL + +Données en sortie + +Cmdmouse2 + + +Envoie une commande type 2 AL à la souris via contrôleur clavier +Paramètres +d’entrée AH=1 +AL + +Données en sortie + +Detectmouse + + +Détecte et initialise une souris de type PS/2. Met le flag carry à 1 si introuvable. + +Paramètres +d’entrée AH=2 +AL + +Données en sortie Flag Carry + +Getmouse + + +Envoie en BX,CX les coordonnées virtuelles de la souris (respectivement X et Y) ainsi qu’en DL l’état des boutons. + +Paramètres +d’entrée AH=3 + + +Données en sortie BX +CX +DL + +Getmousescreen + + +Envoie en BX,CX les coordonnées écran de la souris (respectivement X et Y) ainsi qu’en DL l’état des boutons. + +Paramètres +d’entrée AH=4 + + +Données en sortie BX +CX +DL + +Configmouse + + +Configure la vélocité de la souris dans CL et dans AH, AL les sphères X et Y. +Paramètres +d’entrée AH=5 +AH AL +CL + +Données en sortie + + + +A suivre pour les autres ressources…. (et avec exemples !) + En cas de problèmes Si des bugs surviennent ou si COS2000 ne veut pas s'installer, veuillez s'il vous plaît m'envoyer un E Mail à : mailto:nicolas@palon.fr -COS2000 n'exploite pas les disques durs, il est donc impossible qu'il altère de quelque manière que ce soit vos données !!!!!!!!!!!!! +COS2000 n'exploite pas les disques durs, il est donc improbable qu'il altère vos données ! diff --git a/doc_origine.pdf b/doc_origine.pdf new file mode 100644 index 0000000000000000000000000000000000000000..945c756acb3de12336890918c395f65059ca11d8 GIT binary patch literal 151242 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ⅆpIs!7_P?5`!B;K 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 z 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 V*u3E(s0g_HOISg{V6&m{{{b-BYT*C? literal 0 HcmV?d00001 From d6d3e21484fe2850d8d6b0e36a5283ed4df0778c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Sat, 13 Nov 2004 08:58:42 +0000 Subject: [PATCH 54/64] =?UTF-8?q?feat:=20mise=20a=20jour=20des=20num=C3=A9?= =?UTF-8?q?ro=20de=20version=20dans=20le=20source.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- programs/detect.asm | 2 +- programs/gestion.asm | 2 +- programs/memoire.asm | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/programs/detect.asm b/programs/detect.asm index 0750b2a..9c4ea33 100644 --- a/programs/detect.asm +++ b/programs/detect.asm @@ -163,7 +163,7 @@ msg3 db ' Classe :',0 msg1 db 'Peripherique :',0 msg2 db ' Constructeur :',0 msg4 db ' iD :',0 -msg db 'COS2000 hardware detecteur V1.5',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 diff --git a/programs/gestion.asm b/programs/gestion.asm index 3f341e7..dc79590 100644 --- a/programs/gestion.asm +++ b/programs/gestion.asm @@ -187,7 +187,7 @@ 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 diff --git a/programs/memoire.asm b/programs/memoire.asm index a176d4f..d3ed25b 100644 --- a/programs/memoire.asm +++ b/programs/memoire.asm @@ -83,7 +83,7 @@ fino: db 0CBh resident db 'oui',0 nonresident db 'non',0 -msg db 'Memory manager V1.3',0 +msg db 'Memory manager V1.5',0 menu db 'Nom | Taille | Res | Parent | Mem',0 end start From 051a6e57e9b63de09be14e079fad3dc9fada5664 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Sat, 13 Nov 2004 08:59:13 +0000 Subject: [PATCH 55/64] build: compilation des programmes en .com plutot que .exe --- programs/MAKEFILE | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/programs/MAKEFILE b/programs/MAKEFILE index e7fd9fe..62eb6e0 100644 --- a/programs/MAKEFILE +++ b/programs/MAKEFILE @@ -2,61 +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 memoire.exe +all: detect.com editeur.com gestion.com logo.com pmode.com souris.com test.com verifier.com volume.com memoire.com -memoire.exe: memoire.asm +memoire.com: memoire.asm $(asm) memoire $(lnk) memoire - ren memoire.com memoire.exe + ren memoire.com memoire.com -detect.exe: detect.asm +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 From 65add82338cc8efdd824a49531a373a9ded1803d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Sat, 13 Nov 2004 09:05:35 +0000 Subject: [PATCH 56/64] feat: ajout d'un commentaire lors de l'activation de la souris --- programs/souris.asm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/programs/souris.asm b/programs/souris.asm index 2890412..30c92fc 100644 --- a/programs/souris.asm +++ b/programs/souris.asm @@ -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 From 82503fa5c9ec907c2803dd9c31ceb0f719f595f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Sat, 13 Nov 2004 09:20:52 +0000 Subject: [PATCH 57/64] =?UTF-8?q?feat:=20mise=20a=20jour=20des=20num=C3=A9?= =?UTF-8?q?ro=20de=20version=20dans=20le=20source.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install/setup.asm | 2 +- noyau/systeme.asm | 36 +++++++++--------------------------- 2 files changed, 10 insertions(+), 28 deletions(-) diff --git a/install/setup.asm b/install/setup.asm index e8dce29..e55dd8d 100644 --- a/install/setup.asm +++ b/install/setup.asm @@ -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,'$' diff --git a/noyau/systeme.asm b/noyau/systeme.asm index 64cf4ee..876a786 100644 --- a/noyau/systeme.asm +++ b/noyau/systeme.asm @@ -17,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 @@ -71,6 +49,9 @@ 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 @@ -252,6 +233,7 @@ 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 From badad86be24af60ceaf35e6875ce17b219302662 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Sat, 13 Nov 2004 09:22:57 +0000 Subject: [PATCH 58/64] feat: rajout du pilote de clavier. --- noyau/systeme.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/noyau/systeme.ini b/noyau/systeme.ini index 0fd6786..fe574b7 100644 --- a/noyau/systeme.ini +++ b/noyau/systeme.ini @@ -5,4 +5,5 @@ horloge.sys(8) disque.sys(48) souris.sys(74) heure.sys(8) +clavier.sys(9) port.sys(D) \ No newline at end of file From 49df44d5657d238b2d4373e09bc81f9bf2c9d6e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Sat, 13 Nov 2004 09:27:58 +0000 Subject: [PATCH 59/64] =?UTF-8?q?feat:=20mise=20a=20jour=20des=20num=C3=A9?= =?UTF-8?q?ro=20de=20version=20dans=20le=20source.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- commande/commande.asm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/commande/commande.asm b/commande/commande.asm index 1b3aac0..f0dfdc3 100644 --- a/commande/commande.asm +++ b/commande/commande.asm @@ -210,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 @@ -622,7 +622,7 @@ 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 From b6c921d0a88b39251b4faffb884c78d93075a3b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Sat, 13 Nov 2004 12:34:41 +0000 Subject: [PATCH 60/64] =?UTF-8?q?feat:=20installation=20sous=20linux=20(no?= =?UTF-8?q?n=20termin=C3=A9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install/setup.sh | Bin 0 -> 10752 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100755 install/setup.sh diff --git a/install/setup.sh b/install/setup.sh new file mode 100755 index 0000000000000000000000000000000000000000..916c5799216c45de2eea4e52669a1424c573aa26 GIT binary patch literal 10752 zcmeHN&u<$=6#jO-cI=dFw7to(R-Bl+IkkqQI_su7=}_)1&WSZ2!X$UsNong z0jDnayC$(dtpGJ1O9w`$MyHN0A6+)KRhLZAiD#bx@?U$VXe~UB!f?+cb2HgC_|OPv z8!pA8vW#oh_uKB|GmXBF<4hi(vz@qY*Y5*2SpTNc|G)Ay{qTc!T{g&j*zP{t-(&1s zM8Cv(f%PZlAVzllHous8-TdWO^kZY3)}Q5ZzqW3K zxXs7M@wTV^?(K2w zytWDgjqmwZN!R7Mr3iTTIsafw-8yG2fB>II{Q2(g{}!04ZA;PX!gGsDFXtDR-*|p8 z-PX=1AW><9#M*u&kLhY!f@hK#$=;+@b3InRIIK?PNmaSorb zt~LS6Lz&iZ9_Q98O>EKi-A6 zhq`d`xQ|mT9}oQ%V33~VZE#I*uNZIsYHwan-d;^#jyme)xt09%uIcBH@sn8X$4|%) zEi2TABgMPnHS|%{i2;tS#L-Dp-ZO6I8iEa&eSR_VqUq{sdoQ;Z>46noP8bfiDWDSXYpA{)!%#=oQCjbYTF)N!65O4@M1RMem0f)ejM?jkw{W#X%Mf*_gKlPsv?Y#8Ajtsfp=I&zACRXnYJ6QB4 zU-kzq;RYWEWs;6_P#Xx( z>5X{p=3q&DA9eFAig6I9xgj6rmVAPmjm3=S)&bwd*ZNf+QCl-P&9?fplI&+V`YN}Y z@w1YR=5m1Xbq`q#n#GLj72d}8cw(dDj~SdK3R5&}4uc%;UK_jF_)WanMUj+~a@W1< z=>Lg;$JtNt3tpp--@7~;!|>!-wK7{N&E?Njs^j^A%Gky7#PpnbCJc{AN0k;cBp0l` R(2IMo{qiZ*j&?Kx{{ZhgE#LqE literal 0 HcmV?d00001 From 6813e58212ebc664c02d7e4dfb9eeeab331cb1d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Sat, 13 Nov 2004 12:43:14 +0000 Subject: [PATCH 61/64] feat: logiciel d'installation pour Windows NT/2000/XP --- install/winNT/setup.bpf | 4 ++ install/winNT/setup.bpr | 120 +++++++++++++++++++++++++++++++++++ install/winNT/setup.res | Bin 0 -> 876 bytes install/winNT/setup.tds | Bin 0 -> 65536 bytes install/winNT/unit1.cpp | 135 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 259 insertions(+) create mode 100644 install/winNT/setup.bpf create mode 100644 install/winNT/setup.bpr create mode 100644 install/winNT/setup.res create mode 100644 install/winNT/setup.tds create mode 100644 install/winNT/unit1.cpp diff --git a/install/winNT/setup.bpf b/install/winNT/setup.bpf new file mode 100644 index 0000000..6967230 --- /dev/null +++ b/install/winNT/setup.bpf @@ -0,0 +1,4 @@ +This file is used by the project manager only and should be treated like the project file + + +main \ No newline at end of file diff --git a/install/winNT/setup.bpr b/install/winNT/setup.bpr new file mode 100644 index 0000000..b67fc36 --- /dev/null +++ b/install/winNT/setup.bpr @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[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= + + \ No newline at end of file diff --git a/install/winNT/setup.res b/install/winNT/setup.res new file mode 100644 index 0000000000000000000000000000000000000000..53d1accc46d0945afe50cda57289ae401923c1fa GIT binary patch literal 876 zcmb_bu}Z{15S{3iB3E2*N=xBd!N>)Ih58qMf?H&Zl!3edxgt%9gEaFQ78Z-Yu)epO zy^BT=!AIWCyq$ToA!J2Fa?txoq+jrUmg?u|$wFZmnzf z51ktJx=uSS%K~fEMvay)h1R3yAZqNR*91Rx^m4D$%|7Za>hxEy(N7N>lb;@*pZwHQ zKXt3ER`%QZdOZJwc!Opy&O3;dL$wcI0J?@&GnlB`P-kn@NLUAY0bJBf1H$Yieu;ht zxx&A3q96w`CXqkuA9$O2neqlRRI9TftkD F$tNfOCK><$ literal 0 HcmV?d00001 diff --git a/install/winNT/setup.tds b/install/winNT/setup.tds new file mode 100644 index 0000000000000000000000000000000000000000..5ae5c8e2bc3dcf02d98a8b800c2b36542d68c6db GIT binary patch literal 65536 zcmeI&&2G~`5Ww**QbqX?f&x8Ma0^$|M@Zu)Z6s4gv?|>oISR zy&-@A0tg_000IagfB*srAb@~+qJFAR;;@q)`1sjWh1we)+nAavjzcKJSq#oE2RCcA ztqbG4daboizMiN0B1!esyQuayBI$IbQ|GVE(yIMo73ag+XQp0WMQxkRuA(b_TkMUz zlbJl%(T2i#6Rq0)9jd);RyK=vE+w>!>TNsVY<53D>Z+(-NwAMhacwK#CHF19*y1qH%k090O0~)T>wWU~OUZ8g_rW&j z%>A(H!%z>BlZ#{^2!C3&f*aM!8es$GeX8y7d??a}m0+3$(*^IRm_d(bp98>&)_UA$9IwO$nE+^XmDMG)IF zXiq8D;j*0MrHSf=)|HJWEZ17M3q6-BAj@oX(cO+NNA7`i(<_-=M!5Yu)>pHBy^?Bt z5I_I{1Q0*~0R#|0009IZ6lj0{-&NaP9{&Y+kc$Ka5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ h0R#|0009ILKmY**5I_I{1Q0*~f&UgbI8 +#include +#include +#include +#include +#include +#include +#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; +} +//--------------------------------------------------------------------------- From 46f6725d5fc6348aeb5a02f3832f976d9e52a11c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Sat, 13 Nov 2004 13:29:52 +0000 Subject: [PATCH 62/64] feat: programme d'installation en mode graphique --- install/winNT gui/setup.bpr | 121 ++++++++++++++++++++++++ install/winNT gui/setup.cpp | 33 +++++++ install/winNT gui/setup.res | Bin 0 -> 876 bytes install/winNT gui/setup.tds | Bin 0 -> 524288 bytes install/winNT gui/unit1.cpp | 166 ++++++++++++++++++++++++++++++++ install/winNT gui/unit1.ddp | Bin 0 -> 51 bytes install/winNT gui/unit1.dfm | 184 ++++++++++++++++++++++++++++++++++++ install/winNT gui/unit1.h | 47 +++++++++ 8 files changed, 551 insertions(+) create mode 100644 install/winNT gui/setup.bpr create mode 100644 install/winNT gui/setup.cpp create mode 100644 install/winNT gui/setup.res create mode 100644 install/winNT gui/setup.tds create mode 100644 install/winNT gui/unit1.cpp create mode 100644 install/winNT gui/unit1.ddp create mode 100644 install/winNT gui/unit1.dfm create mode 100644 install/winNT gui/unit1.h diff --git a/install/winNT gui/setup.bpr b/install/winNT gui/setup.bpr new file mode 100644 index 0000000..035bc7b --- /dev/null +++ b/install/winNT gui/setup.bpr @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[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= + + \ No newline at end of file diff --git a/install/winNT gui/setup.cpp b/install/winNT gui/setup.cpp new file mode 100644 index 0000000..dec5b3e --- /dev/null +++ b/install/winNT gui/setup.cpp @@ -0,0 +1,33 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +//--------------------------------------------------------------------------- +USEFORM("Unit1.cpp", Form1); +//--------------------------------------------------------------------------- +WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) +{ + try + { + Application->Initialize(); + Application->CreateForm(__classid(TForm1), &Form1); + Application->Run(); + } + catch (Exception &exception) + { + Application->ShowException(&exception); + } + catch (...) + { + try + { + throw Exception(""); + } + catch (Exception &exception) + { + Application->ShowException(&exception); + } + } + return 0; +} +//--------------------------------------------------------------------------- diff --git a/install/winNT gui/setup.res b/install/winNT gui/setup.res new file mode 100644 index 0000000000000000000000000000000000000000..53d1accc46d0945afe50cda57289ae401923c1fa GIT binary patch literal 876 zcmb_bu}Z{15S{3iB3E2*N=xBd!N>)Ih58qMf?H&Zl!3edxgt%9gEaFQ78Z-Yu)epO zy^BT=!AIWCyq$ToA!J2Fa?txoq+jrUmg?u|$wFZmnzf z51ktJx=uSS%K~fEMvay)h1R3yAZqNR*91Rx^m4D$%|7Za>hxEy(N7N>lb;@*pZwHQ zKXt3ER`%QZdOZJwc!Opy&O3;dL$wcI0J?@&GnlB`P-kn@NLUAY0bJBf1H$Yieu;ht zxx&A3q96w`CXqkuA9$O2neqlRRI9TftkD F$tNfOCK><$ literal 0 HcmV?d00001 diff --git a/install/winNT gui/setup.tds b/install/winNT gui/setup.tds new file mode 100644 index 0000000000000000000000000000000000000000..d4db614569ffd85c940a3cd773088a4f26805707 GIT binary patch literal 524288 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%0DE-;ZU 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�*Yes>?P>Z|tJfC7f! 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 AD*ylh literal 0 HcmV?d00001 diff --git a/install/winNT gui/unit1.cpp b/install/winNT gui/unit1.cpp new file mode 100644 index 0000000..2b3fc55 --- /dev/null +++ b/install/winNT gui/unit1.cpp @@ -0,0 +1,166 @@ +//--------------------------------------------------------------------------- + +#include +#include +#include +#include +#include +#pragma hdrstop + +#include "Unit1.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TForm1 *Form1; +HANDLE hDrive; +DISK_GEOMETRY dg_flop_geom; +AnsiString lecteur="b:"; +AnsiString device="\\\\.\\"+lecteur; +//--------------------------------------------------------------------------- +__fastcall TForm1::TForm1(TComponent* Owner) + : TForm(Owner) +{ +} +//--------------------------------------------------------------------------- +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; +} +//--------------------------------------------------------------------------- +ShowMessages(AnsiString msg) +{ + Form1->Memo1->Lines->Add(msg); +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::FormShow(TObject *Sender) +{ +DWORD dwNotUsed; +DWORD error=0; + + hDrive = CreateFile(device.c_str(), GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL); + ShowMessages("Ouverture du peripherique "+lecteur); + if (hDrive == INVALID_HANDLE_VALUE) { + ShowMessages("Erreur : "+AnsiString(GetLastErrorString())); + error=1; + } + if(error!=1&&ShowMessages("Determination de la geometrie ")&&DeviceIoControl(hDrive, IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL,0, &dg_flop_geom, sizeof(dg_flop_geom),&dwNotUsed, NULL) == FALSE) { + ShowMessages("Erreur : "+AnsiString(GetLastErrorString())); + error=1; + } + if(error!=1&&(dg_flop_geom.MediaType==FixedMedia||dg_flop_geom.MediaType==RemovableMedia||dg_flop_geom.MediaType==Unknown)) + { + ShowMessages("Erreur : Ceci n'est pas une disquette !"); + error=1; + } + if (error!=1&&ShowMessages("Positionnement sur le secteur 0")&&SetFilePointer(hDrive, 0, NULL, FILE_BEGIN) == -1) { + ShowMessages("Erreur : "+AnsiString(GetLastErrorString())); + error=1; + } + if (error!=1) + { + drive->Caption=lecteur.UpperCase(); + track->Caption=IntToStr(dg_flop_geom.Cylinders.LowPart); + sector->Caption=IntToStr(dg_flop_geom.SectorsPerTrack); + size->Caption=IntToStr(dg_flop_geom.BytesPerSector); + head->Caption=IntToStr(dg_flop_geom.TracksPerCylinder); + allsize->Caption=IntToStr(dg_flop_geom.BytesPerSector*dg_flop_geom.Cylinders.LowPart*dg_flop_geom.SectorsPerTrack*dg_flop_geom.TracksPerCylinder); + allsector->Caption=IntToStr(dg_flop_geom.Cylinders.LowPart*dg_flop_geom.SectorsPerTrack*dg_flop_geom.TracksPerCylinder); + } + else + { + CloseHandle(hDrive); + } +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::Button1Click(TObject *Sender) +{ + if (hDrive == NULL||dg_flop_geom.TracksPerCylinder>2||dg_flop_geom.TracksPerCylinder==0) + + { + ShowMessages("Aucun support valide detecté !"); + } + else + { + int fdboot; + DWORD error=0; + DWORD dwBsWritten; + char * buffer; + AnsiString bootfile="data/boot.bin"; + ShowMessages("Allocation de mémoire "); + buffer = (char *)malloc(dg_flop_geom.BytesPerSector); + ShowMessages("Ouverture et installation du fichier de boot "+bootfile); + if ((fdboot = _rtl_open(bootfile.c_str(),O_RDONLY | O_BINARY)) == -1 ) + { + ShowMessages("Erreur : Fichier de boot introuvable"); + error=1; + } + if (error!=1&&_read(fdboot, buffer, dg_flop_geom.BytesPerSector)!= dg_flop_geom.BytesPerSector) + { + ShowMessages("Erreur : Fichier de boot de taille incorrecte !"); + error=1; + } + if (error!=1&&WriteFile(hDrive, buffer, dg_flop_geom.BytesPerSector, &dwBsWritten, NULL) == 0) + { + ShowMessages("Ecriture impossible sur le secteur de boot !"); + error=1; + } + _rtl_close(fdboot); + if (error!=1) + { + struct ffblk files; + int done; + int number=0; + ShowMessages("Détermination des fichiers a copier"); + done = findfirst("data/*.*",&files,0); + while (!done) + { + number++; + done = findnext(&files); + } + install->Max=number; + install->Min=0; + install->Position=0; + ShowMessages("Copie des fichiers de cos2000"); + done = findfirst("data/*.*",&files,0); + while (!done) + { + ShowMessages(AnsiString(files.ff_name).LowerCase()); + if (!CopyFile((AnsiString("data/")+AnsiString(files.ff_name)).c_str(),(lecteur+"\\"+AnsiString(files.ff_name)).c_str(),false)) + { + ShowMessages("Erreur : fichier impossible a copier"+AnsiString(GetLastErrorString())); + error=1; + break; + } + done = findnext(&files); + install->Position++; + } + if (!error) + { + ShowMessages("Installation terminée !"); + Button2->Visible=false; + Button1->Visible=false; + Button3->Visible=true; + } + else + ShowMessages("Installation echoué !"); + } + free(buffer); + } +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) +{ + CloseHandle(hDrive); +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::Button3Click(TObject *Sender) +{ +Close(); +} +//--------------------------------------------------------------------------- diff --git a/install/winNT gui/unit1.ddp b/install/winNT gui/unit1.ddp new file mode 100644 index 0000000000000000000000000000000000000000..cdc0ee8c2b54a98895d906932c4351134611c8d5 GIT binary patch literal 51 zcmZRVaB=ks@bJ`g@pN<#a`e>;@DB=c^Y`)e=VxFz;K0Pl$;KI)SCUzhlbT}4#=r!G E07AM8lK=n! literal 0 HcmV?d00001 diff --git a/install/winNT gui/unit1.dfm b/install/winNT gui/unit1.dfm new file mode 100644 index 0000000..b0445c3 --- /dev/null +++ b/install/winNT gui/unit1.dfm @@ -0,0 +1,184 @@ +object Form1: TForm1 + Left = 418 + Top = 273 + Width = 599 + Height = 371 + Caption = 'Installation de COS2000' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + Position = poScreenCenter + OnClose = FormClose + OnShow = FormShow + PixelsPerInch = 96 + TextHeight = 13 + object Button1: TButton + Left = 288 + Top = 304 + Width = 75 + Height = 25 + Caption = 'installer...' + TabOrder = 0 + OnClick = Button1Click + end + object install: TProgressBar + Left = 16 + Top = 264 + Width = 553 + Height = 25 + Min = 0 + Max = 100 + TabOrder = 1 + end + object Button2: TButton + Left = 208 + Top = 304 + Width = 75 + Height = 25 + Caption = 'support' + TabOrder = 2 + OnClick = FormShow + end + object Memo1: TMemo + Left = 192 + Top = 24 + Width = 377 + Height = 225 + ReadOnly = True + TabOrder = 3 + end + object GroupBox1: TGroupBox + Left = 16 + Top = 120 + Width = 161 + Height = 129 + Caption = 'G'#233'om'#233'trie' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + TabOrder = 4 + object track: TLabel + Left = 96 + Top = 60 + Width = 31 + Height = 13 + Caption = 'Aucun' + end + object Label4: TLabel + Left = 24 + Top = 60 + Width = 34 + Height = 13 + Caption = 'Pistes :' + end + object Label5: TLabel + Left = 24 + Top = 28 + Width = 48 + Height = 13 + Caption = 'Secteurs :' + end + object sector: TLabel + Left = 96 + Top = 28 + Width = 31 + Height = 13 + Caption = 'Aucun' + end + object head: TLabel + Left = 96 + Top = 44 + Width = 31 + Height = 13 + Caption = 'Aucun' + end + object Label6: TLabel + Left = 24 + Top = 44 + Width = 33 + Height = 13 + Caption = 'Tetes :' + end + object Label8: TLabel + Left = 24 + Top = 84 + Width = 69 + Height = 13 + Caption = 'Taille secteur :' + end + object size: TLabel + Left = 96 + Top = 84 + Width = 31 + Height = 13 + Caption = 'Aucun' + end + end + object GroupBox2: TGroupBox + Left = 16 + Top = 16 + Width = 161 + Height = 97 + Caption = 'Support' + TabOrder = 5 + object Label1: TLabel + Left = 24 + Top = 24 + Width = 42 + Height = 13 + Caption = 'Lecteur :' + end + object drive: TLabel + Left = 88 + Top = 24 + Width = 31 + Height = 13 + Caption = 'Aucun' + end + object Label2: TLabel + Left = 24 + Top = 40 + Width = 31 + Height = 13 + Caption = 'Taille :' + end + object allsize: TLabel + Left = 88 + Top = 40 + Width = 31 + Height = 13 + Caption = 'Aucun' + end + object Label3: TLabel + Left = 24 + Top = 56 + Width = 58 + Height = 13 + Caption = 'N'#176'secteurs :' + end + object allsector: TLabel + Left = 88 + Top = 56 + Width = 31 + Height = 13 + Caption = 'Aucun' + end + end + object Button3: TButton + Left = 248 + Top = 304 + Width = 75 + Height = 25 + Caption = 'Quitter' + TabOrder = 6 + Visible = False + OnClick = Button3Click + end +end diff --git a/install/winNT gui/unit1.h b/install/winNT gui/unit1.h new file mode 100644 index 0000000..6d0d3a7 --- /dev/null +++ b/install/winNT gui/unit1.h @@ -0,0 +1,47 @@ +//--------------------------------------------------------------------------- + +#ifndef Unit1H +#define Unit1H +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TForm1 : public TForm +{ +__published: // IDE-managed Components + TButton *Button1; + TProgressBar *install; + TButton *Button2; + TMemo *Memo1; + TGroupBox *GroupBox1; + TLabel *track; + TLabel *Label4; + TLabel *Label5; + TLabel *sector; + TLabel *head; + TLabel *Label6; + TLabel *Label8; + TLabel *size; + TGroupBox *GroupBox2; + TLabel *Label1; + TLabel *drive; + TLabel *Label2; + TLabel *allsize; + TLabel *Label3; + TLabel *allsector; + TButton *Button3; + void __fastcall FormShow(TObject *Sender); + void __fastcall Button1Click(TObject *Sender); + void __fastcall FormClose(TObject *Sender, TCloseAction &Action); + void __fastcall Button3Click(TObject *Sender); +private: // User declarations +public: // User declarations + __fastcall TForm1(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TForm1 *Form1; +//--------------------------------------------------------------------------- +#endif From fbde72ecb8dd449bc8f11e687e44c80ae0d31739 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Sat, 13 Nov 2004 14:34:29 +0000 Subject: [PATCH 63/64] build: compilation en *.com --- contribs/MAKEFILE | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/contribs/MAKEFILE b/contribs/MAKEFILE index a870e27..f9193dc 100644 --- a/contribs/MAKEFILE +++ b/contribs/MAKEFILE @@ -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 From 8f9680b94686c941e81e974b6f7f62b1b050ca09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Sat, 13 Nov 2004 14:34:29 +0000 Subject: [PATCH 64/64] feat: nouvelle version de l'installation sous windows --- install/winNT gui/setup.bpr | 121 ------------------------ install/winNT gui/setup.cpp | 33 ------- install/winNT gui/setup.res | Bin 876 -> 0 bytes install/winNT gui/setup.tds | Bin 524288 -> 0 bytes install/winNT gui/unit1.cpp | 166 -------------------------------- install/winNT gui/unit1.ddp | Bin 51 -> 0 bytes install/winNT gui/unit1.dfm | 184 ------------------------------------ install/winNT gui/unit1.h | 47 --------- 8 files changed, 551 deletions(-) delete mode 100644 install/winNT gui/setup.bpr delete mode 100644 install/winNT gui/setup.cpp delete mode 100644 install/winNT gui/setup.res delete mode 100644 install/winNT gui/setup.tds delete mode 100644 install/winNT gui/unit1.cpp delete mode 100644 install/winNT gui/unit1.ddp delete mode 100644 install/winNT gui/unit1.dfm delete mode 100644 install/winNT gui/unit1.h diff --git a/install/winNT gui/setup.bpr b/install/winNT gui/setup.bpr deleted file mode 100644 index 035bc7b..0000000 --- a/install/winNT gui/setup.bpr +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[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= - - \ No newline at end of file diff --git a/install/winNT gui/setup.cpp b/install/winNT gui/setup.cpp deleted file mode 100644 index dec5b3e..0000000 --- a/install/winNT gui/setup.cpp +++ /dev/null @@ -1,33 +0,0 @@ -//--------------------------------------------------------------------------- - -#include -#pragma hdrstop -//--------------------------------------------------------------------------- -USEFORM("Unit1.cpp", Form1); -//--------------------------------------------------------------------------- -WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) -{ - try - { - Application->Initialize(); - Application->CreateForm(__classid(TForm1), &Form1); - Application->Run(); - } - catch (Exception &exception) - { - Application->ShowException(&exception); - } - catch (...) - { - try - { - throw Exception(""); - } - catch (Exception &exception) - { - Application->ShowException(&exception); - } - } - return 0; -} -//--------------------------------------------------------------------------- diff --git a/install/winNT gui/setup.res b/install/winNT gui/setup.res deleted file mode 100644 index 53d1accc46d0945afe50cda57289ae401923c1fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmb_bu}Z{15S{3iB3E2*N=xBd!N>)Ih58qMf?H&Zl!3edxgt%9gEaFQ78Z-Yu)epO zy^BT=!AIWCyq$ToA!J2Fa?txoq+jrUmg?u|$wFZmnzf z51ktJx=uSS%K~fEMvay)h1R3yAZqNR*91Rx^m4D$%|7Za>hxEy(N7N>lb;@*pZwHQ zKXt3ER`%QZdOZJwc!Opy&O3;dL$wcI0J?@&GnlB`P-kn@NLUAY0bJBf1H$Yieu;ht zxx&A3q96w`CXqkuA9$O2neqlRRI9TftkD F$tNfOCK><$ diff --git a/install/winNT gui/setup.tds b/install/winNT gui/setup.tds deleted file mode 100644 index d4db614569ffd85c940a3cd773088a4f26805707..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 524288 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%0DE-;ZU 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�*Yes>?P>Z|tJfC7f! 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 AD*ylh diff --git a/install/winNT gui/unit1.cpp b/install/winNT gui/unit1.cpp deleted file mode 100644 index 2b3fc55..0000000 --- a/install/winNT gui/unit1.cpp +++ /dev/null @@ -1,166 +0,0 @@ -//--------------------------------------------------------------------------- - -#include -#include -#include -#include -#include -#pragma hdrstop - -#include "Unit1.h" -//--------------------------------------------------------------------------- -#pragma package(smart_init) -#pragma resource "*.dfm" -TForm1 *Form1; -HANDLE hDrive; -DISK_GEOMETRY dg_flop_geom; -AnsiString lecteur="b:"; -AnsiString device="\\\\.\\"+lecteur; -//--------------------------------------------------------------------------- -__fastcall TForm1::TForm1(TComponent* Owner) - : TForm(Owner) -{ -} -//--------------------------------------------------------------------------- -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; -} -//--------------------------------------------------------------------------- -ShowMessages(AnsiString msg) -{ - Form1->Memo1->Lines->Add(msg); -} -//--------------------------------------------------------------------------- -void __fastcall TForm1::FormShow(TObject *Sender) -{ -DWORD dwNotUsed; -DWORD error=0; - - hDrive = CreateFile(device.c_str(), GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL); - ShowMessages("Ouverture du peripherique "+lecteur); - if (hDrive == INVALID_HANDLE_VALUE) { - ShowMessages("Erreur : "+AnsiString(GetLastErrorString())); - error=1; - } - if(error!=1&&ShowMessages("Determination de la geometrie ")&&DeviceIoControl(hDrive, IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL,0, &dg_flop_geom, sizeof(dg_flop_geom),&dwNotUsed, NULL) == FALSE) { - ShowMessages("Erreur : "+AnsiString(GetLastErrorString())); - error=1; - } - if(error!=1&&(dg_flop_geom.MediaType==FixedMedia||dg_flop_geom.MediaType==RemovableMedia||dg_flop_geom.MediaType==Unknown)) - { - ShowMessages("Erreur : Ceci n'est pas une disquette !"); - error=1; - } - if (error!=1&&ShowMessages("Positionnement sur le secteur 0")&&SetFilePointer(hDrive, 0, NULL, FILE_BEGIN) == -1) { - ShowMessages("Erreur : "+AnsiString(GetLastErrorString())); - error=1; - } - if (error!=1) - { - drive->Caption=lecteur.UpperCase(); - track->Caption=IntToStr(dg_flop_geom.Cylinders.LowPart); - sector->Caption=IntToStr(dg_flop_geom.SectorsPerTrack); - size->Caption=IntToStr(dg_flop_geom.BytesPerSector); - head->Caption=IntToStr(dg_flop_geom.TracksPerCylinder); - allsize->Caption=IntToStr(dg_flop_geom.BytesPerSector*dg_flop_geom.Cylinders.LowPart*dg_flop_geom.SectorsPerTrack*dg_flop_geom.TracksPerCylinder); - allsector->Caption=IntToStr(dg_flop_geom.Cylinders.LowPart*dg_flop_geom.SectorsPerTrack*dg_flop_geom.TracksPerCylinder); - } - else - { - CloseHandle(hDrive); - } -} -//--------------------------------------------------------------------------- -void __fastcall TForm1::Button1Click(TObject *Sender) -{ - if (hDrive == NULL||dg_flop_geom.TracksPerCylinder>2||dg_flop_geom.TracksPerCylinder==0) - - { - ShowMessages("Aucun support valide detecté !"); - } - else - { - int fdboot; - DWORD error=0; - DWORD dwBsWritten; - char * buffer; - AnsiString bootfile="data/boot.bin"; - ShowMessages("Allocation de mémoire "); - buffer = (char *)malloc(dg_flop_geom.BytesPerSector); - ShowMessages("Ouverture et installation du fichier de boot "+bootfile); - if ((fdboot = _rtl_open(bootfile.c_str(),O_RDONLY | O_BINARY)) == -1 ) - { - ShowMessages("Erreur : Fichier de boot introuvable"); - error=1; - } - if (error!=1&&_read(fdboot, buffer, dg_flop_geom.BytesPerSector)!= dg_flop_geom.BytesPerSector) - { - ShowMessages("Erreur : Fichier de boot de taille incorrecte !"); - error=1; - } - if (error!=1&&WriteFile(hDrive, buffer, dg_flop_geom.BytesPerSector, &dwBsWritten, NULL) == 0) - { - ShowMessages("Ecriture impossible sur le secteur de boot !"); - error=1; - } - _rtl_close(fdboot); - if (error!=1) - { - struct ffblk files; - int done; - int number=0; - ShowMessages("Détermination des fichiers a copier"); - done = findfirst("data/*.*",&files,0); - while (!done) - { - number++; - done = findnext(&files); - } - install->Max=number; - install->Min=0; - install->Position=0; - ShowMessages("Copie des fichiers de cos2000"); - done = findfirst("data/*.*",&files,0); - while (!done) - { - ShowMessages(AnsiString(files.ff_name).LowerCase()); - if (!CopyFile((AnsiString("data/")+AnsiString(files.ff_name)).c_str(),(lecteur+"\\"+AnsiString(files.ff_name)).c_str(),false)) - { - ShowMessages("Erreur : fichier impossible a copier"+AnsiString(GetLastErrorString())); - error=1; - break; - } - done = findnext(&files); - install->Position++; - } - if (!error) - { - ShowMessages("Installation terminée !"); - Button2->Visible=false; - Button1->Visible=false; - Button3->Visible=true; - } - else - ShowMessages("Installation echoué !"); - } - free(buffer); - } -} -//--------------------------------------------------------------------------- -void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) -{ - CloseHandle(hDrive); -} -//--------------------------------------------------------------------------- -void __fastcall TForm1::Button3Click(TObject *Sender) -{ -Close(); -} -//--------------------------------------------------------------------------- diff --git a/install/winNT gui/unit1.ddp b/install/winNT gui/unit1.ddp deleted file mode 100644 index cdc0ee8c2b54a98895d906932c4351134611c8d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51 zcmZRVaB=ks@bJ`g@pN<#a`e>;@DB=c^Y`)e=VxFz;K0Pl$;KI)SCUzhlbT}4#=r!G E07AM8lK=n! diff --git a/install/winNT gui/unit1.dfm b/install/winNT gui/unit1.dfm deleted file mode 100644 index b0445c3..0000000 --- a/install/winNT gui/unit1.dfm +++ /dev/null @@ -1,184 +0,0 @@ -object Form1: TForm1 - Left = 418 - Top = 273 - Width = 599 - Height = 371 - Caption = 'Installation de COS2000' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - Position = poScreenCenter - OnClose = FormClose - OnShow = FormShow - PixelsPerInch = 96 - TextHeight = 13 - object Button1: TButton - Left = 288 - Top = 304 - Width = 75 - Height = 25 - Caption = 'installer...' - TabOrder = 0 - OnClick = Button1Click - end - object install: TProgressBar - Left = 16 - Top = 264 - Width = 553 - Height = 25 - Min = 0 - Max = 100 - TabOrder = 1 - end - object Button2: TButton - Left = 208 - Top = 304 - Width = 75 - Height = 25 - Caption = 'support' - TabOrder = 2 - OnClick = FormShow - end - object Memo1: TMemo - Left = 192 - Top = 24 - Width = 377 - Height = 225 - ReadOnly = True - TabOrder = 3 - end - object GroupBox1: TGroupBox - Left = 16 - Top = 120 - Width = 161 - Height = 129 - Caption = 'G'#233'om'#233'trie' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - ParentFont = False - TabOrder = 4 - object track: TLabel - Left = 96 - Top = 60 - Width = 31 - Height = 13 - Caption = 'Aucun' - end - object Label4: TLabel - Left = 24 - Top = 60 - Width = 34 - Height = 13 - Caption = 'Pistes :' - end - object Label5: TLabel - Left = 24 - Top = 28 - Width = 48 - Height = 13 - Caption = 'Secteurs :' - end - object sector: TLabel - Left = 96 - Top = 28 - Width = 31 - Height = 13 - Caption = 'Aucun' - end - object head: TLabel - Left = 96 - Top = 44 - Width = 31 - Height = 13 - Caption = 'Aucun' - end - object Label6: TLabel - Left = 24 - Top = 44 - Width = 33 - Height = 13 - Caption = 'Tetes :' - end - object Label8: TLabel - Left = 24 - Top = 84 - Width = 69 - Height = 13 - Caption = 'Taille secteur :' - end - object size: TLabel - Left = 96 - Top = 84 - Width = 31 - Height = 13 - Caption = 'Aucun' - end - end - object GroupBox2: TGroupBox - Left = 16 - Top = 16 - Width = 161 - Height = 97 - Caption = 'Support' - TabOrder = 5 - object Label1: TLabel - Left = 24 - Top = 24 - Width = 42 - Height = 13 - Caption = 'Lecteur :' - end - object drive: TLabel - Left = 88 - Top = 24 - Width = 31 - Height = 13 - Caption = 'Aucun' - end - object Label2: TLabel - Left = 24 - Top = 40 - Width = 31 - Height = 13 - Caption = 'Taille :' - end - object allsize: TLabel - Left = 88 - Top = 40 - Width = 31 - Height = 13 - Caption = 'Aucun' - end - object Label3: TLabel - Left = 24 - Top = 56 - Width = 58 - Height = 13 - Caption = 'N'#176'secteurs :' - end - object allsector: TLabel - Left = 88 - Top = 56 - Width = 31 - Height = 13 - Caption = 'Aucun' - end - end - object Button3: TButton - Left = 248 - Top = 304 - Width = 75 - Height = 25 - Caption = 'Quitter' - TabOrder = 6 - Visible = False - OnClick = Button3Click - end -end diff --git a/install/winNT gui/unit1.h b/install/winNT gui/unit1.h deleted file mode 100644 index 6d0d3a7..0000000 --- a/install/winNT gui/unit1.h +++ /dev/null @@ -1,47 +0,0 @@ -//--------------------------------------------------------------------------- - -#ifndef Unit1H -#define Unit1H -//--------------------------------------------------------------------------- -#include -#include -#include -#include -#include -//--------------------------------------------------------------------------- -class TForm1 : public TForm -{ -__published: // IDE-managed Components - TButton *Button1; - TProgressBar *install; - TButton *Button2; - TMemo *Memo1; - TGroupBox *GroupBox1; - TLabel *track; - TLabel *Label4; - TLabel *Label5; - TLabel *sector; - TLabel *head; - TLabel *Label6; - TLabel *Label8; - TLabel *size; - TGroupBox *GroupBox2; - TLabel *Label1; - TLabel *drive; - TLabel *Label2; - TLabel *allsize; - TLabel *Label3; - TLabel *allsector; - TButton *Button3; - void __fastcall FormShow(TObject *Sender); - void __fastcall Button1Click(TObject *Sender); - void __fastcall FormClose(TObject *Sender, TCloseAction &Action); - void __fastcall Button3Click(TObject *Sender); -private: // User declarations -public: // User declarations - __fastcall TForm1(TComponent* Owner); -}; -//--------------------------------------------------------------------------- -extern PACKAGE TForm1 *Form1; -//--------------------------------------------------------------------------- -#endif