From e8f7d8a1e73ac0281f2d0a96f35754086c97b42d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Sat, 31 Mar 2007 18:50:54 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20version=20b=C3=AAta=201.3.2fr?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- programs/MAKEFILE | 23 ++ programs/cos.rip | Bin 0 -> 15201 bytes programs/editeur.asm | 355 ++++++++++++++++++++++++++ programs/exem-ce.asm | 26 ++ programs/exem-lib.asm | 24 ++ programs/gestion.asm | 117 +++++++++ programs/isa.asm | 46 ++++ programs/logo.asm | 91 +++++++ programs/lpt/com.asm | 471 ++++++++++++++++++++++++++++++++++ programs/lpt/project1.dpr | 12 + programs/lpt/project1.opt | 34 +++ programs/lpt/project1.res | Bin 0 -> 794 bytes programs/lpt/unit1.dcu | Bin 0 -> 18160 bytes programs/lpt/unit1.dfm | Bin 0 -> 6125 bytes programs/lpt/unit1.pas | 517 ++++++++++++++++++++++++++++++++++++++ programs/pmode.asm | 22 ++ programs/souris.asm | 32 +++ programs/test.asm | 169 +++++++++++++ programs/verifier.asm | 106 ++++++++ programs/volume.asm | 351 ++++++++++++++++++++++++++ 20 files changed, 2396 insertions(+) create mode 100644 programs/MAKEFILE create mode 100644 programs/cos.rip create mode 100644 programs/editeur.asm create mode 100644 programs/exem-ce.asm create mode 100644 programs/exem-lib.asm create mode 100644 programs/gestion.asm create mode 100644 programs/isa.asm create mode 100644 programs/logo.asm create mode 100644 programs/lpt/com.asm create mode 100644 programs/lpt/project1.dpr create mode 100644 programs/lpt/project1.opt create mode 100644 programs/lpt/project1.res create mode 100644 programs/lpt/unit1.dcu create mode 100644 programs/lpt/unit1.dfm create mode 100644 programs/lpt/unit1.pas create mode 100644 programs/pmode.asm create mode 100644 programs/souris.asm create mode 100644 programs/test.asm create mode 100644 programs/verifier.asm create mode 100644 programs/volume.asm diff --git a/programs/MAKEFILE b/programs/MAKEFILE new file mode 100644 index 0000000..46a0203 --- /dev/null +++ b/programs/MAKEFILE @@ -0,0 +1,23 @@ +asm= lzasm /z/t +lnk= elink + +all: exem-lib.lib exem-ce.ce pmode.ce isa.ce editeur.ce volume.ce test.ce verifier.ce gestion.ce logo.ce souris.ce + +.asm.obj: + $(asm) $< + +.obj.ce: + $(lnk) $< $*.ce + +.obj.lib: + $(lnk) $< $*.lib + +clean: + del *.obj + del *.ce + del *.bak + del *.lib + del *.com + del *.bin + del *.sys + del *.err diff --git a/programs/cos.rip b/programs/cos.rip new file mode 100644 index 0000000000000000000000000000000000000000..f9e20763567ed1a2853b8ba1911db6e0c48d55a9 GIT binary patch literal 15201 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 KkABg&QvWxvt|p=Y literal 0 HcmV?d00001 diff --git a/programs/editeur.asm b/programs/editeur.asm new file mode 100644 index 0000000..89ad446 --- /dev/null +++ b/programs/editeur.asm @@ -0,0 +1,355 @@ +model tiny,stdcall +p586N +locals +jumps +codeseg +option procalign:byte + +include "..\include\mem.h" +include "..\include\divers.h" +include "..\include\graphic.h" + +org 0h + +start: +header exe <"CE",1,0,0,,offset imports,,offset realstart> + +realstart: +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,[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] +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 [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 +tre: +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,[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 +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 +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 +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 +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 +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 +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 +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 + +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 +spaces db '\c02%hW:%hW \c04| \c07',0 +spaces2 db '\c04 | \c07',0 + +showbuffer db 35 dup (0FFh) +oldmode db 0 +infos vgainf <> + +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 + + + + + + + + diff --git a/programs/exem-ce.asm b/programs/exem-ce.asm new file mode 100644 index 0000000..867d0d7 --- /dev/null +++ b/programs/exem-ce.asm @@ -0,0 +1,26 @@ +model tiny,stdcall +p586N +locals +jumps +codeseg +option procalign:byte + +include "..\include\mem.h" +include "..\include\divers.h" + +org 0h + +start: +header exe <"CE",1,0,0,,offset imports,,offset realstart> + +realstart: + call [print],offset message + call [waitkey] + retf + +message db 'Appel de la librairie \c02video\c07 et de la librairie \c02EXEM-LIB.LIB\c07 !',0 + +importing +use VIDEO.LIB,print +use EXEM-LIB.LIB,waitkey +endi diff --git a/programs/exem-lib.asm b/programs/exem-lib.asm new file mode 100644 index 0000000..0feaf4c --- /dev/null +++ b/programs/exem-lib.asm @@ -0,0 +1,24 @@ +model tiny,stdcall +p586N +locals +jumps +codeseg +option procalign:byte + +include "..\include\mem.h" +include "..\include\divers.h" + +org 0h + +start: +header exe <"CE",1,0,0,offset exports,,,> + +waitkey: + mov ax,0 + int 16h + retf + +exporting + +declare waitkey +ende diff --git a/programs/gestion.asm b/programs/gestion.asm new file mode 100644 index 0000000..95de6ed --- /dev/null +++ b/programs/gestion.asm @@ -0,0 +1,117 @@ +model tiny,stdcall +p586N +locals +jumps +codeseg +option procalign:byte + +include "..\include\mem.h" +include "..\include\fat.h" +include "..\include\divers.h" +include "..\include\graphic.h" + +org 0h + +start: +header exe <"CE",1,0,0,,offset imports,,offset realstart> + +realstart: + call [saveparamto],offset infos + call [print],offset msg1 + call [initdrive] + xor bp,bp + call [findfirstfile],offset bufferentry + jc nofiles +go: + push [word bufferentry.result.fileattr] + push [bufferentry.result.filesize] + push [bufferentry.result.filetime] + push [bufferentry.result.filedate] + push [bufferentry.result.filetimecrea] + push [bufferentry.result.filedatecrea] + mov bx,offset bufferentry.result.filename + push bx + push offset line + call [print] + + call [findnextfile],offset bufferentry + jc nofiles + inc bp + jmp go +nofiles: + call [print],offset menu + mov [xx],1 + call changelineattr,[xx],112 +endof: + mov ax,0 + int 16h + cmp ah,50h + jne tre1 + cmp [xx],bp + ja endof + call changelineattr,[xx],7 + inc [xx] + call changelineattr,[xx],112 + jmp endof +tre1: + cmp ah,48h + jne tre2 + cmp [xx],1 + je endof + call changelineattr,[xx],7 + dec [xx] + call changelineattr,[xx],112 + jmp endof +tre2: + cmp al,0Dh + jne tre3 +tre3: + cmp ah,59 + jne tre4 + jmp realstart +tre4: + cmp ah,67 + jne endof + retf + +;couleur al pour ligne %0 en %1 +PROC changelineattr near +USES ax,bx,di,es +ARG @line:word,@attr:word +mov ax,0B800h +mov es,ax +mov ax,[@line] +add ax,3 +mul [cs:infos.columns] +mov di,ax +shl di,1 +mov al,[cs:infos.columns] +inc di +mov bx,[@attr] +@@popep: +mov [es:di],bl +add di,2 +dec al +jnz @@popep +ret +endp changelineattr + +xx dw 1 +xxold dw 0 +menu db '\c70 [F1] Lire disque [F9] Quitter \c07',0 +msg1 db '\e\g00,00\c70 Gestionnaire de fichier Version 1.5 ' + db '\g00,01\c07--------------------------------------------------------------------------------' + db '\g00,02Nom Ext. Date creation Date modification Taille Attributs' + db '\g00,03-------------------------------------------------------------------------------\l',0 +line db '\c07%n %d %t %d %t %z %a\l',0 +bufferentry find <> +infos vgainf <> + +importing +use VIDEO.LIB,print +use VIDEO,saveparamto +use DISQUE,initdrive +use DISQUE,findfirstfile +use DISQUE,findnextfile +endi + diff --git a/programs/isa.asm b/programs/isa.asm new file mode 100644 index 0000000..f3e7e9c --- /dev/null +++ b/programs/isa.asm @@ -0,0 +1,46 @@ +model tiny,stdcall +p586N +locals +jumps +codeseg +option procalign:byte + +include "..\include\mem.h" +include "..\include\divers.h" + +org 0h + +start: +header exe <"CE",1,0,0,,,,offset realstart> + +realstart: +retf + +PNP_ADR_PORT equ 0x279 +PNP_WRITE_PORT equ 0xA79 +;MIN and MAX READ_ADDR must have the bottom two bits set +MIN_READ_ADDR equ 0x203 +MAX_READ_ADDR equ 0x3FF +;READ_ADDR_STEP must be a multiple of 4 +READ_ADDR_STEP equ 8 + +;bits +CONFIG_WAIT_FOR_KEY equ 0x02 +CONFIG_RESET_CSN equ 0x04 +IDENT_LEN equ 9 + +;renvoie le timer en ax +ctc: + cli + mov dx,043h + mov al,0 + out dx,al + mov dx,40h + in al,dx + mov ah,al + in al,dx + sti + ret + +;attend pendant ax microsecondes +usleep: diff --git a/programs/logo.asm b/programs/logo.asm new file mode 100644 index 0000000..5e5a0da --- /dev/null +++ b/programs/logo.asm @@ -0,0 +1,91 @@ +model tiny,stdcall +p586N +locals +jumps +codeseg +option procalign:byte + +include "..\include\mem.h" +include "..\include\divers.h" + +org 0h + +start: +header exe <"CE",1,0,0,,offset imports,,offset realstart> + +realstart: + call [cs:mballoc],65535 + jc problem3 + push ax + pop es + call [cs:projfile],offset logo + jc problem + mov ecx,eax + call [cs:mbfind],offset logo + jc problem + call [cs:decompressrle],ax,0,es,0,cx + jc problem2 + push es + pop ds + call [cs:savestate] + call [cs:setvideomode],word 8 + call [cs:clearscreen] + call [cs:loadbmppalet],word 0 + call [cs:showbmp],word 0,word 20,word 150 + jc problem4 + push cs + pop ds + call [cs:print],offset poper +endofit: + xor ax,ax + int 16h + call [cs:restorestate] + retf + +problem: + push cs + pop ds + call [cs:print],offset error + jmp endofit + +problem2: + push cs + pop ds + call [cs:print],offset error2 + jmp endofit + +problem3: + push cs + pop ds + call [cs:print],offset error3 + jmp endofit + +problem4: + push cs + pop ds + call [cs:print],offset error4 + jmp endofit + +poper db '\c0BC\c0CO\c0DS\c0E2\c0E0\c0E0\c0F0 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 '\c04Une erreur est apparue lors de l''allocation de mémoire',0 +error db '\c04Une erreur est apparue lors du chargement de l''image',0 +error2 db '\c04Une erreur est apparue lors de la decompression de l''image',0 +error4 db '\c0FUne erreur est apparue lors de l''affichage de l''image',0 + + +importing +use VIDEO,restorestate +use VIDEO,savestate +use VIDEO,setvideomode +use VIDEO,clearscreen +use DISQUE,decompressrle +use DISQUE,projfile +use SYSTEME,mbfind +use SYSTEME,mballoc +use VIDEO.LIB,print +use BMP.LIB,showbmp +use BMP.LIB,loadbmppalet +endi diff --git a/programs/lpt/com.asm b/programs/lpt/com.asm new file mode 100644 index 0000000..4c83399 --- /dev/null +++ b/programs/lpt/com.asm @@ -0,0 +1,471 @@ +.model tiny +.486 +smart +.code +org 0100h +start: +;call setemettor +call getfirstlpt +call initlpt +call receivecommand +ret + + + +gogo db 'Salut' +gotoz db 23 dup (0) + +;Re‡ois une commande et l'execute +Receivecommand: +push ax bx cx di es +push cs +pop es +mov di,offset command +call receivelptblock +mov bl,al +xor bh,bh +shl bx,1 +add bx,offset cmd +call [bx] +pop es di cx ax +ret +command db 25 dup (0) +cmd dw nothings + dw sendram + +nothings: +ret + +Sendram: +push ax cx si ds +mov ax,es:[di] +mov si,ax +mov ax,es:[di+2] +mov ds,ax +mov cx,es:[di+2] +call sendlptblock +pop ds si cx ax +ret + + +;---------Segment Adress----------- +Bios equ 040h +;---------Offset Adress------------ +Lptadr equ 008h +Timer equ 06Ch +;---------Constant----------------- +onesec equ 18 +tensec equ 182 +Ack equ 00 +Nack equ 0FFh +maxtry equ 10 +tokenstart equ 0 +tokennext equ 1 +tokenstop equ 2 +tokenbad equ 3 +tokenresend equ 4 + + +Initlpt: +push ax ecx +call StartTimer +cmp emettor,0 +je receptinit +mov al,10000b +call SetLptOut +waitinit1: +call EndTimer +cmp cx,cs:timeout +ja errorinit +call getlptIn +cmp al,00000b +jnz waitinit1 +jmp endinit +receptinit: +call EndTimer +cmp cx,cs:timeout +ja errorinit +call getlptIn +cmp al,00000b +jnz receptinit +mov al,10000b +call SetLptOut +endinit: +clc +pop ecx ax +ret +errorinit: +stc +pop ecx ax +ret + + +;-Envoie DL (dh) JNE si problŠme JNC error timeout +Sendlpt: +push ax bx ecx +call StartTimer +mov dh,dl +mov al,dl +and al,0Fh +call SetLptOut +waitSend: +call EndTimer +cmp cx,cs:timeout +ja errorsend +call getlptIn +bt ax,4 +jnc waitsend +and al,0Fh +mov bl,al +call StartTimer ;///// +mov al,dh +shr al,4 +or al,10000b +call SetLptOut +waitSend2: +call EndTimer +cmp cx,cs:timeout +ja errorsend +call getlptIn +bt ax,4 +jc waitsend2 +and al,0Fh +shl al,4 +add bl,al +cmp dl,bl +pop ecx bx ax +clc +ret +errorsend: +pop ecx bx ax +stc +ret + + +;-Re‡ois DL (dh) +Receivelpt: +push ax bx ecx +call StartTimer +waitreceive: +call EndTimer +cmp cx,cs:timeout +ja errorreceive +call getlptIn +bt ax,4 +jnc waitreceive +and al,0Fh +mov dl,al +call SetLptOut +call StartTimer ;///// +waitreceive2: +call EndTimer +cmp cx,cs:timeout +ja errorreceive +call getlptIn +bt ax,4 +jc waitreceive2 +and al,0Fh +mov dh,al +shl dh,4 +add dl,dh +or al,10000b +call SetlptOut +clc +pop ecx bx ax +ret +errorreceive: +stc +pop ecx bx ax +ret + +;-AX +SetTimeout: +mov cs:Timeout,ax +ret + +timeout dw tensec + +getTimeout: +mov ax,cs:Timeout +ret + +SetEmettor: +mov cs:Emettor,1 +ret + +Emettor db 0 + +SetReceptor: +mov cs:Emettor,0 +ret + +;->bx Nøport->Adresse dx +GetLpt: +push ax bx ds +mov ax,bios +mov ds,ax +dec bx +shl bx,1 +mov dx,ds:[Lptadr+bx] +mov cs:lpt,dx +pop ds bx ax +ret +lpt dw 0 + +;->bx Nøport->Adresse dx +GetFirstLpt: +push ax ds +mov ax,bios +mov ds,ax +xor bx,bx +findlpt: +mov dx,ds:[Lptadr+bx] +cmp dx,0 +jne oklpt +add bx,2 +cmp bx,4 +jbe findlpt +oklpt: +mov cs:lpt,dx +pop ds ax +ret + +;-> +StartTimer: +push ax ecx ds +mov ax,Bios +mov ds,ax +mov ecx,ds:[timer] +mov times,ecx +pop ds ecx ax +ret +times dd 0 + +;->Ecx time elapsed +EndTimer: +push ax ds +mov ax,Bios +mov ds,ax +mov ecx,ds:[timer] +sub ecx,times +mov ecx,0 +pop ds ax +ret + +;-> +GetLptOut: +push dx +mov dx,lpt +in al,dx +pop dx +ret + +GetLptIn: +push dx +mov dx,lpt +inc dx +in al,dx +shr al,3 +pop dx +ret + +GetLptInOut: +push dx +mov dx,lpt +add dx,2 +in al,dx +and al,11111b +pop dx +ret + +SetLptOut: +push dx +mov dx,lpt +out dx,al +pop dx +ret + +SetLptIn: +push dx +mov dx,lpt +inc dx +out dx,al +pop dx +ret + +SetLptInOut: +push dx +mov dx,lpt +add dx,2 +out dx,al +pop dx +ret + +;R‚alise un checksum 8 bits sur donn‚es DS:SI, nb CX r‚sultat dans dl +Checksum8: +push cx si +check: +add dl,[si] +inc si +dec cx +jnz check +pop si cx +ret + +;DS:SI pointeur sur donn‚es, CX nombres de donn‚es, AL token +SendLptBlock: +push ax bx cx edx si edi bp +mov dx,cx +shl edx,16 +mov dh,al +call checksum8 +mov edi,edx +xor dh,dh +mov bp,dx +mov ah,maxtry +retry: +mov bl,4 +xor al,al +header: +mov dx,di +call sendlpt +setne al +jc outt +rol edi,8 +dec bl +jnz header +cmp al,0 +jne notgood +mov dl,ACK +jmp allsend +notgood: +mov dl,NACK +allsend: +call sendlpt +setne al +jc outt +cmp al,0 +je okheader +dec ah +jnz retry +jmp outt +okheader: +cmp cx,0 +je endoftrans +mov di,maxtry +retry2: +mov bx,cx +xor ax,ax +body: +mov dl,[si+bx-1] +add ah,dl +call sendlpt +setne al +jc outt +dec bx +jnz body +cmp al,0 +jne notgood2 +mov dl,ACK +jmp allisend +notgood2: +mov dl,NACK +allisend: +call sendlpt +setne al +jc outt +cmp al,0 +je endoftrans +dec di +jnz retry2 +outt: +stc +endoftrans: +mov al,ah +xor ah,ah +cmp bp,ax +pop bp edi si edx cx bx ax +ret + +;Receptionne en es:di les donn‚es au nombres de CX token AL (AH) (ECX) +receiveLptBlock: +push ax bx dx si bp +mov ah,maxtry +retrye: +mov bl,4 +headere: +call receivelpt +jc outte +mov cl,dl +rol ecx,8 +dec bl +jnz headere +call receivelpt +jc outte +cmp dl,ACK +je okheadere +dec ah +jnz retrye +jmp outte +okheadere: +mov al,ch +xor ch,ch +mov bp,cx +rol ecx,16 +cmp cx,0 +je endoftranse +mov si,maxtry +retrye2: +mov bx,cx +xor ah,ah +bodye: +call receivelpt +jc outte +mov es:[di+bx-1],dl +add ah,dl +dec bx +jnz bodye +call receivelpt +jc outte +cmp dl,ACK +je endoftranse +dec si +jnz retrye2 +outte: +stc +endoftranse: +mov bl,ah +xor bh,bh +cmp bp,bx +pop bp si dx bx ax +ret + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +end start; diff --git a/programs/lpt/project1.dpr b/programs/lpt/project1.dpr new file mode 100644 index 0000000..a771b7e --- /dev/null +++ b/programs/lpt/project1.dpr @@ -0,0 +1,12 @@ +program Project1; + +uses + Forms, + Unit1 in 'UNIT1.PAS' {Form1}; + +{$R *.RES} + +begin + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/programs/lpt/project1.opt b/programs/lpt/project1.opt new file mode 100644 index 0000000..8ebc76c --- /dev/null +++ b/programs/lpt/project1.opt @@ -0,0 +1,34 @@ +[Compiler] +A=1 +B=0 +D=1 +F=0 +I=1 +K=1 +L=1 +P=1 +Q=0 +R=0 +S=1 +T=0 +U=1 +V=1 +W=0 +X=1 +Y=1 + +[Linker] +MapFile=0 +LinkBuffer=0 +DebugInfo=0 +OptimizeExe=0 +StackSize=16384 +HeapSize=8192 + +[Directories] +OutputDir= +SearchPath= +Conditionals= + +[Parameters] +RunParams= diff --git a/programs/lpt/project1.res b/programs/lpt/project1.res new file mode 100644 index 0000000000000000000000000000000000000000..ab74376341da27109e2591593a13aa146d4417ea GIT binary patch literal 794 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 literal 0 HcmV?d00001 diff --git a/programs/lpt/unit1.pas b/programs/lpt/unit1.pas new file mode 100644 index 0000000..d3a6687 --- /dev/null +++ b/programs/lpt/unit1.pas @@ -0,0 +1,517 @@ +unit Unit1; + +interface + +uses + SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, + Forms, Dialogs, StdCtrls, Grids, Outline, DirOutln, FileCtrl, Buttons, + Gauges, ExtCtrls, Spin, Mask; + +type + TForm1 = class(TForm) + DriveComboBox1: TDriveComboBox; + FilterComboBox1: TFilterComboBox; + FileListBox1: TFileListBox; + DirectoryListBox1: TDirectoryListBox; + SpeedButton1: TSpeedButton; + SpeedButton2: TSpeedButton; + Memo1: TMemo; + Memo2: TMemo; + Memo3: TMemo; + SpeedButton3: TSpeedButton; + SpeedButton4: TSpeedButton; + Gauge1: TGauge; + SpeedButton5: TSpeedButton; + SpeedButton6: TSpeedButton; + SpinButton1: TSpinButton; + MaskEdit1: TMaskEdit; + SpeedButton8: TSpeedButton; + SpinButton2: TSpinButton; + okm: TCheckBox; + Label1: TLabel; + procedure FormActivate(Sender: TObject); + procedure SpinButton1DownClick(Sender: TObject); + procedure SpinButton1UpClick(Sender: TObject); + procedure showadress(Sender: TObject); + procedure SpeedButton6Click(Sender: TObject); + procedure SpeedButton8Click(Sender: TObject); + procedure MaskEdit1Change(Sender: TObject); + procedure SpinButton2DownClick(Sender: TObject); + procedure SpinButton2UpClick(Sender: TObject); + procedure SpeedButton3Click(Sender: TObject); + procedure Memo2Click(Sender: TObject); + + private + { Private-déclarations } + public + { Public-déclarations } + end; + +const UNESEC = 1000; + DIXSEC = 4000; + ACK = $00; + NAK = $FF; + MAXTRY = 5; + +type DBloc = array[ 1..15534 ] of byte; +type BHEADER = record + case boolean of + true : ( Checksum:byte; + Lenb : byte; + Lenh : byte; + Token : byte; + + ); + false : ( Champ : array[ 0..3 ] of byte ); + end; + +var + Form1: TForm1; + Inlpt : word; + Outlpt : word; + times : longint; + Block : DBLOC; + adress :longint; + errors: boolean; + reste:integer; + pop:boolean; + +implementation + +{$R *.DFM} + +function Getlpt( Number : integer ) : boolean; +begin + Outlpt := MemW[ $0040: 6 + Number * 2 ]; + if ( Outlpt <> 0 ) then + begin + Inlpt := Outlpt + 1; + Getlpt := TRUE; + end + else + Getlpt := FALSE; +end; + +function getfirstlpt:byte; +var i:integer; +begin +i:=1; + while (not(getlpt(i)) or (i>4)) do inc(i); + if (getlpt(i)=false) then i:=0; + getfirstlpt:= i; +end; + +function getb:byte; +begin + getb:=port[inlpt] and $F8 +end; + +procedure putb(what:byte); +begin + port[outlpt]:=what; +end; + +procedure starttimer; +begin + times:=GetTickCount; +end; + +function endtimer:longint; +begin + endtimer:=getTickCount-times; +end; + +function Initlpt( Emetteur : boolean ) : boolean; +begin + errors:=false; + putb($10); + putb($18); + putb($10); + starttimer; + if ( Emetteur ) then + begin + while ( ( GetB <> $00 ) and ( Endtimer <= DIXSEC ) ) do; + end + else + begin + while ( ( GetB <> $00 ) and ( Endtimer <= DIXSEC ) ) do; + PutB( $10 ); + end; + Initlpt := ( Endtimer <= DIXSEC ); +end; + +function sendlpt( Wert : byte ) : boolean; +var Retour : byte; +label fin; +begin +if errors then goto fin; + Starttimer; + PutB( Wert and $0F ); + while ( ( ( GetB and 128 ) = 0 ) and ( Endtimer <= DIXSEC )) do; + if ( Endtimer > DIXSEC ) then + begin + errors:=true; + goto fin; + end; + Retour := ( GetB shr 3 ) and $0F; + Starttimer; + PutB( ( Wert shr 4 ) or $10 ); + while ( ( ( GetB and 128 ) <> 0 ) and ( Endtimer <= DIXSEC ) ) do + if ( Endtimer > DIXSEC ) then + begin + errors:=true; + goto fin; + end; + Retour := Retour or ( ( GetB shl 1 ) and $F0 ); + fin: + sendlpt := ( Wert = Retour ); +end; + +function receivelpt : byte; +var LoNib, + HiNib : byte; +label fin; +begin + if errors then goto fin; + Starttimer; + while ( ( ( GetB and 128 ) = 0 ) and ( Endtimer <= DIXSEC )) do; + if ( Endtimer > DIXSEC ) then + begin + errors:=true; + goto fin; + end; + LoNib := ( GetB shr 3 ) and $0F; + PutB( LoNib ); + Starttimer; + while ( ( ( GetB and 128 ) <> 0 ) and ( Endtimer <= DIXSEC ) ) do; + if ( Endtimer > DIXSEC ) then + begin + errors:=true; + goto fin; + end; + HiNib := ( GetB shl 1 ) and $F0; + PutB( ( HiNib shr 4 ) or $10 ); + fin: + receivelpt := ( LoNib or HiNib ); +end; + +function checksum8(Nombre:word;Dptr : pointer):byte ; +var donnees : ^DBloc ; + i:word; + ch:byte; +begin +ch:=0; +donnees:=dptr; + for i:=1 to Nombre do ch:=ch + Donnees^[ i ]; + checksum8:=ch; + end; + +function SendlptBlock( Token : byte; + Nombre : word; + Dptr : pointer ):boolean; +var header : BHEADER; + ok : boolean; + i : word; + trys : word; + Donnees : ^DBloc; + label fin; +begin + form1.gauge1.visible:=true; + header.Token := Token; + header.Lenb := (Nombre and $FF00) shr 8; + header.Lenh := Nombre and $FF; + header.Checksum:=checksum8(nombre,Dptr); + trys := MAXTRY; + repeat + ok := TRUE; + for i := 0 to 3 do + ok := ok and sendlpt( Header.Champ[ i ] ); + if ( ok ) then + ok := ok and sendlpt( ACK ) + else + ok := ok and sendlpt( NAK ); + if ( not ok ) then + dec( trys ); + until ( ( ok ) or ( trys = 0 ) or (errors)); + if ( (trys = 0) or (errors)) then + begin + goto fin; + SendlptBlock:=false; + end; + if ( Nombre > 0 ) then + begin + Donnees := DPTR; + trys := MAXTRY; + repeat + ok := TRUE; + for i := Nombre downto 1 do + begin + ok := ok and sendlpt( Donnees^[ i ] ); + reste:=trunc(100-i/nombre*100); + form1.gauge1.progress:=reste + end; + if ( ok ) then + ok := ok and sendlpt( ACK ) + else + ok := ok and sendlpt( NAK ); + if ( not ok ) then + dec( trys ); + until ( ( ok ) or ( trys = 0 ) or (errors)); + if ( (trys = 0) or (errors)) then + begin + goto fin; + SendlptBlock:=false; + end; + end; + SendlptBlock:=true; + fin: + form1.gauge1.visible:=false; +end; + +function ReceivelptBlock( var Token : byte; + var Len : word; + Dptr : pointer ):boolean; +var header : BHEADER; + ok : boolean; + i : word; + trys : word; + EscapeStatus : boolean; + ByteBuffer : byte; + Donnees : ^DBloc; + label fin,good; +begin + form1.gauge1.visible:=true; + trys := MAXTRY; + repeat + for i:= 0 to 3 do + Header.Champ[ i ] := receivelpt; + ByteBuffer := receivelpt; + if ( ByteBuffer <> ACK ) then + dec( trys ); + until ( ( trys = 0 ) or ( ByteBuffer = ACK ) or (errors)); + if ( (trys = 0) or (errors)) then + begin + goto fin; + receivelptblock:=false; + end; + Token := Header.Token; + Len := Header.Lenh+(Header.Lenb shl 8); + if ( Len > 0 ) then + begin + Donnees := Dptr; + trys := MAXTRY; + repeat + for i := len downto 1 do + begin + Donnees^[ i ] := receivelpt; + reste:=trunc(100-i/len*100); + form1.gauge1.progress:=reste + end; + ByteBuffer := receivelpt; + if ( ByteBuffer <> ACK ) then + dec( trys ); + until ( ( trys = 0 ) or ( ByteBuffer = ACK ) ); + if ( trys = 0 ) then + begin + goto fin; + receivelptblock:=false; + end; + end; + receivelptblock:=true; + fin: + form1.gauge1.visible:=false; +end; + + +function Sendfile(name:string):boolean; +var lus:word; +Fichier:file; +begin +assign( Fichier, Name ); +reset( Fichier, 1 ); +Blockread( Fichier, Block, 15000, Lus ); +if lus>0 then +Sendfile:=SendlptBlock( 1, Lus, @Block ) +else +Sendfile:=false; +end; + +procedure TForm1.FormActivate(Sender: TObject); +begin +adress:=0; +showadress(sender); +Memo2Click(Sender); +SpeedButton8Click(Sender); +pop:=true; +end; + +procedure TForm1.SpinButton1DownClick(Sender: TObject); +begin +if (adress>0) and okm.checked then +begin +dec(adress); +SpeedButton6Click(Sender); +end; +end; + +procedure TForm1.SpinButton1UpClick(Sender: TObject); +begin +if (adress<65536*16) and okm.checked then +begin +inc(adress); +SpeedButton6Click(Sender); +end; +end; + +function hextoint(hex:string;n:word):longint; +var +resu,exp:longint; +i:word; +begin + hex :=UpperCase(hex); + resu:=0; + exp:=1; + for i:=n downto 1 do + begin + resu:=resu+(Pos(hex[i],'0123456789ABCDEF')-1)*(exp); + exp:=exp*16 + end; + hextoint:=resu; + end ; + + function adresstoint(hex:string):longint; +begin +adresstoint:=hextoint(Copy(hex, 1, 4),4)shl 4 + hextoint(Copy(hex, length(hex)-3, 4),4) +end; + +procedure TForm1.showadress(Sender: TObject); +var i,j,adh,adl:word; +adress2:longint; +old,old2:string; +begin +memo1.clear; +memo2.clear; +memo3.clear; +for i:=0 to 29 do +begin +adress2:=adress+i*16; +adl:=adress2 and $FFFF; +adh:=(adress2 and $F0000) shr 4; +memo1.lines.add(IntToHex(adh,4)+':'+IntToHex(adl,4)) ; +old:=''; +old2:=''; +for j:=1 to 16 do +begin +old:=old+inttohex(block[i*16+j],2); +if block[i*16+j]=0 then +old2:=old2+'.' +else +old2:=old2+char(block[i*16+j]) ; +if j mod 2=0 then old:=old+' '; +end; +memo2.lines.add(old) ; +memo3.lines.add(old2) ; +end +end; + +procedure TForm1.SpeedButton8Click(Sender: TObject); +begin +if getfirstlpt=0 then showmessage('Pas de port parallèle détecté'); +errors:=false; +end; + +procedure TForm1.SpeedButton6Click(Sender: TObject); +var adl,adh,good:word; +tok:byte; +ok:boolean; +begin +if (inlpt=0) then SpeedButton8Click(sender); +if ((inlpt<>0) and (initlpt(true))) then +begin + adl:=adress and $FFFF; + adh:=(adress and $F0000) shr 4; +Block[1]:=lo(adl); +Block[2]:= hi(adl); +Block[3]:= lo(adh); +Block[4]:= hi(adh); +Block[5]:= lo(512); +Block[6]:= hi(512) ; +ok:=false; +if SendlptBlock( 1,6,@Block) then ok:=receivelptBlock(tok,good ,@Block); {demande de RAM} +if not(ok) or errors then Showmessage('Erreur de transmission !!!!!!!!!!'); +showadress(sender); +end +else +Showmessage('Pas de PC distant'); +putb($08); +errors:=false; +end; + +procedure TForm1.MaskEdit1Change(Sender: TObject); +begin +if pop then +begin +adress:=adresstoint(maskedit1.text); +if okm.checked=true then SpeedButton6Click(sender); +showadress(sender); +end; +end; + +procedure TForm1.SpinButton2DownClick(Sender: TObject); +begin + if (adress+16*30<=65536*16) and okm.checked then + begin + adress:=adress+16*30; +SpeedButton6Click(Sender); +end; +end; + +procedure TForm1.SpinButton2UpClick(Sender: TObject); +begin + if (adress-16*30>=0) and okm.checked then + begin + adress:=adress-16*30; +SpeedButton6Click(Sender); +end; +end; +procedure TForm1.SpeedButton3Click(Sender: TObject); +var adl,adh,good:word; +adress2:longint; +tok:byte; +ok:boolean; +begin +if (inlpt=0) then SpeedButton8Click(sender); +if ((inlpt<>0) and (initlpt(true))) then +begin + adress2 :=adresstoint(maskedit1.text); + adl:=adress2 and $FFFF; + adh:=(adress2 and $F0000) shr 4; +Block[1]:=lo(adl); +Block[2]:= hi(adl); +Block[3]:= lo(adh); +Block[4]:= hi(adh); +ok:=SendlptBlock( 7,4,@Block); +if not(ok) or errors then Showmessage('Erreur de transmission !!!!!!!!!!'); +end +else +Showmessage('Pas de PC distant'); +putb($18); +errors:=false; +end; +procedure TForm1.Memo2Click(Sender: TObject); +var ligne,col,pos,adl,adh:word; +adress2:longint; +begin + ligne:=memo2.selstart div 42; + col:= (trunc((memo2.selstart mod 42+1) / 2.5)); + pos:=16*ligne+col; + label1.caption:=inttostr(ligne)+':'+inttostr(col)+':'+inttostr(pos); + adress2:=pos+adress; + adl:=adress2 and $FFFF; + adh:=(adress2 and $F0000) shr 4; + pop:=false; + maskedit1.text:=inttohex(adh,4)+':'+inttohex(adl,4); + pop:=true; +end; + +end. diff --git a/programs/pmode.asm b/programs/pmode.asm new file mode 100644 index 0000000..c7c048b --- /dev/null +++ b/programs/pmode.asm @@ -0,0 +1,22 @@ +model tiny,stdcall +p586N +locals +jumps +codeseg +option procalign:byte + +include "..\include\mem.h" +include "..\include\divers.h" + +org 0h + +start: +header exe <"CE",1,0,0,,,,offset realstart> + +realstart: + mov eax,cr0 + or al,1 + mov cr0,eax + retf + + diff --git a/programs/souris.asm b/programs/souris.asm new file mode 100644 index 0000000..eca057b --- /dev/null +++ b/programs/souris.asm @@ -0,0 +1,32 @@ +model tiny,stdcall +p586N +locals +jumps +codeseg +option procalign:byte + +include "..\include\mem.h" +include "..\include\divers.h" + +org 0h + +start: +header exe <"CE",1,0,0,,offset imports,,offset realstart> + +realstart: + call [mouseon] + jc errormouse + call [print],offset message + retf + +errormouse: + call [print],offset errormessage + retf + +message db 'Activation de la souris\l',0 +errormessage db 'impossible d''activer la souris\l',0 + +importing +use VIDEO.LIB,print +use MOUSE.SYS,mouseon +endi diff --git a/programs/test.asm b/programs/test.asm new file mode 100644 index 0000000..d48bc79 --- /dev/null +++ b/programs/test.asm @@ -0,0 +1,169 @@ +model tiny,stdcall +p586N +locals +jumps +codeseg +option procalign:byte + +include "..\include\mem.h" +include "..\include\divers.h" + +org 0h + +start: +header exe <"CE",1,0,0,,offset imports,,offset realstart> + +realstart: + call [savestate] + push 0FFFFh + pushd 652201 + pushd 1545454545 + push 1523 + push 2041 + push offset zero + push offset fixe + push 5 + push 'i' + push 'a' + pushd 5041 + pushd 125645 + pushd 5041 + pushd 125645 + pushd 5041 + pushd 125645 + push offset message + call [print] + xor ax,ax + int 16h + call [clearscreen] + call [xchgpages] + call [clearscreen] + mov cx,200 +go1: + call [xchgpages] + call [waitretrace] + call [print],offset textdemo1 + call put + call [xchgpages] + call [waitretrace] + dec cx + jnz go1 + mov cx,200 +go2: + call [xchgpages] + call [waitretrace] + call [print],offset textdemo2 + call put + call [xchgpages] + call [waitretrace] + dec cx + jnz go2 + mov cx,200 +go3: + call [xchgpages] + call [waitretrace] + call [print],offset textdemo3 + call put + call [xchgpages] + call [waitretrace] + dec cx + jnz go3 + call [xchgpages] + call [clearscreen] + call [print],offset texte2 + call [xchgpages] + call [clearscreen] + call [xchgpages] + mov bp,255 + xor edx,edx +go4: + call [xchgpages] + call [waitretrace] + inc edx + push edx + push offset texte3 + call [print] + call [xchgpages] + call [waitretrace] + dec bp + jnz go4 + push offset texte4 + call [print] + mov ax,0 + int 16h + call [restorestate] + retf +put: + call random + mov di,dx + and di,4096-2 + mov si,offset fond + call showstring2 + ret +random: + push ax + MOV AX,[cs:randseed] + MOV DX,8405h + MUL DX + INC AX + MOV [cs:randseed],AX + pop ax + ret +randseed dw 1234h +Randomize: + push ax cx dx + mov ah,0 + int 1ah + mov [cs:randseed],dx + pop dx cx ax + ret + +zero db 'Chaine a z‚ro terminal',0 +fixe db 20,'Chaine a taille fixe' +message db "\m01\e\c07\h01D‚monstration de la librairie VIDEO.LIB\l\l" + db "\c01Nombres entiers ou sign‚s (%%u/%%i):\l%u\l%iD\l" + db "\c02Nombre hexad‚cimaux (%%h):\l%hD\l%hW\l" + db "\c03Nombres Binaires (%%b):\l%bD\l%bB\l" + db "\c04Caracteres simples ou multiples (%%c/%%cM):\l%c\l%cM\l" + db "\c05Chaines a z‚ro terminal ou fixes (%%0/%%s):\l%s\l%0\l" + db "\c06Dates et heures (%%t/%%d):\l%t\l%d\l" + db "\c07Nombre a echelle automatique (%%z):\l%z\l%z\l" + db "\c08Attributs de fichiers (%%a):\l%a",0 + +fond db 16,'Ceci est un fond' +textdemo1 db '\c05Scrolling Scrolling Scrolling Scrolling Scrolling Scrolling Scrolling Scrolling\l',0 +textdemo2 db '\c07Vertical Vertical Vertical Vertical Vertical Vertical Vertical Vertical\l',0 +textdemo3 db '\c09Rapide Rapide Rapide Rapide Rapide Rapide Rapide Rapide\l',0 +texte1 db 'Echange rapide de pages Vid‚o',0 +texte2 db '\g04,13Routine d''affichage Ultra Rapide Agissant sur le Mat‚riel' + db '\g04,14Possibilit‚ de r‚aliser des effets de superposition',0 +texte3 db '\c04%bD\l',0 +texte4 db '\g01,00Sauvegarde et restauration de l''ecran (%%s/%%r)',0 + +showstring2: + push es bx cx si di + add di,4000 + mov bx,0B800h + mov es,bx + mov bl,[si] + mov ch,3 +strinaize4: + inc si + mov cl,[si] + mov [es:di],cx + add di,2 + dec bl + jnz strinaize4 + pop di si cx bx es + ret + + +importing +use VIDEO.LIB,print +use VIDEO,xchgpages +use VIDEO,setvideomode +use VIDEO,clearscreen +use VIDEO,savestate +use VIDEO,restorestate +use VIDEO,waitretrace +endi diff --git a/programs/verifier.asm b/programs/verifier.asm new file mode 100644 index 0000000..93d601e --- /dev/null +++ b/programs/verifier.asm @@ -0,0 +1,106 @@ +model tiny,stdcall +p586N +locals +jumps +codeseg +option procalign:byte + +include "..\include\mem.h" +include "..\include\divers.h" + +org 0h + +start: +header exe <"CE",1,0,0,,offset imports,,offset realstart> + +realstart: + call [savestate] + call [print],offset msg + mov bp,1000h + xor di,di + xor cx,cx + xor edx,edx +verifall: + mov ah,1 + int 16h + jz nokey + cmp al,' ' + je enend +nokey: + mov dx,di + push edx + mov dx,cx + inc dx + push edx + mov ax,cx + inc ax + mov si,100 + mul si + mov si,2880 + div si + mov dx,ax + push edx + call [print],offset msg2 + call gauge + call [verifysector],cx + jc errors + je noprob + inc di +noprob: + inc cx + cmp cx,2880 + jnz verifall +enend: + cmp di,0 + je noatall + call [print],offset error2 + jmp someof +noatall: + call [print],offset noerror +someof: + mov ah,0 + int 16h + call [restorestate] + retf +errors: + call [print],offset error + mov ah,0 + int 16h + call [restorestate] + retf + +error db '\g10,10Erreur avec le lecteur de disquette !',0 +error2 db '\g10,10Le disque est defectueux, appuyez sur une touche pour quitter',0 +noerror db '\g10,10Pas de secteurs defectueux, appuyez sur une touche pour continuer',0 +msg db '\m02\e\c07\g29,00- Test de surface du disque -\g02,49',0 +msg2 db '\g10,20%u %%\g10,16%u cluster testes. \h34%u cluster defectueux. ',0 + +gauge: + push ax dx + mov ax,cx + mul [sizeof] + div [max] + xor edx,edx + mov dx,[sizeof] + sub dx,ax + push dx + push 'Û' + mov dx,ax + push dx + push 'Û' + push offset gauges + call [print] + pop dx ax + retn + +max dw 2879 +sizeof dw 50 + +gauges db '\g10,18\c05%cM\c07%cM',0 + +importing +use VIDEO.LIB,print +use VIDEO,savestate +use VIDEO,restorestate +use DISQUE,verifysector +endi diff --git a/programs/volume.asm b/programs/volume.asm new file mode 100644 index 0000000..bc9703e --- /dev/null +++ b/programs/volume.asm @@ -0,0 +1,351 @@ +model tiny,stdcall +p586N +locals +jumps +codeseg +option procalign:byte + +include "..\include\mem.h" +include "..\include\divers.h" +include "..\include\graphic.h" + +org 0h + +start: +header exe <"CE",1,0,0,,offset imports,,offset realstart> + +realstart: +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 +call [readsector],[sect],offset buffer +jnc adres2 +errtr: + call [setxy],0,[word ptr lastline] + call [print],offset errordisk + xor ax,ax + int 16h +adres2: +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 +mov dx,[sect] +push edx +push offset spaces +call [print] +mov dx,di +mov al,[sizex] +mov esi,edi +doaline: +push [dword ptr di+offset buffer] +push 8 +call [showhex] +call [showchar],' ' +inc edi +dec al +jnz doaline +mov edi,esi +push offset spaces2 +call [print] +mov al,[sizex] +doaline2: +push [word ptr di+offset buffer] +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 + cmp bp,8*16 + jae waitkey + add bp,16 + jmp adres2 + suit: + cmp ax,3C00h + jne suit2 + cmp bp,0 + je waitkey + sub bp,16 + jmp adres2 + suit2: + cmp ax,3D00h + jne suit3 + cmp [sect],2880 + ja waitkey + inc [sect] + jmp adres + suit3: + cmp ax,3E00h + jne suit4 + cmp [sect],0 + je waitkey + dec [sect] + jmp adres + suit4: + cmp ax,3F00h + jne suit5 + jmp adres2 + suit5: + cmp ax,4000h + jne suit6 +call [writesector],[sect],offset buffer + jnc waitkey + jmp errtr + 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 +call [writesector],[sect],offset buffer + jnc waitkey + jmp errtr +tre: +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,[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 +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 +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 [bx],ch + 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 +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 +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 +calc3: + push dx + xor bx,bx + mov bx,[xx] + mov dx,[yy] + shl dx,4 + add bx,dx + add bx,bp + add bx,offset buffer + 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 + +xx dw 0 +yy dw 0 +xxyy dw 3 +xxyy2 dw 3 + +lastline db 0 +sizex db 0 +sizex2 db 0 +buffer db 2048 dup (0) + +dep db ':',0 +errordisk db '\c74Une erreur est apparue sur le lecteur, appuyez sur une touche ',0 +menu db '\c70Haut&Bas [F1/2] Secteur [F3/4] Charger/Sauver [F5/6] Mode [F7] Quit. [F8] ' +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 +sect dw 0 +infos vgainf <> + +importing +use DISQUE,readsector +use DISQUE,writesector +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 + + + + + + + +