lovebytecraft by sibCrew
; ..lovebytecraft - an invitro to lovebyte 2o24 ; --wbcbz7 -- o7.o2.2o24 ; 235b/pc/dos/textmoooooode! ; ; quick hack of firecraft (https://www.pouet.net/prod.php?which=95798) ; for lovebyte 2024 countdo^W oldskool 256b compo ; designed for LOW LOW LOW cycles count (like XT/CGA) ; org 0x100 use16 start: ; set color 40x25 mode inc ax int 0x10 xor ax, ax ; disable damn cursor mov ah, 1 mov ch, 0x20 int 0x10 ; setup segments mov ah, 0xB8 ; set textmode frame buffer segment mov es, ax mov ax, 0xFFA6 ; BIOS 8x8 font segment (off 0xE bytes, lol why ibm?) mov ds, ax ; frame loop .loop: ; frame limit ; put here for less flickering hlt mov dx, 0x3DA .2: in al, dx test al, 8 jnz .2 rol bx, 1 in al, 0x40 or al, 0x80 mov cl, al mov si, (40 * 26 * 2) xor di, di .smloop: mov al, [es:si] or al, [es:di+82] or al, [es:di+2] add al, cl sbb ah, ah ; saturation and al, ah mov ah, 0x01 stosw out 0x61, al ; and play with speaker cmp di, si jnz .smloop in al, 0x40 and ax, bp test al, 0xC0 ; check if to draw current string jz .done call print ; draw logo mov si, [cs:lbtext.charpos] cmp si, lbtext.stop jb .fetch_char mov si, lbtext .fetch_char: xor ax, ax ; fetch character mov al, [cs:si] test bp, 3 jnz .no_inc inc si .no_inc: mov [cs:lbtext.charpos], si mov cl, 3 shl ax, cl mov si, ax add si, 0x0E ; character offset ; get random position in al, 0x40 and ax, 0x0e add ax, (40*((25 - 12)/2) + 13)*2 ;mov ax, (40*((25 - 12)/2) + 8)*2 mov di, ax ; SI - character offset in font segment mov cx, 8 .lineloop: mov bl, 0x80 mov bh, [si] .charloop: shl bx, 1 jz .next_byte sbb ax, ax jz .advance and ax, 0x0CDB ; solid fill because it looks better mov [es:di], ax out 0x42, al .advance: add di, 4 jmp .charloop .next_byte: sub di, -(2*80 - 32) inc si loop .lineloop .done: inc bp ; kbhit() - doesn't work on XT since keyboard is locked out :( in al, 0x60 dec al jz .ret jmp .loop ; and back to dos .ret: ret ; draw directly on screen, DOS/BIOS functions are too slow print: mov si, lbtext mov di, 40*24*2 .loop: cs lodsb test al, al jz start.ret stosb inc di jmp .loop lbtext db 3,3,3,"=[",3,"lovebyte.2024",3,"]=",3,3,3,"less is more",3,3,3 ; db 3,3,3,"=[",3,"lovebyte.2024",3,"]=",3,3,3,"1 day to go!",3,3,3 .stop db 0 .charpos dw lbtext
[ back to the prod ]