[ org 0x7000 ]
start:
mov [ bootdev ], dl
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 , 0Fh ; YellowOnBlue
int 10H ; execute interrupt
mov al , 182 ; meaning that we're about to load
out 43h , al ; prepare speaker for output
mov ax , 2153 ; frequency countdown value is stored in ax. It is calculated by
out 42h , al ; Output low byte.
mov al , ah ; Output high byte.
out 42h , al
in al , 61h
or al , 00000011b
out 61h , al ; Send the new value
; mov bx, 200 ; Pause for duration of note.
mov al , 0
mov ah , 86h
mov cx , 1
mov dx , 200
int 15h
in al , 61h ; Turn off note (get value from
; port 61h).
and al , 11111100b ; Reset bits 1 and 0.
out 61h , al ; Send new value.
mov ah , 02h ;top bar setting the position and then write title $
mov bh , 0h
mov dh , 0h
mov dl , 20h
int 10h
mov si , title
call print
mov ah , 02h ;sets cursor to top to write
mov bh , 0h
mov dh , 17h
mov dl , 2h
int 10h
mov si , menuexit
call print
main:
mov bx , 1
mov ah , 06h ;draw rect on background
mov cx , 060Fh
mov dx , 103Bh
mov bh , 87h
int 10h
push dx
push cx
mov si , description
call printinrect
pop cx
pop dx
push dx
push cx
call drawshadow
jmp waitforkey
pop cx
pop dx
drawshadow:
push cx
push dx
mov al , dl
mov ah , ch
inc ah
inc al
mov cx , ax
mov bl , dl
mov bh , dh
inc bl
inc bh
mov dx , bx
mov ah , 06h ;draw shadow
mov bh , 70h
int 10h
pop dx
pop cx
mov al , cl
mov ah , dh
inc ah
inc al
mov cx , ax
mov bl , dl
mov bh , dh
inc bl
inc bh
mov dx , bx
mov ah , 06h ;draw shadow
mov bh , 70h
int 10h
ret
printinrect:
mov ax , 0
mov [ writtenchars ], ax
push cx
mov bx , dx
push bx
mov ah , 02h ;sets cursor to top to write
mov bh , 0h
mov dh , ch
mov dl , cl
int 10h
.loop:
mov ax , [ writtenchars ]
inc ax
mov [ writtenchars ], ax
lodsb ; load next char
mov bh , 0
mov ah , 0x03
int 10h ;read cursor position
push dx
pop dx
pop bx
cmp dh , bh ;comp for scroll
jg .stop
push bx
push dx
or al , al
jz .exit
mov bx , [ writtenchars ]
cmp bx , [ scrollchars ]
jg .writechar
.continue:
pop dx
pop bx
cmp dl , bl ;if caracter over width of rect
je .newline ; go to next line
push bx
jmp .loop
.writechar:
mov ah , 0x0e
mov bh , 0x00
mov cx , 0x01
int 10h ;write char
jmp .continue
.stop:
pop cx
ret
.exit:
pop dx
pop bx
pop cx
ret
.newline:
pop cx
push bx
mov dl , cl ;set column
inc dh ;increment row by one, works!
mov ah , 02h ;sets cursor
mov bh , 0h ;page number 0 constant
int 10h
pop bx
push cx
push bx
jmp .loop
print:
lodsb
or al , al
jz .exit
mov ah , 0x0e
int 10h
jmp print
.exit:
ret
waitforkey:
mov ah , 0x00
int 0x16
cmp ah , 01h
je exit
jmp waitforkey
exit:
in al , 61h ; Turn off note (get value from
; port 61h).
and al , 11111100b ; Reset bits 1 and 0.
out 61h , al ; Send new value.
mov dl , [ bootdev ]
jmp 0x0 : 0x1000
bootdev db 0x80 ; Boot device number
description db "Eigengrau challenges the default mode of rituals in the club space through an intervention that involves a collective experience while creating a transcendental oneness for body and soul through help of light, sound, and space."
scroll db 1
scrollchars dw 0
writtenchars dw 0
menuhelp db "F1 Help" , 0
menuselect db " " , 0x18 , "/" , 0x19 , " Select Item" , 0
menuexit db 0x0D , 0x0A , " ESC Exit" , 0
menuenter db " Enter Select" , 0
title db "UPSETTING SETTINGS" , 0