feat: ajout d'une librairie de gestion de chaines de caractères à zéro terminal.
This commit is contained in:
parent
6b08464f51
commit
564853e762
12
editor.asm
12
editor.asm
|
@ -53,6 +53,8 @@ lines:
|
||||||
mov ah,13
|
mov ah,13
|
||||||
mov si,offset spaces
|
mov si,offset spaces
|
||||||
int 47h
|
int 47h
|
||||||
|
mov ah,5
|
||||||
|
int 47h
|
||||||
mov al,16
|
mov al,16
|
||||||
mov cl,7
|
mov cl,7
|
||||||
mov ah,21
|
mov ah,21
|
||||||
|
@ -91,10 +93,12 @@ doaline2:
|
||||||
inc edi
|
inc edi
|
||||||
dec al
|
dec al
|
||||||
jnz doaline2
|
jnz doaline2
|
||||||
|
dec bh
|
||||||
|
je outes
|
||||||
mov ah,6
|
mov ah,6
|
||||||
int 47h
|
int 47h
|
||||||
dec bh
|
jmp lines
|
||||||
jnz lines
|
outes:
|
||||||
mov ah,21
|
mov ah,21
|
||||||
mov cl,112
|
mov cl,112
|
||||||
int 47h
|
int 47h
|
||||||
|
@ -284,7 +288,7 @@ calc1:
|
||||||
shl ax,2
|
shl ax,2
|
||||||
shl dx,1
|
shl dx,1
|
||||||
add ax,dx
|
add ax,dx
|
||||||
add ax,25
|
add ax,27
|
||||||
mov bx,YY
|
mov bx,YY
|
||||||
mov dx,yy
|
mov dx,yy
|
||||||
shl bx,5
|
shl bx,5
|
||||||
|
@ -310,7 +314,7 @@ calc2:
|
||||||
mov dx,xx
|
mov dx,xx
|
||||||
shl dx,1
|
shl dx,1
|
||||||
add si,dx
|
add si,dx
|
||||||
add si,127
|
add si,129
|
||||||
mov byte ptr es:[si],112
|
mov byte ptr es:[si],112
|
||||||
mov bx,xxyy2
|
mov bx,xxyy2
|
||||||
mov byte ptr es:[bx],07
|
mov byte ptr es:[bx],07
|
||||||
|
|
|
@ -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
|
10
mm.asm
10
mm.asm
|
@ -27,20 +27,20 @@ mov ah,6
|
||||||
int 47h
|
int 47h
|
||||||
mov si,bx
|
mov si,bx
|
||||||
mov di,cx
|
mov di,cx
|
||||||
mov ah,11
|
mov ah,9
|
||||||
mov cx,8
|
mov cx,8
|
||||||
int 47H
|
int 47H
|
||||||
mov ah,5
|
mov ah,5
|
||||||
int 47H
|
int 47H
|
||||||
mov dx,si
|
mov dx,si
|
||||||
mov ah,10
|
mov ah,9
|
||||||
mov cx,16
|
mov cx,8
|
||||||
int 47H
|
int 47H
|
||||||
mov ah,5
|
mov ah,5
|
||||||
int 47h
|
int 47h
|
||||||
mov dx,di
|
mov dx,di
|
||||||
mov ah,10
|
mov ah,9
|
||||||
mov cx,16
|
mov cx,8
|
||||||
int 47H
|
int 47H
|
||||||
jmp popr
|
jmp popr
|
||||||
db 0CBh
|
db 0CBh
|
||||||
|
|
18
mouse.asm
18
mouse.asm
|
@ -193,28 +193,10 @@ gest3:
|
||||||
endgest:
|
endgest:
|
||||||
mov bl,VY
|
mov bl,VY
|
||||||
xor bh,bh
|
xor bh,bh
|
||||||
mov al,button
|
|
||||||
shr al,5
|
|
||||||
and al,1
|
|
||||||
cmp al,0
|
|
||||||
je addy
|
|
||||||
add y,bx
|
add y,bx
|
||||||
jmp hadsuby
|
|
||||||
addy:
|
|
||||||
sub y,bx
|
|
||||||
hadsuby:
|
|
||||||
mov bl,VX
|
mov bl,VX
|
||||||
xor bh,bh
|
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
|
add x,bx
|
||||||
hadsubx:
|
|
||||||
push cs
|
push cs
|
||||||
pop es
|
pop es
|
||||||
mov di,offset infos
|
mov di,offset infos
|
||||||
|
|
232
prompt.asm
232
prompt.asm
|
@ -18,6 +18,7 @@ int 47h
|
||||||
replay:
|
replay:
|
||||||
mov ah,6
|
mov ah,6
|
||||||
int 47h
|
int 47h
|
||||||
|
noret:
|
||||||
mov ah,6
|
mov ah,6
|
||||||
int 47h
|
int 47h
|
||||||
mov ah,13
|
mov ah,13
|
||||||
|
@ -27,22 +28,24 @@ mov di,offset buffer
|
||||||
waitchar:
|
waitchar:
|
||||||
mov ax,0
|
mov ax,0
|
||||||
int 16h
|
int 16h
|
||||||
mov dl,al
|
|
||||||
mov [di],al
|
|
||||||
cmp al,0Dh
|
cmp al,0Dh
|
||||||
je entere
|
je entere
|
||||||
|
cmp di,offset buffer+256
|
||||||
|
je waitchar
|
||||||
|
mov [di],al
|
||||||
inc di
|
inc di
|
||||||
|
mov dl,al
|
||||||
mov ah,7
|
mov ah,7
|
||||||
int 47h
|
int 47h
|
||||||
jmp waitchar
|
jmp waitchar
|
||||||
entere:
|
entere:
|
||||||
mov ah,6
|
|
||||||
int 47h
|
|
||||||
mov ah,6
|
|
||||||
int 47h
|
|
||||||
mov byte ptr [di],0
|
mov byte ptr [di],0
|
||||||
mov si,offset buffer
|
mov si,offset buffer
|
||||||
call uppercasestr0
|
cmp si,di
|
||||||
|
je noret
|
||||||
|
mov ah,6
|
||||||
|
int 47h
|
||||||
|
call uppercase0
|
||||||
mov bx,offset commands
|
mov bx,offset commands
|
||||||
tre:
|
tre:
|
||||||
mov di,[bx]
|
mov di,[bx]
|
||||||
|
@ -60,11 +63,11 @@ error:
|
||||||
push cs
|
push cs
|
||||||
pop es
|
pop es
|
||||||
mov dl,'.'
|
mov dl,'.'
|
||||||
call searchcharstr0
|
call searchchar0
|
||||||
je noaddext
|
je noaddext
|
||||||
mov di,offset buffer
|
mov di,offset buffer
|
||||||
mov si,offset extcom
|
mov si,offset extcom
|
||||||
call concatstr0
|
call concat0
|
||||||
noaddext:
|
noaddext:
|
||||||
mov si,offset buffer
|
mov si,offset buffer
|
||||||
push cs
|
push cs
|
||||||
|
@ -113,96 +116,6 @@ mov si,offset Error_Syntax
|
||||||
int 47h
|
int 47h
|
||||||
jmp replay
|
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:
|
Code_Exit:
|
||||||
pop ax
|
pop ax
|
||||||
db 0CBh
|
db 0CBh
|
||||||
|
@ -214,20 +127,139 @@ int 47h
|
||||||
ret
|
ret
|
||||||
|
|
||||||
Version_Text db 'Cos 2000 version 1.1.1B by Nico',0
|
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
|
extcom db '.EXE',0
|
||||||
|
|
||||||
commands dw Str_Exit ,Code_Exit
|
commands dw Str_Exit ,Code_Exit
|
||||||
dw Str_Version,Code_Version
|
dw Str_Version,Code_Version
|
||||||
|
dw Str_Cls ,Code_Cls
|
||||||
|
dw Str_Reboot ,Code_Reboot
|
||||||
|
dw Str_Command,Code_Command
|
||||||
dw 0
|
dw 0
|
||||||
|
|
||||||
|
|
||||||
Str_Exit db 'EXIT',0
|
Str_Exit db 'EXIT',0
|
||||||
Str_Version db 'VERSION',0
|
Str_Version db 'VERSION',0
|
||||||
|
Str_Cls db 'CLS',0
|
||||||
|
Str_Reboot db 'REBOOT',0
|
||||||
|
Str_Command db 'COMMAND',0
|
||||||
|
|
||||||
Error_Syntax db 'The command doesn''t exit !',0
|
Error_Syntax db 'Command or executable doesn''t exist !',0
|
||||||
prompt db 'COS>',0
|
prompt db 'COS>',0
|
||||||
msg db 'Cos command interpretor V1.0',0
|
msg db 'Cos command interpretor V1.0',0
|
||||||
buffer db 255 dup (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
|
vga db 0
|
||||||
end start
|
end start
|
||||||
|
|
|
@ -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
|
14
video.asm
14
video.asm
|
@ -283,9 +283,9 @@ mode6 DB 63H, 00H, 03H,01H,0FH,00H,0EH
|
||||||
db 00,00
|
db 00,00
|
||||||
|
|
||||||
;320*400 256 couleurs chain4
|
;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 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,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 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H,0AH,0BH,0CH,0DH,0EH,0FH
|
||||||
DB 41H,00H,0FH,00H,00H
|
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=========
|
;=============CLEAR=========
|
||||||
|
@ -891,6 +900,7 @@ Showsigned:
|
||||||
push ax ebx edx es
|
push ax ebx edx es
|
||||||
xor ebx,ebx
|
xor ebx,ebx
|
||||||
mov bl,cl
|
mov bl,cl
|
||||||
|
dec bl
|
||||||
bt edx,ebx
|
bt edx,ebx
|
||||||
jnc pos
|
jnc pos
|
||||||
neg edx
|
neg edx
|
||||||
|
|
Loading…
Reference in New Issue