| MESS 0161b_64bit [Aamber Pegasus].zip |
WELCOME UNIVERSE ROMs
vendredi 24 avril 2020
Execution of the Aamber Pegasus
Emulation of RCA Studio II
mardi 21 avril 2020
NEC PC-9801: How is it emulated ?
- Tout d'abord, téléchargez la version la plus récente ici :
http://www.emu-france.com/?wpfb_dl=1085
Gardez-le près du coude, il nous servira plus tard.
- Alors allez ici :
http://archive.is/GAesT
Vous trouvez un pack prêt à l'emploi (ou presque), contenant un émulateur préconfiguré (ou presque) et un BIOS.
Décompressez l'archive où vous le souhaitez.
- Voici la suite des instructions :
http://ux.getuploader.com/emu/download/153/np2fmgen.7z
(Sous l'URL, une fenêtre vous permet de saisir un mot de passe. Tapez 9801 et validez. Cliquez sur la nouvelle icône et attendez que le téléchargement soit proposé.)
- Collez tous les fichiers de cette archive dans :
Pack d'émulateurs Neo Kobe Lite \ NKEmuLite \ NEC PC-9801 \ np2fmgen \
Enfin, collez les fichiers np21w et np21x64w de l'archive np21w-0.86-rev30, récupérez-les au tout début dans
Pack d'émulateurs Neo Kobe Lite \ NKEmuLite \ NEC PC-9801 \ np2fmgen \
- Démarrez l'émulateur avec np21x64w pour Windows 64 bits et np21w pour Windows 32 bits.
Première chose à savoir : certains jeux peuvent présenter des bugs graphiques, comme Xevious par exemple.
Dans ce cas, vous aurez besoin de :
Accédez au BIOS en maintenant la touche « Fin » enfoncée, puis cliquez sur Émuler > Réinitialiser. Descendez jusqu'à la deuxième ligne et appuyez sur Entrée.
- Sur la ligne GDC, choisissez 2,5 MHz au lieu de 5 MHz.
- Appuyez ensuite sur la dernière ligne, puis sur la fenêtre suivant cette dernière ligne pour valider et quitter le BIOS.
- Dans Emulate-> Configurer, réglez la mémoire tampon audio sur 150 ms.
- La vitesse du processeur est réglée sur x4. Si le jeu rame, modifiez la vitesse à une autre valeur.
Deuxième chose à savoir : certains jeux peuvent nécessiter plus de mémoire RAM pour fonctionner. Dans ce cas, allez dans Périphérique -> Mémoire pour choisir la quantité de RAM.
Script AutoHotKey :np21.ahk
ROMPath = %1%
SplitPath, ROMPath,, ROMDir,, ROMName ROMBase := ROMDir . "\" . ROMName
If FileExist(ROMBase . ".hdi") HDI := ROMBase . ".hdi"
If FileExist(ROMBase . ".ccd") CCD := ROMBase . ".ccd"
If FileExist(ROMBase . ".hdm") FDD := ROMBase . ".hdm"
If FileExist(ROMBase . ".25") GDC := "f3" Else GDC := "73"
IniPath := A_ScriptDir . "\np21x64w_lb.ini" OrigIniPath := A_ScriptDir . "\np21x64w.ini" FileRead, Ini, %OrigIniPath% TmpIni := FileOpen(IniPath, "w")
Loop, parse, Ini, `n, `r { If InStr(A_LoopField, "HDD1FILE") TmpIni.WriteLine("HDD1FILE=" . HDI) Else If InStr(A_LoopField, "CD3_FILE") TmpIni.WriteLine("CD3_FILE=" . CCD) Else If InStr(A_LoopField, "FDD1FILE") TmpIni.WriteLine("FDD1FILE=") Else If InStr(A_LoopField, "FD1NAME0") TmpIni.WriteLine("FD1NAME0=") Else If InStr(A_LoopField, "DIPswtch") TmpIni.WriteLine("DIPswtch=3e " . GDC . " 7b") Else If (A_LoopField = "") Continue Else TmpIni.WriteLine(A_LoopField) }
TmpIni.Close()
RunWait, %A_ScriptDir%\np21x64w.exe /f /i "%IniPath%" "%FDD%", A_ScriptDir
FileMove, %IniPath%, %OrigIniPath%, 1
Vous devez le placer dans le même dossier que np21/w (il est préférable de le compiler au préalable en .exe avec Ahk2Exe) et configurer LaunchBox pour qu'il l'utilise à la place de l'émulateur. Laissez les paramètres de ligne de commande par défaut et importez généralement le fichier hdi (s'il est disponible) ou le fichier hdm dans votre bibliothèque.
Le script générera automatiquement un fichier INI adapté au jeu et le lancera. Pour ce faire, il part de quelques hypothèses (généralement vérifiées avec les jeux de la collection Neo Kobe, du moins ceux que j'ai testés).
- L'extension du disque dur est .hdi
- L'extension FDD est .hdm
- Les CD sont au format .ccd/.img/.sub
Il exige que tous les fichiers liés à un même jeu portent exactement le même nom, à l'exception de l'extension. S'ils respectent cette règle, ils seront automatiquement détectés et ajoutés au fichier .ini si nécessaire.
De plus, si vous créez un fichier vide portant le même nom que le jeu, mais avec l'extension .25 (par exemple Rusty.25 placé à côté de Rusty.hdi), la vitesse du GDC sera fixée à 2,5 MHz au lieu de la valeur par défaut de 5,0 MHz. Ceci est nécessaire pour certains jeux.
MEmu:= "Neko"
MEmuV:= "np2fmgen"
MURL:= [""]
MAuthor:= ["psmiraglia"]
MVersion:= "0.1"
MSystem:= ["Sharp X1"]
;----------------------------------------------------------------
StartModule()
BezelGUI()
FadeInStart()
7z(romPath, romName, romExtension, 7zExtractPath)
BezelStart()
Run(executable . " """ . romPath . "\" . romName . romExtension . """", emuPath)
; Loads Fullscreeen
WinMenuSelectItem, Neko, , Screen, Fullscreen
WinWait("Neko Project 21/W x64 ahk_class NP2-MainWindow Window")
WinWaitActive("Neko Project 21/W x64 ahk_class NP2-MainWindow Window")
Send, {F11 down}{F11 up}
Send, {H down}{H up}
Send, {enter down}{enter up}
Send, {O down}{O up}
sleep 100
Loop, parse, romPath
{
Send, {%A_LoopField% Down}
Sleep, 50
Send, {%A_LoopField% Up}
}
Send, {\ down}{\ up}
Loop, parse, romName
{
Send, {%A_LoopField% Down}
Sleep, 50
Send, {%A_LoopField% Up}
}
Send, {. down}{. up}
Loop, parse, romExtension
{
Send, {%A_LoopField% Down}
Sleep, 50
Send, {%A_LoopField% Up}
}
Send, {enter down}{enter up}
sleep 100
Send, {F11 down}{F11 up}
Send, {E down}{E up}
Send, {R down}{R up}
FadeInExit()
Process("WaitClose", executable)
7zCleanUp()
BezelExit()
BezelDraw()
FadeOutExit()
ExitModule()
CloseProcess:
FadeOutStart()
WinClose("Neko Project 21/W x64 ahk_class NP2-MainWindow Window")
ExitApp
Return
MEmu = "NekoProjectII"
MEmuV = "v0.80"
MURL = ["http://www.romhacking.net/utilities/453/"]
MAuthor = "mz"
MVersion = "0.0z"
MID = "0"
MSystem = "NEC PC-9801","Touhou"
;----------------------------------------------------------------------------
; Notes:
; An alternate emulator for PC-98.
; To enable save state the np21.ini must be modified. Create a new line
; anywhere under [NekoProject21] and write the following on that new line:
; STATSAVE=true
;
; Default PC-98 keys are:
; player 1
; RTY
; FGH
; VBN
; shot - z
; bomb - X
; player 2
; 789
; 456
; 123
; shot - left arrow
; bomb - right arrow
;----------------------------------------------------------------------------
StartModule()
FadeInStart()
7z(romPath, romName, romExtension, 7zExtractPath)
fd1 := romPath . "\" . romName . romExtension
;emupath := "I:\HS\Hyperspin\Emulators\NekoProjectII\np21\" ;s
;executable := "np21.exe" ;s
;romPath := "I:\HS\Hyperspin\RomFiles\NECPC98"
;romName := "2_the Story of Eastern Wonderland"
;romExtension := ".hdi"
; is it case sensitive? If so may have to convert to lower/upper to test
;romName := "Caroll (1990)(System House Oh!)(Disk 1 of 1)" ; single disk game works fine.
;romName := "Misty Flash (1994)(Factory Team-Ten)(Disk 1 of 7)(Disk A)" ;s
;romName := "Card Buster 2 - Fukkatsu no Hijirizuka Shaku (1994)(F-88)(Disk 1 of 2)" ;this type works
;romExtension := ".FDI" ;s
ExitEmu(executable) ; Close Neko. Just Use for debugging. Comment out when done.
RemoveHDDs(emuPath)
ClearFDDEntries(emuPath)
InitializeWindow(emuPath)
If romExtension = .hdi
{
LoadHDI(rompath, romName, romExtension, emuPath)
Run, %executable%, %emupath%
}
else
{
cmdNeko := executable . A_Space . """" . fd1 . """"
;MsgBox, %cmdNeko%
Run(cmdNeko, emuPath)
}
;they also fail not sure what they are waiting on since the window is Neko Project II.
;WinWait("Emulation Window ahk_class NekoProjectII")
;WinWaitActive("Emulation Window ahk_class NekoProjectII")
Sleep, 1000 ; need this otherwise mouse doesn't move off screen
;MouseMove 0,2000,0 ;Move mouse off screen
; Loads Fullscreeen
WinMenuSelectItem, Neko, , Screen, Fullscreen
; If romName = 3th - Phantasmagoria of Dim Dream
; Run, remap_keys.exe, %modulePath%
Process("WaitClose", executable)
; Process, Close, remap_keys.exe
7zCleanUp()
FadeInExit()
FadeOutExit()
ExitModule()
CloseProcess:
;FadeOutStart()
Process("Close", executable) ; WinClose exits fullscreen, but does not close emu
Return
ExitEmu(executable)
{
Process, Exist, %executable%
if !ErrorLevel = 0
{
Process,Close, %executable%
}
}
RemoveHDDs(emuPath)
{
IniWrite, % "", %emuPath%\np21.ini, NekoProject21, HDD1FILE
IniWrite, % "", %emuPath%\np21.ini, NekoProject21, HDD2FILE
}
ClearFDDEntries(emuPath)
{
IniWrite, % "", %emuPath%\np21.ini, NP2 tool, FD1NAME0
IniWrite, % "", %emuPath%\np21.ini, NP2 tool, FD2NAME0
}
InitializeWindow(emuPath)
{
; Should check to see if these exist. before writing probably.
; I think it will write it if it does exist at the end of the file
; Need this window type to access menuitems later. The other two windtypes hide the menu.
IniWrite, 0, %emuPath%\np21.ini, NekoProject21, windtype
; Fullscreen l does not seem to do anything? i wonder if there are other values besides 0 and 1
IniWrite, 1, %emuPath%\np21.ini, NekoProject21, fscrnmod
; Hide np2 tool, Key Display, Memory Map window. Not needed.
; Are those keys case sensitive?
IniWrite, false, %emuPath%\np21.ini, NP2 tool, Windtype
IniWrite, false, %emuPath%\np21.ini, Key Display, windtype
IniWrite, false, %emuPath%\np21.ini, Soft Keyboard, windtype
IniWrite, false, %emuPath%\np21.ini, Memory Map, windtype
}
LoadHDI(rompath, romName, romExtension,emuPath)
{
IniWrite, %romPath%\%romName%%romExtension%, %emuPath%\np21.ini, NekoProject21, HDD1FILE
}
LoadFDI(rompath, romName, romExtension, emuPath)
{
fd1 := romPath . "\" . romName . romExtension
;initializes the fdi open dialog entry
IniWrite, %romPath%\%romName%%romExtension%, %emuPath%\np21.ini, NekoProject21, FDfolder
;Sleep 75ms was working fine on my system, but mine is pimpin. Needs more testing on other systems.
Sleep, 200
; Open the FileDialog to load FDD1
WinMenuSelectItem, Neko, , FDD1, Open
Sleep, 1000
ClipBoard = %fd1% ; Convert to text
Send ^v
Send {ENTER}
; WinWait, select floppy image ;this seems to prevent the other floppy selection from opening?
Sleep, 1000 ;wait for it close
; Now to check if there is a second floppy that should be loaded.
LoadFDD2(rompath, romName, romExtension, emuPath)
}
LoadFDD2(rompath, romName, romExtension, emuPath)
{
fd2 := GetFD2FileName(rompath, romName, romExtension)
if fd2 = "" ;no fd2 that could be found and loaded
Return
ifExist, %fd2%
{
;FDfolder only initializes itself the first time so cannot use that
WinMenuSelectItem, Neko, , FDD2, Open
Sleep, 1000
ClipBoard = %fd2% ; Convert to text
Send ^v
Send {ENTER}
}
}
GetFD2FileName(rompath, romName, romExtension)
{
StringReplace , rn2, romName, (Disk 1 of, (Disk 2 of,
if (ErrorLevel = 0){ ; there is a second floppy
;test to see if it exists
StringReplace , temp, rn2, (Disk A), (Disk B),
file := romPath . "\" . temp . romExtension
ifExist, %file%
{
return file
}
}else
{
}
return "" ;empty string
}
ResetEmu()
{
WinMenuSelectItem, Neko, , Emulate, Reset
}
GetAHKState()
{
MsgBox, % GetAhkStats("lines")
MsgBox, % GetAhkStats("variables")
MsgBox, % GetAhkStats("hotkeys")
MsgBox, %Stat1%
Return
}
GetAhkStats(xxSection="", xxUseWindow=99, xxDestroyAfter=1)
{
xxSectionN = Lines|Variables|Hotkeys|History
If xxSection=
xxSection = History
Loop, Parse, xxSectionN, |
IfInString, A_LoopField, %xxSection%
xxSection = %A_Index%
DetectHiddenWindows, On
SetTitleMatchMode, 2
Gui, %xxUseWindow%:Show, Hide
xxHidWin := WinExist(A_ScriptFullPath " - AutoHotkey v")
xxOldpar := DllCall("GetParent", "UInt", xxHidWin)
DllCall("SetParent", "UInt", xxHidWin, "UInt", (GuiGetHWND("", xxUseWindow)))
WinMenuSelectItem, ahk_id %xxHidWin%,, View, %xxSection%&
Loop {
Sleep, 50
ControlGetText, xxOut1, Edit1, ahk_id %xxHidWin%
If xxOut1<>
break
}
WinHide, ahk_id %xxHidWin%
DllCall("SetParent", "UInt", xxHidWin, "UInt", xxOldpar)
If (xxDestroyAfter)
Gui, %xxUseWindow%estroy
Return, xxOut1
}
GuiGetHWND(xxClassNN="", xxGUI=1)
{
If (xxGUI)
Gui, %xxGUI%:+LastFound
xxGui_hwnd := WinExist()
If xxClassNN=
Return, xxGui_hwnd
ControlGet, xxOutputVar, Hwnd,, %xxClassNN%, ahk_id %xxGui_hwnd%
Return, xxOutputVar
}















