refactor: mise à jour vers fasm

This commit is contained in:
Nicolas Hordé 2019-07-09 18:30:00 +02:00
parent a9cba3a71a
commit 53b445a652
40 changed files with 3222 additions and 4361 deletions

Binary file not shown.

View File

@ -2,6 +2,7 @@ ASM=fasm
CLEAN=rm -rf CLEAN=rm -rf
all: boot12.bin all: boot12.bin
sync
boot12.bin: boot12.asm boot12.bin: boot12.asm
$(ASM) $< $(ASM) $<

View File

@ -1,27 +1,31 @@
struc vertex3d struc vertex3d tx,ty,tz
tx dd ? {
ty dd ? .tx dd ?
tz dd ? .ty dd ?
ends vertex3d .tz dd ?
.sizeof = $ - .tx
}
struc mat struc mat
p1 dd ? {
p2 dd ? .p1 dd ?
p3 dd ? .p2 dd ?
p4 dd ? .p3 dd ?
p5 dd ? .p4 dd ?
p6 dd ? .p5 dd ?
p7 dd ? .p6 dd ?
p8 dd ? .p7 dd ?
p9 dd ? .p8 dd ?
p10 dd ? .p9 dd ?
p11 dd ? .p10 dd ?
p12 dd ? .p11 dd ?
p13 dd ? .p12 dd ?
p14 dd ? .p13 dd ?
p15 dd ? .p14 dd ?
p16 dd ? .p15 dd ?
ends mat .p16 dd ?
.sizeof = $ - .p1
}
main equ 4D4Dh main equ 4D4Dh
edit equ 3D3Dh edit equ 3D3Dh
@ -30,3 +34,4 @@ mesh equ 4100h
vertex equ 4110h vertex equ 4110h
face equ 4120h face equ 4120h
locale equ 4160h locale equ 4160h

View File

@ -1,39 +1,41 @@
struc bmp_file struc bmp_file
bmp_filetype db 'bm' {
bmp_filesize dd ? ; taille du fichier .bmp_filetype db 'bm'
bmp_reserved dd 0 ; toujours 0 .bmp_filesize dd ? ; taille du fichier
bmp_bitmapoffset dd ? ; offset de l'image .bmp_reserved dd 0 ; toujours 0
bmp_headersize dd ? ; taille de l'entete en octects .bmp_bitmapoffset dd ? ; offset de l'image
bmp_width dd ? ; largeur en pixels de l'image .bmp_headersize dd ? ; taille de l'entete en octects
bmp_height dd ? ; hauteur en pixels de l'image .bmp_width dd ? ; largeur en pixels de l'image
bmp_planes dw 1 ; nombre de plan utilisés .bmp_height dd ? ; hauteur en pixels de l'image
bmp_bitsperpixel dw ? ; nombre de bits par pixels .bmp_planes dw 1 ; nombre de plan utilisés
bmp_compression dd ? ; méthode de compression .bmp_bitsperpixel dw ? ; nombre de bits par pixels
bmp_sizeofbitmap dd ? ; taille de l'image en octects .bmp_compression dd ? ; méthode de compression
bmp_horzresolution dd ? ; resolution horizontale en pixels par mètre .bmp_sizeofbitmap dd ? ; taille de l'image en octects
bmp_vertresolution dd ? ; resolution verticale en pixels par mètre .bmp_horzresolution dd ? ; resolution horizontale en pixels par mètre
bmp_colorsused dd ? ; nombre de couleur dans la palette si 0: palette entière si bitperpixel<=8 .bmp_vertresolution dd ? ; resolution verticale en pixels par mètre
bmp_colorsimportant dd ? ; nombre de couleurs importantes masques pour les modes de plus de 8 bits par pixels .bmp_colorsused dd ? ; nombre de couleur dans la palette si 0: palette entière si bitperpixel<=8
bmp_redmask dd ? .bmp_colorsimportant dd ? ; nombre de couleurs importantes masques pour les modes de plus de 8 bits par pixels
bmp_greenmask dd ? .bmp_redmask dd ?
bmp_bluemask dd ? .bmp_greenmask dd ?
bmp_alphamask dd ? .bmp_bluemask dd ?
bmp_colorspacetype dd ? .bmp_alphamask dd ?
bmp_redx dd ? .bmp_colorspacetype dd ?
bmp_redy dd ? .bmp_redx dd ?
bmp_redz dd ? .bmp_redy dd ?
bmp_greenx dd ? .bmp_redz dd ?
bmp_greeny dd ? .bmp_greenx dd ?
bmp_greenz dd ? .bmp_greeny dd ?
bmp_bluex dd ? .bmp_greenz dd ?
bmp_bluey dd ? .bmp_bluex dd ?
bmp_bluez dd ? .bmp_bluey dd ?
bmp_gammared dd ? .bmp_bluez dd ?
bmp_gammagreen dd ? .bmp_gammared dd ?
bmp_gammeblue dd ? .bmp_gammagreen dd ?
ends bmp_file .bmp_gammeblue dd ?
.sizeof = $ - .bmp_filetype
}
;bmp_compression peut prendre les valeurs suivantes: ;.bmp_compression peut prendre les valeurs suivantes:
bmp_comp_uncomp equ 0 ; pas de compression bmp_comp_uncomp equ 0 ; pas de compression
bmp_comp_rle8 equ 1 ; 8-bit run length encoding bmp_comp_rle8 equ 1 ; 8-bit run length encoding
bmp_comp_rle4 equ 2 ; 4-bit tun length encoding bmp_comp_rle4 equ 2 ; 4-bit tun length encoding

View File

@ -2,6 +2,7 @@ struc point
{ {
.coordx db 0 .coordx db 0
.coordy db 0 .coordy db 0
.sizeof = $ - .coordx
} }
struc vgainf struc vgainf
@ -33,4 +34,5 @@ struc vertex2d
{ {
.px dw ? .px dw ?
.py dw ? .py dw ?
.sizeof = $ - .px
} }

View File

@ -15,7 +15,7 @@ struc regs
.sfs dw 0 .sfs dw 0
.sgs dw 0 .sgs dw 0
.sss dw 0 .sss dw 0
;.seflags dd 0 .seflags dd 0
;.sst0 dt 0 ;.sst0 dt 0
;;sst1 dt 0 ;;sst1 dt 0
;.sst2 dt 0 ;.sst2 dt 0
@ -37,6 +37,7 @@ struc vector off,seg
.data tuple off,seg .data tuple off,seg
virtual at .data virtual at .data
.content dd 0 .content dd 0
.sizeof = $ - .data
end virtual end virtual
} }

1174
lib/3d.asm

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,3 @@
model tiny,stdcall
p586N
locals
jumps
codeseg
option procalign:byte
include "..\include\mem.h" include "..\include\mem.h"
include "..\include\divers.h" include "..\include\divers.h"
include "..\include\bmp.h" include "..\include\bmp.h"
@ -12,7 +5,7 @@ include "..\include\bmp.h"
org 0h org 0h
start: start:
header exe <"CE",1,0,0,offset exports,offset imports,,> header exe 1
exporting exporting
declare showbmp declare showbmp
@ -28,45 +21,46 @@ endi
;<- DS:%0 BMP, %1 coordonnées X, %2 coordonnées Y ;<- DS:%0 BMP, %1 coordonnées X, %2 coordonnées Y
;-> ;->
;========================== ;==========================
PROC showbmp FAR proc showbmp uses ax bx cx dx si di, pointer:word, x:word, y:word
ARG @pointer:word, @x:word, @y:word mov si,[pointer]
USES ax,bx,cx,dx,si,di virtual at si
mov si,[@pointer] .bmp_file bmp_file
cmp [word ptr (bmp_file si).bmp_filetype],"MB" end virtual
jne @@errorshowing cmp word [.bmp_file.bmp_filetype],"MB"
mov edi,[(bmp_file si).bmp_bitmapoffset] jne .errorshowing
mov edi,[.bmp_file.bmp_bitmapoffset]
add di,400h add di,400h
add di,si add di,si
xor ebx,ebx xor ebx,ebx
mov ecx,[(bmp_file si).bmp_height] mov ecx,[.bmp_file.bmp_height]
mov edx,[(bmp_file si).bmp_width] mov edx,[.bmp_file.bmp_width]
;and dx,11111100b ;and dx,11111100b
cmp edx,[(bmp_file si).bmp_width] cmp edx,[.bmp_file.bmp_width]
;jae @@noadjust ;jae .noadjust
;add dx,4 ;add dx,4
@@noadjust: .noadjust:
sub edx,[(bmp_file si).bmp_width] sub edx,[.bmp_file.bmp_width]
@@bouclette: .bouclette:
push bx cx push bx cx
add bx,[@x] add bx,[x]
add cx,[@y] add cx,[y]
call [cs:showpixel],bx,cx,[word ptr di] invoke showpixel,bx,cx,word [di]
pop cx bx pop cx bx
inc bx inc bx
inc di inc di
cmp ebx,[(bmp_file si).bmp_width] cmp ebx,[.bmp_file.bmp_width]
jb @@bouclette jb .bouclette
xor bx,bx xor bx,bx
;add di,dx ;add di,dx
dec cx dec cx
cmp cx,0 cmp cx,0
jne @@bouclette jne .bouclette
clc clc
ret ret
@@errorshowing: .errorshowing:
stc stc
ret ret
ENDP showbmp endp
;==========LOADBMPPALET========= ;==========LOADBMPPALET=========
@ -74,14 +68,12 @@ ENDP showbmp
;-> DS:%0 BMP ;-> DS:%0 BMP
;<- ;<-
;=============================== ;===============================
PROC loadbmppalet FAR proc loadbmppalet uses ax bx cx dx si, pointer:word
ARG @pointer:word mov si,[pointer]
USES ax,bx,cx,dx,si
mov si,[@pointer]
mov bx,0400h+36h-4 mov bx,0400h+36h-4
mov cx,100h mov cx,100h
mov dx, 3c8h mov dx, 3c8h
@@paletteload: .paletteload:
mov al, cl mov al, cl
dec al dec al
out dx, al out dx, al
@ -98,8 +90,8 @@ PROC loadbmppalet FAR
sub bx,4 sub bx,4
dec dx dec dx
dec cl dec cl
jnz @@paletteload jnz .paletteload
ret ret
ENDP loadbmppalet endp

View File

