
;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
; DATA
;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
align 4
d3happyseed     dd      10010110100100111001011100101110b

d3happyloc      dw      16 dup(0);-5)
d3happybit      db      16 dup(11h)

d3happyindex    db      0
d3happymloc     dw      -80

;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
; CODE
;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±

;ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
p30:
        mov ebp,_vidptr
        mov esi,15
        mov dx,3c5h
p30l0:
        movzx edi,d3happyloc[esi*2]
        add edi,ebp
        mov al,d3happybit[esi]
        call cspr09
        sub esi,1
        jnc p30l0

        mov ebp,d3happyseed
        movzx edx,d3happyindex
        inc edx
        and dl,0fh
        mov d3happyindex,dl
        movsx ebx,d3happymloc
p30l1:
        mov eax,ebp
        and eax,3fh
        add eax,ebx
        cmp eax,320
        jl short p30l1f1
        mov eax,320
p30l1f1:
        shld ecx,ebp,26
        movzx ecx,cl
        cmp cl,200-12
        jb short p30l1f0
        sub cl,156
p30l1f0:
        imul ecx,400
        lea ecx,[ecx+eax+400]
        mov eax,ecx
        shr ecx,2
        mov d3happyloc[edx*2],cx
        and eax,3
        mov al,vidbittbl2[eax]
        mov d3happybit[edx],al
        ror ebp,9
        lea ebp,[ebp+edx+123457h]

        add ebx,7
        cmp ebx,320+7*16
        jl short p30d
        push offset setnext
        mov ebx,-80
p30d:
        mov d3happyseed,ebp
        mov d3happymloc,bx
        ret

