// File: /workspace/github_c_makefile_star2_O2/calmopyrin[P]tedplay/SIDSoundLib.cpp
// Function: SIDSoundLib::connect()
bool SIDSoundLib::connect()
{
	if (!detected) {
#ifdef _DEBUG
		m_hDll = LOAD_LIBRARY(LIBNAME_DEBUG);
#else
		m_hDll = LOAD_LIBRARY(LIBNAME);
#endif
		//HRESULT r = GetLastError();
		if (m_hDll) {
			sidCreate = (_sidCreate)LOAD_FUNCTION(m_hDll, "sidCreate");
			sidDestroy = (_sidDestroy)LOAD_FUNCTION(m_hDll, "sidDestroy");
			sidSetSampleRate = (_sidSetSampleRate)LOAD_FUNCTION(m_hDll, "sidSetSampleRate");
			sidSetModel = (_sidSetSampleRate)LOAD_FUNCTION(m_hDll, "sidSetModel");
			sidReset = (_sidReset)LOAD_FUNCTION(m_hDll, "sidReset");
			sidPause = (_sidPause)LOAD_FUNCTION(m_hDll, "sidPause");
			sidWriteReg = (_sidWriteReg)LOAD_FUNCTION(m_hDll, "sidWriteReg");
			sidReadReg = (_sidReadReg)LOAD_FUNCTION(m_hDll, "sidReadReg");
			sidCalcSamples = (_sidCalcSamples)LOAD_FUNCTION(m_hDll, "sidCalcSamples");
			sidGetLibVersion = (_sidGetLibVersion)LOAD_FUNCTION(m_hDll, "sidGetLibVersion");
			if (!(sidCreate && sidDestroy && sidSetSampleRate && sidSetModel && sidReset && sidPause
				&& sidWriteReg && sidReadReg && sidCalcSamples && sidGetLibVersion))
				return false;
		} else
			return false;
	}
	detected = true;
	return detected;
}

// Assembly:
pushq %rbx
cmpb $0x0, 0x1c100(%rip)     # 0x25428
jne 0x9507
leaq 0x6048(%rip), %rdi      # 0xf37d
xorl %ebx, %ebx
xorl %esi, %esi
callq 0x32a0
movq %rax, 0x1c0eb(%rip)     # 0x25430
testq %rax, %rax
je 0x9510
leaq 0x602f(%rip), %rsi      # 0xf384
movq %rax, %rdi
callq 0x31f0
movq %rax, 0x1c0d4(%rip)     # 0x25438
movq 0x1c0c5(%rip), %rdi     # 0x25430
leaq 0x601c(%rip), %rsi      # 0xf38e
callq 0x31f0
movq %rax, 0x1c0c2(%rip)     # 0x25440
movq 0x1c0ab(%rip), %rdi     # 0x25430
leaq 0x600d(%rip), %rsi      # 0xf399
callq 0x31f0
movq %rax, 0x1c0b0(%rip)     # 0x25448
movq 0x1c091(%rip), %rdi     # 0x25430
leaq 0x6004(%rip), %rsi      # 0xf3aa
callq 0x31f0
movq %rax, 0x1c09e(%rip)     # 0x25450
movq 0x1c077(%rip), %rdi     # 0x25430
leaq 0x5ff6(%rip), %rsi      # 0xf3b6
callq 0x31f0
movq %rax, 0x1c08c(%rip)     # 0x25458
movq 0x1c05d(%rip), %rdi     # 0x25430
leaq 0x5fe5(%rip), %rsi      # 0xf3bf
callq 0x31f0
movq %rax, 0x1c07a(%rip)     # 0x25460
movq 0x1c043(%rip), %rdi     # 0x25430
leaq 0x5fd4(%rip), %rsi      # 0xf3c8
callq 0x31f0
movq %rax, 0x1c068(%rip)     # 0x25468
movq 0x1c029(%rip), %rdi     # 0x25430
leaq 0x5fc6(%rip), %rsi      # 0xf3d4
callq 0x31f0
movq %rax, 0x1c056(%rip)     # 0x25470
movq 0x1c00f(%rip), %rdi     # 0x25430
leaq 0x5fb7(%rip), %rsi      # 0xf3df
callq 0x31f0
movq %rax, 0x1c044(%rip)     # 0x25478
movq 0x1bff5(%rip), %rdi     # 0x25430
leaq 0x5fac(%rip), %rsi      # 0xf3ee
callq 0x31f0
movq %rax, 0x1c032(%rip)     # 0x25480
movq 0x1bfea(%rip), %xmm1    # 0x25440
movq 0x1bfda(%rip), %xmm0    # 0x25438
punpcklqdq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0]
movq 0x1bfe6(%rip), %xmm1    # 0x25450
movq 0x1bfd6(%rip), %xmm2    # 0x25448
punpcklqdq %xmm1, %xmm2    # xmm2 = xmm2[0],xmm1[0]
movq 0x1bfe2(%rip), %xmm1    # 0x25460
movq 0x1bfd2(%rip), %xmm3    # 0x25458
punpcklqdq %xmm1, %xmm3    # xmm3 = xmm3[0],xmm1[0]
movq 0x1bfde(%rip), %xmm1    # 0x25470
movq 0x1bfce(%rip), %xmm4    # 0x25468
punpcklqdq %xmm1, %xmm4    # xmm4 = xmm4[0],xmm1[0]
cmpq $0x0, 0x1bfd2(%rip)     # 0x25478
setne %cl
testq %rax, %rax
setne %al
pxor %xmm1, %xmm1
pcmpeqd %xmm1, %xmm4
pshufd $0xb1, %xmm4, %xmm5     # xmm5 = xmm4[1,0,3,2]
pand %xmm4, %xmm5
pcmpeqd %xmm1, %xmm3
pshufd $0xb1, %xmm3, %xmm4     # xmm4 = xmm3[1,0,3,2]
pand %xmm3, %xmm4
packssdw %xmm5, %xmm4
pcmpeqd %xmm1, %xmm2
pshufd $0xb1, %xmm2, %xmm3     # xmm3 = xmm2[1,0,3,2]
pand %xmm2, %xmm3
pcmpeqd %xmm1, %xmm0
pshufd $0xb1, %xmm0, %xmm1     # xmm1 = xmm0[1,0,3,2]
pand %xmm0, %xmm1
packssdw %xmm3, %xmm1
packssdw %xmm4, %xmm1
pmovmskb %xmm1, %edx
testw $0xaaaa, %dx            # imm = 0xAAAA
sete %dl
andb %cl, %al
andb %dl, %al
cmpb $0x1, %al
jne 0x9514
movb $0x1, 0x1bf1a(%rip)     # 0x25428
movb $0x1, %bl
movl %ebx, %eax
popq %rbx
retq
xorl %ebx, %ebx
jmp 0x9510