@ -1,16 +1,9 @@
model tiny,stdcall
p586
locals
jumps
codeseg
option procalign:byte
include "..\include\mem.h" include "..\include\mem.h"
include "..\include\graphic.h" include "..\include\graphic.h"
org 0h org 0h
header exe <"CE",1,0,0,offset exports,offset imports,,> header exe 1
exporting exporting
declare hline declare hline
@ -22,103 +15,97 @@ importing
use VIDEO,showpixel use VIDEO,showpixel
endi endi
PROC hline FAR proc hline uses cx dx, x1:word,x2:word,y:word,color:word
ARG @x1:word,@x2:word,@y:word,@color:word mov cx,[x1]
USES cx,dx mov dx,[x2]
mov cx,[@x1]
mov dx,[@x2]
cmp cx,dx cmp cx,dx
jbe @@boucle jbe .boucle
xchg cx,dx xchg cx,dx
@@boucle: .boucle:
call [cs:showpixel],cx,[@y],[@color] invoke showpixel,cx,[y],[color]
inc cx inc cx
cmp cx,dx cmp cx,dx
jbe @@boucle jbe .boucle
ret ret
endp hline endp
; affiche un pixel en %0 %1 couleur %2 ; affiche un pixel en %0 %1 couleur %2
PROC line FAR proc line uses ax bx cx dx si di, x1:word,y1:word,x2:word,y2:word,color:word
ARG @x1:word,@y1:word,@x2:word,@y2:word,@color:word local deltax:WORD,deltay:WORD
USES ax,bx,cx,dx,si,di mov ax,[x2]
LOCAL @@deltax:word,@@deltay:word sub ax,[x1]
mov ax,[@x2]
sub ax,[@x1]
call absolute call absolute
mov [@@deltax],ax mov [deltax],ax
mov cx,ax mov cx,ax
mov ax,[@y2] mov ax,[y2]
sub ax,[@y1] sub ax,[y1]
call absolute call absolute
mov dx,ax mov dx,ax
mov [@@deltay],ax mov [deltay],ax
mov ax,-1 mov ax,-1
mov bx,-1 mov bx,-1
mov si,[@x1] mov si,[x1]
mov di,[@y1] mov di,[y1]
cmp si,[@x2] cmp si,[x2]
jg @@x1greater jg .x1greater
mov ax,1 mov ax,1
@@x1greater: .x1greater:
cmp di,[@y2] cmp di,[y2]
jg @@y1greater jg .y1greater
mov bx,1 mov bx,1
@@y1greater: .y1greater:
cmp cx,dx cmp cx,dx
jl @@deltaxgreater jl .deltaxgreater
mov dx,[@@deltax] mov dx,[deltax]
sar dx,1 sar dx,1
xor cx,cx xor cx,cx
@@boucle1: .boucle1:
add si,ax add si,ax
add dx,[@@deltay] add dx,[deltay]
cmp dx,[@@deltax] cmp dx,[deltax]
jl @@above1 jl .above1
sub dx,[@@deltax] sub dx,[deltax]
add di,bx add di,bx
@@above1: .above1:
call [cs:showpixel],si,di,[@color] invoke showpixel,si,di,[color]
inc cx inc cx
cmp cx,[@@deltax] cmp cx,[deltax]
jl @@boucle1 jl .boucle1
jmp @@endofline jmp .endofline
@@deltaxgreater: .deltaxgreater:
mov dx,[@@deltay] mov dx,[deltay]
sar dx,1 sar dx,1
xor cx,cx xor cx,cx
@@boucle2: .boucle2:
add di,bx add di,bx
add dx,[@@deltax] add dx,[deltax]
cmp dx,[@@deltay] cmp dx,[deltay]
jle @@above2 jle .above2
sub dx,[@@deltay] sub dx,[deltay]
add si,ax add si,ax
@@above2: .above2:
call [cs:showpixel],si,di,[@color] invoke showpixel,si,di,[color]
inc cx inc cx
cmp cx,[@@deltay] cmp cx,[deltay]
jl @@boucle2 jl .boucle2
@@endofline: .endofline:
ret ret
endp line endp
;renvoie la valeur absolue de AX ;renvoie la valeur absolue de AX
PROC absolute NEAR proc absolute
cmp ax,0 cmp ax,0
jg @@noabs jg .noabs
neg ax neg ax
@@noabs: .noabs:
ret ret
endp absolute endp
ymax equ 200 ymax equ 200
; initialise un segment 2 ; initialise un segment 2
PROC polyfill FAR proc polyfill uses eax ebx ecx edx si di es, pointer:word,nbfaces:word,color:word;
ARG @pointer:word,@nbfaces:word,@color:word; local startx[200]:WORD,endx[200]:WORD,pas:DWORD,miny:WORD,maxy:WORD
LOCAL @@startx:word:200,@@endx:word:200,@@pas:dword,@@miny:word,@@maxy:word
USES eax,ebx,ecx,edx,si,di,es
mov di,bp mov di,bp
sub di,2 sub di,2
mov ax,16000 mov ax,16000
@ -127,104 +114,113 @@ PROC polyfill FAR
pop es pop es
std std
rep stosw rep stosw
mov si,[@pointer] mov si,[pointer]
mov di,[@pointer] mov di,[pointer]
add di,size vertex2d virtual at 0
mov [@@miny],ymax .vertex2d vertex2d
mov [@@maxy],0 end virtual
mov cx,[@nbfaces] add di,.vertex2d.sizeof
mov [miny],ymax
mov [maxy],0
mov cx,[nbfaces]
dec cx dec cx
@@boucle: .boucle:
push si di cx push si di cx
mov ax,[(vertex2d di).py] virtual at si
cmp ax,[(vertex2d si).py] .vertex2dsrc vertex2d
je @@noexchange end virtual
jge @@nothingtodo virtual at di
.vertex2ddst vertex2d
end virtual
mov ax,[.vertex2ddst.py]
cmp ax,[.vertex2dsrc.py]
je .noexchange
jge .nothingtodo
xchg si,di xchg si,di
@@nothingtodo: .nothingtodo:
xor eax,eax xor eax,eax
mov ax,[(vertex2d si).px] mov ax,[.vertex2dsrc.px]
cwde cwde
sal eax,8 sal eax,8
mov ebx,eax mov ebx,eax
xor eax,eax xor eax,eax
mov ax,[(vertex2d di).px] mov ax,[.vertex2ddst.px]
sub ax,[(vertex2d si).px] sub ax,[.vertex2dsrc.px]
cwde cwde
sal eax,8 sal eax,8
xor ecx,ecx xor ecx,ecx
mov cx,[(vertex2d di).py] mov cx,[.vertex2ddst.py]
sub cx,[(vertex2d si).py] sub cx,[.vertex2dsrc.py]
cdq cdq
idiv ecx idiv ecx
mov [@@pas],eax mov [pas],eax
add ebx,eax add ebx,eax
mov dx,[(vertex2d si).py] mov dx,[.vertex2dsrc.py]
inc dx inc dx
cmp dx,[@@miny] cmp dx,[miny]
jge @@notinf jge .notinf
mov [@@miny],dx mov [miny],dx
@@notinf: .notinf:
mov ax,[(vertex2d di).py] mov ax,[.vertex2ddst.py]
cmp ax,[@@maxy] cmp ax,[maxy]
jle @@boucle2 jle .boucle2
mov [@@maxy],ax mov [maxy],ax
@@boucle2: .boucle2:
cmp dx,0 cmp dx,0
jl @@notgood jl .notgood
cmp dx,ymax cmp dx,ymax
jge @@notgood jge .notgood
mov si,dx mov si,dx
shl si,1 shl si,1
neg si neg si
cmp [word ptr bp+si-2],16000 cmp word [bp+si-2],16000
jne @@notgoodforinf jne .notgoodforinf
mov eax,ebx mov eax,ebx
sar eax,8 sar eax,8
mov [bp+si-2],ax mov [bp+si-2],ax
@@notgoodforinf: .notgoodforinf:
mov eax,ebx mov eax,ebx
sar eax,8 sar eax,8
mov [bp+si-200*2-2],ax mov [bp+si-200*2-2],ax
@@notgood: .notgood:
add ebx,[@@pas] add ebx,[pas]
inc dx inc dx
cmp dx,[(vertex2d di).py] cmp dx,[.vertex2ddst.py]
jle @@boucle2 jle .boucle2
@@noexchange: .noexchange:
pop cx di si pop cx di si
add si,size vertex2d add si,.vertex2d.sizeof
add di,size vertex2d add di,.vertex2d.sizeof
dec cx dec cx
js @@finished js .finished
jnz @@boucle jnz .boucle
mov di,[@pointer] mov di,[pointer]
mov cx,0FFFFh mov cx,0FFFFh
jmp @@boucle jmp .boucle
@@finished: .finished:
cmp [word ptr @@miny],0 cmp word [miny],0
jae @@noadj jae .noadj
mov [@@miny],0 mov [miny],0
@@noadj: .noadj:
cmp [word ptr @@maxy],ymax cmp word [maxy],ymax
jb @@noadj2 jb .noadj2
mov [@@maxy],ymax-1 mov [maxy],ymax-1
@@noadj2: .noadj2:
mov cx,[@@miny] mov cx,[miny]
@@drawboucle: .drawboucle:
mov si,cx mov si,cx
shl si,1 shl si,1
neg si neg si
mov ax,[bp+si-2] mov ax,[bp+si-2]
mov bx,[bp+si-200*2-2] mov bx,[bp+si-200*2-2]
cmp bx,16000 cmp bx,16000
jnz @@noinfatall jnz .noinfatall
mov ax,bx mov ax,bx
@@noinfatall: .noinfatall:
call hline,ax,bx,cx,[@color] stdcall hline,ax,bx,cx,[color]
inc cx inc cx
cmp cx,[@@maxy] cmp cx,[maxy]
jna @@drawboucle jna .drawboucle
ret ret
endp polyfill endp

View File

@ -1,17 +1,10 @@
model tiny,stdcall
p586N
locals
jumps
codeseg
option procalign:byte
include "..\include\mem.h" include "..\include\mem.h"
include "..\include\divers.h" include "..\include\divers.h"
org 0h org 0h
start: start:
header exe <"CE",1,0,0,offset exports,,,> header exe 1
waitkey: waitkey:
mov ax,0 mov ax,0
@ -19,6 +12,5 @@ waitkey:
retf retf
exporting exporting
declare waitkey declare waitkey
ende ende

View File

@ -1,20 +1,14 @@
asm= lzasm /z/t ASM=fasm
lnk= elink CLEAN=rm -rf
OBJS= $(SRCS:.c=.o)
SRC= $(wildcard *.asm)
LIB= $(SRC:.asm=.lib)
all: detect.lib video.lib str0.lib bmp.lib graphic.lib 3d.lib math.lib all: $(LIB)
sync
.asm.obj: %.lib: %.asm
$(asm) $< $(ASM) $^ $@
.obj.lib:
$(lnk) $< $*.lib
clean: clean:
del *.obj $(CLEAN) *.lib
del *.ce
del *.bak
del *.lib
del *.com
del *.bin
del *.sys
del *.err

View File

@ -1,38 +0,0 @@
model tiny,stdcall
p586
locals
jumps
codeseg
option procalign:byte
include "..\include\mem.h"
org 0h
header exe <"CE",1,0,0,offset exports,,,>
exporting
declare random
declare randomize
ende
randseed dw 1234h
PROC random FAR
USES dx
mov ax,[cs:randseed]
mov dx,8405h
mul dx
inc ax
mov [cs:randseed],ax
mov ax,dx
ret
endp random
PROC randomize FAR
USES ax,cx,dx
mov ah,0
int 1ah
mov [cs:randseed],dx
ret
endp randomize

File diff suppressed because it is too large Load Diff

View File

