diff --git a/editor.asm b/editor.asm index 9760787..ad2b614 100755 --- a/editor.asm +++ b/editor.asm @@ -53,6 +53,8 @@ lines: mov ah,13 mov si,offset spaces int 47h + mov ah,5 + int 47h mov al,16 mov cl,7 mov ah,21 @@ -91,10 +93,12 @@ doaline2: inc edi dec al jnz doaline2 + dec bh + je outes mov ah,6 int 47h - dec bh - jnz lines + jmp lines +outes: mov ah,21 mov cl,112 int 47h @@ -284,7 +288,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 @@ -310,7 +314,7 @@ calc2: mov dx,xx shl dx,1 add si,dx - add si,127 + add si,129 mov byte ptr es:[si],112 mov bx,xxyy2 mov byte ptr es:[bx],07 diff --git a/m2.asm b/m2.asm new file mode 100755 index 0000000..acee17d --- /dev/null +++ b/m2.asm @@ -0,0 +1,257 @@ +.model tiny +.486 +smart +.code +org 0100h +start: +jmp tsr +drv db 'MOUSE',0 +Tsr: +cli +cmp ax,1234h +jne nomore +mov ax,4321h +jmp itsok +nomore: +push bx ax +mov ah,4 +mov bh,0 +int 50h +mov bl,al +pop ax +cmp byte ptr cs:isact,1 +je nottest +mov cs:isact,1 +and bl,10000b +cmp bl,16 +jae react +mov bl,ah +xor bh,bh +shl bx,1 +mov bx,cs:[bx].tables +mov cs:current,bx +pop bx +call cs:current +itsok: +jnc noerror +push bp +mov bp,sp +or byte ptr [bp+6],1b +pop bp +mov ax,cs +shl eax,16 +mov ax,cs:current +jmp endofint +noerror: +push bp +mov bp,sp +and byte ptr [bp+6],0FEh +pop bp +endofint: +mov cs:isact,0 +sti +iret +nottest: +pop bx +jmp endofint +current dw 0 +tables dw cmdmouse + dw cmdmouse2 + dw detectmouse + dw getmouse + +isact db 0 + +;Envoie une commande AL … la souris via controleur clavier +cmdmouse: + push ax +videbuff1: + in al, 64h + and al, 10b + jne videbuff1 + mov al, 00d4h + out 64h, al +videbuff2: + in al, 64h + and al, 10b + jne videbuff2 + pop ax + out 60h, al + in al, 60h + ret + +;Envoie une commande2 AL … la souris via controleur clavier carry=nomouse +cmdmouse2: + push ax +videbuff21: + in al, 64h + and al, 10b + jne videbuff21 + mov al, 0060h + out 64h, al +videbuff22: + in al, 64h + and al, 10b + jne videbuff22 + pop ax + out 60h, al + in al, 60h + ret + +Detectmouse: + push ax cx + mov al, 0a8h ;AUX enable + out 64h, al + mov al, 0f3h ;Set sample + call cmdmouse + mov al, 100 ;Set sample + call cmdmouse + mov al, 0e8h ;Set resolution + call cmdmouse + mov al, 01 ;Set resolution + call cmdmouse + mov al, 0e7h ;Set scale 2:1 + call cmdmouse + mov al, 0f4h ;Enable device + call cmdmouse + mov al, 47h ;Interruption ON + call cmdmouse2 + mov cx, 1024 +testmouse: + in al, 60h ;Lecture du port de donn‚es + cmp al, 250 ;Test si il y a une souris + je okmouse + dec cx + jnz testmouse + stc + jmp endoftest +okmouse: + clc +endoftest: + pop cx ax + ret + +;envoie en bx,cx les coordonn‚es et en dl les boutons +getmouse: +mov bl,cs:vx +xor bh,bh +mov cl,cs:vy +xor ch,ch +mov dl,cs:button +;sub dl,8 +;and dl,0Fh +clc +ret + +Button db 0 +rx dw 0 +ry dw 0 +VX db 0 +VY db 0 +X dw 0 +Y dw 0 +count db 0 +error db 0 +xy dw 0 +old dw 0 +;Gestionnaire de souris PS/2 +react: + push ax bx cx dx di ds es + push cs + pop ds + in al, 60h + cmp error, 1 + je gest1 + cmp count, 1 + je gest1 + cmp count, 2 + je gest2 + cmp count, 3 + je gest3 + +gest1: + mov count, 2 + mov Button, al + and al, 00001000b + cmp al, 8 + je gest1end + mov error, 1 + jmp gest1end2 +gest1end: + mov error, 0 +gest1end2: + mov count, 2 + jmp endgest +gest2: + mov count, 3 + mov VX, al + jmp endgest +gest3: + mov count, 1 + mov VY, al + jmp endgest +endgest: + mov bl,VY + xor bh,bh + mov al,button + shr al,5 + and al,1 + cmp al,0 + je addy + add y,bx + jmp hadsuby + addy: + sub y,bx + hadsuby: + mov bl,VX + xor bh,bh + mov al,button + shr al,8 + and al,1 + cmp al,0 + je addx + sub x,bx + jmp hadsubx + addx: + add x,bx + hadsubx: + push cs + pop es + mov di,offset infos + mov ah,34 + int 47h + mov ax,x + mov bx,0FFFFh + xor ch,ch + mov cl,[di+1] + mul cx + div bx + mov rx,ax + mov ax,y + mov cl,[di] + mul cx + div bx + mov ry,ax + mul byte ptr [di+1] + add ax,rx + shl ax,1 + mov di,ax + mov ax,0B800h + mov es,ax + mov bx,xy + mov ax,old + mov word ptr es:[bx],ax + mov xy,di + mov ax,es:[di] + mov old,ax + mov word ptr es:[di],0FF70h + mov al, 20h + out 0a0h, al + out 20h, al + pop es ds di dx cx bx ax + mov cs:isact,0 + pop bx + iret + infos db 10 dup (0) + +end start diff --git a/mm.asm b/mm.asm index 885d078..71446d7 100755 --- a/mm.asm +++ b/mm.asm @@ -27,20 +27,20 @@ mov ah,6 int 47h mov si,bx mov di,cx -mov ah,11 +mov ah,9 mov cx,8 int 47H mov ah,5 int 47H mov dx,si -mov ah,10 -mov cx,16 +mov ah,9 +mov cx,8 int 47H mov ah,5 int 47h mov dx,di -mov ah,10 -mov cx,16 +mov ah,9 +mov cx,8 int 47H jmp popr db 0CBh diff --git a/mouse.asm b/mouse.asm index acee17d..021b203 100755 --- a/mouse.asm +++ b/mouse.asm @@ -193,28 +193,10 @@ gest3: endgest: mov bl,VY xor bh,bh - mov al,button - shr al,5 - and al,1 - cmp al,0 - je addy add y,bx - jmp hadsuby - addy: - sub y,bx - hadsuby: mov bl,VX xor bh,bh - mov al,button - shr al,8 - and al,1 - cmp al,0 - je addx - sub x,bx - jmp hadsubx - addx: add x,bx - hadsubx: push cs pop es mov di,offset infos diff --git a/prompt.asm b/prompt.asm index 70abaf6..cc1a85a 100755 --- a/prompt.asm +++ b/prompt.asm @@ -17,9 +17,10 @@ mov si,offset msg int 47h replay: mov ah,6 -int 47h -mov ah,6 int 47h +noret: +mov ah,6 +int 47h mov ah,13 mov si,offset prompt int 47h @@ -27,22 +28,24 @@ mov di,offset buffer waitchar: mov ax,0 int 16h -mov dl,al -mov [di],al cmp al,0Dh je entere +cmp di,offset buffer+256 +je waitchar +mov [di],al inc di +mov dl,al mov ah,7 int 47h jmp waitchar entere: -mov ah,6 -int 47h -mov ah,6 -int 47h mov byte ptr [di],0 mov si,offset buffer -call uppercasestr0 +cmp si,di +je noret +mov ah,6 +int 47h +call uppercase0 mov bx,offset commands tre: mov di,[bx] @@ -60,11 +63,11 @@ error: push cs pop es mov dl,'.' -call searchcharstr0 +call searchchar0 je noaddext mov di,offset buffer mov si,offset extcom -call concatstr0 +call concat0 noaddext: mov si,offset buffer push cs @@ -113,96 +116,6 @@ mov si,offset Error_Syntax int 47h jmp replay -;met en majuscule la string ds:si -uppercasestr0: -push si ax -uppercaser: -mov al,ds:[si] -inc si -cmp al,0 -je enduppercase -cmp al,'a' -jb uppercaser -cmp al,'z' -ja uppercaser -sub byte ptr [si-1],'a'-'A' -jmp uppercaser -enduppercase: -clc -pop ax si -ret - -;Cherche dl dans la str ds:si -> di -SearchCharStr0: -push ax cx si di es -mov di,si -push ds -pop es -mov cx,0FFh -mov al,0 -cld -repne scasb -neg cx -dec cx -xor ch,ch -mov di,si -mov al,dl -repne scasb -pop es di si cx ax -ret - -;concatŠne la chaine str ds:si avec es:di -concatstr0: -push ax cx dx si di -push es di -mov di,si -push ds -pop es -mov al,0 -mov cx,255 -cld -repne scasb -neg cx -dec cx -xor ch,ch -mov dx,cx -pop di es -mov cx,0FFh -repne scasb -dec di -mov cx,dx -rep movsb -pop di si dx cx ax -ret - -;compare la chaine es:di avec ds:si -cmpstr0: -push cx dx si di -push di -mov al,0 -mov cx,255 -cld -repne scasb -neg cx -mov dx,cx -pop di -push es di -mov di,si -push ds -pop es -mov cx,255 -repne scasb -neg cx -cmp dx,cx -pop di es -jne notequal -dec cx -xor ch,ch -rep cmpsb -notequal: -pop di si dx cx -ret - Code_Exit: pop ax db 0CBh @@ -214,20 +127,139 @@ int 47h ret Version_Text db 'Cos 2000 version 1.1.1B by Nico',0 + +Code_Cls: +mov ah,2 +int 47h +ret + +Code_Reboot: +push 0FFFFh +push 00000h +db 0CBH + +Code_Command: +mov bx,offset commands +showalls: +mov si,[bx] +add bx,4 +cmp si,0 +je endoff +mov ah,13 +int 47h +mov ah,6 +int 47h +jmp showalls +endoff: +ret + extcom db '.EXE',0 -commands dw Str_Exit ,Code_Exit +commands dw Str_Exit ,Code_Exit dw Str_Version,Code_Version + dw Str_Cls ,Code_Cls + dw Str_Reboot ,Code_Reboot + dw Str_Command,Code_Command dw 0 Str_Exit db 'EXIT',0 Str_Version db 'VERSION',0 - -Error_Syntax db 'The command doesn''t exit !',0 +Str_Cls db 'CLS',0 +Str_Reboot db 'REBOOT',0 +Str_Command db 'COMMAND',0 + +Error_Syntax db 'Command or executable doesn''t exist !',0 prompt db 'COS>',0 msg db 'Cos command interpretor V1.0',0 buffer db 255 dup (0) +;Recherche un caractŠre dl dans la chaŚne ds:si +SearchChar0: + push ax cx di es + call GetLength0 + push ds + pop es + mov di,si + mov al,dl + repne scasb + pop es di cx ax + ret + +;Compares 2 chaines de caractŠres DS:SI et ES:DI zerof si non equal +cmpstr0: + push cx dx si di + call GetLength0 + mov dx,cx + push ds si + push es + pop ds + mov si,di + call GetLength0 + pop si ds + cmp cx,dx + jne NotEqual + repe cmpsb +NotEqual: + pop di si dx cx + ret + +;met en majuscule la chaine ds:si +UpperCase0: + push si ax +UpperCase: + mov al,ds:[si] + inc si + cmp al,0 + je EndUpperCase + cmp al,'a' + jb UpperCase + cmp al,'z' + ja UpperCase + sub byte ptr [si-1],'a'-'A' + jmp UpperCase +EndUpperCase: + clc + pop ax si + ret + +;ConcatŠne le chaine ds:si avec es:di +Concat0: + push ax cx dx si di + call GetLength0 + mov dx,cx + xchg si,di + push ds + push es + pop ds + call GetLength0 + pop ds + xchg si,di + add di,cx + mov cx,dx + cld + rep movsb + mov al,0 + stosb + pop di si dx cx ax + ret + +;renvoie la taille en octets CX de la chaine point‚e en ds:si +GetLength0: + push ax di es + push ds + pop es + mov di,si + mov al,0 + mov cx,0FFFFh + cld + repne scasb + neg cx + dec cx + dec cx + pop es di ax + ret + + vga db 0 end start diff --git a/str0.asm b/str0.asm new file mode 100755 index 0000000..bc4503a --- /dev/null +++ b/str0.asm @@ -0,0 +1,253 @@ +;Librairie qui prend en charge le format de STR ASCIIZ +.model tiny +.486 +smart +.code + +org 0100h + +start: +mov di,offset set +mov si,offset set +mov bx,7 +mov cx,5 +call delete0 +ret + +set db 'Essai de string',0 +set2 db 'epais',0 +tre db 30 dup (0) + +;Renvoie en es:di la partie de cx caractŠres a partir de la gauche de ds:si +Left0: + push ax cx si di + cld + rep movsb + mov al,0 + stosb + pop di si cx ax + ret + +;Renvoie en es:di la partie de cx caractŠres a partir de la droite de ds:si +Right0: + push ax cx dx si di + mov dx,cx + call getlength0 + add si,cx + sub si,dx + mov cx,dx + cld + rep movsb + mov al,0 + stosb + pop di si dx cx ax + ret + +;Renvoie en es:di la partie de cx caractŠres a partir de la position bx de ds:si +middle0: + push ax cx si di + add si,bx + cld + rep movsb + mov al,0 + stosb + pop di si cx ax + ret + +;Rempli de cx caractŠres dl a partir de la position bx de ds:si +Fill0: + push ax bx cx si di es + push ds + pop es + add si,bx + mov al,dl + mov di,si + cld + rep stosb + pop es di si cx bx ax + ret + +;Recherche un caractŠre dl dans la chaŚne ds:si +SearchChar0: + push ax cx di es + call GetLength0 + push ds + pop es + mov di,si + mov al,dl + repne scasb + pop es di cx ax + ret + +;Compares 2 chaines de caractŠres DS:SI et ES:DI zerof si non equal +cmpstr0: + push cx dx si di + call GetLength0 + mov dx,cx + push ds si + push es + pop ds + mov si,di + call GetLength0 + pop si ds + cmp cx,dx + jne NotEqual + repe cmpsb +NotEqual: + pop di si dx cx + ret + +;Detruit CX caractŠres a partir du caractŠre BX de DS:SI +delete0: + push cx dx si di es + push ds + pop es + mov dx,cx + call getlength0 + sub cx,dx + neg cx + mov di,si + add si,bx + cld + rep movsb + pop es di si dx cx + ret + +;Copie une chaine de ds:si en es:di +Copy: + push ax cx si di + call GetLength0 + cld + rep movsb + mov al,0 + stosb + pop di si cx ax + ret + +;ConcatŠne le chaine ds:si avec es:di +Concat0: + push ax cx dx si di + call GetLength0 + mov dx,cx + xchg si,di + push ds + push es + pop ds + call GetLength0 + pop ds + xchg si,di + add di,cx + mov cx,dx + cld + rep movsb + mov al,0 + stosb + pop di si dx cx ax + ret + +;renvoie la taille en octets CX de la chaine point‚e en ds:si +GetLength0: + push ax di es + push ds + pop es + mov di,si + mov al,0 + mov cx,0FFFFh + cld + repne scasb + neg cx + dec cx + dec cx + pop es di ax + ret + +;Met la taille en octets de la chaine point‚e ds:si a CX +SetLength0: + push bx + mov bx,cx + mov byte ptr [si+bx],0 + pop bx + ret + +;met en majuscule la chaine ds:si +UpperCase0: + push si ax +UpperCase: + mov al,ds:[si] + inc si + cmp al,0 + je EndUpperCase + cmp al,'a' + jb UpperCase + cmp al,'z' + ja UpperCase + sub byte ptr [si-1],'a'-'A' + jmp UpperCase +EndUpperCase: + clc + pop ax si + ret + +;met en majuscule la premiŠre lettre chaine ds:si +OneCase0: + push ax +OneUpperCase: + mov al,ds:[si] + cmp al,'a' + jb OneEndUpperCase + cmp al,'z' + ja OneEndUpperCase + sub byte ptr [si],'a'-'A' +OneEndUpperCase: + clc + pop ax + ret + +;met en minuscule la chaine ds:si +LowerCase0: + push si ax +LowerCase: + mov al,ds:[si] + inc si + cmp al,0 + je EndLowerCase + cmp al,'A' + jb LowerCase + cmp al,'Z' + ja LowerCase + add byte ptr [si-1],'a'-'A' + jmp LowerCase +EndLowerCase: + clc + pop ax si + ret + +;Inverse la casse la chaine ds:si +InvertCase0: + push si ax +InvertCase: + mov al,ds:[si] + inc si + cmp al,0 + je EndInvertCase + cmp al,'A' + jb InvertCase + cmp al,'Z' + jbe GoInvertCase + cmp al,'a' + jb InvertCase + cmp al,'z' + ja InvertCase + sub byte ptr [si-1],'a'-'A' + jmp InvertCase +GoInvertCase: + add byte ptr [si-1],'a'-'A' + jmp InvertCase +EndInvertCase: + clc + pop ax si + ret + + + +end start diff --git a/video.asm b/video.asm index 52f849b..edb4a2e 100755 --- a/video.asm +++ b/video.asm @@ -280,12 +280,12 @@ mode6 DB 63H, 00H, 03H,01H,0FH,00H,0EH DB 00H,00H,00H,00H,00H,40H,05H,0FH,0FFH DB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H,0AH,0BH,0CH,0DH,0EH,0FH DB 41H,00H,0FH,00H,00H - db 00,00 + db 00,00 ;320*400 256 couleurs chain4 -mode7 DB 63H, 00H, 03H,01H,0FH,00H,06H +mode7 DB 63H, 00H, 03H,01H,0FH,00H,0EH DB 5FH,4FH,50H,82H,54H,80H,0BFH,1FH,00H,40H,00H,00H,00H,00H,00H,00H - DB 9CH,8EH,8FH,28H,00H,96H,0B9H,0E3H,0FFH + DB 9CH,8EH,8FH,28H,40H,96H,0B9H,0A3H,0FFH DB 00H,00H,00H,00H,00H,40H,05H,0FH,0FFH DB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H,0AH,0BH,0CH,0DH,0EH,0FH DB 41H,00H,0FH,00H,00H @@ -311,6 +311,15 @@ mode9 DB 63H, 00H, 03H,01H,0FH,00H,0EH +;==================================================== +;320*400 256 couleurs chain4 +mode7s DB 63H, 00H, 03H,01H,0FH,00H,06H + DB 5FH,4FH,50H,82H,54H,80H,0BFH,1FH,00H,40H,00H,00H,00H,00H,00H,00H + DB 9CH,8EH,8FH,28H,00H,96H,0B9H,0E3H,0FFH + DB 00H,00H,00H,00H,00H,40H,05H,0FH,0FFH + DB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H,0AH,0BH,0CH,0DH,0EH,0FH + DB 41H,00H,0FH,00H,00H + db 00,00 ; ;=============CLEAR========= @@ -891,6 +900,7 @@ Showsigned: push ax ebx edx es xor ebx,ebx mov bl,cl +dec bl bt edx,ebx jnc pos neg edx