Small operating system made in assembly language
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

367 lines
9.6 KiB

.model tiny
.386c
.code
org 0100h
colores equ 7
logoY equ 064h
logo2X equ 0A0h
logo2Y equ 064h
ecartlogo2 equ 13Eh
logocoordsize equ 0B40h
logo2coordsize equ 26Ch
zoomout equ 43h
start:
;mov ax,cs
mov ax,01000h
mov ds,ax
mov es,ax
mov gs,ax
mov ax,13h
int 10h
mov dx,3C8h
mov al,7
out dx,al
inc dx
xor al,al
out dx,al
out dx,al
out dx,al
mov si,offset logo2text
call showstr
mov ax,0A000h
mov ds,ax
push ds
push es
push gs
mov di,logo2coord
mov cx,logo2coordsize
xor si,si
xor dx,dx
xor bx,bx
loopcoord2:
lodsb
or al,al
jz nothingcoord2
mov ax,dx
sub ax,5Ah
stosw
mov ax,bx
sub ax,14h
stosw
inc gs:nblogo2
nothingcoord2:
add dx,3
cmp dx,0BAh
jne short loc_3
xor dx,dx
add si,102h
add bx,4
loc_3:
loop loopcoord2
pop ds
call zerocurs
mov si,offset data6
call showstr
pop es
pop ds
mov cx,logocoordsize
xor si,si
xor dx,dx
xor bx,bx
loopcoord:
lodsb
or al,al
jz nothingcoord
mov ax,dx
sub ax,32h
stosw
mov ax,bx
shl ax,1
sub ax,1Eh
stosw
inc gs:nblogo
nothingcoord:
inc dx
inc dx
cmp dx,60h
jne short loc_6
xor dx,dx
add si,110h
inc bx
loc_6:
loop loopcoord
push ds
pop es
push gs
pop ds
masterloop:
inc logox ;++++
inc data_10
mov bl,data_10
xor bh,bh
mov al,data_1[bx]
cbw
mov data_11,ax
add bl,zoomout
mov al,data_1[bx]
cbw
mov data_12,ax
mov cx,nblogo2
push cx
push cx
mov si,logo2coord
showlogo2:
lodsw
mov data_7,ax
lodsw
mov data_8,ax
mov data_9,0FFCEh
push cx
push si
mov si,offset data_8
push si
mov di,offset data_9
call sub_1
mov si,offset data_7
call sub_1
pop di
call sub_1
pop si
mov ax,100h
imul data_7
mov bx,data_9
add bx,140h
idiv bx
add ax,logo2X
mov bp,ax
mov ax,100h
imul data_8
mov bx,data_9
add bx,140h
idiv bx
add ax,logo2Y
mov bx,140h
imul bx
add ax,bp
mov di,ax
push si
sub si,logo2coord
shr si,1
mov ds:data_16e[si],di
pop si
mov bx,data_9
mov cl,4
shr bx,cl
pop cx
mov al,17h
sub al,bl
mov ah,al
stosw
add di,ecartlogo2
stosw
loop showlogo2
pop si
shl si,1
shl si,1
add si,logo2coord
mov cx,nblogo
showlogo:
push cx
lodsw
imul data_12
mov di,ax
lodsw
imul data_11
sub di,ax
mov cl,7
sar di,cl
add di,logoX
mov bx,di
sub si,4
lodsw
imul data_11
mov di,ax
lodsw
imul data_12
add di,ax
sar di,cl
add di,logoy
mov ax,140h
imul di
add ax,bx
mov di,ax
pop cx
mov ax,cx
shl ax,1
mov bx,data_17e
add bx,ax
mov [bx],di
mov al,28h
stosb
loop showlogo
mov dx,3DAh
synchro:
in al,dx
test al,8
jnz synchro
synchroagain:
in al,dx
test al,8
jz synchroagain
mov si,data_16e
pop cx
add cx,nblogo
add cx,14h
showlogo2effect:
lodsw
mov di,ax
xor ax,ax
stosw
add di,ecartlogo2
stosw
loop showlogo2effect
in al,60h
cmp al,1
je endofprog
jmp masterloop
endofprog:
mov ax,3
int 10h
int 20h
ret
sub_1 proc near
mov ax,[si]
imul data_12
mov bp,ax
mov ax,[di]
imul data_11
sub bp,ax
mov cl,7
sar bp,cl
push bp
mov ax,[si]
imul data_11
mov bp,ax
mov ax,[di]
imul data_12
add bp,ax
sar bp,cl
mov [di],bp
pop ax
mov [si],ax
retn
sub_1 endp
showcrlf:
push ax bx
mov ax, 0E0Dh
xor bx, bx
int 10h
mov al, 0Ah
int 10h
pop bx ax
ret
zerocurs:
push ax bx dx
mov ah,02h
mov bh,0
mov dx,0
int 10h
pop dx bx ax
ret
showstr:
push ax bx si
again:
lodsb
or al,al
jz fin
cmp al,0Dh
jne noret
call showcrlf
jmp again
noret:
mov ah,0Eh
mov bx,colores
int 10h
jmp again
fin:
pop si bx ax
ret
logoX dw 0A0h ;++++
data_1 db 0
db 03h, 06h, 09h, 0Ch, 10h, 13h
db 16h, 19h, 1Ch, 1Fh
db '"%(+.1369<?ADGILNQSUXZ\^`bdfhjkm'
db 'opqstuvxyzz{|}}~~~'
db 7 dup (7Fh)
db '~~~}}|{zzyxvutsqpomkjhfdb`^\ZXUS'
db 'QNLIGDA?<9631.+(%"'
db 1Fh, 1Ch, 19h, 16h, 13h, 10h
db 0Ch, 09h, 06h, 03h, 00h,0FDh
db 0FAh,0F7h,0F4h,0F0h,0EDh,0EAh
db 0E7h,0E4h,0E1h,0DEh,0DBh,0D8h
db 0D5h,0D2h,0CFh,0CDh,0CAh,0C7h
db 0C4h,0C1h,0BFh,0BCh,0B9h,0B7h
db 0B4h,0B2h,0AFh,0ADh,0ABh,0A8h
db 0A6h,0A4h,0A2h,0A0h, 9Eh, 9Ch
db 9Ah, 98h, 96h, 95h, 93h, 91h
db 90h, 8Fh, 8Dh, 8Ch, 8Bh, 8Ah
db 88h, 87h, 86h, 86h, 85h, 84h
db 83h, 83h, 82h, 82h, 82h, 81h
db 81h, 81h, 81h, 81h, 81h, 81h
db 82h, 82h, 82h, 83h, 83h, 84h
db 85h, 86h, 86h, 87h, 88h, 8Ah
db 8Bh, 8Ch, 8Dh, 8Fh, 90h, 91h
db 93h, 95h, 96h, 98h, 9Ah, 9Ch
db 9Eh,0A0h,0A2h,0A4h,0A6h,0A8h
db 0ABh,0ADh,0AFh,0B2h,0B4h,0B7h
db 0B9h,0BCh,0BFh,0C1h,0C4h,0C7h
db 0CAh,0CDh,0CFh,0D2h,0D5h,0D8h
db 0DBh,0DEh,0E1h,0E4h,0E7h,0EAh
db 0EDh,0F0h,0F4h,0F7h,0FAh,0FDh
logo2text db 'Cos 2000' ,0
data6 db 'Speedy', 0dh,0dh
data61 db 'System' ,0dh,0Dh
data62 db 'Inside' ,0
data_7 dw 0
data_8 dw 0
data_9 dw 0
data_10 db 0
data_11 dw 0
data_12 dw 0
nblogo2 dw 0
nblogo dw 0
data_15 = $ ;*
data_16 = $+9C4h ;*
data_17 = $+0B2Ch ;*
logo2coord = offset data_15 ;*
data_16e = offset data_16 ;*
data_17e = offset data_17 ;*
end start