@ -110,11 +110,11 @@ proc print pointer:word
add di,2 add di,2
jmp .strinaize0 jmp .strinaize0
.showmultchar: .showmultchar:
mov cx,[.pointer+di+2+2] mov cx,[pointer+di+2+2]
cmp cx,0 cmp cx,0
je .nextfunc je .nextfunc
.showcharsx: .showcharsx:
invoke showchars,word [.pointer+di+2],0FFFFh invoke showchars,word [pointer+di+2],0FFFFh
dec cx dec cx
jnz .showcharsx jnz .showcharsx
.nextfunc: .nextfunc:
@ -123,19 +123,19 @@ proc print pointer:word
jmp .strinaize0 jmp .strinaize0
.showint: .showint:
stdcall showint,dword [.pointer+di+2] stdcall showint,dword [pointer+di+2]
add si,2 add si,2
add di,4 add di,4
jmp .strinaize0 jmp .strinaize0
.showfixint: .showfixint:
stdcall showintl,word [.pointer+di+6],[dword ptr .pointer+di+2] stdcall showintl,word [pointer+di+6],dword [pointer+di+2]
add di,6 add di,6
add si,2 add si,2
jmp .strinaize0 jmp .strinaize0
.showintr: .showintr:
stdcall showintr,word [.pointer+di+6],dword [.pointer+di+2] stdcall showintr,word [pointer+di+6],dword [pointer+di+2]
add di,6 add di,6
add si,2 add si,2
jmp .strinaize0 jmp .strinaize0
@ -156,32 +156,32 @@ proc print pointer:word
jmp .strinaize0 jmp .strinaize0
.showstring: .showstring:
cmp [byte ptr si+2],'P' cmp byte [si+2],'P'
je .showstring.pointer je .showstring.pointer
stdcall showstring,[word ptr .pointer+di+2] stdcall showstring,word [pointer+di+2]
add si,2 add si,2
add di,2 add di,2
jmp .strinaize0 jmp .strinaize0
.showstring.pointer: .showstring.pointer:
push ds push ds
mov ds,[offset .pointer+di+2+2] mov ds,[pointer+di+2+2]
stdcall showstring,[word ptr .pointer+di+2] stdcall showstring,word [pointer+di+2]
add si,3 add si,3
add di,4 add di,4
pop ds pop ds
jmp .strinaize0 jmp .strinaize0
.showstring0: .showstring0:
cmp [byte ptr si+2],'P' cmp byte [si+2],'P'
je .showstring0.pointer je .showstring0.pointer
stdcall showstring0,[word ptr offset .pointer+di+2] stdcall showstring0,word [pointer+di+2]
add si,2 add si,2
add di,2 add di,2
jmp .strinaize0 jmp .strinaize0
.showstring0.pointer: .showstring0.pointer:
push ds push ds
mov ds,[offset .pointer+di+2+2] mov ds,[pointer+di+2+2]
stdcall showstring0,[word ptr offset .pointer+di+2] stdcall showstring0,word [pointer+di+2]
add si,3 add si,3
add di,4 add di,4
pop ds pop ds
@ -193,44 +193,44 @@ proc print pointer:word
jmp .strinaize0 jmp .strinaize0
.showsize: .showsize:
stdcall showsize,[dword ptr offset .pointer+di+2] stdcall showsize,dword [pointer+di+2]
add si,2 add si,2
add di,4 add di,4
jmp .strinaize0 jmp .strinaize0
.showattr: .showattr:
stdcall showattr,[word ptr offset .pointer+di+2] stdcall showattr,word [pointer+di+2]
add si,2 add si,2
add di,2 add di,2
jmp .strinaize0 jmp .strinaize0
.showname: .showname:
stdcall showname,[word ptr offset .pointer+di+2] stdcall showname,word [pointer+di+2]
add si,2 add si,2
add di,2 add di,2
jmp .strinaize0 jmp .strinaize0
.showtime: .showtime:
stdcall showtime,[word ptr offset .pointer+di+2] stdcall showtime,word [pointer+di+2]
add si,2 add si,2
add di,2 add di,2
jmp .strinaize0 jmp .strinaize0
.showdate: .showdate:
stdcall showdate,[word ptr offset .pointer+di+2] stdcall showdate,word [pointer+di+2]
add si,2 add si,2
add di,2 add di,2
jmp .strinaize0 jmp .strinaize0
.Chosesize: .Chosesize:
pop cx pop cx
push [dword ptr offset .pointer+di+2] push dword [pointer+di+2]
add di,4 add di,4
cmp [byte ptr si+2],'B' cmp byte [si+2],'B'
je .byte je .byte
cmp [byte ptr si+2],'W' cmp byte [si+2],'W'
je .word je .word
cmp [byte ptr si+2],'D' cmp byte [si+2],'D'
je .dword je .dword
dec si dec si
@ -238,27 +238,27 @@ proc print pointer:word
push 16 push 16
add si,3 add si,3
push cx push cx
retfn ret
.byte: .byte:
push 8 push 8
add si,3 add si,3
push cx push cx
retfn ret
.dword: .dword:
push 32 push 32
add si,3 add si,3
push cx push cx
retfn ret
.special2: .special2:
cmp [byte ptr si+1],'\' cmp byte [si+1],'\'
jne .notshowit2 jne .notshowit2
inc si inc si
jmp .showit jmp .showit
.notshowit2: .notshowit2:
mov cl,[byte ptr si+1] mov cl,byte [si+1]
cmp cl,'l' cmp cl,'l'
je .showline je .showline
cmp cl,'g' cmp cl,'g'
@ -465,7 +465,7 @@ proc showname uses cx si, thename:word
mov si,[thename] mov si,[thename]
xor cx,cx xor cx,cx
.showthename: .showthename:
invoke showchars,[word ptr ds:si],0FFFFh invoke showchars,word [ds:si],0FFFFh
inc si inc si
inc cx inc cx
cmp cx,8 cmp cx,8
@ -547,22 +547,22 @@ proc showsize uses edx ds, thesize:dword
cmp edx,1024*9 cmp edx,1024*9
ja .kilo ja .kilo
stdcall showintr,4,edx stdcall showintr,4,edx
stdcall showstring0,offset unit stdcall showstring0,unit
jmp .finsize jmp .finsize
.kilo: .kilo:
shr edx,10 shr edx,10
stdcall showintr,4,edx stdcall showintr,4,edx
stdcall showstring0,offset unitkilo stdcall showstring0,unitkilo
jmp .finsize jmp .finsize
.mega: .mega:
shr edx,20 shr edx,20
stdcall showintr,4,edx stdcall showintr,4,edx
stdcall showstring0,offset unitmega stdcall showstring0,unitmega
jmp .finsize jmp .finsize
.giga: .giga:
shr edx,30 shr edx,30
stdcall showintr,4,edx stdcall showintr,4,edx
stdcall showstring0,offset unitgiga stdcall showstring0,unitgiga
.finsize: .finsize:
retf retf
@ -590,11 +590,11 @@ endp
;<- ;<-
;============================ ;============================
proc showint uses eax bx cx edx esi, integer:dword proc showint uses eax bx cx edx esi, integer:dword
local showbuffer db 50 dup (0FFh) local showbuffer[50]:BYTE
xor cx,cx xor cx,cx
mov eax,[integer] mov eax,[integer]
mov esi,10 mov esi,10
mov bx,offset showbuffer+27 lea bx,[showbuffer+27]
.decint: .decint:
xor edx,edx xor edx,edx
div esi div esi
@ -619,12 +619,13 @@ endp
;-> %0 un entier % taille en caracteres ;-> %0 un entier % taille en caracteres
;<- ;<-
;=============================== ;===============================
proc showintl eax bx cx edx esi di, sizeofint:word,integer:dword proc showintl uses eax bx cx edx esi di, sizeofint:word,integer:dword
local showbuffer[50]:BYTE
mov di,[sizeofint] mov di,[sizeofint]
xor cx,cx xor cx,cx
mov eax,[integer] mov eax,[integer]
mov esi,10 mov esi,10
mov bx,offset showbuffer+27 lea bx,[showbuffer+27]
.decint: .decint:
xor edx,edx xor edx,edx
div esi div esi
@ -640,7 +641,7 @@ proc showintl eax bx cx edx esi di, sizeofint:word,integer:dword
xchg cx,di xchg cx,di
sub cx,di sub cx,di
.rego: .rego:
mov [byte ptr cs:bx],'0' mov byte [cs:bx],'0'
dec bx dec bx
dec cx dec cx
jnz .rego jnz .rego
@ -663,11 +664,12 @@ endp
;<- ;<-
;=============================== ;===============================
proc showintr uses eax bx cx edx esi di, sizeofint:word,integer:dword proc showintr uses eax bx cx edx esi di, sizeofint:word,integer:dword
local showbuffer[50]:BYTE
mov di,[sizeofint] mov di,[sizeofint]
xor cx,cx xor cx,cx
mov eax,[integer] mov eax,[integer]
mov esi,10 mov esi,10
mov bx,offset showbuffer+27 lea bx,[showbuffer+27]
.decint: .decint:
xor edx,edx xor edx,edx
div esi div esi
@ -683,7 +685,7 @@ proc showintr uses eax bx cx edx esi di, sizeofint:word,integer:dword
xchg cx,di xchg cx,di
sub cx,di sub cx,di
.rego: .rego:
mov [byte ptr cs:bx],' ' mov byte [cs:bx],' '
dec bx dec bx
dec cx dec cx
jnz .rego jnz .rego
@ -705,7 +707,7 @@ endp
;-> %0 un entier, %1 la taille ;-> %0 un entier, %1 la taille
;<- ;<-
;=============================== ;===============================
proc showsigned ebx cx edx, sizeofint:word,integer:dword proc showsigned uses ebx cx edx, sizeofint:word,integer:dword
mov ebx,[integer] mov ebx,[integer]
mov cx,[sizeofint] mov cx,[sizeofint]
xor edx,edx xor edx,edx
@ -741,7 +743,7 @@ endp
;-> %0 un entier, %1 la taille ;-> %0 un entier, %1 la taille
;<- ;<-
;============================ ;============================
proc showhex ax bx cx edx, sizeofint:word,integer:dword proc showhex uses ax bx cx edx, sizeofint:word,integer:dword
mov edx,[integer] mov edx,[integer]
mov cx,[sizeofint] mov cx,[sizeofint]
mov ax,cx mov ax,cx
@ -753,7 +755,7 @@ proc showhex ax bx cx edx, sizeofint:word,integer:dword
rol edx,4 rol edx,4
mov bx,dx mov bx,dx
and bx,0fh and bx,0fh
mov cl,[cs:bx+offset Tab] mov cl,[cs:bx+Tab]
invoke showchars,cx,0FFFFh invoke showchars,cx,0FFFFh
dec al dec al
jnz .Hexaize jnz .Hexaize
@ -767,7 +769,7 @@ endp
;-> %0 un entier, %1 la taille ;-> %0 un entier, %1 la taille
;<- ;<-
;============================ ;============================
proc showbin ax cx edx, sizeofint:word,integer:dword proc showbin uses ax cx edx, sizeofint:word,integer:dword
mov edx,[integer] mov edx,[integer]
mov cx,[sizeofint] mov cx,[sizeofint]
sub cx,32 sub cx,32
@ -789,7 +791,7 @@ endp
;-> %0 un entier, %1 la taille ;-> %0 un entier, %1 la taille
;<- ;<-
;============================ ;============================
proc showbcd ax cx edx, sizeofint:word,integer:dword proc showbcd uses ax cx edx, sizeofint:word,integer:dword
mov edx,[integer] mov edx,[integer]
mov ax,[sizeofint] mov ax,[sizeofint]
mov cx,ax mov cx,ax
@ -813,12 +815,12 @@ endp
;-> ds:%1 pointeur chaine type pascal ;-> ds:%1 pointeur chaine type pascal
;<- ;<-
;=============================== ;===============================
proc showstring bx si, pointer:word proc showstring uses bx si, pointer:word
mov si,[pointer] mov si,[pointer]
mov bl,[si] mov bl,[si]
.strinaize: .strinaize:
inc si inc si
invoke showchars,[word ptr si],0FFFFh invoke showchars,word [si],0FFFFh
dec bl dec bl
jnz .strinaize jnz .strinaize
retf retf

View File

@ -1,11 +1,12 @@
all: boot/boot12.bin lib/3d.lib noyau/systeme.sys commande.ce all: boot/boot12.bin lib/3d.lib noyau/systeme.sys programs/commande.ce
sync sync
install: install:
(sudo apt-get install yasm qemu fusefat cgdb) (sudo apt-get install fasm qemu fusefat cgdb)
clean: clean:
make -C final clean make -C final clean
make -C boot clean
make -C lib clean make -C lib clean
make -C noyau clean make -C noyau clean
make -C programs clean make -C programs clean
@ -45,3 +46,7 @@ boot/boot12.bin:
lib/3d.lib: lib/3d.lib:
make -C lib make -C lib
programs/commande.ce:
make -C programs

View File

