diff --git a/Makefile b/Makefile index 4746701..6aeb072 100755 --- a/Makefile +++ b/Makefile @@ -14,30 +14,29 @@ compile : 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=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 + sudo dd if=software.bin of=disk.img bs=512 seek=5 count=2 conv=notrunc + sudo dd if=food.bin of=disk.img bs=512 seek=7 count=2 conv=notrunc + sudo dd if=voice.bin of=disk.img bs=512 seek=9 count=2 conv=notrunc + sudo dd if=beep.bin of=disk.img bs=512 seek=11 count=2 conv=notrunc + sudo dd if=silence.bin of=disk.img bs=512 seek=13 count=2 conv=notrunc + sudo dd if=light.bin of=disk.img bs=512 seek=15 count=2 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=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 + sudo dd if=software.bin of=/dev/sdb bs=512 seek=5 count=2 + sudo dd if=food.bin of=/dev/sdb bs=512 seek=7 count=2 + sudo dd if=voice.bin of=/dev/sdb bs=512 seek=9 count=2 + sudo dd if=beep.bin of=/dev/sdb bs=512 seek=11 count=2 + sudo dd if=silence.bin of=/dev/sdb bs=512 seek=13 count=2 + sudo dd if=light.bin of=/dev/sdb bs=512 seek=15 count=2 run : image + setxkbmap -layout us -model us qemu-system-x86_64 disk.img -soundhw pcspk clean : diff --git a/beep.asm b/beep.asm index 7ceceea..7618e5b 100644 --- a/beep.asm +++ b/beep.asm @@ -1,4 +1,4 @@ -[org 0x4000] +[org 0x5000] start: mov [bootdev], dl @@ -6,7 +6,7 @@ start: 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, 4Fh ; YellowOnBlue + mov bh, 2Fh ; YellowOnBlue int 10H ; execute interrupt mov al, 182 ; meaning that we're about to load @@ -20,12 +20,13 @@ start: 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 +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). @@ -33,6 +34,164 @@ start: 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, 3Fh + 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, 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: + 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 @@ -49,4 +208,14 @@ exit: jmp 0x0:0x1000 bootdev db 0x80 ; Boot device number +description db "The Smart Speaker Theatre questions the default mode of smart speakers as digital assistants, through an intervention that involves kidnapping a Google Home and having it interrogated by a team of rogue speakers and by you, their user." +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 diff --git a/beep.bin b/beep.bin index b0b5852..234ef74 100644 Binary files a/beep.bin and b/beep.bin differ diff --git a/db b/db new file mode 100644 index 0000000..8cbadaf --- /dev/null +++ b/db @@ -0,0 +1,233 @@ +Disk /dev/loop0: 4.7 MiB, 4927488 bytes, 9624 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop1: 3.7 MiB, 3846144 bytes, 7512 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop2: 140.7 MiB, 147496960 bytes, 288080 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop3: 174 MiB, 182419456 bytes, 356288 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop4: 53.7 MiB, 56315904 bytes, 109992 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop5: 180.2 MiB, 188928000 bytes, 369000 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop6: 140.7 MiB, 147496960 bytes, 288080 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop7: 53.7 MiB, 56328192 bytes, 110016 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/sda: 465.8 GiB, 500107862016 bytes, 976773168 sectors +Disk model: HGST HTS725050A7 +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 4096 bytes +I/O size (minimum/optimal): 4096 bytes / 4096 bytes +Disklabel type: dos +Disk identifier: 0xe2dc99ec + +Device Boot Start End Sectors Size Id Type +/dev/sda1 * 2048 1026047 1024000 500M 7 HPFS/NTFS/exFAT +/dev/sda2 1026048 490772479 489746432 233.5G 7 HPFS/NTFS/exFAT +/dev/sda3 490774526 976771071 485996546 231.8G 5 Extended +/dev/sda5 490774528 960620543 469846016 224G 83 Linux +/dev/sda6 960622592 976771071 16148480 7.7G 82 Linux swap / Solaris + + + +Disk /dev/loop8: 1008 KiB, 1032192 bytes, 2016 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop9: 3.7 MiB, 3821568 bytes, 7464 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop10: 3.7 MiB, 3821568 bytes, 7464 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop11: 4 MiB, 4214784 bytes, 8232 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop12: 14.8 MiB, 15458304 bytes, 30192 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop13: 34.8 MiB, 36503552 bytes, 71296 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop14: 35.3 MiB, 37027840 bytes, 72320 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop15: 174.5 MiB, 182951936 bytes, 357328 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop16: 171.8 MiB, 180133888 bytes, 351824 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop17: 34.6 MiB, 36216832 bytes, 70736 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop18: 174.3 MiB, 182808576 bytes, 357048 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop19: 14.5 MiB, 15208448 bytes, 29704 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop20: 89.4 MiB, 93720576 bytes, 183048 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop21: 89.3 MiB, 93581312 bytes, 182776 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop22: 88.4 MiB, 92733440 bytes, 181120 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop23: 4.7 MiB, 4927488 bytes, 9624 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop24: 4 MiB, 4218880 bytes, 8240 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop25: 4.7 MiB, 4927488 bytes, 9624 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop26: 130 MiB, 136286208 bytes, 266184 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop27: 53.7 MiB, 56315904 bytes, 109992 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop28: 151 MiB, 158363648 bytes, 309304 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop29: 14.8 MiB, 15458304 bytes, 30192 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop30: 140.7 MiB, 147496960 bytes, 288080 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop31: 1008 KiB, 1032192 bytes, 2016 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop32: 151 MiB, 158347264 bytes, 309272 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop33: 2.3 MiB, 2355200 bytes, 4600 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/loop34: 174.3 MiB, 182808576 bytes, 357048 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes + + +Disk /dev/mapper/cryptswap1: 7.7 GiB, 8267497472 bytes, 16147456 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 4096 bytes +I/O size (minimum/optimal): 4096 bytes / 4096 bytes + + diff --git a/disk.img b/disk.img index c94ac78..d8dfefa 100755 Binary files a/disk.img and b/disk.img differ diff --git a/food.asm b/food.asm index 330ac6d..7ea8fc8 100644 --- a/food.asm +++ b/food.asm @@ -28,19 +28,170 @@ mov cx, 1 mov dx, 200 int 15h -;.pause1: -; mov cx, 65535 -;.pause2: -; dec cx -; jne .pause2 -; dec bx -; jne .pause1 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, 70h + 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, 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: + 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 @@ -57,4 +208,14 @@ exit: jmp 0x0:0x1000 bootdev db 0x80 ; Boot device number +description db "Is it time to eat, or is there no more time to eat? questions the default mode of techno-solutionism through an intervention that subverts the culture of reviews, peering through the lens of food to shed light onto an ideology built on patterns of authoritativeness and bland lifestyle choices." +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 diff --git a/food.bin b/food.bin index e91bcf7..1f18d43 100644 Binary files a/food.bin and b/food.bin differ diff --git a/light.asm b/light.asm index 4d47c9c..52ba519 100644 --- a/light.asm +++ b/light.asm @@ -6,7 +6,7 @@ start: 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, 4Fh ; YellowOnBlue + mov bh, 0Fh ; YellowOnBlue int 10H ; execute interrupt mov al, 182 ; meaning that we're about to load @@ -22,61 +22,174 @@ start: out 61h, al ; Send the new value ; mov bx, 200 ; Pause for duration of note. - - 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, 12h ; YellowOnBlue - int 10H ; execute interrupt mov al, 0 mov ah, 86h mov cx, 1 mov dx, 200 int 15h - 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, 2Bh ; YellowOnBlue - int 10H ; execute interrupt -mov al, 0 -mov ah, 86h -mov cx, 1 -mov dx, 200 -int 15h - 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, 3Fh ; YellowOnBlue - int 10H ; execute interrupt -mov al, 0 -mov ah, 86h -mov cx, 1 -mov dx, 200 -int 15h - -;.pause1: -; mov cx, 65535 -;.pause2: -; dec cx -; jne .pause2 -; dec bx -; jne .pause1 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 al, 0 -mov ah, 86h -mov cx, 1 -mov dx, 200 -int 15h - + 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: @@ -95,4 +208,14 @@ exit: 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 diff --git a/light.bin b/light.bin index 810677d..b80fc4c 100644 Binary files a/light.bin and b/light.bin differ diff --git a/program.asm b/program.asm index 263f343..526917e 100755 --- a/program.asm +++ b/program.asm @@ -97,7 +97,7 @@ print_projects: mov ah, 06h ;draw rect on background mov ch, dh mov cl, 4h - mov dl, 24h + mov dl, 40h mov bh, 7Ch int 10h jmp .drawstring @@ -106,7 +106,7 @@ print_projects: mov ah, 06h ;draw rect on background mov ch, dh mov cl, 4h - mov dl, 24h + mov dl, 40h mov bh, 1Eh int 10h jmp .drawstring @@ -127,8 +127,12 @@ waitforkey: int 0x16 cmp ah, 1Fh je .up + cmp ah, 50h + je .up cmp ah, 11h je .down + cmp ah, 48h + je .down cmp ah, 1Ch je loadproject cmp ah, 01h @@ -233,23 +237,23 @@ loadproject: jmp load .two mov bx, 0x3000 ; BX = 0x1000. ES:BX=0x0:0x1000 - mov cl, 07 ; Sector to read = 4 + mov cl, 08 ; Sector to read = 4 jmp load .three mov bx, 0x4000 ; BX = 0x1000. ES:BX=0x0:0x1000 - mov cl, 08 ; Sector to read = 4 + mov cl, 10 ; Sector to read = 4 jmp load .four mov bx, 0x5000 ; BX = 0x1000. ES:BX=0x0:0x1000 - mov cl, 09 ; Sector to read = 4 + mov cl, 12 ; Sector to read = 4 jmp load .five - mov bx, 0x6000 ; BX = 0x1000. ES:BX=0x0:0x1000 - mov cl, 10 ; Sector to read = 4 + mov bx, 0x9000 ; BX = 0x1000. ES:BX=0x0:0x1000 + mov cl, 14 ; Sector to read = 4 jmp load .six mov bx, 0x7000 ; BX = 0x1000. ES:BX=0x0:0x1000 - mov cl, 11 ; Sector to read = 4 + mov cl, 16 ; Sector to read = 4 jmp load @@ -265,7 +269,7 @@ load: 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 al, 0x02 ; 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 @@ -425,25 +429,25 @@ scroll db 1 scrollchars dw 0 writtenchars dw 0 -msg1 db "ARTIST / TITLE",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 +project1 db " Alex | Poetic Software",0 +project2 db " Alice | Is it time to eat / is there no more time to eat?",0 +project3 db " Angeliki | Let's amplify unspeakable things", 0 +project4 db " Joca | The Smart Speaker Theatre", 0 +project5 db " Tash | Instant Warnet", 0 +project6 db " Zalan | Eigengrau", 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 +helptext db "The concept behind 'Upsetting settings' arises from the defaults of technology.", 0x0A,"Graduation projects initiated by Alexander Roidl, Alice Strete, Angeliki Diakrousi, Joca van der Horst, Natasha Berting and Zalan Szakacs. The works resulted from a year of research done at the Experimental Publishing (XPUB) master in Fine Art and Design program of the Piet Zwart Institute. XPUB focuses on the acts of making things public and creating publics in the age of post-digital networks. It uses publishing as the inquiry and participation into the technological frameworks, political contexts, and cultural processes through which things are made. This supports an artistic practice where the default modes can be questioned and challenged.",0 menuhelp db "F1 Help", 0 -menuselect db " W/S Select Item",0 +menuselect db " ",0x18,"/",0x19," Select Item",0 menuexit db 0x0D,0x0A," ESC Exit", 0 menuenter db " Enter Select",0 -title db 'NOT MY DEFAULT',0 +title db "UPSETTING SETTINGS",0 wolf_error_msg db 'Program not found!',0x0D,0x0A,0 wolf_error_msg1 db 'Press any key to restart..',0 diff --git a/program.bin b/program.bin index 01dd1cd..46f7098 100644 Binary files a/program.bin and b/program.bin differ diff --git a/silence.asm b/silence.asm index aef53df..dad2ef9 100644 --- a/silence.asm +++ b/silence.asm @@ -1,4 +1,4 @@ -[org 0x6000] +[org 0x9000] start: mov [bootdev], dl @@ -6,7 +6,7 @@ start: 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, 4Fh ; YellowOnBlue + mov bh, 5Dh ; YellowOnBlue int 10H ; execute interrupt mov al, 182 ; meaning that we're about to load @@ -28,19 +28,170 @@ mov cx, 1 mov dx, 200 int 15h -;.pause1: -; mov cx, 65535 -;.pause2: -; dec cx -; jne .pause2 -; dec bx -; jne .pause1 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, 70h + 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, 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: + 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 @@ -57,4 +208,14 @@ exit: jmp 0x0:0x1000 bootdev db 0x80 ; Boot device number +description db "Instant Warnet confronts the default mode of who is included and who is excluded in contemporary social media spaces through an intervention that uses play and performance to turn the tables on networks of harassment online." +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 diff --git a/silence.bin b/silence.bin index 9319a66..6328b51 100644 Binary files a/silence.bin and b/silence.bin differ diff --git a/software.asm b/software.asm index 94ea2ca..522459a 100644 --- a/software.asm +++ b/software.asm @@ -2,6 +2,13 @@ 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, 9Eh ; CHANGE BACKGROUND HERE first back then front + int 10H ; execute interrupt + mov al, 182 ; meaning that we're about to load out 43h, al ; prepare speaker for output @@ -13,49 +20,183 @@ start: 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 - mov al, 0 - mov ah, 86h - mov cx, 1 - mov dx, 200 - int 15h - in al, 61h ; Turn off note (get value from + 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. + and al, 11111100b ; Reset bits 1 and 0. + out 61h, al ; Send new value. - 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, 9Bh ; YellowOnBlue - int 10H ; execute interrupt + 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, 70h ;BACKGROUND OF BOX first back then front + 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, 1Ch ;shadow color + 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, 1Ch ;shadow color + 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 + - mov ah, 02h ;sets cursor to top to write - mov bh, 0h - mov dh, 2h - mov dl, 2h - int 10h - mov si, description - call print - jmp waitforkey print: - lodsb - or al,al - jz .exit - mov ah,0x0e - int 10h - jmp print - .exit: - ret + 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 + mov ah, 0x00 + int 0x16 + cmp ah, 01h + je exit jmp waitforkey exit: @@ -66,13 +207,16 @@ exit: mov dl, [bootdev] jmp 0x0:0x1000 -description db "Poetic Software is a project",0 - bootdev db 0x80 ; Boot device number +description db "Poetic Software challenges the default mode of software as a tool where functionality and productivity are predominant through an intervention that involves software as a non-functional, emotional, and cultural object of artistic practice." +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 -%assign usedMemory ($-$$) -%assign usableMemory (512*16) -%warning [usedMemory/usableMemory] Bytes used -times (512*16)-($-$$) db 0 ;kernel must have size multiple of 512 so le$ +title db "UPSETTING SETTINGS",0 diff --git a/software.bin b/software.bin index a0baf07..b8b331e 100644 Binary files a/software.bin and b/software.bin differ diff --git a/voice.asm b/voice.asm index e56a92b..ac94f23 100644 --- a/voice.asm +++ b/voice.asm @@ -1,4 +1,4 @@ -[org 0x5000] +[org 0x4000] start: mov [bootdev], dl @@ -6,7 +6,7 @@ start: 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, 4Fh ; YellowOnBlue + mov bh, 1Ch ; YellowOnBlue int 10H ; execute interrupt mov al, 182 ; meaning that we're about to load @@ -28,19 +28,170 @@ mov cx, 1 mov dx, 200 int 15h -;.pause1: -; mov cx, 65535 -;.pause2: -; dec cx -; jne .pause2 -; dec bx -; jne .pause1 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, 70h + 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, 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: + 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 @@ -57,4 +208,14 @@ exit: jmp 0x0:0x1000 bootdev db 0x80 ; Boot device number +description db "Let's amplify unspeakable things challenges the default mode of authoritative voices, that establish exclusive speech platforms, through an intervention that creates a safe space for excluded voices to be explored, in situated meetings and on an online audio archive." +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 diff --git a/voice.bin b/voice.bin index 7da6452..1839d0f 100644 Binary files a/voice.bin and b/voice.bin differ