cos2000v1/programs/editeur.asm

342 lines
5.2 KiB
NASM

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