@ -29,7 +29,7 @@ IRR = 0Ah ; Pas d'operation, pas de Poll, lire IRR
;Autorise une interruption electronique ;Autorise une interruption electronique
;Entree : %1 - Numero de l'interruption (0-15) à autoriser 0-7 = MASTERPIC , 8-15 = SLAVEPIC ;Entree : %1 - Numero de l'interruption (0-15) à autoriser 0-7 = MASTERPIC , 8-15 = SLAVEPIC
proc enableirq, irq proc enableirq uses ax cx dx, irq:word
mov ax,[irq] mov ax,[irq]
mov dx,MASTERPIC+IRQMASK mov dx,MASTERPIC+IRQMASK
cmp al,7 cmp al,7
@ -50,7 +50,7 @@ endp
;Desactive une interruption lectronique ;Desactive une interruption lectronique
;Entre : %0 - Numro de l'interruption (0-15) … desactiver 0-7 = MASTERPIC , 8-15 = SLAVEPIC ;Entre : %0 - Numro de l'interruption (0-15) … desactiver 0-7 = MASTERPIC , 8-15 = SLAVEPIC
proc disableirq, irq proc disableirq uses ax cx dx, irq:word
mov ax,[irq] mov ax,[irq]
mov dx,MASTERPIC+IRQMASK mov dx,MASTERPIC+IRQMASK
cmp al,7 cmp al,7
@ -71,7 +71,7 @@ endp
;Signale "End Of Interrupt" de l'interruption %0 ;Signale "End Of Interrupt" de l'interruption %0
proc seteoi, irq proc seteoi uses ax dx, irq:word
mov ax,[irq] mov ax,[irq]
cmp al,7 cmp al,7
jbe .master jbe .master
@ -85,7 +85,7 @@ endp
;Lit les masques d'un contr“leur IRQ dans ax, 0 master ou slave 1 ds %1 ;Lit les masques d'un contr“leur IRQ dans ax, 0 master ou slave 1 ds %1
proc readimr, controleurx proc readimr uses bx dx, controleur:word
mov bx,[controleur] mov bx,[controleur]
mov dx,MASTERPIC+ IRQMASK mov dx,MASTERPIC+ IRQMASK
cmp bl,0 cmp bl,0
@ -99,7 +99,7 @@ proc readimr, controleurx
endp endp
;Lit le registre d'tat d'un contr“leur IRQ dans ax, 0 master ou slave 1 ds %1 ;Lit le registre d'tat d'un contr“leur IRQ dans ax, 0 master ou slave 1 ds %1
proc readisr, controleur proc readisr uses bx dx, controleur:word
mov bx,[controleur] mov bx,[controleur]
mov dx,MASTERPIC mov dx,MASTERPIC
cmp bh,0 cmp bh,0
@ -115,7 +115,7 @@ endp
;Lit le registre d'tat d'un contr“leur IRQ dans al, 0 master ou slave 1 ds bh ;Lit le registre d'tat d'un contr“leur IRQ dans al, 0 master ou slave 1 ds bh
proc readirr, controleur proc readirr uses bx dx, controleur:word
mov bx,[controleur] mov bx,[controleur]
mov dx,MASTERPIC mov dx,MASTERPIC
cmp bh,0 cmp bh,0
@ -130,7 +130,7 @@ proc readirr, controleur
endp endp
;carry si enable et pas carry si pas enable ;carry si enable et pas carry si pas enable
proc isenableirq, irq proc isenableirq uses ax cx dx, irq:word
mov ax,[irq] mov ax,[irq]
mov dx,MASTERPIC+IRQMASK mov dx,MASTERPIC+IRQMASK
cmp al,7 cmp al,7
@ -147,7 +147,7 @@ endp
;carry si enable et pas carry si pas enable ;carry si enable et pas carry si pas enable
proc isinserviceirq, irq proc isinserviceirq uses ax cx dx, irq:word
mov ax,[irq] mov ax,[irq]
mov dx,MASTERPIC mov dx,MASTERPIC
cmp al,7 cmp al,7
@ -166,7 +166,7 @@ endp
;carry si enable et pas carry si pas enable ;carry si enable et pas carry si pas enable
proc isrequestirq, irq proc isrequestirq uses ax cx dx, irq:word
mov ax,[irq] mov ax,[irq]
mov dx,MASTERPIC mov dx,MASTERPIC
cmp al,7 cmp al,7
@ -184,62 +184,74 @@ proc isrequestirq, irq
endp endp
proc installirqhandler proc installirqhandler uses eax bx cx edx si di ds es
push fs push fs
stdcall mbcreate,interruptionbloc,256*ints.sizeof virtual at 0
.intsori ints
end virtual
stdcall mbcreate,interruptionbloc,256*.intsori.sizeof
mov es,ax mov es,ax
mov ax,0x0000 mov ax,0x0000
mov ds,ax mov ds,ax
xor si,si xor si,si
.searchdummypointer: .searchdummypointer:
mov fs,[si+vector.data.seg] virtual at si
mov bx,[si+vector.data.off] .vector vector
end virtual
virtual at 0
.vectorori vector
end virtual
mov fs,[.vector.data.seg]
mov bx,[.vector.data.off]
cmp byte [fs:bx],0xCF ;iret cmp byte [fs:bx],0xCF ;iret
je .founded je .founded
add si,vector.sizeof add si,.vectorori.sizeof
cmp si,256*4 cmp si,256*4
jb .searchdummypointer jb .searchdummypointer
xor edx,edx xor edx,edx
jmp .suite jmp .suite
.founded: .founded:
mov edx,[si+vector.content] mov edx,[.vector.content]
.suite: .suite:
xor cx,cx xor cx,cx
xor si,si xor si,si
xor di,di xor di,di
cli cli
.copy: .copy:
mov [es:di+ints.number],cl virtual at di
mov [es:di+ints.locked],0 .ints ints
mov [es:di+ints.vector1.content],0 end virtual
mov [es:di+ints.vector3.content],0 mov [es:.ints.number],cl
mov [es:di+ints.vector4.content],0 mov [es:.ints.locked],0
mov [es:di+ints.vector5.content],0 mov [es:.ints.vector1.content],0
mov [es:di+ints.vector6.content],0 mov [es:.ints.vector3.content],0
mov [es:di+ints.vector7.content],0 mov [es:.ints.vector4.content],0
mov [es:di+ints.vector8.content],0 mov [es:.ints.vector5.content],0
mov [es:di+ints.launchedlow],0 mov [es:.ints.vector6.content],0
mov [es:di+ints.launchedhigh],0 mov [es:.ints.vector7.content],0
mov [es:di+ints.calledlow],0 mov [es:.ints.vector8.content],0
mov [es:di+ints.calledhigh],0 mov [es:.ints.launchedlow],0
mov eax,[si+vector.ints.content] mov [es:.ints.launchedhigh],0
mov [es:.ints.calledlow],0
mov [es:.ints.calledhigh],0
mov eax,[.vector.content]
cmp eax,edx cmp eax,edx
je .notarealvector je .notarealvector
mov [es:di+ints.vector1.content],eax mov [es:.ints.vector1.content],eax
mov [es:di+ints.activated],1 mov [es:.ints.activated],1
jmp .copynext jmp .copynext
.notarealvector: .notarealvector:
mov [es:di+ints.vector1.content],0 mov [es:.ints.vector1.content],0
mov [es:di+ints.activated],0 mov [es:.ints.activated],0
.copynext: .copynext:
mov bx,cx mov bx,cx
shl bx,3 shl bx,3
sub bx,cx sub bx,cx
add bx,coupling add bx,coupling
mov [si+vector.data.seg],cs mov [.vector.data.seg],cs
mov [si+vector.data.off],bx mov [.vector.data.off],bx
add si,vector.sizeof add si,.vectorori.sizeof
add di,ints.sizeof add di,.intsori.sizeof
inc cl inc cl
cmp cl,0 cmp cl,0
jne .copy jne .copy
@ -253,7 +265,7 @@ endp
interruptionbloc db '/interrupts',0 interruptionbloc db '/interrupts',0
proc savecontext, pointer proc savecontext uses eax si ds, pointer:word
pushfd pushfd
push eax push eax
push ebx push ebx
@ -278,39 +290,45 @@ push eax
mov ax,bp mov ax,bp
add ax,4 add ax,4
push eax push eax
pop [si+regs.sesp] virtual at si
pop [si+regs.seip] .regs regs
pop [si+regs.scs] end virtual
pop [si+regs.sebp] pop [.regs.sesp]
pop [si+regs.sss] pop [.regs.seip]
pop [si+regs.sgs] pop [.regs.scs]
pop [si+regs.sfs] pop [.regs.sebp]
pop [si+regs.ses] pop [.regs.sss]
pop [si+regs.sds] pop [.regs.sgs]
pop [si+regs.sedi] pop [.regs.sfs]
pop [si+regs.sesi] pop [.regs.ses]
pop [si+regs.sedx] pop [.regs.sds]
pop [si+regs.secx] pop [.regs.sedi]
pop [si+regs.sebx] pop [.regs.sesi]
pop [si+regs.seax] pop [.regs.sedx]
pop [si+regs.seflags] pop [.regs.secx]
pop [.regs.sebx]
pop [.regs.seax]
pop [.regs.seflags]
retf retf
endp endp
proc restorecontextg, pointer proc restorecontextg, pointer:word
mov si,[pointer] mov si,[pointer]
pushd [cs:si+regs.sesi] virtual at si
pushd [cs:si+regs.seflags] .regs regs
mov eax,[cs:si+regs.seax] end virtual
mov ebx,[cs:si+regs.sebx] pushd [cs:.regs.sesi]
mov ecx,[cs:si+regs.secx] pushd [cs:.regs.seflags]
mov edx,[cs:si+regs.sedx] mov eax,[cs:.regs.seax]
mov edi,[cs:si+regs.sedi] mov ebx,[cs:.regs.sebx]
mov ebp,[cs:si+regs.sebp] mov ecx,[cs:.regs.secx]
mov es,[cs:si+regs.ses] mov edx,[cs:.regs.sedx]
mov fs,[cs:si+regs.sfs] mov edi,[cs:.regs.sedi]
mov gs,[cs:si+regs.sgs] mov ebp,[cs:.regs.sebp]
mov ds,[cs:si+regs.sds] mov es,[cs:.regs.ses]
mov fs,[cs:.regs.sfs]
mov gs,[cs:.regs.sgs]
mov ds,[cs:.regs.sds]
popfd popfd
pop esi pop esi
pop [cs:dummy] pop [cs:dummy]
@ -322,7 +340,7 @@ endp
coupling: coupling:
repeat 256 repeat 256
push %+256 push %+256
push offset irqhandlers push irqhandlers
ret ret
end repeat end repeat
@ -334,48 +352,60 @@ function_reg regs
irqhandlers: irqhandlers:
cli cli
pop [cs:interrupt] pop [cs:interrupt]
stdcall savecontext,offset calling_reg stdcall savecontext,calling_reg
stdcall irqhandler,[cs:interrupt] stdcall irqhandler,[cs:interrupt]
stdcall restorecontextg,offset calling_reg stdcall restorecontextg,calling_reg
sti sti
iret iret
proc irqhandler, int proc irqhandler, int:word
push cs push cs
pop ds pop ds
stdcall mbfindsb,offset interruptionbloc,cs stdcall mbfindsb,interruptionbloc,cs
jc .end jc .end
mov es,ax mov es,ax
mov ax,[int] mov ax,[int]
sub ax,256 sub ax,256
mov cx,ints.sizeof virtual at 0
.intsorig ints
end virtual
mov cx,.intsorig.sizeof
mul cx mul cx
mov si,ax mov si,ax
add [es:si+ints.calledlow],1 virtual at si
adc [es:si+ints.calledhigh],0 .ints ints
cmp [es:si+ints.activated],1 end virtual
add [es:.ints.calledlow],1
adc [es:.ints.calledhigh],0
cmp [es:.ints.activated],1
jne .end jne .end
add [es:si+ints.launchedlow],1 add [es:.ints.launchedlow],1
adc [es:si+ints.launchedhigh],0 adc [es:.ints.launchedhigh],0
lea si,[es:si+ints.vector1] lea si,[es:.ints.vector1]
mov cl,8 mov cl,8
.launchall: .launchall:
cmp [es:si+vector.content],0 virtual at si
.vector vector
end virtual
virtual at 0
.vectorori vector
end virtual
cmp [es:.vector.content],0
je .end je .end
push word [cs:calling_reg.seflags] push word [cs:calling_reg.seflags]
push cs push cs
push offset .back push .back
push [es:si+vector.data.seg] push [es:.vector.data.seg]
push [es:si+vector.data.off] push [es:.vector.data.off]
stdcall savecontext,offset function_reg stdcall savecontext,function_reg
stdcall restorecontextg,offset calling_reg stdcall restorecontextg,calling_reg
db 0xCB db 0xCB
.back: .back:
cli cli
stdcall savecontext,offset calling_reg stdcall savecontext,calling_reg
stdcall restorecontextg,offset function_reg stdcall restorecontextg,function_reg
.next: .next:
add si,vector.sizeof add si,.vectorori.sizeof
dec cl dec cl
jnz .launchall jnz .launchall
.end: .end:

View File

@ -1,16 +1,17 @@
ASM=fasm ASM=fasm
CLEAN=rm -rf CLEAN=rm -rf
all: systeme.sys disque.sys video.sys all: disque.sys video.sys systeme.sys
sync
systeme.sys: systeme.asm systeme.sys: systeme.asm
$(ASM) $^ $(ASM) $^ $@
disque.sys: disque.asm disque.sys: disque.asm
$(ASM) $^ $(ASM) $^ $@
video.sys: video.asm video.sys: video.asm
$(ASM) $^ $(ASM) $^ $@
clean: clean:
$(CLEAN) *.sys $(CLEAN) *.sys

View File

