From 04bd31ca35775e4dfd8f6cb00eb200d53764e381 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 27 Apr 2019 00:13:04 +0200 Subject: [PATCH] added scroll on textfield --- Makefile | 28 ++-- boot.asm | 2 +- boot.bin | Bin 512 -> 512 bytes disk.img | Bin 737280 -> 737280 bytes program.asm | 85 ++++++++-- program.asm.backup | 406 +++++++++++++++++++++++++++++++++++++++++++++ program.bin | Bin 8192 -> 8192 bytes 7 files changed, 490 insertions(+), 31 deletions(-) create mode 100755 program.asm.backup diff --git a/Makefile b/Makefile index 1570737..4746701 100755 --- a/Makefile +++ b/Makefile @@ -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 diff --git a/boot.asm b/boot.asm index 2376f89..75cd841 100755 --- a/boot.asm +++ b/boot.asm @@ -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 diff --git a/boot.bin b/boot.bin index a98ff5364ea13c27047f5b26ef26eab91fb329dc..f084039018e1bb77d1d4913ce0a4b5b3cb76f4e8 100644 GIT binary patch delta 12 TcmZo*X<(U9&B(H`riBpz7?cCc delta 12 TcmZo*X<(U9&B(m5riBpz7>@(W diff --git a/disk.img b/disk.img index 177649c9a8aeef79977865dd46c5bdd2cd3e8d18..c94ac78b82ca3eb1066e85e749025d90d84e2d0f 100755 GIT binary patch delta 672 zcmY+APe>GD7{=f4+jabQrQLD19V=|xNWzQ-z4V9mAA0E2pLK=W_0p-6ENhIXgdJKL z)+C7L)S+Opy5ynJ!BGb$X+y+iDC{Cd5Ow)%qLYH;=Jd@fLEq)&dA|4e^6_L>6Qw=aA|kzrt*A)5aDBr+=Vu%51$z2GbDr+{{IGW{G8M~-I+jnl7bKBR$3mXIFs(?PsR0Suw2;hC(a{nWM5wuS9 zxr6_Zb9E%J*j`7@x+d~^5?CK$ZaK*td7B?fS>*^_gG_cPMN6}Imlu~Bu{7w<^8 zCd4()Ib%Yn*66gF(613EYQhaI;Dk)Ltp%M%6Y^S<`pnlN=0!Vlx8bS#{r9%jEz(zD zr9}Edt@;KEUT9lLO?^yz?UsI()>(D7(9g_S19TtDksZ0TUua7YkrgRE9kYdGtSS@& z%>5)CO*6oM7v YQ;1(74GQ5D(x?#T2NV)~Nt!PF1$0IMp#T5? delta 586 zcmXX?PiWIn82?_Hrs>nRX}V-Pj5^T6Pzu{+C_1~epmFqnl`Adu5axu1 z;q`ymGMNqZ3L0=vj>{x5AAH)|`*rB-O0)#d4~ec+8FqRmQ+}WIPgeR~+95*C0yE$Z z!nYLBj9RdTfC%}**-uI+>we1@a_wBUwDWh{uOLDplXXeW^KxdC2<}na@3b~2Y8~%5 zkN+IN62M`Vu+L847NH-j1FQ|u8Q_-zcEp!Yf^V1=tYf5OM#ljivpNpynA34c$Gnci OI>yiOv8nZqA?6<)SKx^N diff --git a/program.asm b/program.asm index 397d0e7..263f343 100755 --- a/program.asm +++ b/program.asm @@ -138,12 +138,24 @@ waitforkey: jmp waitforkey .up + mov ax, [helpon] + cmp ax, 1 + je .uphelp mov ax, [currentselection] cmp ax, 40 je .reup add ax, 8 mov [currentselection], ax - jmp print_projects + 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 @@ -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 diff --git a/program.asm.backup b/program.asm.backup new file mode 100755 index 0000000..397d0e7 --- /dev/null +++ b/program.asm.backup @@ -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 diff --git a/program.bin b/program.bin index bd7c77a4e189144b9eeb5982552a26fa5d06ff3a..01dd1cd6fc789bfbe49af8e183929c07cb1711ef 100644 GIT binary patch delta 614 zcmY+BF=!KE6vy9pjn^cFYi$|}`!C4HHkZ>qEL! zZWr)1M)wLh%=9~K4IAzFz~hSp&00GAIB6U3vym54lS^l6n#GA^BQw^Ti`1 zj?;O?qmX#ExMg3>3j0fDsN-JWnXh+w^l`PzlgI{u^>NSqj{r*GJ~3x5{6ntv5ywWT zk6bo2WTnK@INWSA!l`+KOT_iM2e%=WPQ-B;_7}}mx*EvV7Ey3=%G4kzv*eNn)AA_s zYY>y|#H+y_*+EH@j|=!!t&8Rh*3t$a zuY5{c;g)}uJ2W|ik5O|?1!aWpkV6haC&`ZDQehK; z!I7V-RyvbvrIO{&$+k7l;4<+fd9y}IR&mje!`2hJ%pf0kDf;J!6CMK`03d)`j(Iux ajfeg_9@a6>K%XDh*v4pZcDRy-gHb#Y# zi(owzy$CtDam=<^SOb9yh4JD+QL11sQwKaq3sG0s*)?-{^X9!j|No~K^g`TJ)2ahd z&n>LPk1fAd=s^LC8%XG$mF+x{XajKy+~*42 zMs7!;?@{Q8v?JV6lj)oPTnzZkrw4gCQ_rPTEa;mkcv?%Sr#>ttv1smFk@gXL1uM%b zwJ}3)BBLKOeorsGW`KdHx_3yM(7m*FT=%ltyzZgYooh(S?0T?BHeu2t`X@%(VflE1AQo0=v`p-MlR88 zpvjB#z5|oiC_C)Hv?a2v0|hI}6bH^*F_v`TiZ#Zf4%DnTgVmpW+6?diu!n^g=oNI} z9uJsg7Du1>JHPhaZH1cP{!r-crXbAD73=RxL1N~2bBjnV8}JApB-YbpoU~yB0g)=z zlOMHciG8h9%l&f6-1@s2R1m3JEHTpJUJ)mW#P<6^r?myy81Qf&{rLtr0QQ