Across The Through by Ümlaüt Design [web]
; ; "across the through" ; by gargaj / ümlaüt design ; ; i never thought raymarching in 256b is this easy. ; as you can tell there's plenty of room for optimization, ; but since it fits into 256b, what's the point? :) ; ; big hello to sensenstahl for some design tips! :) ; ; http://gargaj.umlaut.hu ; org 0x100 bits 16 %define load_code_as_data_hax %ifdef load_code_as_data_hax %define speed 0x104 %define dirz 0x139 %endif mov al, 0x13 int 0x10 push word 0xa000 pop es push word 0x0040 pop fs inc cx paletteloop: mov al, cl xor al, 0xff mov dx, 0x3c9 ;out dx, al ;inc dx shr al, 2 out dx, al out dx, al out dx, al loop paletteloop mainloop: ;mov cx, 320 * 200 dec cx xor di, di pixel_loop: push cx push di mov ax, 0xCCCD mul di mov cx, dx ; --- create ray from screen coordinates xor ax, ax mov al, cl sub ax, 160 cwd sal ax, 5 mov bx, 6 idiv bx ;sal ax, 3 ;; this actually would replace the top 3 lines and save 5 bytes but the aspect ratio looks bad that way mov word [dirx], ax xor ax, ax mov al, ch push ax sub ax, 100 cwd sal ax, 7 mov bx, -25 idiv bx mov word [diry], ax ; --- rotate ray direction fild word [fs:0x6C] fist word [ray_position + 4] ; reuse this for translation later fidiv word [speed] fsincos fld st1 fld st1 fimul word [dirz] fxch st1 fimul word [dirx] fsubrp st1, st0 fistp word [ray_direction] fimul word [dirx] fxch st1 fimul word [dirz] faddp st1, st0 fistp word [ray_direction + 4] mov bx, word [diry] mov word [ray_direction + 2], bx ; --- reset ray step position mov ax, 10000 mov word [ray_position + 0], ax mov word [ray_position + 2], ax shl word [ray_position + 4], 10 ; --- march march march xor ax, ax xor bh, bh mov cx, 128 steps: mov bl, byte [ray_position + 1] xor bl, byte [ray_position + 3] xor bl, byte [ray_position + 5] add ax, bx mov bx, word [ray_direction] add word [ray_position], bx mov bx, word [ray_direction + 2] add word [ray_position + 2], bx mov bx, word [ray_direction + 4] add word [ray_position + 4], bx loop steps shr ax, 7 xor ah, ah mov bl, 1 pop cx cmp cl, 31 ja dontfade_top mov bl, cl shr bl, 2 xor bl, 7 inc bl dontfade_top: cmp cl, 168 jna dontfade_bottom mov bl, cl sub bl, 164 shr bl, 2 inc bl dontfade_bottom: div bl pop di stosb pop cx dec cx jnz pixel_loop in al, 60h cmp al, 1 jnz mainloop ret ;section .data %ifndef load_code_as_data_hax speed dw 100 dirz dw 512 %endif section .bss dirx resw 1 diry resw 1 ray_position resw 3 ray_direction resw 3
[ back to the prod ]