@ -1,6 +1,6 @@
;Affiche le nombre hexa dans %0[dword] ;Affiche le nombre hexa dans %0[dword]
proc biosprinth, num:dword proc biosprinth uses ax bx cx edx si di, num:dword
mov edx,[num] mov edx,[num]
mov ah,09h mov ah,09h
mov di,8 mov di,8
@ -25,7 +25,7 @@ proc biosprinth, num:dword
endp endp
;Affiche le texte ASCIIZ pointé par %0 ;Affiche le texte ASCIIZ pointé par %0
proc biosprint, pointer proc biosprint uses ax bx cx si, pointer:word
mov si,[pointer] mov si,[pointer]
mov cx,1 mov cx,1
mov bx,7 mov bx,7
@ -45,7 +45,7 @@ proc biosprint, pointer
retf retf
endp endp
proc enablea20 proc enablea20 uses ax
mov al,0d1h mov al,0d1h
out 64h,al out 64h,al
call a20wait call a20wait
@ -58,7 +58,7 @@ proc enablea20
retf retf
endp endp
proc disablea20 proc disablea20 uses ax
mov al,0d1h mov al,0d1h
out 64h,al out 64h,al
call a20wait call a20wait
@ -88,7 +88,7 @@ a20wait:
;and al,not 2 ;and al,not 2
;out 92h,al ;out 92h,al
proc flatmode proc flatmode uses eax bx ds
push cs push cs
pop ds pop ds
; first, calculate the linear address of GDT ; first, calculate the linear address of GDT
@ -98,7 +98,10 @@ proc flatmode
add dword [.gdt+2],eax ; store as GDT linear base addr add dword [.gdt+2],eax ; store as GDT linear base addr
; now load the GDT into the GDTR ; now load the GDT into the GDTR
lgdt fword [.gdt] ; load GDT base lgdt fword [.gdt] ; load GDT base
mov bx,1 * descriptor.sizeof ; point to first descriptor virtual at 0
.descriptor descriptor
end virtual
mov bx,1 * .descriptor.sizeof ; point to first descriptor
cli ; turn off interrupts cli ; turn off interrupts
mov eax,cr0 ; prepare to enter protected mode mov eax,cr0 ; prepare to enter protected mode
or al,1 ; flip the PE bit or al,1 ; flip the PE bit
@ -120,7 +123,7 @@ gdtdata descriptor 0ffffh, 0, 0, 091h, 0cfh, 0 ; 4G data segment
endp endp
;Attend l'appuie sur une touche ;Attend l'appuie sur une touche
proc bioswaitkey proc bioswaitkey uses ax
xor ax,ax xor ax,ax
int 16h int 16h
retf retf
@ -130,7 +133,7 @@ firstmb dw 0
;Charge les sections du block %0 ;Charge les sections du block %0
proc mbloadsection, blocks proc mbloadsection uses ax bx cx si di ds es, blocks:word
mov ax,[blocks] mov ax,[blocks]
mov es,ax mov es,ax
mov ds,ax mov ds,ax
@ -138,7 +141,10 @@ proc mbloadsection, blocks
jne .notace jne .notace
lea si,[.toresov] lea si,[.toresov]
mov word [ss:si],0FFFFh mov word [ss:si],0FFFFh
mov bx,[ds:exe.sections] virtual at 0
.exe exe
end virtual
mov bx,[ds:.exe.sections]
cmp bx,0 cmp bx,0
je .finishloading je .finishloading
.loading: .loading:
@ -193,7 +199,7 @@ endp
;Initialise les blocs de mémoire en prenant memorystart pour segment de base ;Initialise les blocs de mémoire en prenant memorystart pour segment de base
proc mbinit proc mbinit uses ax cx si di ds es
cmp [cs:firstmb],0 cmp [cs:firstmb],0
jne .alreadyok jne .alreadyok
push cs push cs
@ -203,7 +209,10 @@ proc mbinit
mov es,ax mov es,ax
mov si,afree mov si,afree
xor di,di xor di,di
mov cx,mb.sizeof virtual at 0
.mb mb
end virtual
mov cx,.mb.sizeof
rep movsb rep movsb
clc clc
retf retf
@ -216,7 +225,7 @@ afree mb "HN",0,0,0,0A000h-memorystart,"Libre"
db 0 db 0
;Creér un bloc de nom %0 de taille %1 (octets) -> n°segment dans AX ;Creér un bloc de nom %0 de taille %1 (octets) -> n°segment dans AX
proc mbcreate , blocks, size proc mbcreate uses bx cx dx si di ds es, blocks:word, size:word
push gs push gs
mov ax,[ss:bp+4] mov ax,[ss:bp+4]
mov dx,ax mov dx,ax
@ -239,20 +248,23 @@ proc mbcreate , blocks, size
cmp dl,false cmp dl,false
je .notenougtmem je .notenougtmem
mov es,bx mov es,bx
cmp word [es:mb.check],"NH" virtual at 0
.mb mb
end virtual
cmp word [es:.mb.check],"NH"
jne .memoryerror jne .memoryerror
cmp [es:mb.isnotlast],true cmp [es:.mb.isnotlast],true
sete dl sete dl
cmp [es:mb.reference],free cmp [es:.mb.reference],free
jne .notsogood jne .notsogood
mov ax,[es:mb.sizes] mov ax,[es:.mb.sizes]
cmp cx,ax cmp cx,ax
ja .notsogood ja .notsogood
mov word [es:mb.check],"NH" mov word [es:.mb.check],"NH"
mov [es:mb.isnotlast],true mov [es:.mb.isnotlast],true
mov [es:mb.reference],gs mov [es:.mb.reference],gs
mov [es:mb.isresident],false mov [es:.mb.isresident],false
lea di,[es:mb.names] lea di,[es:.mb.names]
push cx push cx
mov cx,24/4 mov cx,24/4
mov si,[blocks] mov si,[blocks]
@ -266,18 +278,18 @@ proc mbcreate , blocks, size
je .nofree je .nofree
dec ax dec ax
dec ax dec ax
mov [es:mb.sizes],cx mov [es:.mb.sizes],cx
add cx,bx add cx,bx
mov es,cx mov es,cx
mov si,afree mov si,afree
xor di,di xor di,di
mov cx,mb.sizeof mov cx,.mb.sizeof
push cs push cs
pop ds pop ds
cld cld
rep movsb rep movsb
mov [es:mb.isnotlast],dl mov [es:.mb.isnotlast],dl
mov [es:mb.sizes],ax mov [es:.mb.sizes],ax
.nofree: .nofree:
mov ax,bx mov ax,bx
pop gs pop gs
@ -286,7 +298,7 @@ proc mbcreate , blocks, size
.notsogood: .notsogood:
inc bx inc bx
inc bx inc bx
add bx,[es:mb.sizes] add bx,[es:.mb.sizes]
jmp .searchfree jmp .searchfree
.memoryerror: .memoryerror:
pop gs pop gs
@ -299,23 +311,26 @@ proc mbcreate , blocks, size
endp endp
;Libère le bloc de mémoire %0 et ses sous blocs ;Libère le bloc de mémoire %0 et ses sous blocs
proc mbfree, blocks proc mbfree uses ax bx cx si di ds es, blocks:word
mov bx,[blocks] mov bx,[blocks]
mov ax,bx mov ax,bx
dec bx dec bx
dec bx dec bx
mov es,bx mov es,bx
cmp word [es:mb.check],"NH" virtual at 0
.mb mb
end virtual
cmp word [es:.mb.check],"NH"
jne .memoryerror jne .memoryerror
cmp [es:mb.reference],free cmp [es:.mb.reference],free
je .wasfree je .wasfree
cmp [es:mb.isresident],true cmp [es:.mb.isresident],true
je .wasresident je .wasresident
mov [es:mb.reference],free mov [es:.mb.reference],free
push cs push cs
pop ds pop ds
mov si,.isfree mov si,.isfree
lea di,[es:mb.names] lea di,[es:.mb.names]
mov cx,6 mov cx,6
cld cld
rep movsb rep movsb
@ -324,24 +339,24 @@ proc mbfree, blocks
dec bx dec bx
.searchtofree: .searchtofree:
mov es,bx mov es,bx
cmp word [es:mb.check],"NH" cmp word [es:.mb.check],"NH"
jne .memoryerror jne .memoryerror
inc bx inc bx
inc bx inc bx
add bx,[es:mb.sizes] add bx,[es:.mb.sizes]
cmp [es:mb.sizes],0 cmp [es:.mb.sizes],0
je .nottofree je .nottofree
cmp ax,[es:mb.reference] cmp ax,[es:.mb.reference]
jne .nottofree jne .nottofree
mov [es:mb.isresident],false mov [es:.mb.isresident],false
mov [es:mb.reference],free mov [es:.mb.reference],free
mov si,.isfree mov si,.isfree
lea di,[es:mb.names] lea di,[es:.mb.names]
mov cx,6 mov cx,6
cld cld
rep movsb rep movsb
.nottofree: .nottofree:
cmp [es:mb.isnotlast],true cmp [es:.mb.isnotlast],true
je .searchtofree je .searchtofree
stdcall mbclean stdcall mbclean
retf retf
@ -359,7 +374,7 @@ proc mbfree, blocks
endp endp
;Mise a nivo de la mémoire (jonction de blocs libre) ;Mise a nivo de la mémoire (jonction de blocs libre)
proc mbclean proc mbclean uses ax bx dx es gs
mov bx,[cs:firstmb] mov bx,[cs:firstmb]
dec bx dec bx
dec bx dec bx
@ -367,20 +382,23 @@ proc mbclean
xor dx,dx xor dx,dx
.searchfree: .searchfree:
mov gs,bx mov gs,bx
cmp word [gs:mb.check],"NH" virtual at 0
.mb mb
end virtual
cmp word [gs:.mb.check],"NH"
jne .memoryerror jne .memoryerror
inc bx inc bx
inc bx inc bx
add bx,[gs:mb.sizes] add bx,[gs:.mb.sizes]
cmp word [gs:mb.sizes],0 cmp word [gs:.mb.sizes],0
je .notenougtmem je .notenougtmem
cmp [gs:mb.reference],free cmp [gs:.mb.reference],free
jne .notfree jne .notfree
cmp ax,0 cmp ax,0
je .notmeetfree je .notmeetfree
add dx,[gs:mb.sizes] add dx,[gs:.mb.sizes]
mov word [gs:mb.check],0 mov word [gs:.mb.check],0
mov dword [gs:mb.names],0 mov dword [gs:.mb.names],0
inc dx inc dx
inc dx inc dx
jmp .nottrigered jmp .nottrigered
@ -392,16 +410,16 @@ proc mbclean
cmp ax,0 cmp ax,0
je .nottrigered je .nottrigered
mov es,ax mov es,ax
add [es:mb.sizes],dx add [es:.mb.sizes],dx
xor ax,ax xor ax,ax
.nottrigered: .nottrigered:
cmp [gs:mb.isnotlast],true cmp [gs:.mb.isnotlast],true
je .searchfree je .searchfree
cmp ax,0 cmp ax,0
je .reallyfinish je .reallyfinish
mov es,ax mov es,ax
add [es:mb.sizes],dx add [es:.mb.sizes],dx
mov [es:mb.isnotlast],false mov [es:.mb.isnotlast],false
.reallyfinish: .reallyfinish:
clc clc
retf retf
@ -414,14 +432,17 @@ proc mbclean
endp endp
;Rend le segment %0 résident ;Rend le segment %0 résident
proc mbresident, blocks proc mbresident uses bx es, blocks:word
mov bx,[blocks] mov bx,[blocks]
dec bx dec bx
dec bx dec bx
mov es,bx mov es,bx
cmp word [es:mb.check],"NH" virtual at 0
.mb mb
end virtual
cmp word [es:.mb.check],"NH"
jne .memoryerror jne .memoryerror
mov [es:mb.isresident],true mov [es:.mb.isresident],true
retf retf
.memoryerror: .memoryerror:
stc stc
@ -429,14 +450,17 @@ proc mbresident, blocks
endp endp
;Rend le segment %0 non résident ;Rend le segment %0 non résident
proc mbnonresident, blocks proc mbnonresident uses bx es, blocks:word
mov bx,[blocks] mov bx,[blocks]
dec bx dec bx
dec bx dec bx
mov es,bx mov es,bx
cmp word [es:mb.check],"NH" virtual at 0
.mb mb
end virtual
cmp word [es:.mb.check],"NH"
jne .memoryerror jne .memoryerror
mov [es:mb.isresident],false mov [es:.mb.isresident],false
retf retf
.memoryerror: .memoryerror:
stc stc
@ -445,17 +469,20 @@ endp
;Change le proprietaire de %0 a %1 ;Change le proprietaire de %0 a %1
proc mbchown ,blocks, owner proc mbchown uses bx dx es,blocks:word, owner:word
mov bx,[blocks] mov bx,[blocks]
dec bx dec bx
dec bx dec bx
mov es,bx mov es,bx
cmp word [es:mb.check],"NH" virtual at 0
.mb mb
end virtual
cmp word [es:.mb.check],"NH"
jne .memoryerror jne .memoryerror
cmp [es:mb.reference],free cmp [es:.mb.reference],free
je .wasfree je .wasfree
mov dx,[owner] mov dx,[owner]
mov [es:mb.reference],dx mov [es:.mb.reference],dx
retf retf
.memoryerror: .memoryerror:
stc stc
@ -466,7 +493,7 @@ proc mbchown ,blocks, owner
endp endp
;Alloue un bloc /data de CX caractere pour le process appelant -> ax ;Alloue un bloc /data de CX caractere pour le process appelant -> ax
proc mballoc, size proc mballoc uses si ds, size:word
push cs push cs
pop ds pop ds
stdcall mbcreate,.data,[size] stdcall mbcreate,.data,[size]
@ -477,25 +504,28 @@ proc mballoc, size
endp endp
;Renvoie en AX le MB n° %0 carry quand terminé ;Renvoie en AX le MB n° %0 carry quand terminé
proc mbget, num proc mbget uses bx dx es, num:word
mov bx,[cs:firstmb] mov bx,[cs:firstmb]
dec bx dec bx
dec bx dec bx
xor dx,dx xor dx,dx
.searchfree: .searchfree:
mov es,bx mov es,bx
cmp word [es:mb.check],"NH" virtual at 0
.mb mb
end virtual
cmp word [es:.mb.check],"NH"
jne .memoryerror jne .memoryerror
inc bx inc bx
inc bx inc bx
add bx,[es:mb.sizes] add bx,[es:.mb.sizes]
cmp [es:mb.sizes],0 cmp [es:.mb.sizes],0
je .memoryerror je .memoryerror
cmp dx,[num] cmp dx,[num]
je .foundmcb je .foundmcb
ja .notfound ja .notfound
inc dx inc dx
cmp [es:mb.isnotlast],true cmp [es:.mb.isnotlast],true
je .searchfree je .searchfree
.memoryerror: .memoryerror:
stc stc
@ -512,20 +542,23 @@ proc mbget, num
endp endp
;Renvoie en AX le MCB qui correspond a ds:%0 ;Renvoie en AX le MCB qui correspond a ds:%0
proc mbfind, blocks proc mbfind uses bx si di es, blocks:word
mov bx,[cs:firstmb] mov bx,[cs:firstmb]
dec bx dec bx
dec bx dec bx
mov si,[blocks] mov si,[blocks]
.search: .search:
mov es,bx mov es,bx
lea di,[es:mb.names] virtual at 0
cmp word [es:mb.check],"NH" .mb mb
end virtual
lea di,[es:.mb.names]
cmp word [es:.mb.check],"NH"
jne .memoryerror jne .memoryerror
inc bx inc bx
inc bx inc bx
add bx,[es:mb.sizes] add bx,[es:.mb.sizes]
cmp [es:mb.sizes],0 cmp [es:.mb.sizes],0
je .memoryerror je .memoryerror
push si di push si di
.cmpnames: .cmpnames:
@ -540,7 +573,7 @@ proc mbfind, blocks
.ok: .ok:
pop di si pop di si
je .foundmcb je .foundmcb
cmp [es:mb.isnotlast],true cmp [es:.mb.isnotlast],true
je .search je .search
.notfound: .notfound:
stc stc
@ -558,21 +591,24 @@ endp
;Renvoie en AX le sous mcb qui correspond a %0 et qui appartien a %1 ;Renvoie en AX le sous mcb qui correspond a %0 et qui appartien a %1
proc mbfindsb, blocks, owner proc mbfindsb uses bx dx si di es, blocks:word, owner:word
mov bx,[cs:firstmb] mov bx,[cs:firstmb]
dec bx dec bx
dec bx dec bx
mov si,[blocks] mov si,[blocks]
lea di,[es:mb.names] virtual at 0
.mb mb
end virtual
lea di,[es:.mb.names]
mov dx,[owner] mov dx,[owner]
.search: .search:
mov es,bx mov es,bx
cmp word [es:mb.check],"NH" cmp word [es:.mb.check],"NH"
jne .memoryerror jne .memoryerror
inc bx inc bx
inc bx inc bx
add bx,[es:mb.sizes] add bx,[es:.mb.sizes]
cmp [es:mb.sizes],0 cmp [es:.mb.sizes],0
je .memoryerror je .memoryerror
push si di push si di
.cmpnames: .cmpnames:
@ -587,10 +623,10 @@ proc mbfindsb, blocks, owner
.ok: .ok:
pop di si pop di si
jne .notfoundmcb jne .notfoundmcb
cmp [es:mb.reference],dx cmp [es:.mb.reference],dx
je .foundmcb je .foundmcb
.notfoundmcb: .notfoundmcb:
cmp [es:mb.isnotlast],true cmp [es:.mb.isnotlast],true
je .search je .search
.notfound: .notfound:
stc stc
@ -607,11 +643,14 @@ proc mbfindsb, blocks, owner
endp endp
;Resouds les dépendances du bloc de mémoire %0 ;Resouds les dépendances du bloc de mémoire %0
proc mbloadfuncs, blocks proc mbloadfuncs uses ax bx cx dx si ds, blocks:word
mov ds,[blocks] mov ds,[blocks]
cmp word [0],"EC" cmp word [0],"EC"
jne .notace jne .notace
mov si,[ds:exe.imports] virtual at 0
.exe exe
end virtual
mov si,[ds:.exe.imports]
cmp si,0 cmp si,0
je .endofloading je .endofloading
.loadfuncs: .loadfuncs:
@ -628,7 +667,7 @@ proc mbloadfuncs, blocks
cmp byte [bx], ':' cmp byte [bx], ':'
jne .findend jne .findend
mov byte [bx],0 mov byte [bx],0
stdcall [cs:projfile],si invoke projfile,si
mov byte [bx],':' mov byte [bx],':'
jc .erroronload jc .erroronload
;pushad ;pushad
@ -664,10 +703,13 @@ endp
;Recherche une fonction pointé par DS:%0 en mémoire et renvoie son adresse en DX:AX ;Recherche une fonction pointé par DS:%0 en mémoire et renvoie son adresse en DX:AX
proc mbsearchfunc, func proc mbsearchfunc uses bx si di es, func:word
mov bx,[func] mov bx,[func]
mov si,bx mov si,bx
.findend: .findend:
virtual at 0
.exe exe
end virtual
inc bx inc bx
cmp byte [bx], ':' cmp byte [bx], ':'
jne .findend jne .findend
@ -676,9 +718,9 @@ proc mbsearchfunc, func
mov byte [bx],':' mov byte [bx],':'
jc .notfoundattallthesb jc .notfoundattallthesb
mov es,ax mov es,ax
cmp word [es:exe.checks],"EC" cmp word [es:.exe.checks],"EC"
jne .notfoundattallthesb jne .notfoundattallthesb
mov di,[es:exe.exports] mov di,[es:.exe.exports]
inc bx inc bx
inc bx inc bx
.functions: .functions:

View File

@ -49,26 +49,26 @@ suite:
pop gs pop gs
stdcall biosprint,msg_ok stdcall biosprint,msg_ok
stdcall biosprint,msg_video_init stdcall biosprint,msg_video_init
stdcall [cs:setvideomode],2 invoke setvideomode,2
jc error jc error
stdcall [cs:clearscreen] invoke clearscreen
stdcall [cs:print],msg_memory invoke print,msg_memory
stdcall [cs:print],msg_ok2 invoke print,msg_ok2
stdcall [cs:print],msg_memory_init invoke print,msg_memory_init
stdcall [cs:print],msg_ok2 invoke print,msg_ok2
stdcall [cs:print],msg_memory_section invoke print,msg_memory_section
stdcall [cs:print],msg_ok2 invoke print,msg_ok2
stdcall [cs:print],msg_memory_jumps invoke print,msg_memory_jumps
stdcall [cs:print],msg_ok2 invoke print,msg_ok2
stdcall [cs:print],msg_video_init invoke print,msg_video_init
stdcall [cs:print],msg_ok2 invoke print,msg_ok2
stdcall [cs:print],msg_handler invoke print,msg_handler
;stdcall installirqhandler ;invoke installirqhandler
stdcall [cs:print],msg_ok2 invoke print,msg_ok2
stdcall [cs:print],msg_cpu_detect invoke print,msg_cpu_detect
stdcall [cs:cpuinfo],thecpu invoke cpuinfo,thecpu
stdcall [cs:setinfo],thecpu,temporary invoke setinfo,thecpu,temporary
stdcall [cs:print],msg_ok2 invoke print,msg_ok2
push temporary push temporary
xor eax,eax xor eax,eax
mov al,[thecpu.family] mov al,[thecpu.family]
@ -79,11 +79,11 @@ suite:
push eax push eax
push thecpu.names push thecpu.names
push thecpu.vendor push thecpu.vendor
stdcall [cs:print],msg_cpu_detect_inf invoke print,msg_cpu_detect_inf
stdcall [cs:print],msg_pci invoke print,msg_pci
stdcall [cs:pciinfo],thepci invoke pciinfo,thepci
jc nopci jc nopci
stdcall [cs:print],msg_ok2 invoke print,msg_ok2
xor eax,eax xor eax,eax
mov al,[thepci.maxbus] mov al,[thepci.maxbus]
push eax push eax
@ -91,25 +91,28 @@ suite:
push eax push eax
mov al,[thepci.version_major] mov al,[thepci.version_major]
push eax push eax
stdcall [cs:print],msg_pci_info invoke print,msg_pci_info
stdcall [cs:print],msg_pci_enum invoke print,msg_pci_enum
xor ebx,ebx xor ebx,ebx
xor ecx,ecx xor ecx,ecx
xor si,si xor si,si
searchpci: searchpci:
stdcall [cs:getcardinfo],bx,cx,si,temporary invoke getcardinfo,bx,cx,si,temporary
jc stopthis jc stopthis
mov al,[temporary+pcidata.subclass] virtual at temporary
.pcidata pcidata
end virtual
mov al,[.pcidata.subclass]
push ax push ax
mov al,[temporary+pcidata.class] mov al,[.pcidata.class]
push ax push ax
stdcall [cs:getpcisubclass] invoke getpcisubclass
push dx push dx
push ax push ax
mov al,[temporary+pcidata.class] mov al,[.pcidata.class]
xor ah,ah xor ah,ah
push ax push ax
stdcall [cs:getpciclass] invoke getpciclass
push dx push dx
push ax push ax
push 4 push 4
@ -118,11 +121,11 @@ searchpci:
push ecx push ecx
push 4 push 4
push ebx push ebx
mov ax,[temporary+pcidata.device] mov ax,[.pcidata.device]
push eax push eax
mov ax,[temporary+pcidata.vendor] mov ax,[.pcidata.vendor]
push eax push eax
stdcall [cs:print],msg_pci_card invoke print,msg_pci_card
inc si inc si
cmp si,7 cmp si,7
jbe searchpci jbe searchpci
@ -137,29 +140,29 @@ stopthis:
jbe searchpci jbe searchpci
jmp next jmp next
nopci: nopci:
stdcall [cs:print],msg_echec2 invoke print,msg_echec2
next: next:
;stdcall [cs:detectvmware] ;invoke detectvmware
;jne novirtual ;jne novirtual
;stdcall [cs:print],msg_vmware ;invoke print,msg_vmware
novirtual: novirtual:
;stdcall [cs:print],msg_flat ;invoke print,msg_flat
;stdcall enablea20 ;invoke enablea20
;stdcall flatmode ;invoke flatmode
;xor ax,ax ;xor ax,ax
;mov fs,ax ;mov fs,ax
;mov esi,0100000h ;mov esi,0100000h
;mov [dword ptr fs:esi],"OKIN" ;mov [dword ptr fs:esi],"OKIN"
stdcall [cs:print],msg_ok2 invoke print,msg_ok2
stdcall [cs:print],msg_disk_init invoke print,msg_disk_init
stdcall [cs:initdrive] invoke initdrive
jc error2 jc error2
stdcall [cs:print],msg_ok2 invoke print,msg_ok2
stdcall [cs:print],msg_launchcommand invoke print,msg_launchcommand
stdcall [cs:execfile],shell invoke execfile,shell
jc error2 jc error2
error2: error2:
stdcall [cs:print],msg_error2 invoke print,msg_error2
stdcall bioswaitkey stdcall bioswaitkey
jmp far 0FFFFh:0000h jmp far 0FFFFh:0000h

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,3 @@
model tiny,stdcall
p586N
locals
jumps
codeseg
option procalign:byte
include "..\include\mem.h" include "..\include\mem.h"
include "..\include\divers.h" include "..\include\divers.h"
include "..\include\graphic.h" include "..\include\graphic.h"
@ -12,20 +5,20 @@ include "..\include\graphic.h"
org 0h org 0h
start: start:
header exe <"CE",1,0,0,,offset imports,,offset realstart> header exe 1
realstart: realstart:
mov ax,0305h mov ax,0305h
mov bx,0008h mov bx,0008h
int 16h int 16h
call [savestate] invoke savestate
call [setvideomode],2 invoke setvideomode,2
xor ebp,ebp xor ebp,ebp
xor ax,ax xor ax,ax
mov fs,ax mov fs,ax
call [disablescroll] invoke disablescroll
adres: adres:
call [saveparamto],offset infos invoke saveparamto, infos
mov al,[infos.lines] mov al,[infos.lines]
dec al dec al
mov [lastline],al mov [lastline],al
@ -36,13 +29,13 @@ shr al,2
mov [sizex],al mov [sizex],al
and bl,11b and bl,11b
mov [sizex2],bl mov [sizex2],bl
mov al,[infos.mode] mov al,[infos.modenum]
cmp al,[oldmode] cmp al,[oldmode]
je noinit je noinit
call [clearscreen] invoke clearscreen
mov [oldmode],al mov [oldmode],al
noinit: noinit:
call [setxy],0,0 invoke setxy,0,0
mov edi,ebp mov edi,ebp
mov bh,[lastline] mov bh,[lastline]
lines: lines:
@ -53,8 +46,8 @@ mov edx,edi
shr edx,4*4 shr edx,4*4
shl edx,4*3 shl edx,4*3
push edx push edx
push offset spaces push spaces
call [print] invoke print
mov dx,di mov dx,di
mov al,[sizex] mov al,[sizex]
mov esi,edi mov esi,edi
@ -63,24 +56,24 @@ mov edx,edi
shr edx,4*4 shr edx,4*4
shl edx,4*3 shl edx,4*3
mov fs,dx mov fs,dx
push [dword ptr fs:di] push dword [fs:di]
push 8 push 8
call [showhex] invoke showhex
call [showchar],' ' invoke showchar,' '
inc edi inc edi
dec al dec al
jnz doaline jnz doaline
mov edi,esi mov edi,esi
push offset spaces2 push spaces2
call [print] invoke print
mov al,[sizex] mov al,[sizex]
doaline2: doaline2:
mov edx,edi mov edx,edi
shr edx,4*4 shr edx,4*4
shl edx,4*3 shl edx,4*3
mov fs,dx mov fs,dx
push [word ptr fs:di] push word [fs:di]
call [showchar] invoke showchar
inc edi inc edi
dec al dec al
jnz doaline2 jnz doaline2
@ -88,11 +81,11 @@ dec bh
je outes je outes
cmp [sizex2],0 cmp [sizex2],0
je lines je lines
call [addline] invoke addline
jmp lines jmp lines
outes: outes:
call [setxy],0,[word ptr lastline] invoke setxy,0,word [lastline]
call [print],offset menu invoke print, menu
waitkey: waitkey:
mov ax,0 mov ax,0
int 16h int 16h
@ -128,9 +121,9 @@ jmp adres
suit6: suit6:
cmp ax,4100h cmp ax,4100h
jne suit7 jne suit7
mov [dword ptr pope],'TIDE' mov dword [pope],'TIDE'
call [setxy],0,[word ptr lastline] invoke setxy,0,word [lastline]
call [print],offset menu invoke print, menu
mov ax,0B800h mov ax,0B800h
mov es,ax mov es,ax
mov [xxyy2],3 mov [xxyy2],3
@ -142,7 +135,7 @@ mov ax,0
int 16h int 16h
cmp ah,41h cmp ah,41h
jne tre jne tre
mov [dword ptr pope],' EUV' mov dword [pope],' EUV'
push cs push cs
pop es pop es
jmp adres jmp adres
@ -187,7 +180,7 @@ call calc1
call calc2 call calc2
mov edi,[es:bx-1] mov edi,[es:bx-1]
mov dx,[es:si-1] mov dx,[es:si-1]
mov [byte ptr es:bx],0112 mov byte [es:bx],0112
mov [es:bx-1],al mov [es:bx-1],al
writs: writs:
mov ax,0 mov ax,0
@ -209,12 +202,12 @@ mov cl,[gs:bx]
cmp ch,cl cmp ch,cl
je no je no
push si ax push si ax
call [setxy],0,[word ptr lastline] invoke setxy,0,word [lastline]
call [print],offset msg invoke print, msg
mov ax,0 mov ax,0
int 16h int 16h
call [setxy],0,[word ptr lastline] invoke setxy,0,word [lastline]
call [print],offset menu invoke print, menu
pop bx si pop bx si
mov [es:bx-1],edi mov [es:bx-1],edi
mov [es:si-1],dx mov [es:si-1],dx
@ -235,7 +228,7 @@ jmp waitst
suit7: suit7:
cmp ax,4200h cmp ax,4200h
jne adres jne adres
call [restorestate] invoke restorestate
retf retf
calc1: calc1:
push ax dx si push ax dx si
@ -251,11 +244,11 @@ shl bx,5
shl dx,7 shl dx,7
add bx,dx add bx,dx
add bx,ax add bx,ax
mov [byte ptr es:bx],112 mov byte [es:bx],112
mov [byte ptr es:bx+2],112 mov byte [es:bx+2],112
mov si,[xxyy] mov si,[xxyy]
mov [byte ptr es:si],07 mov byte [es:si],07
mov [byte ptr es:si+2],07 mov byte [es:si+2],07
mov [xxyy],bx mov [xxyy],bx
pop si dx ax pop si dx ax
ret ret
@ -270,9 +263,9 @@ mov dx,[xx]
shl dx,1 shl dx,1
add si,dx add si,dx
add si,129 add si,129
mov [byte ptr es:si],112 mov byte [es:si],112
mov bx,[xxyy2] mov bx,[xxyy2]
mov [byte ptr es:bx],07 mov byte [es:bx],07
mov [xxyy2],si mov [xxyy2],si
pop dx bx ax pop dx bx ax
ret ret
@ -330,7 +323,7 @@ spaces2 db '\c04 | \c07',0
showbuffer db 35 dup (0FFh) showbuffer db 35 dup (0FFh)
oldmode db 0 oldmode db 0
infos vgainf <> infos vgainf
importing importing
use VIDEO,setvideomode use VIDEO,setvideomode
@ -346,10 +339,3 @@ use VIDEO.LIB,showhex
use VIDEO.LIB,showchar use VIDEO.LIB,showchar
endi endi

View File

@ -1,9 +1,3 @@
model tiny,stdcall
p586N
locals
jumps
codeseg
option procalign:byte
include "..\include\mem.h" include "..\include\mem.h"
include "..\include\divers.h" include "..\include\divers.h"
@ -11,16 +5,16 @@ include "..\include\divers.h"
org 0h org 0h
start: start:
header exe <"CE",1,0,0,,offset imports,,offset realstart> header exe 1
realstart: realstart:
call [print],offset message invoke print,message
call [waitkey] invoke waitkey
retf retf
message db 'Appel de la librairie \c02video\c07 et de la librairie \c02EXEM-LIB.LIB\c07 !',0 message db 'Appel de la librairie \c02video\c07 et de la librairie \c02EXEM-LIB.LIB\c07 !',0
importing importing
use VIDEO.LIB,print use VIDEO.LIB,print
use EXEM-LIB.LIB,waitkey use LIB.LIB,waitkey
endi endi

View File

