Skip to content

Instantly share code, notes, and snippets.

@jsmp
Last active June 11, 2022 21:17
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jsmp/80a40d58d11bcb6b83efd041493422aa to your computer and use it in GitHub Desktop.
Save jsmp/80a40d58d11bcb6b83efd041493422aa to your computer and use it in GitHub Desktop.
paint.asm
; nasm -f bin paint.asm -o paint.bmp
; As almost seen in https://github.com/PixelsCamp/talks/blob/master/2020/meet-the-natives_joao_sampaio.md
; Header Structures
struc FileHeader ; 14 bytes
.bfType: RESW 1
.bfSize: RESD 1
.bfReserved: RESD 1
.bfOffBits: RESD 1
endstruc
struc ImageHeader ; 40 bytes
.biSize: RESD 1
.biWidth: RESD 1
.biHeight: RESD 1
.biPlanes: RESW 1
.biBitCount: RESW 1
.biCompression: RESD 1
.biSizeImage: RESD 1
.biXPelsPerMeter: RESD 1
.biYPelsPerMeter: RESD 1
.biClrUsed: RESD 1
.biClrImportant: RESD 1
endstruc
; Our Image
header:
istruc FileHeader
at FileHeader.bfType, DW 'BM'
at FileHeader.bfSize, DD end
at FileHeader.bfReserved, DD 0x0
at FileHeader.bfOffBits, DD data
iend
imgHeader:
istruc ImageHeader
at ImageHeader.biSize, DD data-imgHeader
at ImageHeader.biWidth, DD 24
at ImageHeader.biHeight, DD 44
at ImageHeader.biPlanes, DW 1
at ImageHeader.biBitCount, DW 24
at ImageHeader.biSizeImage, DD 0
at ImageHeader.biXPelsPerMeter, DD 0
at ImageHeader.biYPelsPerMeter, DD 0
at ImageHeader.biClrUsed, DD 0
at ImageHeader.biClrImportant, DD 0
iend
data:
; Colors RGB -> BGR
%xdefine _ 0xFF,0xFF,0xFF
%xdefine B 0x00,0x00,0x00
%xdefine r 0x02,0x66,0xEE
%xdefine g 0xEE,0xEE,0x10
%xdefine y 0x02,0xEE,0xFF
%define o 0x10,0xEE,0xFF
; Bottom-Up Image
; trivia on why https://devblogs.microsoft.com/oldnewthing/20210525-00/?p=105250
db _,_,_,_,_,_,_,_,_,_,_,B,B,_,B,_,_,_,_,_,_,_,_,_,
db _,_,_,_,_,_,B,_,_,B,B,y,y,B,y,B,B,_,_,_,_,_,_,_,
db _,_,_,_,_,B,y,B,B,y,y,y,y,y,y,y,y,B,_,_,_,_,_,_,
db _,_,_,_,_,B,y,y,y,y,y,y,y,y,y,y,y,B,_,_,_,_,_,_,
db _,_,_,_,_,_,B,y,y,y,y,r,y,y,y,y,B,_,_,_,_,_,_,_,
db _,_,_,_,_,B,B,y,y,y,r,r,r,y,r,y,B,B,_,_,_,_,_,_,
db _,_,_,_,B,y,y,y,y,y,r,r,r,y,y,y,y,y,B,_,_,_,_,_,
db _,_,_,_,_,B,B,y,y,r,y,y,y,r,y,y,B,B,_,_,_,_,_,_,
db _,_,_,_,_,_,_,B,y,y,y,B,y,y,y,B,_,_,_,_,_,_,_,_,
db _,_,_,_,_,_,_,_,B,y,B,r,B,y,B,_,_,_,_,_,_,_,_,_,
db _,_,_,_,_,_,_,_,B,y,B,r,B,y,B,_,_,_,_,_,_,_,_,_,
db _,_,B,_,_,_,_,_,B,B,B,r,B,B,B,_,_,_,_,_,B,_,_,_,
db _,B,r,B,B,_,_,B,r,r,B,r,B,r,r,B,_,_,B,B,r,B,_,_,
db _,B,r,r,r,B,B,B,B,B,B,r,B,B,B,B,B,B,r,r,r,B,_,_,
db B,r,r,r,r,r,r,B,_,_,B,r,B,_,_,B,r,r,r,r,r,r,B,_,
db B,r,r,r,r,r,B,_,_,_,B,r,B,_,_,_,B,r,r,r,r,r,B,_,
db B,r,r,r,r,B,_,_,_,_,B,r,B,_,_,_,_,B,r,r,r,r,B,_,
db B,r,r,r,r,B,_,_,_,_,B,r,B,_,_,_,_,B,r,r,r,r,B,_,
db _,B,r,r,B,_,_,_,_,_,B,r,B,_,_,_,_,_,B,r,r,B,_,_,
db _,_,B,r,B,_,_,_,_,_,_,B,_,_,_,_,_,_,B,r,B,_,_,_,
db _,_,_,B,B,_,_,_,_,_,_,_,_,_,_,_,_,_,B,B,_,_,_,_,
db _,_,_,_,B,_,_,_,_,_,_,_,_,_,_,_,_,_,B,_,_,_,_,_,
db _,_,_,_,B,_,_,_,_,_,_,_,_,_,_,_,_,_,B,_,_,_,_,_,
db _,_,_,B,_,B,B,B,B,B,B,B,B,B,B,B,B,B,_,B,_,_,_,_,
db _,_,_,B,B,B,r,B,r,r,r,B,r,r,r,B,r,B,B,B,_,_,_,_,
db _,_,_,B,r,r,B,B,B,B,B,B,B,B,B,B,B,r,r,B,_,_,_,_,
db _,_,_,B,B,B,_,_,_,_,_,_,_,_,_,_,_,B,B,B,_,_,_,_,
db _,_,_,B,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,B,_,_,_,_,
db _,_,_,B,_,_,_,_,_,_,B,B,B,_,_,_,_,_,_,B,_,_,_,_,
db _,_,_,B,_,_,_,_,_,B,g,g,g,B,_,_,_,_,_,B,_,_,_,_,
db _,_,_,_,B,_,_,_,B,g,g,g,g,g,B,_,_,_,B,_,_,_,_,_,
db _,_,_,_,B,_,_,B,g,g,g,g,g,g,g,B,_,_,B,_,_,_,_,_,
db _,_,_,_,B,_,_,B,g,g,g,g,g,g,g,B,_,_,B,_,_,_,_,_,
db _,_,_,_,_,B,_,B,_,g,g,g,g,g,g,B,_,B,_,_,_,_,_,_,
db _,_,_,_,_,B,_,_,B,_,g,g,g,g,B,_,_,B,_,_,_,_,_,_,
db _,_,_,_,_,B,_,_,_,B,_,g,g,B,_,_,_,B,_,_,_,_,_,_,
db _,_,_,_,_,_,B,_,_,_,B,B,B,_,_,_,B,_,_,_,_,_,_,_,
db _,_,_,_,_,_,B,_,_,_,_,_,_,_,_,_,B,_,_,_,_,_,_,_,
db _,_,_,_,_,_,_,B,_,B,B,B,B,B,_,B,_,_,_,_,_,_,_,_,
db _,_,_,_,_,_,_,_,B,r,r,r,r,r,B,_,_,_,_,_,_,_,_,_,
db _,_,_,_,_,_,_,_,B,r,r,r,r,r,B,_,_,_,_,_,_,_,_,_,
db _,_,_,_,_,_,_,_,_,B,r,r,r,B,_,_,_,_,_,_,_,_,_,_,
db _,_,_,_,_,_,_,_,_,_,B,r,B,_,_,_,_,_,_,_,_,_,_,_,
db _,_,_,_,_,_,_,_,_,_,_,B,_,_,_,_,_,_,_,_,_,_,_,_,
end:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment