You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

170 lines
3.1 KiB
NASM

[org 0x1000]
start:
mov ah, 01h ;make cursor invisible
mov cx, 2607h
int 10h
mov ah, 06h ; Scroll up function
xor al, al ; Clear entire screen
xor cx, cx ; Upper left corner CH=row, CL=column
mov dx, 184FH ; lower right corner DH=row, DL=column
mov bh, 1Eh ; YellowOnBlue
int 10H ; execute interrupt
mov ah, 06h ;draw rect on background
mov cx, 0101h
mov dx, 164Dh
mov bh, 3Eh
int 10h
mov ah, 06h ;draw shadow
mov cx, 1702h
mov dx, 174Eh
mov bh, 0Eh
int 10h
mov ah, 06h ;draw shadow
mov cx, 024Eh
mov dx, 174Eh
mov bh, 0Eh
int 10h
mov ah, 02h ;sets cursor to top to write
mov bh, 0h
mov dh, 1h
mov dl, 1h
int 10h
mov al, 0xC9 ;draw border
mov bl, 0x03
mov ah,0x0e
int 10h
mov al, 0xCD
mov bl, 0x03
mov ah,0x0e
int 10h
mov ah, 02h ;sets cursor to top to write
mov bh, 0h
mov dh, 4h
mov dl, 4h
int 10h
mov si, msg1
call print
print_projects:
mov ah, 02h ;sets cursor to top to write
mov bh, 0h
mov dh, 6h ;row
mov dl, 4h ;col
int 10h
xor bx, bx ; Starting at offset zero
lea di, [projects] ; RDI now has the address of the array
.loop
mov [storebx], bx
mov ah, 02h
;mov bh, 0h
add dh, 1h ;move cursor down
mov dl, 4h;
int 10h
mov ax, [currentselection]
cmp ax, bx
jne .normalbackground
mov ah, 06h ;draw rect on background
mov ch, dh
mov cl, 4h
mov dl, 24h
mov bh, 7Ch
int 10h
jmp .drawstring
.normalbackground
mov ah, 06h ;draw rect on background
mov ch, dh
mov cl, 4h
mov dl, 24h
mov bh, 1Eh
int 10h
jmp .drawstring
.drawstring
mov bx, [storebx]
mov si, [di+bx] ; Get the address of string1
call print
add bx, 8
cmp bx, 48
jne .loop
jmp waitforkey
waitforkey:
mov ah, 0x00
int 0x16
cmp ah, 1Fh
je .up
cmp ah, 11h
je .down
jmp waitforkey
.up
mov ax, [currentselection]
cmp ax, 40
je .reup
add ax, 8
mov [currentselection], ax
jmp print_projects
.reup
mov ax, 0
mov [currentselection], ax
jmp print_projects
.down
mov ax, [currentselection]
cmp ax, 0
je .redown
sub ax, 8
mov [currentselection], ax
jmp print_projects
.redown
mov ax, 40
mov [currentselection], ax
jmp print_projects
print:
lodsb
or al,al
jz exit
;mov bl, 0x03
mov ah,0x0e
int 10h
jmp print
exit:
ret
msg1 db " X P U B",0x0A,0
msg2 db " NOT MY DEFAULT",0x0D,0x0A,0
project1 db "Alex / Poetic Software", 0x0A,0
project2 db "Tash / Silence Making", 0x0A,0
project3 db "Alice / F00d", 0x0A,0
project4 db "Joca / The ghost in the speaker", 0x0A,0
project5 db "Angeliki / Voices", 0x0A,0
project6 db "Zalan / Phantasmagoria", 0x0A,0
projects dq project1, project2, project3, project4, project5, project6
currentselection dw 0
storebx dw 0