Create a Paint program!
8086 machine code, 32 31 28 26 bytes
00000000 b8 0f 00 cd 10 b8 02 10 ba 18 01 cd 10 b8 03 00 |................|
00000010 cd 33 4b b8 01 0c eb f3 3f 00 |.3K.....?.|
0000001a
Assumes the presence of a VGA graphics card, and any Microsoft-compatible mouse driver.
-2 bytes thanks to @berendi!
How it works:
| org 0x100
| use16
b8 0f 00 | mov ax, 0x000f ; set screen mode: 640x350 monochrome
cd 10 | int 0x10 ; call video bios
b8 02 10 | mov ax, 0x1002 ; set palette
ba 18 01 | mov dx, palette ; pointer to palette data
cd 10 | @@: int 0x10 ; call video bios
b8 03 00 | mov ax, 0x0003 ; get mouse position in (CX, DX) and button status in BL
cd 33 | int 0x33 ; call mouse driver
4b | dec bx ; if no buttons pressed, --BX = 0xFFFF (invalid page)
b8 01 0c | mov ax, 0x0c01 ; plot pixel with color AL at (CX, DX) in page BH
eb f3 | jmp @b ; repeat
3f 00 | palette db 0x3f, 0x00 ; palette in 2:2:2 rgb. color 0 = white, 1 = black.
| ; this should be a 17-byte struct, but we only care about the first two colors here
That's all there is to it. No magic involved, just a few function calls.
Scratch, 10 Scratch bytes
Scratch was practically designed for things like this.
Try it online!
HTML + JavaScript (ES6), 66 64 62 bytes
HTML
<canvas id=c>
JavaScript
onclick=e=>c.getContext`2d`.fillRect(e.x,e.y,1,1)
Saved 2 bytes thanks to Gustavo Rodrigues and 2 bytes from Shaggy.
onclick=e=>c.getContext`2d`.fillRect(e.x,e.y,1,1)
/* This css isn't needed for the program to work. */
*{margin: 0}
#c{border:1px solid black}
<canvas id=c>