firecraft by sibCrew
; ..firecraft ; --wbcbz7 -- ob.ol.2o24 ; 128b/pc/dos/textmoooooode at dihalt'2o24 ; ; protip: better start working on your prods a couple of days before deadline, ; not two hours before :) ; ; this one is a bit interactive! jam your keyboard or wiggle your mouse ; (since it uses HLT for timing) ; ; if PCem is correct, works even on XT/CGA :D locks the keyboard out tho ; ; come to multimatograf 2024 - 28-30 april - events.retroscene.org org 0x100 use16 start: int 0x10 ; set 40x25 mov ah, 0xB8 ; set textmode frame buffer segment mov es, ax ; frame loop .loop: ror bx, 1 ; frame limit hlt mov dx, 0x3DA .2: in al, dx test al, 8 jz .2 in al, 0x40 mov cl, al xor di, di .smloop: mov al, [es:di] or al, [es:di+82] or al, [es:di+2] add al, cl sbb ah, ah ; saturation and ah, al in al, 0x40 and al, bh add al, ah mov ah, 0x01 stosw out 0x61, al cmp di, (40 * 26 * 2) jnz .smloop in al, 0x40 and ax, bp test al, 0x80 jz .done ; draw logo mov si, multik in al, 0x40 and ax, 0x1e add ax, (40*((25 - 12)/2) + 8)*2 mov di, ax .lineloop: mov bh, 1 or bl, [si] jz .done .charloop: shr bx, 1 jz .next_byte sbb ax, ax jz .advance and ax, 0x0CB1 mov [es:di], ax out 0x42, al .advance: add di, 4 jmp .charloop .next_byte: sub di, -(2*80 - 32) inc si jmp .lineloop .done: inc bp ; kbhit() in al, 0x60 dec al jnz .loop ; and back to dos ret multik db 129, 195, 231, 255, 255, 255, 255, 126, 0
[ back to the prod ]