Fixed MMX detection; now checks for CPUID. [kode54]
This commit is contained in:
219
zsnes/src/ui.asm
219
zsnes/src/ui.asm
@@ -124,8 +124,10 @@ NEWSYM zstart
|
|||||||
call WaitForKey
|
call WaitForKey
|
||||||
jmp init
|
jmp init
|
||||||
|
|
||||||
|
section .data
|
||||||
.failedalignd db 'Data Alignment Failure : ',0
|
.failedalignd db 'Data Alignment Failure : ',0
|
||||||
.failedalignc db 'Code Alignment Failure : ',0
|
.failedalignc db 'Code Alignment Failure : ',0
|
||||||
|
section .text
|
||||||
|
|
||||||
ALIGN32
|
ALIGN32
|
||||||
NEWSYM outofmemory
|
NEWSYM outofmemory
|
||||||
@@ -170,64 +172,70 @@ NEWSYM welcome
|
|||||||
db 'check license.txt.',10,13,10,13
|
db 'check license.txt.',10,13,10,13
|
||||||
db 'Use ZSNES -? for command line definitions',13,10,13,10,0
|
db 'Use ZSNES -? for command line definitions',13,10,13,10,0
|
||||||
|
|
||||||
cpuidfname db 'nocpuzid.dat',0
|
;cpuidfname db 'nocpuzid.dat',0
|
||||||
cpuidtext db 'NOTE: If ZSNES crashes here, then please re-run. ',0
|
;cpuidtext db 'NOTE: If ZSNES crashes here, then please re-run. ',0
|
||||||
cpuidtext2 db 13,' ',13,0
|
;cpuidtext2 db 13,' ',13,0
|
||||||
YesMMX db 'MMX support enabled.',13,10,13,10,0
|
YesMMX db 'MMX support enabled.',13,10,13,10,0
|
||||||
|
|
||||||
; global variables
|
; global variables
|
||||||
NEWSYM string, times 512 db 0
|
|
||||||
NEWSYM fname, times 512 db 0
|
|
||||||
NEWSYM fnames, times 512 db 0 ; sram filename
|
|
||||||
NEWSYM fnamest, times 512 db 0 ; state filename
|
|
||||||
|
|
||||||
ALIGN32
|
|
||||||
NEWSYM prevvid, dd 0
|
|
||||||
NEWSYM selc0040, dd 0
|
|
||||||
NEWSYM selcA000, dd 0
|
|
||||||
NEWSYM selcB800, dd 0
|
|
||||||
NEWSYM filefound, dd 0 ; Parameter String Found
|
|
||||||
NEWSYM prevdash, dd 0 ; Previous Dash Value
|
|
||||||
NEWSYM frameskip, dd 0 ; 0 = Auto, 1-10 = Skip 0 .. 9
|
|
||||||
NEWSYM per2exec, dd 100 ; percentage of opcodes to execute
|
NEWSYM per2exec, dd 100 ; percentage of opcodes to execute
|
||||||
NEWSYM vidbuffer, dd 0 ; video buffer (1024x239 = 244736)
|
|
||||||
NEWSYM ngwinptr, dd 0
|
|
||||||
NEWSYM vidbufferm, dd 0 ; video buffer mirror
|
|
||||||
NEWSYM vidbufferofsa, dd 0 ; offset 1
|
|
||||||
NEWSYM vidbufferofsb, dd 0 ; offset 2
|
|
||||||
NEWSYM vidbufferofsc, dd 0 ; offset 2
|
|
||||||
NEWSYM vidbufferofsmos, dd 0 ; mosaic offset for new graphics engine
|
|
||||||
NEWSYM headdata, dd 0
|
|
||||||
NEWSYM romdata, dd 0 ; rom data (4MB = 4194304)
|
|
||||||
NEWSYM sfxramdata, dd 0 ; SuperFX Ram Data
|
|
||||||
NEWSYM wramdata, dd 0 ; stack (64K = 32768)
|
|
||||||
NEWSYM ram7f, dd 0 ; ram @ 7f = 65536
|
|
||||||
NEWSYM vram, dd 0 ; vram = 65536
|
|
||||||
NEWSYM sram, dd 0 ; sram = 32768
|
|
||||||
NEWSYM spritetablea, dd 0 ;
|
|
||||||
NEWSYM spcBuffera, dd 0 ;
|
|
||||||
NEWSYM debugbuf, dd 0 ; debug buffer = 38x1000 = 38000
|
|
||||||
NEWSYM regptr, dd 0 ; pointer to registers
|
|
||||||
NEWSYM regptw, dd 0 ; pointer to registers
|
|
||||||
NEWSYM vcache2b, dd 0 ; 2-bit video cache
|
|
||||||
NEWSYM vcache4b, dd 0 ; 4-bit video cache
|
|
||||||
NEWSYM vcache8b, dd 0 ; 8-bit video cache
|
|
||||||
NEWSYM vcache2bs, dd 0 ; 2-bit video secondary cache
|
|
||||||
NEWSYM vcache4bs, dd 0 ; 4-bit video secondary cache
|
|
||||||
NEWSYM vcache8bs, dd 0 ; 8-bit video secondary cache
|
|
||||||
NEWSYM romispal, db 0 ; 0 = NTSC, 1 = PAL
|
|
||||||
NEWSYM enterpress, db 0 ; if enter is to be issued (0 = yes)
|
|
||||||
NEWSYM SoundCompD, db 1 ; Disable Sound Compression Buffering (1=y)
|
NEWSYM SoundCompD, db 1 ; Disable Sound Compression Buffering (1=y)
|
||||||
NEWSYM newgfx16b, db 0
|
|
||||||
NEWSYM BitConv32Ptr, dd 0
|
|
||||||
|
|
||||||
NEWSYM previdmode, db 0 ; previous video mode
|
|
||||||
%ifdef __MSDOS__
|
%ifdef __MSDOS__
|
||||||
NEWSYM cvidmode, db 4 ; video mode, 0=320x240, 1=256x256
|
NEWSYM cvidmode, db 4 ; video mode, 0=320x240, 1=256x256
|
||||||
%else
|
%else
|
||||||
NEWSYM cvidmode, db 1 ; video mode, 0=320x240, 1=256x256
|
NEWSYM cvidmode, db 1 ; video mode, 0=320x240, 1=256x256
|
||||||
%endif
|
%endif
|
||||||
NEWSYM cbitmode, db 0 ; bit mode, 0=8bit, 1=16bit
|
|
||||||
|
section .bss
|
||||||
|
NEWSYM string, resb 512
|
||||||
|
NEWSYM fname, resb 512
|
||||||
|
NEWSYM fnames, resb 512 ; sram filename
|
||||||
|
NEWSYM fnamest, resb 512 ; state filename
|
||||||
|
|
||||||
|
NEWSYM prevvid, resd 1
|
||||||
|
NEWSYM selc0040, resd 1
|
||||||
|
NEWSYM selcA000, resd 1
|
||||||
|
NEWSYM selcB800, resd 1
|
||||||
|
NEWSYM filefound, resd 1 ; Parameter String Found
|
||||||
|
NEWSYM prevdash, resd 1 ; Previous Dash Value
|
||||||
|
NEWSYM frameskip, resd 1 ; 0 = Auto, 1-10 = Skip 0 .. 9
|
||||||
|
NEWSYM vidbuffer, resd 1 ; video buffer (1024x239 = 244736)
|
||||||
|
NEWSYM ngwinptr, resd 1
|
||||||
|
NEWSYM vidbufferm, resd 1 ; video buffer mirror
|
||||||
|
NEWSYM vidbufferofsa, resd 1 ; offset 1
|
||||||
|
NEWSYM vidbufferofsb, resd 1 ; offset 2
|
||||||
|
NEWSYM vidbufferofsc, resd 1 ; offset 2
|
||||||
|
NEWSYM vidbufferofsmos, resd 1 ; mosaic offset for new graphics engine
|
||||||
|
NEWSYM headdata, resd 1
|
||||||
|
NEWSYM romdata, resd 1 ; rom data (4MB = 4194304)
|
||||||
|
NEWSYM sfxramdata, resd 1 ; SuperFX Ram Data
|
||||||
|
NEWSYM wramdata, resd 1 ; stack (64K = 32768)
|
||||||
|
NEWSYM ram7f, resd 1 ; ram @ 7f = 65536
|
||||||
|
NEWSYM vram, resd 1 ; vram = 65536
|
||||||
|
NEWSYM sram, resd 1 ; sram = 32768
|
||||||
|
NEWSYM spritetablea, resd 1 ;
|
||||||
|
NEWSYM spcBuffera, resd 1 ;
|
||||||
|
NEWSYM debugbuf, resd 1 ; debug buffer = 38x1000 = 38000
|
||||||
|
NEWSYM regptr, resd 1 ; pointer to registers
|
||||||
|
NEWSYM regptw, resd 1 ; pointer to registers
|
||||||
|
NEWSYM vcache2b, resd 1 ; 2-bit video cache
|
||||||
|
NEWSYM vcache4b, resd 1 ; 4-bit video cache
|
||||||
|
NEWSYM vcache8b, resd 1 ; 8-bit video cache
|
||||||
|
NEWSYM vcache2bs, resd 1 ; 2-bit video secondary cache
|
||||||
|
NEWSYM vcache4bs, resd 1 ; 4-bit video secondary cache
|
||||||
|
NEWSYM vcache8bs, resd 1 ; 8-bit video secondary cache
|
||||||
|
NEWSYM romispal, resb 1 ; 0 = NTSC, 1 = PAL
|
||||||
|
NEWSYM enterpress, resb 1 ; if enter is to be issued (0 = yes)
|
||||||
|
NEWSYM newgfx16b, resb 1
|
||||||
|
NEWSYM BitConv32Ptr, resd 1
|
||||||
|
|
||||||
|
NEWSYM previdmode, resb 1 ; previous video mode
|
||||||
|
NEWSYM cbitmode, resb 1 ; bit mode, 0=8bit, 1=16bit
|
||||||
|
|
||||||
|
SECTION .data
|
||||||
|
|
||||||
NEWSYM opexec268, db 171 ; # of opcodes/scanline in 2.68Mhz mode
|
NEWSYM opexec268, db 171 ; # of opcodes/scanline in 2.68Mhz mode
|
||||||
NEWSYM opexec358, db 180 ; # of opcodes/scanline in 3.58Mhz mode (228/180)
|
NEWSYM opexec358, db 180 ; # of opcodes/scanline in 3.58Mhz mode (228/180)
|
||||||
NEWSYM opexec268cph, db 42 ; # of opcodes/hblank in 2.68Mhz mode
|
NEWSYM opexec268cph, db 42 ; # of opcodes/hblank in 2.68Mhz mode
|
||||||
@@ -272,7 +280,7 @@ NEWSYM MusicRelVol, db 75
|
|||||||
NEWSYM MusicVol, db 0
|
NEWSYM MusicVol, db 0
|
||||||
;NEWSYM BetaUser, db 37,38,210,56,78,23,7,7,0
|
;NEWSYM BetaUser, db 37,38,210,56,78,23,7,7,0
|
||||||
|
|
||||||
;SECTION .text
|
SECTION .text
|
||||||
|
|
||||||
;*******************************************************
|
;*******************************************************
|
||||||
; Set Noise Data
|
; Set Noise Data
|
||||||
@@ -525,10 +533,11 @@ SECTION .data
|
|||||||
.string2s db 'CMDLINE',0
|
.string2s db 'CMDLINE',0
|
||||||
.stringnf db 'SET CMDLINE LINE NOT FOUND!',13,0
|
.stringnf db 'SET CMDLINE LINE NOT FOUND!',13,0
|
||||||
|
|
||||||
NEWSYM CMDLineStr, times 256 db 0
|
SECTION .bss
|
||||||
NEWSYM GUIFName, times 256 db 0
|
NEWSYM CMDLineStr, resb 256
|
||||||
NEWSYM GUICName, times 256 db 0
|
NEWSYM GUIFName, resb 256
|
||||||
NEWSYM FilenameStart, dd 0
|
NEWSYM GUICName, resb 256
|
||||||
|
NEWSYM FilenameStart, resd 1
|
||||||
|
|
||||||
SECTION .text
|
SECTION .text
|
||||||
|
|
||||||
@@ -755,9 +764,12 @@ NEWSYM getblaster
|
|||||||
%endif
|
%endif
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
SECTION .bss
|
||||||
|
.blfound resb 1
|
||||||
|
.cursetting resb 1
|
||||||
|
|
||||||
SECTION .data
|
SECTION .data
|
||||||
.string2s db 'BLASTER',0
|
.string2s db 'BLASTER',0
|
||||||
.blfound db 0
|
|
||||||
.blasterstr db 'ERROR : SET BLASTER environment NOT found!',10,13
|
.blasterstr db 'ERROR : SET BLASTER environment NOT found!',10,13
|
||||||
.blasterstr2 db 'Unable to enable sound.'
|
.blasterstr2 db 'Unable to enable sound.'
|
||||||
.blasterstr2b db 10,13,10,13
|
.blasterstr2b db 10,13,10,13
|
||||||
@@ -767,18 +779,17 @@ SECTION .data
|
|||||||
.blinfob db 13,10,'IRQ : ',0
|
.blinfob db 13,10,'IRQ : ',0
|
||||||
.blinfoc db 13,10,'DMA : ',0
|
.blinfoc db 13,10,'DMA : ',0
|
||||||
.blinfod db 13,10,'HDMA : ',0
|
.blinfod db 13,10,'HDMA : ',0
|
||||||
.cursetting db 0
|
|
||||||
|
|
||||||
NEWSYM PICRotateP, db 20h
|
NEWSYM PICRotateP, db 20h
|
||||||
NEWSYM PICMaskP, db 21h
|
NEWSYM PICMaskP, db 21h
|
||||||
SECTION .text
|
;SECTION .text
|
||||||
;*******************************************************
|
;*******************************************************
|
||||||
; Variable section
|
; Variable section
|
||||||
;*******************************************************
|
;*******************************************************
|
||||||
|
|
||||||
SECTION .bss
|
SECTION .bss
|
||||||
|
|
||||||
ALIGN32
|
;ALIGN32
|
||||||
|
|
||||||
NEWSYM vrama, resb 65536
|
NEWSYM vrama, resb 65536
|
||||||
NEWSYM mode7tab, resb 65536
|
NEWSYM mode7tab, resb 65536
|
||||||
@@ -869,20 +880,20 @@ AllocateBlock:
|
|||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
SECTION .data
|
SECTION .bss
|
||||||
|
|
||||||
ALIGN32
|
;ALIGN32
|
||||||
vbufaptr dd 0
|
vbufaptr resd 1
|
||||||
vbufeptr dd 0
|
vbufeptr resd 1
|
||||||
ngwinptrb dd 0
|
ngwinptrb resd 1
|
||||||
romaptr dd 0
|
romaptr resd 1
|
||||||
vbufcptr dd 0
|
vbufcptr resd 1
|
||||||
NEWSYM vbufdptr, dd 0
|
NEWSYM vbufdptr, resd 1
|
||||||
vc2bptr dd 0
|
vc2bptr resd 1
|
||||||
vc4bptr dd 0
|
vc4bptr resd 1
|
||||||
vc8bptr dd 0
|
vc8bptr resd 1
|
||||||
cmemallocptr dd 0
|
cmemallocptr resd 1
|
||||||
memfreearray times 12 dd 0
|
memfreearray resd 12
|
||||||
|
|
||||||
SECTION .text
|
SECTION .text
|
||||||
|
|
||||||
@@ -1134,6 +1145,7 @@ NEWSYM converthex
|
|||||||
mov byte[esi],0
|
mov byte[esi],0
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
section .data
|
||||||
.hexdat db '0123456789ABCDEF'
|
.hexdat db '0123456789ABCDEF'
|
||||||
|
|
||||||
;*******************************************************
|
;*******************************************************
|
||||||
@@ -1166,8 +1178,9 @@ ShowIdentStr:
|
|||||||
|
|
||||||
SECTION .data
|
SECTION .data
|
||||||
.idstrdata db USERNAMEC
|
.idstrdata db USERNAMEC
|
||||||
newestfileloc db 0
|
SECTION .bss
|
||||||
newestfiledate dd 0
|
newestfileloc resb 1
|
||||||
|
newestfiledate resd 1
|
||||||
SECTION .text
|
SECTION .text
|
||||||
|
|
||||||
NEWSYM makeextension
|
NEWSYM makeextension
|
||||||
@@ -1360,8 +1373,10 @@ NEWSYM tparms
|
|||||||
mov byte[romloadskip],1
|
mov byte[romloadskip],1
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
SECTION .bss
|
||||||
|
.numparam resb 1
|
||||||
|
|
||||||
SECTION .data
|
SECTION .data
|
||||||
.numparam db 0
|
|
||||||
.nostr db 'This emulator will not work without a filename!',13,10,0
|
.nostr db 'This emulator will not work without a filename!',13,10,0
|
||||||
.waitkey db 'Press Any Key to Continue.',0
|
.waitkey db 'Press Any Key to Continue.',0
|
||||||
.ret db 13,10,0
|
.ret db 13,10,0
|
||||||
@@ -1554,11 +1569,8 @@ SECTION .data
|
|||||||
.enter db 13,10,0
|
.enter db 13,10,0
|
||||||
|
|
||||||
NEWSYM InitDrive, db 2
|
NEWSYM InitDrive, db 2
|
||||||
NEWSYM InitDir, times 512 db 0
|
|
||||||
NEWSYM SRAMDrive, db 2
|
NEWSYM SRAMDrive, db 2
|
||||||
NEWSYM SRAMDir, times 512 db 0
|
|
||||||
NEWSYM LoadDrive, db 2
|
NEWSYM LoadDrive, db 2
|
||||||
NEWSYM LoadDir, times 512 db 0
|
|
||||||
|
|
||||||
%ifdef __LINUX__
|
%ifdef __LINUX__
|
||||||
NEWSYM gotoroot, db '/',0
|
NEWSYM gotoroot, db '/',0
|
||||||
@@ -1566,6 +1578,11 @@ NEWSYM gotoroot, db '/',0
|
|||||||
NEWSYM gotoroot, db '\',0
|
NEWSYM gotoroot, db '\',0
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
SECTION .bss
|
||||||
|
NEWSYM InitDir, resb 512
|
||||||
|
NEWSYM SRAMDir, resb 512
|
||||||
|
NEWSYM LoadDir, resb 512
|
||||||
|
|
||||||
SECTION .text
|
SECTION .text
|
||||||
|
|
||||||
NEWSYM DosExit ; Terminate Program
|
NEWSYM DosExit ; Terminate Program
|
||||||
@@ -1595,32 +1612,44 @@ NEWSYM DosExit ; Terminate Program
|
|||||||
|
|
||||||
NEWSYM MMXCheck
|
NEWSYM MMXCheck
|
||||||
; Check for cpu that doesn't support CPUID
|
; Check for cpu that doesn't support CPUID
|
||||||
mov edx,cpuidfname
|
; mov edx,cpuidfname
|
||||||
call Open_File
|
; call Open_File
|
||||||
jc .skipcheck
|
; jc .skipcheck
|
||||||
mov bx,ax
|
; mov bx,ax
|
||||||
call Close_File
|
; call Close_File
|
||||||
jmp .nommx2
|
; jmp .nommx2
|
||||||
.skipcheck
|
;.skipcheck
|
||||||
|
|
||||||
; Create file
|
; Create file
|
||||||
mov edx,cpuidfname
|
; mov edx,cpuidfname
|
||||||
call Create_File
|
; call Create_File
|
||||||
mov bx,ax
|
; mov bx,ax
|
||||||
call Close_File
|
; call Close_File
|
||||||
|
|
||||||
mov edx,cpuidtext
|
; mov edx,cpuidtext
|
||||||
call PrintStr
|
; call PrintStr
|
||||||
|
|
||||||
|
; Real way to check for presence of CPUID instruction -kode54
|
||||||
|
pushfd
|
||||||
|
pop eax
|
||||||
|
mov edx,eax
|
||||||
|
xor eax,1 << 21
|
||||||
|
push eax
|
||||||
|
popfd
|
||||||
|
pushfd
|
||||||
|
pop eax
|
||||||
|
xor eax,edx
|
||||||
|
jz .nommx
|
||||||
|
|
||||||
; MMX support
|
; MMX support
|
||||||
mov byte[FPUCopy],0
|
mov byte[FPUCopy],0
|
||||||
mov eax,1
|
mov eax,1
|
||||||
CPUID
|
CPUID
|
||||||
|
|
||||||
push edx
|
; push edx
|
||||||
mov edx,cpuidtext2
|
; mov edx,cpuidtext2
|
||||||
call PrintStr
|
; call PrintStr
|
||||||
pop edx
|
; pop edx
|
||||||
|
|
||||||
test edx,1 << 23
|
test edx,1 << 23
|
||||||
jz .nommx
|
jz .nommx
|
||||||
@@ -1628,10 +1657,10 @@ NEWSYM MMXCheck
|
|||||||
mov edx,YesMMX
|
mov edx,YesMMX
|
||||||
call PrintStr
|
call PrintStr
|
||||||
.nommx
|
.nommx
|
||||||
; Delete file
|
; ; Delete file
|
||||||
mov edx,cpuidfname
|
; mov edx,cpuidfname
|
||||||
call Delete_File
|
; call Delete_File
|
||||||
.nommx2
|
;.nommx2
|
||||||
ret
|
ret
|
||||||
|
|
||||||
NEWSYM UIAsmEnd
|
NEWSYM UIAsmEnd
|
||||||
|
|||||||
Reference in New Issue
Block a user