window
parent
03b2e723b0
commit
c556977497
Binary file not shown.
@ -0,0 +1,286 @@
|
|||||||
|
[org 0x1000]
|
||||||
|
|
||||||
|
start:
|
||||||
|
mov [bootdev], dl
|
||||||
|
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, 124Dh
|
||||||
|
mov bh, 3Eh
|
||||||
|
int 10h
|
||||||
|
|
||||||
|
mov ah, 06h ;draw shadow
|
||||||
|
mov cx, 1302h
|
||||||
|
mov dx, 134Eh
|
||||||
|
mov bh, 0Eh
|
||||||
|
int 10h
|
||||||
|
mov ah, 06h ;draw shadow
|
||||||
|
mov cx, 024Eh
|
||||||
|
mov dx, 134Eh
|
||||||
|
mov bh, 0Eh
|
||||||
|
int 10h
|
||||||
|
|
||||||
|
|
||||||
|
; menu bottom
|
||||||
|
mov ah, 06h ;draw rect on background
|
||||||
|
mov cx, 1700h
|
||||||
|
mov dx, 184Fh
|
||||||
|
mov bh, 3Fh
|
||||||
|
int 10h
|
||||||
|
|
||||||
|
mov ah, 02h ;sets cursor to top to write
|
||||||
|
mov bh, 0h
|
||||||
|
mov dh, 17h
|
||||||
|
mov dl, 2h
|
||||||
|
int 10h
|
||||||
|
mov si, menuhelp
|
||||||
|
call print
|
||||||
|
|
||||||
|
mov si, menuselect
|
||||||
|
call print
|
||||||
|
|
||||||
|
mov si, menuexit
|
||||||
|
call print
|
||||||
|
|
||||||
|
mov si, menuenter
|
||||||
|
call print
|
||||||
|
|
||||||
|
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
|
||||||
|
cmp ah, 1Ch
|
||||||
|
je loadproject
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
loadproject:
|
||||||
|
mov bx, [currentselection]
|
||||||
|
cmp bx, 0
|
||||||
|
je .one
|
||||||
|
cmp bx, 8
|
||||||
|
je .two
|
||||||
|
cmp bx, 16
|
||||||
|
je .three
|
||||||
|
cmp bx, 24
|
||||||
|
je .four
|
||||||
|
cmp bx, 32
|
||||||
|
je .five
|
||||||
|
cmp bx, 40
|
||||||
|
je .six
|
||||||
|
|
||||||
|
jmp waitforkey
|
||||||
|
|
||||||
|
.one
|
||||||
|
mov bx, 0x2000 ; BX = 0x1000. ES:BX=0x0:0x1000
|
||||||
|
mov cl, 04 ; Sector to read = 4
|
||||||
|
jmp load
|
||||||
|
.two
|
||||||
|
mov bx, 0x3000 ; BX = 0x1000. ES:BX=0x0:0x1000
|
||||||
|
mov cl, 05 ; Sector to read = 4
|
||||||
|
jmp load
|
||||||
|
.three
|
||||||
|
mov bx, 0x4000 ; BX = 0x1000. ES:BX=0x0:0x1000
|
||||||
|
mov cl, 06 ; Sector to read = 4
|
||||||
|
jmp load
|
||||||
|
.four
|
||||||
|
mov bx, 0x5000 ; BX = 0x1000. ES:BX=0x0:0x1000
|
||||||
|
mov cl, 07 ; Sector to read = 4
|
||||||
|
jmp load
|
||||||
|
.five
|
||||||
|
mov bx, 0x6000 ; BX = 0x1000. ES:BX=0x0:0x1000
|
||||||
|
mov cl, 08 ; Sector to read = 4
|
||||||
|
jmp load
|
||||||
|
.six
|
||||||
|
mov bx, 0x7000 ; BX = 0x1000. ES:BX=0x0:0x1000
|
||||||
|
mov cl, 09 ; Sector to read = 4
|
||||||
|
jmp load
|
||||||
|
|
||||||
|
|
||||||
|
load:
|
||||||
|
pushf
|
||||||
|
stc
|
||||||
|
|
||||||
|
mov ah,00
|
||||||
|
int 13h
|
||||||
|
|
||||||
|
.read_sector:
|
||||||
|
mov ax, 0x0
|
||||||
|
mov es, ax ; ES = 0
|
||||||
|
; ES:BX = starting address to read sector(s) in$
|
||||||
|
mov ah, 02 ; Int 13h/AH=2 = Read Sectors From Drive;
|
||||||
|
mov al, 0x01 ; Sectors to read = 1
|
||||||
|
mov ch, 00 ; CH=Cylinder. Second sector of disk
|
||||||
|
; is at Cylinder 0 not 1
|
||||||
|
mov dh, 00 ; Head to read = 0
|
||||||
|
|
||||||
|
mov dl, [bootdev]
|
||||||
|
int 13h
|
||||||
|
|
||||||
|
|
||||||
|
jc wolf_error
|
||||||
|
popf
|
||||||
|
jmp bx
|
||||||
|
cli
|
||||||
|
hlt
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
wolf_error:
|
||||||
|
mov si, wolf_error_msg
|
||||||
|
call print
|
||||||
|
mov si, wolf_error_msg1
|
||||||
|
call print
|
||||||
|
mov ah,00
|
||||||
|
int 16h
|
||||||
|
xor ax,ax
|
||||||
|
int 19h
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
print:
|
||||||
|
lodsb
|
||||||
|
or al,al
|
||||||
|
jz exit
|
||||||
|
mov ah,0x0e
|
||||||
|
int 10h
|
||||||
|
jmp print
|
||||||
|
exit:
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
goback:
|
||||||
|
mov dl, [bootdev]
|
||||||
|
jmp 0x0:0x0000
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
msg1 db "ARTIST / TITLE",0
|
||||||
|
|
||||||
|
project1 db "Alex / Poetic Software",0
|
||||||
|
project2 db "Alice / f00d",0
|
||||||
|
project3 db "Angeliki / Voices", 0
|
||||||
|
project4 db "Joca / Ghost in the Speaker", 0
|
||||||
|
project5 db "Tash / Silence making", 0
|
||||||
|
project6 db "Zalan / Phantasmagoria", 0
|
||||||
|
|
||||||
|
projects dq project1, project2, project3, project4, project5, project6
|
||||||
|
|
||||||
|
menuhelp db "F1 Help", 0
|
||||||
|
menuselect db " W/S Select Item",0
|
||||||
|
menuexit db 0x0D,0x0A," ESC Exit", 0
|
||||||
|
menuenter db " Enter Select",0
|
||||||
|
|
||||||
|
wolf_error_msg db 'Program not found!',0x0D,0x0A,0
|
||||||
|
wolf_error_msg1 db 'Press any key to restart..',0
|
||||||
|
|
||||||
|
currentselection dw 0
|
||||||
|
storebx dw 0
|
||||||
|
|
||||||
|
bootdev db 0x80 ; Boot device number
|
||||||
|
|
||||||
|
%assign usedMemory ($-$$)
|
||||||
|
%assign usableMemory (512*16)
|
||||||
|
%warning [usedMemory/usableMemory] Bytes used
|
||||||
|
times (512*16)-($-$$) db 0 ;kernel must have size multiple of 512 so let's pad it to the correct size
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue