added scroll on textfield

master
Your Name 6 years ago
parent 69d42084f2
commit 04bd31ca35

@ -16,24 +16,24 @@ image : compile
sudo dd if=/dev/zero of=disk.img bs=1024 count=720
#cat boot.bin program.bin > exe.bin
sudo dd if=boot.bin of=disk.img bs=512 count=1 conv=notrunc
sudo dd if=program.bin of=disk.img bs=512 seek=1 count=3 conv=notrunc
sudo dd if=software.bin of=disk.img bs=512 seek=4 count=1 conv=notrunc
sudo dd if=food.bin of=disk.img bs=512 seek=5 count=1 conv=notrunc
sudo dd if=beep.bin of=disk.img bs=512 seek=6 count=1 conv=notrunc
sudo dd if=voice.bin of=disk.img bs=512 seek=7 count=1 conv=notrunc
sudo dd if=silence.bin of=disk.img bs=512 seek=8 count=1 conv=notrunc
sudo dd if=light.bin of=disk.img bs=512 seek=9 count=1 conv=notrunc
sudo dd if=program.bin of=disk.img bs=512 seek=1 count=4 conv=notrunc
sudo dd if=software.bin of=disk.img bs=512 seek=5 count=1 conv=notrunc
sudo dd if=food.bin of=disk.img bs=512 seek=6 count=1 conv=notrunc
sudo dd if=beep.bin of=disk.img bs=512 seek=7 count=1 conv=notrunc
sudo dd if=voice.bin of=disk.img bs=512 seek=8 count=1 conv=notrunc
sudo dd if=silence.bin of=disk.img bs=512 seek=9 count=1 conv=notrunc
sudo dd if=light.bin of=disk.img bs=512 seek=10 count=1 conv=notrunc
flashusb : image
sudo dd if=boot.bin of=/dev/sdb bs=512 count=1
sudo dd if=program.bin of=/dev/sdb bs=512 seek=1 count=2
sudo dd if=software.bin of=/dev/sdb bs=512 seek=3 count=1
sudo dd if=food.bin of=/dev/sdb bs=512 seek=4 count=1
sudo dd if=beep.bin of=/dev/sdb bs=512 seek=5 count=1
sudo dd if=voice.bin of=/dev/sdb bs=512 seek=6 count=1
sudo dd if=silence.bin of=/dev/sdb bs=512 seek=7 count=1
sudo dd if=light.bin of=/dev/sdb bs=512 seek=8 count=1
sudo dd if=program.bin of=/dev/sdb bs=512 seek=1 count=4
sudo dd if=software.bin of=/dev/sdb bs=512 seek=5 count=1
sudo dd if=food.bin of=/dev/sdb bs=512 seek=6 count=1
sudo dd if=beep.bin of=/dev/sdb bs=512 seek=7 count=1
sudo dd if=voice.bin of=/dev/sdb bs=512 seek=8 count=1
sudo dd if=silence.bin of=/dev/sdb bs=512 seek=9 count=1
sudo dd if=light.bin of=/dev/sdb bs=512 seek=10 count=1
# sudo dd if=exe.bin of=/dev/sdb bs=512 count=4

@ -79,7 +79,7 @@ load_it_all_1:
mov bx, 0x1000 ; BX = 0x1000. ES:BX=0x0:0x1000
; ES:BX = starting address to read sector(s) into
mov ah, 02 ; Int 13h/AH=2 = Read Sectors From Drive
mov al, 0x03 ; Sectors to read = 1
mov al, 0x04 ; Sectors to read = 1
mov ch, 00 ; CH=Cylinder. Second sector of disk
; is at Cylinder 0 not 1
mov cl, 02 ; Sector to read = 2

Binary file not shown.

Binary file not shown.

