diff --git a/programs/editeur.asm b/programs/editeur.asm index df5cd7f..89ad446 100644 --- a/programs/editeur.asm +++ b/programs/editeur.asm @@ -1,373 +1,350 @@ -.model tiny -.486 -smart -.code +model tiny,stdcall +p586N +locals +jumps +codeseg +option procalign:byte + +include "..\include\mem.h" +include "..\include\divers.h" +include "..\include\graphic.h" org 0h -include ..\include\mem.h - start: -header exe <,1,0,,,offset imports,,> +header exe <"CE",1,0,0,,offset imports,,offset realstart> realstart: - mov ax,0305h - mov bx,0008h - int 16h - mov ah,28h - int 47h - mov ax,0002 - int 47H - mov ah,2 - int 47h - xor ebp,ebp - xor ax,ax - mov fs,ax - mov ah,43 - int 47h -Adres: - mov di,offset infos - mov ah,34 - int 47h - dec byte ptr [di] - mov al,[di+1] - sub al,16 - mov bl,al - shr al,2 - mov [di+1],al - and bl,11b - mov [di+2],bl - mov al,[di+7] - cmp al,oldmode - je noinit - mov ah,2 - int 47h - mov oldmode,al - noinit: - mov bx,0 - mov ah,25 - int 47h - mov bh,infos - mov edi,ebp +mov ax,0305h +mov bx,0008h +int 16h +call [savestate] +call [setvideomode],2 +xor ebp,ebp +xor ax,ax +mov fs,ax +call [disablescroll] +adres: +call [saveparamto],offset infos +mov al,[infos.lines] +dec al +mov [lastline],al +mov al,[infos.columns] +sub al,16 +mov bl,al +shr al,2 +mov [sizex],al +and bl,11b +mov [sizex2],bl +mov al,[infos.mode] +cmp al,[oldmode] +je noinit +call [clearscreen] +mov [oldmode],al +noinit: +call [setxy],0,0 +mov edi,ebp +mov bh,[lastline] lines: - xor edx,edx - mov dx,di - push edx - mov edx,edi - shr edx,4*4 - shl edx,4*3 - push edx - push offset spaces - call [print] - mov dx,di - mov al,infos+1 - mov esi,edi +xor edx,edx +mov dx,di +push edx +mov edx,edi +shr edx,4*4 +shl edx,4*3 +push edx +push offset spaces +call [print] +mov dx,di +mov al,[sizex] +mov esi,edi doaline: - mov edx,edi - shr edx,4*4 - shl edx,4*3 - mov fs,dx - push dword ptr fs:[di] - push 8 - call [showhex] - push ' ' - call [showchar] - inc edi - dec al - jnz doaline - mov edi,esi - push offset spaces2 - call [print] - mov al,infos+1 +mov edx,edi +shr edx,4*4 +shl edx,4*3 +mov fs,dx +push [dword ptr fs:di] +push 8 +call [showhex] +call [showchar],' ' +inc edi +dec al +jnz doaline +mov edi,esi +push offset spaces2 +call [print] +mov al,[sizex] doaline2: - mov edx,edi - shr edx,4*4 - shl edx,4*3 - mov fs,dx - push word ptr fs:[di] - call [showchar] - inc edi - dec al - jnz doaline2 - dec bh - je outes - cmp byte ptr infos+2,0 - je lines - mov ah,6 - int 47h - jmp lines -outes: - mov bh,0 - mov bl,infos - mov ah,25 - int 47h - push offset menu - call [print] - waitkey: - mov ax,0 - int 16h - cmp ax,3B00h - jne suit - inc ebp - jmp adres - suit: - cmp ax,3C00h - jne suit2 - dec ebp - jmp adres - suit2: - cmp ax,3D00h - jne suit3 - add ebp,24*16 - jmp adres - suit3: - cmp ax,3E00h - jne suit4 - sub ebp,24*16 - jmp adres - suit4: - cmp ax,3F00h - jne suit5 - add ebp,010000h - jmp adres - suit5: - cmp ax,4000h - jne suit6 - sub ebp,010000h - jmp adres - suit6: - cmp ax,4100h - jne suit7 - mov dword ptr [pope],'TIDE' - mov bh,0 - mov bl,infos - mov ah,25 - int 47h - push offset menu - call [print] - mov ax,0B800h - mov es,ax - mov xxyy2,3 - mov xxyy,3 - call calc1 - call calc2 +mov edx,edi +shr edx,4*4 +shl edx,4*3 +mov fs,dx +push [word ptr fs:di] +call [showchar] +inc edi +dec al +jnz doaline2 +dec bh +je outes +cmp [sizex2],0 +je lines +call [addline] +jmp lines +outes: +call [setxy],0,[word ptr lastline] +call [print],offset menu +waitkey: +mov ax,0 +int 16h +cmp ax,3B00h +jne suit +inc ebp +jmp adres +suit: +cmp ax,3C00h +jne suit2 +dec ebp +jmp adres +suit2: +cmp ax,3D00h +jne suit3 +add ebp,24*16 +jmp adres +suit3: +cmp ax,3E00h +jne suit4 +sub ebp,24*16 +jmp adres +suit4: +cmp ax,3F00h +jne suit5 +add ebp,010000h +jmp adres +suit5: +cmp ax,4000h +jne suit6 +sub ebp,010000h +jmp adres +suit6: +cmp ax,4100h +jne suit7 +mov [dword ptr pope],'TIDE' +call [setxy],0,[word ptr lastline] +call [print],offset menu +mov ax,0B800h +mov es,ax +mov [xxyy2],3 +mov [xxyy],3 +call calc1 +call calc2 waitst: - mov ax,0 - int 16h - cmp ah,41h - jne tre - mov dword ptr [pope],' EUV' - push cs - pop es - jmp adres +mov ax,0 +int 16h +cmp ah,41h +jne tre +mov [dword ptr pope],' EUV' +push cs +pop es +jmp adres tre: - cmp al,0 - jne write - cmp ah,48h - jne tre1 - cmp yy,0 - je waitst - dec yy - jmp cursor +cmp al,0 +jne write +cmp ah,48h +jne tre1 +cmp [yy],0 +je waitst +dec [yy] +jmp cursor tre1: - cmp ah,50h - jne tre2 - mov al,infos - dec al - xor ah,ah - cmp yy,ax - je waitst - inc yy - jmp cursor +cmp ah,50h +jne tre2 +mov al,[lastline] +dec al +xor ah,ah +cmp [yy],ax +je waitst +inc [yy] +jmp cursor tre2: - cmp ah,4Dh - jne tre4 - cmp xx,15 - je waitst - inc xx - jmp cursor -tre4: - cmp ah,4Bh - jne waitst - cmp xx,0 - je waitst - dec xx - jmp cursor +cmp ah,4Dh +jne tre4 +cmp [xx],15 +je waitst +inc [xx] +jmp cursor +tre4: +cmp ah,4Bh +jne waitst +cmp [xx],0 +je waitst +dec [xx] +jmp cursor write: - call AsciiHex2dec - cmp cl,15 - ja waitst - call calc1 - call calc2 - mov edi,es:[bx-1] - mov dx,es:[si-1] - mov byte ptr es:[bx],0112 - mov es:[bx-1],al +call asciihex2dec +cmp cl,15 +ja waitst +call calc1 +call calc2 +mov edi,[es:bx-1] +mov dx,[es:si-1] +mov [byte ptr es:bx],0112 +mov [es:bx-1],al writs: - mov ax,0 - int 16H - mov ch,cl - call AsciiHex2dec - cmp cl,15 - ja writs - shl ch,4 - add ch,cl - mov es:[bx+1],al - mov es:[si-1],ch - mov ax,bx - call calc3 - mov gs:[bx],ch - pusha - popa - mov cl,gs:[bx] - cmp ch,cl - je no - push si ax - mov bh,0 - mov bl,infos - mov ah,25 - int 47h - push offset msg - call [print] - mov ax,0 - int 16h - mov bh,0 - mov bl,infos - mov ah,25 - int 47h - push offset menu - call [print] - pop bx si - mov es:[bx-1],edi - mov es:[si-1],dx - no: - - inc xx - cmp xx,16 - jne pasde - inc yy - mov xx,0h - pasde: - call calc1 - call calc2 - jmp waitst - +mov ax,0 +int 16H +mov ch,cl +call asciihex2dec +cmp cl,15 +ja writs +shl ch,4 +add ch,cl +mov [es:bx+1],al +mov [es:si-1],ch +mov ax,bx +call calc3 +mov [gs:bx],ch +pusha +popa +mov cl,[gs:bx] +cmp ch,cl +je no +push si ax +call [setxy],0,[word ptr lastline] +call [print],offset msg +mov ax,0 +int 16h +call [setxy],0,[word ptr lastline] +call [print],offset menu +pop bx si +mov [es:bx-1],edi +mov [es:si-1],dx +no: +inc [xx] +cmp [xx],16 +jne pasde +inc [yy] +mov [xx],0h +pasde: +call calc1 +call calc2 +jmp waitst cursor: - call calc1 - call calc2 - jmp waitst - suit7: - cmp ax,4200h - jne adres - mov ah,29h - int 47h - retf - +call calc1 +call calc2 +jmp waitst +suit7: +cmp ax,4200h +jne adres +call [restorestate] +retf calc1: - push ax dx si - mov ax,xx - mov dx,xx - shl ax,2 - shl dx,1 - add ax,dx - add ax,27 - mov bx,YY - mov dx,yy - shl bx,5 - shl dx,7 - add bx,dx - add bx,ax - mov byte ptr es:[bx],112 - mov byte ptr es:[bx+2],112 - mov si,xxyy - mov byte ptr es:[si],07 - mov byte ptr es:[si+2],07 - mov xxyy,bx - pop si dx ax - ret - +push ax dx si +mov ax,[xx] +mov dx,[xx] +shl ax,2 +shl dx,1 +add ax,dx +add ax,27 +mov bx,[yy] +mov dx,[yy] +shl bx,5 +shl dx,7 +add bx,dx +add bx,ax +mov [byte ptr es:bx],112 +mov [byte ptr es:bx+2],112 +mov si,[xxyy] +mov [byte ptr es:si],07 +mov [byte ptr es:si+2],07 +mov [xxyy],bx +pop si dx ax +ret calc2: - push ax bx dx - mov si,YY - mov dx,yy - shl si,5 - shl dx,7 - add si,dx - mov dx,xx - shl dx,1 - add si,dx - add si,129 - mov byte ptr es:[si],112 - mov bx,xxyy2 - mov byte ptr es:[bx],07 - mov xxyy2,si - pop dx bx ax - ret - +push ax bx dx +mov si,[yy] +mov dx,[yy] +shl si,5 +shl dx,7 +add si,dx +mov dx,[xx] +shl dx,1 +add si,dx +add si,129 +mov [byte ptr es:si],112 +mov bx,[xxyy2] +mov [byte ptr es:bx],07 +mov [xxyy2],si +pop dx bx ax +ret calc3: - push dx - xor ebx,ebx - mov bx,xx - mov dx,yy - shl dx,4 - add bx,dx - add ebx,ebp - mov edx,ebx - shr edx,4*4 - shl edx,4*3 - mov gs,dx - pop dx - ret +push dx +xor ebx,ebx +mov bx,[xx] +mov dx,[yy] +shl dx,4 +add bx,dx +add ebx,ebp +mov edx,ebx +shr edx,4*4 +shl edx,4*3 +mov gs,dx +pop dx +ret +asciihex2dec: +cmp al,'a' +jb nomin +cmp al,'f' +ja nomin +sub al,'a'-'A' +jmp ismaj +nomin: +cmp al,'A' +jb nomaj +cmp al,'F' +ja nomaj +ismaj: +mov cl,al +sub cl,'A'-10 +jmp endt +nomaj: +mov cl,al +sub cl,'0' +endt: +ret - asciihex2dec: - cmp al,'a' - jb nomin - cmp al,'f' - ja nomin - sub al,'a'-'A' - jmp ismaj - nomin: - cmp al,'A' - jb nomaj - cmp al,'F' - ja nomaj - ismaj: - mov cl,al - sub cl,'A'-10 - jmp endt - nomaj: - mov cl,al - sub cl,'0' - endt: - ret - -dep db ':',0 -sect dw 0 xx dw 0 yy dw 0 xxyy dw 3 xxyy2 dw 3 +lastline db 0 +sizex db 0 +sizex2 db 0 + +dep db ':',0 msg db '\c74Erreur : zone non modifiable (ROM) pressez une touche pour continuer ',0 menu db '\c70haut/bas [F1/2] Offset [F3/4] Segment [F5/6] Mode F7, Quitter F8 MODE ' -pope db 'VUE ',0 +pope db 'VUE ',0 spaces db '\c02%hW:%hW \c04| \c07',0 spaces2 db '\c04 | \c07',0 showbuffer db 35 dup (0FFh) oldmode db 0 -infos db 40 dup (0) +infos vgainf <> -imports: - db "VIDEO.LIB::print",0 -print dd 0 - db "VIDEO.LIB::showhex",0 -showhex dd 0 - db "VIDEO.LIB::showchar",0 -showchar dd 0 - dw 0 - -end start +importing +use VIDEO,setvideomode +use VIDEO,savestate +use VIDEO,restorestate +use VIDEO,setxy +use VIDEO,addline +use VIDEO,saveparamto +use VIDEO,disablescroll +use VIDEO,clearscreen +use VIDEO.LIB,print +use VIDEO.LIB,showhex +use VIDEO.LIB,showchar +endi