@ -1,10 +1,3 @@
model tiny,stdcall
p586N
locals
jumps
codeseg
option procalign:byte
include "..\include\mem.h" include "..\include\mem.h"
include "..\include\fat.h" include "..\include\fat.h"
include "..\include\divers.h" include "..\include\divers.h"
@ -13,35 +6,35 @@ include "..\include\graphic.h"
org 0h org 0h
start: start:
header exe <"CE",1,0,0,,offset imports,,offset realstart> header exe 1
realstart: realstart:
call [saveparamto],offset infos invoke saveparamto, infos
call [print],offset msg1 invoke print, msg1
call [initdrive] invoke initdrive
xor bp,bp xor bp,bp
call [findfirstfile],offset bufferentry invoke findfirstfile, bufferentry
jc nofiles jc nofiles
go: go:
push [word bufferentry.result.fileattr] push word [bufferentry.result.fileattr]
push [bufferentry.result.filesize] push [bufferentry.result.filesize]
push [bufferentry.result.filetime] push [bufferentry.result.filetime]
push [bufferentry.result.filedate] push [bufferentry.result.filedate]
push [bufferentry.result.filetimecrea] push [bufferentry.result.filetimecrea]
push [bufferentry.result.filedatecrea] push [bufferentry.result.filedatecrea]
mov bx,offset bufferentry.result.filename mov bx,bufferentry.result.filename
push bx push bx
push offset line push line
call [print] invoke print
call [findnextfile],offset bufferentry invoke findnextfile, bufferentry
jc nofiles jc nofiles
inc bp inc bp
jmp go jmp go
nofiles: nofiles:
call [print],offset menu invoke print, menu
mov [xx],1 mov [xx],1
call changelineattr,[xx],112 stdcall changelineattr,[xx],112
endof: endof:
mov ax,0 mov ax,0
int 16h int 16h
@ -49,18 +42,18 @@ endof:
jne tre1 jne tre1
cmp [xx],bp cmp [xx],bp
ja endof ja endof
call changelineattr,[xx],7 stdcall changelineattr,[xx],7
inc [xx] inc [xx]
call changelineattr,[xx],112 stdcall changelineattr,[xx],112
jmp endof jmp endof
tre1: tre1:
cmp ah,48h cmp ah,48h
jne tre2 jne tre2
cmp [xx],1 cmp [xx],1
je endof je endof
call changelineattr,[xx],7 stdcall changelineattr,[xx],7
dec [xx] dec [xx]
call changelineattr,[xx],112 stdcall changelineattr,[xx],112
jmp endof jmp endof
tre2: tre2:
cmp al,0Dh cmp al,0Dh
@ -75,26 +68,24 @@ tre4:
retf retf
;couleur al pour ligne %0 en %1 ;couleur al pour ligne %0 en %1
PROC changelineattr near proc changelineattr uses ax bx di es,line:word,attr:word
USES ax,bx,di,es
ARG @line:word,@attr:word
mov ax,0B800h mov ax,0B800h
mov es,ax mov es,ax
mov ax,[@line] mov ax,[line]
add ax,3 add ax,3
mul [cs:infos.columns] mul [cs:infos.columns]
mov di,ax mov di,ax
shl di,1 shl di,1
mov al,[cs:infos.columns] mov al,[cs:infos.columns]
inc di inc di
mov bx,[@attr] mov bx,[attr]
@@popep: popep:
mov [es:di],bl mov [es:di],bl
add di,2 add di,2
dec al dec al
jnz @@popep jnz popep
ret retf
endp changelineattr endp
xx dw 1 xx dw 1
xxold dw 0 xxold dw 0
@ -104,8 +95,8 @@ msg1 db '\e\g00,00\c70 Gestionnaire de fichier Version 1.5
db '\g00,02Nom Ext. Date creation Date modification Taille Attributs' db '\g00,02Nom Ext. Date creation Date modification Taille Attributs'
db '\g00,03-------------------------------------------------------------------------------\l',0 db '\g00,03-------------------------------------------------------------------------------\l',0
line db '\c07%n %d %t %d %t %z %a\l',0 line db '\c07%n %d %t %d %t %z %a\l',0
bufferentry find <> bufferentry find
infos vgainf <> infos vgainf
importing importing
use VIDEO.LIB,print use VIDEO.LIB,print

View File

@ -1,17 +1,10 @@
model tiny,stdcall
p586N
locals
jumps
codeseg
option procalign:byte
include "..\include\mem.h" include "..\include\mem.h"
include "..\include\divers.h" include "..\include\divers.h"
org 0h org 0h
start: start:
header exe <"CE",1,0,0,,,,offset realstart> header exe 1
realstart: realstart:
retf retf

View File

@ -1,69 +1,62 @@
model tiny,stdcall
p586N
locals
jumps
codeseg
option procalign:byte
include "..\include\mem.h" include "..\include\mem.h"
include "..\include\divers.h" include "..\include\divers.h"
org 0h org 0h
start: start:
header exe <"CE",1,0,0,,offset imports,,offset realstart> header exe 1
realstart: realstart:
call [cs:mballoc],65535 invoke mballoc,65535
jc problem3 jc problem3
push ax push ax
pop es pop es
call [cs:projfile],offset logo invoke projfile,logo
jc problem jc problem
mov ecx,eax mov ecx,eax
call [cs:mbfind],offset logo invoke mbfind,logo
jc problem jc problem
call [cs:decompressrle],ax,0,es,0,cx invoke decompressrle,ax,0,es,0,cx
jc problem2 jc problem2
push es push es
pop ds pop ds
call [cs:savestate] invoke savestate
call [cs:setvideomode],word 8 invoke setvideomode,word 8
call [cs:clearscreen] invoke clearscreen
call [cs:loadbmppalet],word 0 invoke loadbmppalet,word 0
call [cs:showbmp],word 0,word 20,word 150 invoke showbmp,word 0,word 20,word 150
jc problem4 jc problem4
push cs push cs
pop ds pop ds
call [cs:print],offset poper invoke print,poper
endofit: endofit:
xor ax,ax xor ax,ax
int 16h int 16h
call [cs:restorestate] invoke restorestate
retf retf
problem: problem:
push cs push cs
pop ds pop ds
call [cs:print],offset error invoke print, error
jmp endofit jmp endofit
problem2: problem2:
push cs push cs
pop ds pop ds
call [cs:print],offset error2 invoke print, error2
jmp endofit jmp endofit
problem3: problem3:
push cs push cs
pop ds pop ds
call [cs:print],offset error3 invoke print, error3
jmp endofit jmp endofit
problem4: problem4:
push cs push cs
pop ds pop ds
call [cs:print],offset error4 invoke print, error4
jmp endofit jmp endofit
poper db '\c0BC\c0CO\c0DS\c0E2\c0E0\c0E0\c0F0 en mode graphique',0 poper db '\c0BC\c0CO\c0DS\c0E2\c0E0\c0E0\c0F0 en mode graphique',0

View File

@ -1,471 +0,0 @@
.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
;Ralise un checksum 8 bits sur donnes DS:SI, nb CX rsultat dans dl
Checksum8:
push cx si
check:
add dl,[si]
inc si
dec cx
jnz check
pop si cx
ret
;DS:SI pointeur sur donnes, CX nombres de donnes, 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 donnes 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;

View File

@ -1,12 +0,0 @@
program Project1;
uses
Forms,
Unit1 in 'UNIT1.PAS' {Form1};
{$R *.RES}
begin
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

View File

@ -1,34 +0,0 @@
[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=

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,517 +0,0 @@
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.

View File

@ -1,23 +1,14 @@
asm= lzasm /z/t ASM=fasm
lnk= elink CLEAN=rm -rf
OBJS= $(SRCS:.c=.o)
SRC= $(wildcard *.asm)
PROG= $(SRC:.asm=.ce)
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 test3d.ce test2d.ce all: $(PROG)
sync
.asm.obj: %.ce: %.asm
$(asm) $< $(ASM) $^ $@
.obj.ce:
$(lnk) $< $*.ce
.obj.lib:
$(lnk) $< $*.lib
clean: clean:
del *.obj $(CLEAN) *.ce
del *.ce
del *.bak
del *.lib
del *.com
del *.bin
del *.sys
del *.err

View File

@ -1,17 +1,10 @@
model tiny,stdcall
p586N
locals
jumps
codeseg
option procalign:byte
include "..\include\mem.h" include "..\include\mem.h"
include "..\include\divers.h" include "..\include\divers.h"
org 0h org 0h
start: start:
header exe <"CE",1,0,0,,,,offset realstart> header exe 1
realstart: realstart:
mov eax,cr0 mov eax,cr0

View File

@ -1,26 +1,19 @@
model tiny,stdcall
p586N
locals
jumps
codeseg
option procalign:byte
include "..\include\mem.h" include "..\include\mem.h"
include "..\include\divers.h" include "..\include\divers.h"
org 0h org 0h
start: start:
header exe <"CE",1,0,0,,offset imports,,offset realstart> header exe 1
realstart: realstart:
call [mouseon] invoke mouseon
jc errormouse jc errormouse
call [print],offset message invoke print, message
retf retf
errormouse: errormouse:
call [print],offset errormessage invoke print, errormessage
retf retf
message db 'Activation de la souris\l',0 message db 'Activation de la souris\l',0

View File

@ -1,27 +1,20 @@
model tiny,stdcall
p586N
locals
jumps
codeseg
option procalign:byte
include "..\include\mem.h" include "..\include\mem.h"
include "..\include\divers.h" include "..\include\divers.h"
org 0h org 0h
start: start:
header exe <"CE",1,0,0,,offset imports,,offset realstart> header exe 1
realstart: realstart:
call [cs:randomize] invoke randomize
push 0FFFFh push 0FFFFh
pushd 652201 pushd 652201
pushd 1545454545 pushd 1545454545
push 1523 push 1523
push 2041 push 2041
push offset zero push zero
push offset fixe push fixe
push 5 push 5
push 'i' push 'i'
push 'a' push 'a'
@ -31,71 +24,71 @@ realstart:
pushd 125645 pushd 125645
pushd 5041 pushd 5041
pushd 125645 pushd 125645
push offset message push message
call [print] invoke print
xor ax,ax xor ax,ax
int 16h int 16h
call [clearscreen] invoke clearscreen
call [xchgpages] invoke xchgpages
call [clearscreen] invoke clearscreen
mov cx,200 mov cx,200
go1: go1:
call [xchgpages] invoke xchgpages
call [waitretrace] invoke waitretrace
call [print],offset textdemo1 invoke print, textdemo1
call put invoke put
call [xchgpages] invoke xchgpages
call [waitretrace] invoke waitretrace
dec cx dec cx
jnz go1 jnz go1
mov cx,200 mov cx,200
go2: go2:
call [xchgpages] invoke xchgpages
call [waitretrace] invoke waitretrace
call [print],offset textdemo2 invoke print, textdemo2
call put invoke put
call [xchgpages] invoke xchgpages
call [waitretrace] invoke waitretrace
dec cx dec cx
jnz go2 jnz go2
mov cx,200 mov cx,200
go3: go3:
call [xchgpages] invoke xchgpages
call [waitretrace] invoke waitretrace
call [print],offset textdemo3 invoke print, textdemo3
call put invoke put
call [xchgpages] invoke xchgpages
call [waitretrace] invoke waitretrace
dec cx dec cx
jnz go3 jnz go3
call [clearscreen] invoke clearscreen
call [xchgpages] invoke xchgpages
call [clearscreen] invoke clearscreen
call [print],offset texte2 invoke print, texte2
mov bp,255 mov bp,255
xor edx,edx xor edx,edx
go4: go4:
call [xchgpages] invoke xchgpages
call [waitretrace] invoke waitretrace
inc edx inc edx
push edx push edx
push offset texte3 push texte3
call [print] invoke print
call [xchgpages] invoke xchgpages
call [waitretrace] invoke waitretrace
dec bp dec bp
jnz go4 jnz go4
push offset texte4 push texte4
call [print] invoke print
mov ax,0 mov ax,0
int 16h int 16h
call [restorestate] invoke restorestate
retf retf
put: put:
call [cs:random] invoke random
mov di,ax mov di,ax
and di,4096-2 and di,4096-2
mov si,offset fond mov si,fond
call showstring2 call showstring2
ret ret

View File

@ -1,10 +1,3 @@
model tiny,stdcall
p586N
locals
jumps
codeseg
option procalign:byte
include "..\include\mem.h" include "..\include\mem.h"
include "..\include\fat.h" include "..\include\fat.h"
include "..\include\divers.h" include "..\include\divers.h"
@ -13,31 +6,31 @@ include "..\include\3d.h"
org 0h org 0h
start: start:
header exe <"CE",1,0,0,,offset imports,,offset realstart> header exe 1
realstart: realstart:
call [cs:randomize] invoke randomize
call [cs:savestate] invoke savestate
call [cs:setvideomode],10 invoke setvideomode,10
call [cs:clearscreen] invoke clearscreen
mov cx,65535 mov cx,65535
show: show:
call [cs:random] invoke random
and ax,1111b and ax,1111b
push ax push ax
call [cs:random] invoke random
push ax push ax
call [cs:random] invoke random
push ax push ax
call [cs:random] invoke random
push ax push ax
call [cs:random] invoke random
push ax push ax
call [cs:line] invoke line
dec cx dec cx
jnz show jnz show
call [cs:bioswaitkey] invoke bioswaitkey
call [cs:restorestate] invoke restorestate
retf retf
importing importing

View File

@ -1,10 +1,3 @@
model tiny,stdcall
p586N
locals
jumps
codeseg
option procalign:byte
include "..\include\mem.h" include "..\include\mem.h"
include "..\include\fat.h" include "..\include\fat.h"
include "..\include\divers.h" include "..\include\divers.h"
@ -13,11 +6,10 @@ include "..\include\3d.h"
org 0h org 0h
start: start:
header exe <"CE",1,0,0,,offset imports,,offset realstart> header exe 1
data: alldata:
camera vertex3d 320.0,240.0,70.0
camera vertex3d <320.0,240.0,70.0>
zoom dd 5.0 zoom dd 5.0
rot1 dd 0.1 rot1 dd 0.1
@ -66,10 +58,10 @@ dd -2.0,-2.0,20.0
dd 2.0,2.0,20.0 dd 2.0,2.0,20.0
mat1 mat <?> mat1 mat
mat2 mat <?> mat2 mat
mat3 mat <?> mat3 mat
matrixp mat <?> matrixp mat
mode db 0 mode db 0
@ -78,36 +70,29 @@ vertexp equ objectp+15
facep equ vertexp+20000 facep equ vertexp+20000
screen equ facep+20000 screen equ facep+20000
;typep db ?
;objectp db 15 dup (?)
;vertexp db 1000*4*3+2 dup (?)
;facep db 2000*3+2 dup (?)
;screen db 1000*2*2 dup (?)
realstart: realstart:
call [cs:savestate] invoke savestate
call [cs:setvideomode],10 invoke setvideomode,10
call [cs:clearscreen] invoke clearscreen
call [cs:mballoc],65535 invoke mballoc,65535
mov es,ax mov es,ax
mov si,offset data mov si, alldata
mov di,si mov di,si
mov ecx,(offset realstart-offset data) mov ecx,( realstart- alldata)
shr ecx,2 shr ecx,2
inc ecx inc ecx
cld cld
rep movsd rep movsd
call [cs:projfile],offset filename invoke projfile, filename
jc errorloading jc errorloading
call [cs:mbfind],offset filename invoke mbfind, filename
jc errorloading jc errorloading
push es push es
pop ds pop ds
mov es,ax mov es,ax
call [cs:load3ds],es,0,offset objectp,offset vertexp,offset matrixp,offset facep invoke load3ds,es,0, objectp, vertexp, matrixp, facep
call [cs:transform],offset vertexnbp,offset matrixp invoke transform, vertexnbp, matrixp
call [cs:identity],offset mat1 invoke identity, mat1
jmp show jmp show
rool: rool:
mov ah,1 mov ah,1
@ -127,32 +112,32 @@ rool:
notmode: notmode:
cmp ax,4800h cmp ax,4800h
jne notup jne notup
call [cs:rotationx],offset mat1,[rot2] invoke rotationx, mat1,[rot2]
jmp show jmp show
notup: notup:
cmp ax,5000h cmp ax,5000h
jne notdown jne notdown
call [cs:rotationx],offset mat1,[rot1] invoke rotationx, mat1,[rot1]
jmp show jmp show
notdown: notdown:
cmp ax,4B00h cmp ax,4B00h
jne notleft jne notleft
call [cs:rotationy],offset mat1,[rot1] invoke rotationy, mat1,[rot1]
jmp show jmp show
notleft: notleft:
cmp ax,4D00h cmp ax,4D00h
jne notright jne notright
call [cs:rotationy],offset mat1,[rot2] invoke rotationy, mat1,[rot2]
jmp show jmp show
notright: notright:
cmp ax,4900h cmp ax,4900h
jne notupup jne notupup
call [cs:rotationz],offset mat1,[rot1] invoke rotationz, mat1,[rot1]
jmp show jmp show
notupup: notupup:
cmp ax,5100h cmp ax,5100h
jne notdowndown jne notdowndown
call [cs:rotationz],offset mat1,[rot2] invoke rotationz, mat1,[rot2]
jmp show jmp show
notdowndown: notdowndown:
cmp ax,4A2Dh cmp ax,4A2Dh
@ -169,45 +154,45 @@ notminus:
fstp [camera.tz] fstp [camera.tz]
jmp show jmp show
notmaxus: notmaxus:
call [cs:identity],offset mat1 invoke identity, mat1
jmp rool jmp rool
show: show:
call [cs:transform],offset vertexp,offset mat1 invoke transform, vertexp, mat1
call [cs:transform],offset vertexnbp,offset mat1 invoke transform, vertexnbp, mat1
notmodify: notmodify:
call [cs:clearscreen] invoke clearscreen
call [cs:print],offset objectp invoke print, objectp
call [cs:draw3d_line],3,offset facenbp,offset vertexnbp,offset screen,offset camera,3 invoke draw3d_line,3, facenbp, vertexnbp, screen, camera,3
call [cs:draw3d_line],3,offset facenbp,offset vertexnbp2,offset screen,offset camera,3 invoke draw3d_line,3, facenbp, vertexnbp2, screen, camera,3
cmp [mode],0 cmp [mode],0
jne line jne line
call [cs:draw3d_point],offset vertexp,offset screen,offset camera,4 invoke draw3d_point, vertexp, screen, camera,4
jmp retrace jmp retrace
line: line:
cmp [mode],1 cmp [mode],1
jne hidden jne hidden
call [cs:draw3d_line],3,offset facep,offset vertexp,offset screen,offset camera,4 invoke draw3d_line,3, facep, vertexp, screen, camera,4
jmp retrace jmp retrace
hidden: hidden:
call [cs:draw3d_hidden],3,offset facep,offset vertexp,offset screen,offset camera,4 invoke draw3d_hidden,3, facep, vertexp, screen, camera,4
retrace: retrace:
call [cs:waitretrace] invoke waitretrace
call [cs:waitretrace] invoke waitretrace
jmp rool jmp rool
endee: endee:
call [cs:restorestate] invoke restorestate
retf retf
errorloading: errorloading:
push cs push cs
pop ds pop ds
call [cs:print],offset errorload invoke print, errorload
call [cs:bioswaitkey] invoke bioswaitkey
jmp endee jmp endee
errorload db '\c02Erreur au chargement du fichier 3D\l<Appuyez sur une touche>\c07',0 errorload db '\c02Erreur au chargement du fichier 3D\l<Appuyez sur une touche>\c07',0
filename find <"SPHERE.3DS",0,0,0,1,> filename find "SPHERE.3DS"
importing importing

View File

@ -1,21 +1,14 @@
model tiny,stdcall
p586N
locals
jumps
codeseg
option procalign:byte
include "..\include\mem.h" include "..\include\mem.h"
include "..\include\divers.h" include "..\include\divers.h"
org 0h org 0h
start: start:
header exe <"CE",1,0,0,,offset imports,,offset realstart> header exe 1
realstart: realstart:
call [savestate] invoke savestate
call [print],offset msg invoke print, msg
mov bp,1000h mov bp,1000h
xor di,di xor di,di
xor cx,cx xor cx,cx
@ -40,9 +33,9 @@ nokey:
div si div si
mov dx,ax mov dx,ax
push edx push edx
call [print],offset msg2 invoke print, msg2
call gauge call gauge
call [verifysector],cx invoke verifysector,cx
jc errors jc errors
je noprob je noprob
inc di inc di
@ -53,20 +46,20 @@ noprob:
enend: enend:
cmp di,0 cmp di,0
je noatall je noatall
call [print],offset error2 invoke print, error2
jmp someof jmp someof
noatall: noatall:
call [print],offset noerror invoke print, noerror
someof: someof:
mov ah,0 mov ah,0
int 16h int 16h
call [restorestate] invoke restorestate
retf retf
errors: errors:
call [print],offset error invoke print, error
mov ah,0 mov ah,0
int 16h int 16h
call [restorestate] invoke restorestate
retf retf
error db '\g10,10Erreur avec le lecteur de disquette !',0 error db '\g10,10Erreur avec le lecteur de disquette !',0
@ -88,10 +81,10 @@ gauge:
mov dx,ax mov dx,ax
push dx push dx
push 'Û' push 'Û'
push offset gauges push gauges
call [print] invoke print
pop dx ax pop dx ax
retn ret
max dw 2879 max dw 2879
sizeof dw 50 sizeof dw 50

View File

@ -1,10 +1,3 @@
model tiny,stdcall
p586N
locals
jumps
codeseg
option procalign:byte
include "..\include\mem.h" include "..\include\mem.h"
include "..\include\divers.h" include "..\include\divers.h"
include "..\include\graphic.h" include "..\include\graphic.h"
@ -12,29 +5,29 @@ include "..\include\graphic.h"
org 0h org 0h
start: start:
header exe <"CE",1,0,0,,offset imports,,offset realstart> header exe 1
realstart: realstart:
mov ax,0305h mov ax,0305h
mov bx,0008h mov bx,0008h
int 16h int 16h
call [savestate] invoke savestate
call [setvideomode],2 invoke setvideomode,2
xor ebp,ebp xor ebp,ebp
xor ax,ax xor ax,ax
mov fs,ax mov fs,ax
call [disablescroll] invoke disablescroll
adres: adres:
call [saveparamto],offset infos invoke saveparamto,infos
call [readsector],[sect],offset buffer invoke readsector,[sect], buffer
jnc adres2 jnc adres2
errtr: errtr:
call [setxy],0,[word ptr lastline] invoke setxy,0,word [lastline]
call [print],offset errordisk invoke print, errordisk
xor ax,ax xor ax,ax
int 16h int 16h
adres2: adres2:
call [saveparamto],offset infos invoke saveparamto, infos
mov al,[infos.lines] mov al,[infos.lines]
dec al dec al
mov [lastline],al mov [lastline],al
@ -45,13 +38,13 @@ shr al,2
mov [sizex],al mov [sizex],al
and bl,11b and bl,11b
mov [sizex2],bl mov [sizex2],bl
mov al,[infos.mode] mov al,[infos.modenum]
cmp al,[oldmode] cmp al,[oldmode]
je noinit je noinit
call [clearscreen] invoke clearscreen
mov [oldmode],al mov [oldmode],al
noinit: noinit:
call [setxy],0,0 invoke setxy,0,0
mov edi,ebp mov edi,ebp
mov bh,[lastline] mov bh,[lastline]
lines: lines:
@ -61,26 +54,26 @@ push edx
mov edx,edi mov edx,edi
mov dx,[sect] mov dx,[sect]
push edx push edx
push offset spaces push spaces
call [print] invoke print
mov dx,di mov dx,di
mov al,[sizex] mov al,[sizex]
mov esi,edi mov esi,edi
doaline: doaline:
push [dword ptr di+offset buffer] push dword [di+buffer]
push 8 push 8
call [showhex] invoke showhex
call [showchar],' ' invoke showchar,' '
inc edi inc edi
dec al dec al
jnz doaline jnz doaline
mov edi,esi mov edi,esi
push offset spaces2 push spaces2
call [print] invoke print
mov al,[sizex] mov al,[sizex]
doaline2: doaline2:
push [word ptr di+offset buffer] push word [di+buffer]
call [showchar] invoke showchar
inc edi inc edi
dec al dec al
jnz doaline2 jnz doaline2
@ -88,11 +81,11 @@ dec bh
je outes je outes
cmp [sizex2],0 cmp [sizex2],0
je lines je lines
call [addline] invoke addline
jmp lines jmp lines
outes: outes:
call [setxy],0,[word ptr lastline] invoke setxy,0,word [lastline]
call [print],offset menu invoke print,menu
waitkey: waitkey:
mov ax,0 mov ax,0
int 16h int 16h
@ -130,30 +123,30 @@ call [print],offset menu
suit5: suit5:
cmp ax,4000h cmp ax,4000h
jne suit6 jne suit6
call [writesector],[sect],offset buffer invoke writesector,[sect],buffer
jnc waitkey jnc waitkey
jmp errtr jmp errtr
suit6: suit6:
cmp ax,4100h cmp ax,4100h
jne suit7 jne suit7
mov [dword ptr pope],'TIDE' mov dword [pope],'TIDE'
call [setxy],0,[word ptr lastline] invoke setxy,0,word [lastline]
call [print],offset menu invoke print,menu
mov ax,0B800h mov ax,0B800h
mov es,ax mov es,ax
mov [xxyy2],3 mov [xxyy2],3
mov [xxyy],3 mov [xxyy],3
call calc1 invoke calc1
call calc2 invoke calc2
waitst: waitst:
mov ax,0 mov ax,0
int 16h int 16h
cmp ah,41h cmp ah,41h
jne tre jne tre
mov [dword ptr pope],' EUV' mov dword [pope],' EUV'
push cs push cs
pop es pop es
call [writesector],[sect],offset buffer invoke writesector,[sect],buffer
jnc waitkey jnc waitkey
jmp errtr jmp errtr
tre: tre:
@ -190,14 +183,14 @@ je waitst
dec [xx] dec [xx]
jmp cursor jmp cursor
write: write:
call asciihex2dec invoke asciihex2dec
cmp cl,15 cmp cl,15
ja waitst ja waitst
call calc1 invoke calc1
call calc2 invoke calc2
mov edi,[es:bx-1] mov edi,[es:bx-1]
mov dx,[es:si-1] mov dx,[es:si-1]
mov [byte ptr es:bx],0112 mov byte [es:bx],0112
mov [es:bx-1],al mov [es:bx-1],al
writs: writs:
mov ax,0 mov ax,0
@ -229,7 +222,7 @@ jmp waitst
suit7: suit7:
cmp ax,4200h cmp ax,4200h
jne adres jne adres
call [restorestate] invoke restorestate
retf retf
calc1: calc1:
push ax dx si push ax dx si
@ -245,11 +238,11 @@ shl bx,5
shl dx,7 shl dx,7
add bx,dx add bx,dx
add bx,ax add bx,ax
mov [byte ptr es:bx],112 mov byte [es:bx],112
mov [byte ptr es:bx+2],112 mov byte [es:bx+2],112
mov si,[xxyy] mov si,[xxyy]
mov [byte ptr es:si],07 mov byte [es:si],07
mov [byte ptr es:si+2],07 mov byte [es:si+2],07
mov [xxyy],bx mov [xxyy],bx
pop si dx ax pop si dx ax
ret ret
@ -264,9 +257,9 @@ mov dx,[xx]
shl dx,1 shl dx,1
add si,dx add si,dx
add si,129 add si,129
mov [byte ptr es:si],112 mov byte [es:si],112
mov bx,[xxyy2] mov bx,[xxyy2]
mov [byte ptr es:bx],07 mov byte [es:bx],07
mov [xxyy2],si mov [xxyy2],si
pop dx bx ax pop dx bx ax
ret ret
@ -278,7 +271,7 @@ calc3:
shl dx,4 shl dx,4
add bx,dx add bx,dx
add bx,bp add bx,bp
add bx,offset buffer add bx,buffer
pop dx pop dx
ret ret
@ -324,7 +317,7 @@ spaces2 db '\c04 | \c07',0
showbuffer db 35 dup (0FFh) showbuffer db 35 dup (0FFh)
oldmode db 0 oldmode db 0
sect dw 0 sect dw 0
infos vgainf <> infos vgainf
importing importing
use DISQUE,readsector use DISQUE,readsector
@ -342,10 +335,3 @@ use VIDEO.LIB,showhex
use VIDEO.LIB,showchar use VIDEO.LIB,showchar
endi endi