@ -138,6 +138,9 @@ waitforkey:
jmp waitforkey
.up
mov ax, [helpon]
cmp ax, 1
je .uphelp
mov ax, [currentselection]
cmp ax, 40
je .reup
@ -145,6 +148,15 @@ waitforkey:
mov [currentselection], ax
jmp print_projects
.uphelp
sub dl, cl
movzx dx, dl
inc dx
mov ax, [scrollchars]
add ax, dx
mov [scrollchars], ax
jmp help
.reup
mov ax, 0
mov [currentselection], ax
@ -152,6 +164,9 @@ waitforkey:
.down
mov ax, [helpon]
cmp ax, 1
je .downhelp
mov ax, [currentselection]
cmp ax, 0
je .redown
@ -159,6 +174,15 @@ waitforkey:
mov [currentselection], ax
jmp print_projects
.downhelp
sub dl, cl
movzx dx, dl
inc dx
mov ax, [scrollchars]
sub ax, dx
mov [scrollchars], ax
jmp help
.redown
mov ax, 40
mov [currentselection], ax
@ -169,8 +193,8 @@ help:
mov bx, 1
mov [helpon], bx
mov ah, 06h ;draw rect on background
mov cx, 040Fh
mov dx, 113Eh
mov cx, 060Fh
mov dx, 103Bh
mov bh, 70h
int 10h
push dx
@ -179,9 +203,12 @@ help:
call printinrect
pop cx
pop dx
push dx
push cx
call drawshadow
jmp waitforkey
pop cx
pop dx
loadproject:
mov bx, [currentselection]
@ -202,27 +229,27 @@ loadproject:
.one
mov bx, 0x2000 ; BX = 0x1000. ES:BX=0x0:0x1000
mov cl, 05 ; Sector to read = 4
mov cl, 06 ; Sector to read = 4
jmp load
.two
mov bx, 0x3000 ; BX = 0x1000. ES:BX=0x0:0x1000
mov cl, 06 ; Sector to read = 4
mov cl, 07 ; Sector to read = 4
jmp load
.three
mov bx, 0x4000 ; BX = 0x1000. ES:BX=0x0:0x1000
mov cl, 07 ; Sector to read = 4
mov cl, 08 ; Sector to read = 4
jmp load
.four
mov bx, 0x5000 ; BX = 0x1000. ES:BX=0x0:0x1000
mov cl, 08 ; Sector to read = 4
mov cl, 09 ; Sector to read = 4
jmp load
.five
mov bx, 0x6000 ; BX = 0x1000. ES:BX=0x0:0x1000
mov cl, 09 ; Sector to read = 4
mov cl, 10 ; Sector to read = 4
jmp load
.six
mov bx, 0x7000 ; BX = 0x1000. ES:BX=0x0:0x1000
mov cl, 10 ; Sector to read = 4
mov cl, 11 ; Sector to read = 4
jmp load
@ -308,6 +335,8 @@ drawshadow:
ret
printinrect:
mov ax, 0
mov [writtenchars], ax
push cx
mov bx, dx
push bx
@ -317,23 +346,43 @@ printinrect:
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 ah, 0x0e
mov bh, 0x00
mov cx, 0x01
int 10h
mov bx, [writtenchars]
cmp bx, [scrollchars]
jg .writechar
.continue:
pop dx
pop bx
cmp dl, bl
je .newline
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
@ -372,6 +421,10 @@ goback:
helpon dw 0
scroll db 1
scrollchars dw 0
writtenchars dw 0
msg1 db "ARTIST / TITLE",0
project1 db "Alex / Poetic Software",0

@ -0,0 +1,406 @@
[org 0x1000]
start:
mov [bootdev], dl
mov bx, 0
mov [helpon], bx
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; top bar, make background
xor cx, cx
mov dx, 0x004F
mov bh, 30h
int 10h
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, 06h ;draw rect on background
mov cx, 0201h
mov dx, 124Dh
mov bh, 3Eh
int 10h
call drawshadow
; 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
cmp ah, 01h
je goback
cmp ah, 3Bh
je help
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
help:
mov bx, 1
mov [helpon], bx
mov ah, 06h ;draw rect on background
mov cx, 040Fh
mov dx, 113Eh
mov bh, 70h
int 10h
push dx
push cx
mov si, helptext
call printinrect
pop cx
pop dx
call drawshadow
jmp waitforkey
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, 05 ; Sector to read = 4
jmp load
.two
mov bx, 0x3000 ; BX = 0x1000. ES:BX=0x0:0x1000
mov cl, 06 ; Sector to read = 4
jmp load
.three
mov bx, 0x4000 ; BX = 0x1000. ES:BX=0x0:0x1000
mov cl, 07 ; Sector to read = 4
jmp load
.four
mov bx, 0x5000 ; BX = 0x1000. ES:BX=0x0:0x1000
mov cl, 08 ; Sector to read = 4
jmp load
.five
mov bx, 0x6000 ; BX = 0x1000. ES:BX=0x0:0x1000
mov cl, 09 ; Sector to read = 4
jmp load
.six
mov bx, 0x7000 ; BX = 0x1000. ES:BX=0x0:0x1000
mov cl, 10 ; 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
;------------;
;ch=row ;
;cl=column ;
;dh=row ;
;dl=column ;
;------------;
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, 0Ch
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, 0Ch
int 10h
ret
printinrect:
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:
lodsb ; load next char
mov bh, 0
mov ah, 0x03
int 10h ;read cursor position
push dx
or al,al
jz .exit
mov ah, 0x0e
mov bh, 0x00
mov cx, 0x01
int 10h
pop dx
pop bx
cmp dl, bl
je .newline
push bx
jmp .loop
.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
goback:
mov dl, [bootdev]
mov ax, [helpon]
cmp ax, 1
je start
jmp 0x0:0x7c00
hlt
helpon dw 0
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
helptext db "NOT MY DEFAULT arises from the defaults of computers. In every application there are settings predefined by their creators, that most of the times stay untouched by us, as users. It's their default, not ours, but it's our fault when we don't change it. Society is made of similar preset frameworks that we take for granted. The graduation projects engage with these different default modes and intervene in their core structure/source/root. You are invited to become root users, active listeners, smart speakers, conscious food consumers, counter trolls, sensorial spectators!",0
menuhelp db "F1 Help", 0
menuselect db " W/S Select Item",0
menuexit db 0x0D,0x0A," ESC Exit", 0
menuenter db " Enter Select",0
title db 'NOT MY DEFAULT',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.
Loading…
Cancel
Save