[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