Merge branch 'master' of https://github.com/TASVideos/BizHawk
This commit is contained in:
commit
b37b82958a
|
@ -2,3 +2,12 @@ root = true
|
|||
|
||||
[*]
|
||||
indent_style = tab
|
||||
|
||||
[*.cs]
|
||||
csharp_new_line_before_open_brace = all
|
||||
csharp_new_line_before_else = true
|
||||
csharp_new_line_before_catch = true
|
||||
csharp_new_line_before_finally = true
|
||||
csharp_indent_switch_labels = true
|
||||
csharp_indent_case_contents = true
|
||||
csharp_indent_labels = one_less_than_current
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
---
|
||||
name: Bug report
|
||||
about: Crashes, inaccurate emulation, nitpicks, or regressions
|
||||
title: '(issue title -- summarise the summary)'
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
[//]: # "This issue description supports Markdown syntax (this is what comments look like). There's a cheatsheet here: https://guides.github.com/features/mastering-markdown/"
|
||||
[//]: # "You can leave these comments here or delete them. Also, please remember to search for similar issues before writing anything, including in closed issues!"
|
||||
[//]: # "One more thing: if you're on Linux, please comment on #1430 instead of opening an issue so we don't annoy the other devs."
|
||||
|
||||
### Summary
|
||||
[//]: # "Briefly describe what's broken. Include relevant details: loaded core, loaded rom's hash, open tools, running scripts... You can embed a screenshot if it's easier to show the bug, but if you need more than one please put them at the end."
|
||||
Whenever my cat sits on the left side of my keyboard, games run too fast for me to react to.
|
||||
|
||||
### Repro
|
||||
[//]: # "If you can't figure out the list of steps, delete this section and put 'heisenbug' in the summary somewhere. If a Lua script can cause the bug, you can embed that instead (as simple as possible please)."
|
||||
1. first step
|
||||
2. second step
|
||||
3. et cetera
|
||||
|
||||
### Output
|
||||
[//]: # "Paste the contents of the error dialog if there is one (try Ctrl+C, it usually works), or paste the output from the Lua Console, or delete this section."
|
||||
```
|
||||
System.InvalidOperationException: o noes
|
||||
at BizHawk.Client.EmuHawk.HawkBiz.Crash()
|
||||
at BizHawk.Client.EmuHawk.HawkBiz.RunWithoutCrashing()
|
||||
```
|
||||
|
||||
### Host env.
|
||||
[//]: # "List the computers you've found the bug with. If there's a version that doesn't have the bug, please put that in too. Here are some examples:"
|
||||
- BizHawk 2.3.2; Win10 Pro 1903; Intel/AMD
|
||||
- BizHawk dev build at 92847b1d1; Win10 Home 1809; AMD/NVIDIA
|
||||
- BizHawk 2.3.2; Fedora 30; AMD/AMD
|
||||
- BizHawk 2.3.2; macOS 10.15; Intel/AMD
|
||||
- BizHawk 1.13.2; Win7 SP1; Intel/NVIDIA
|
||||
|
||||
[//]: # "(screenshots, if applicable)"
|
||||
|
||||
[//]: # "That's it! If you'd like to help more, you could try a dev build (see Testing in the readme) or an older release. Click submit now and you can edit it later."
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
blank_issues_enabled: true
|
||||
contact_links:
|
||||
- name: "BEFORE OPENING AN ISSUE: Search for duplicates"
|
||||
url: "https://github.com/TASVideos/BizHawk/issues?q=is:issue+<search+terms>"
|
||||
about: "Opens the issue tracker here on GitHub. Use `is:issue <search terms>` to find open or closed issues that might be similar to your problem."
|
||||
- name: "Report issues with the Linux port"
|
||||
url: "https://github.com/TASVideos/BizHawk/issues/1430"
|
||||
about: "Linux users: please comment here on #1430 instead of opening a new issue."
|
||||
- name: "Chat with us on IRC"
|
||||
url: "https://webchat.freenode.net/#bizhawk"
|
||||
about: "Joins #bizhawk on freenode with your browser. Please be patient as there isn't always somebody online."
|
|
@ -2,7 +2,7 @@
|
|||
/snes9xgit
|
||||
|
||||
svnrev.cs
|
||||
.vs/**
|
||||
**/.vs/**
|
||||
**/bin/**
|
||||
**/obj/**
|
||||
/output/**
|
||||
|
@ -12,6 +12,7 @@ svnrev.cs
|
|||
**/ipch/**
|
||||
|
||||
*.ilk
|
||||
*.il
|
||||
*.tlog
|
||||
*.obj
|
||||
*.o
|
||||
|
@ -74,3 +75,12 @@ libsnes/vs2015/libsnes.VC.db
|
|||
waterbox/**/*.wbx
|
||||
waterbox/**/*.wbx.in
|
||||
/BizHawkTool_template.zip
|
||||
|
||||
mono_crash*
|
||||
|
||||
.idea
|
||||
|
||||
packages
|
||||
|
||||
BizHawk.Emulation.Common/BizHawk.Emulation.Common.csproj.nuget.*
|
||||
BizHawk.Emulation.Common/project.assets.json
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
image: mcr.microsoft.com/dotnet/core/sdk:3.1
|
||||
|
||||
stages:
|
||||
- build
|
||||
- deploy
|
||||
|
||||
build:
|
||||
artifacts:
|
||||
expire_in: "30 minutes"
|
||||
name: "BizHawk_tempbuild_$CI_COMMIT_REF_SLUG"
|
||||
paths:
|
||||
- output
|
||||
when: always
|
||||
script:
|
||||
- Dist/BuildRelease.sh -p:MachineRunAnalyzersDuringBuild=true
|
||||
stage: build
|
||||
|
||||
deploy_artifact:
|
||||
artifacts:
|
||||
expire_in: "1 month"
|
||||
name: "BizHawk_devbuild_$CI_COMMIT_REF_SLUG"
|
||||
paths:
|
||||
- output
|
||||
only:
|
||||
- master
|
||||
script:
|
||||
- ''
|
||||
stage: deploy
|
||||
|
||||
cache:
|
||||
key: "$CI_COMMIT_REF_SLUG"
|
||||
paths:
|
||||
- packages
|
|
@ -14,4 +14,8 @@
|
|||
[submodule "mgba"]
|
||||
path = mgba
|
||||
url = https://github.com/TASVideos/mgba.git
|
||||
branch = bizhawk-0.6
|
||||
branch = bizhawk-0.9
|
||||
[submodule "melonds"]
|
||||
path = melonds
|
||||
url = https://github.com/TASVideos/melonDS.git
|
||||
branch = SuuperW_DSHawk
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"$schema": "https://raw.githubusercontent.com/DotNetAnalyzers/StyleCopAnalyzers/1.2.0-beta.113/StyleCop.Analyzers/StyleCop.Analyzers/Settings/stylecop.schema.json",
|
||||
"settings": {
|
||||
"documentationRules": {
|
||||
"documentExposedElements": false,
|
||||
"documentInterfaces": false,
|
||||
"documentInternalElements": false
|
||||
},
|
||||
"indentation": {
|
||||
"useTabs": true
|
||||
},
|
||||
"layoutRules": {
|
||||
"allowConsecutiveUsings": false,
|
||||
"newlineAtEndOfFile": "require"
|
||||
},
|
||||
"maintainabilityRules": {
|
||||
"topLevelTypes": []
|
||||
},
|
||||
"namingRules": {
|
||||
"allowedHungarianPrefixes": [ "dx", "dy", "k", "sa" ]
|
||||
},
|
||||
"orderingRules": {
|
||||
"usingDirectivesPlacement": "outsideNamespace"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -8,11 +8,20 @@ libpath=""
|
|||
if [ "$(command -v lsb_release)" ]; then
|
||||
case "$(lsb_release -i | cut -c17- | tr -d "\n")" in
|
||||
"Arch"|"ManjaroLinux") libpath="/usr/lib/wine";;
|
||||
"Debian"|"Ubuntu"|"LinuxMint") libpath="/usr/lib/x86_64-linux-gnu/wine";;
|
||||
"Debian"|"LinuxMint"|"Ubuntu") libpath="/usr/lib/x86_64-linux-gnu/wine"; export MONO_WINFORMS_XIM_STYLE=disabled;; # see https://bugzilla.xamarin.com/show_bug.cgi?id=28047#c9
|
||||
esac
|
||||
else
|
||||
printf "Distro does not provide LSB release info API! (You've met with a terrible fate, haven't you?)\n"
|
||||
fi
|
||||
if [ -z "$libpath" ]; then
|
||||
printf "%s\n" "Unknown distro, assuming WINE library location is /usr/lib/wine..."
|
||||
libpath="/usr/lib/wine"
|
||||
fi
|
||||
LD_LIBRARY_PATH="$libpath" mono ./EmuHawk.exe
|
||||
export LD_LIBRARY_PATH="$libpath"
|
||||
if [ "$1" = "--mono-no-redirect" ]; then
|
||||
shift
|
||||
printf "(received --mono-no-redirect, stdout was not captured)\n" >EmuHawkMono_laststdout.txt
|
||||
mono ./EmuHawk.exe "$@"
|
||||
else
|
||||
mono ./EmuHawk.exe "$@" >EmuHawkMono_laststdout.txt
|
||||
fi
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
-- feos, 2019
|
||||
|
||||
local offX, offY, camX, camY
|
||||
local addr_offX = 0x5B96
|
||||
local addr_offY = 0x5B98
|
||||
local addr_camX = 0x59D0
|
||||
local addr_camY = 0x59D2
|
||||
|
||||
while true do
|
||||
client.invisibleemulation(true)
|
||||
local memorystate = memorysavestate.savecorestate()
|
||||
|
||||
offX = mainmemory.read_u16_le(addr_offX)
|
||||
offY = mainmemory.read_u16_le(addr_offY)
|
||||
camX = mainmemory.read_u16_le(addr_camX)
|
||||
camY = mainmemory.read_u16_le(addr_camY)
|
||||
|
||||
Xval = camX + offX - 128
|
||||
Yval = camY + offY - 80
|
||||
|
||||
mainmemory.write_u16_le(addr_camX, Xval)
|
||||
mainmemory.write_u16_le(addr_camY, Yval)
|
||||
|
||||
client.seekframe(emu.framecount()+1)
|
||||
client.invisibleemulation(false)
|
||||
client.seekframe(emu.framecount()+1)
|
||||
client.invisibleemulation(true)
|
||||
memorysavestate.loadcorestate(memorystate)
|
||||
memorysavestate.removestate(memorystate)
|
||||
-- client.invisibleemulation(false)
|
||||
emu.frameadvance()
|
||||
end
|
|
@ -1,448 +1,522 @@
|
|||
-- Gargoyles, Genesis (BizHawk)
|
||||
-- feos, 2015-2016
|
||||
|
||||
--== Shortcuts ==--
|
||||
rb = memory.read_u8
|
||||
rw = memory.read_u16_be
|
||||
rws = memory.read_s16_be
|
||||
r24 = memory.read_u24_be
|
||||
rl = memory.read_u32_be
|
||||
box = gui.drawBox
|
||||
text = gui.pixelText
|
||||
line = gui.drawLine
|
||||
AND = bit.band
|
||||
SHIFT = bit.rshift
|
||||
|
||||
--== RAM addresses ==--
|
||||
levnum = 0xff00ba
|
||||
LevelFlr = 0xff00c0
|
||||
LevelCon = 0xff00c4
|
||||
mapline_tab = 0xff0244
|
||||
GlobalBase = 0xff1c76
|
||||
GolBase = 0xff2c76
|
||||
MapA_Buff = 0xff4af0
|
||||
|
||||
--== Camera Hack ==--
|
||||
camhack = false
|
||||
div = 1 -- scale
|
||||
size = 16/div -- block size
|
||||
|
||||
--== Block cache ==--
|
||||
col = 0 -- block color
|
||||
opout = 0x33000000 -- outer opacity
|
||||
opin = 0x66000000 -- inner opacity
|
||||
op = 0xff000000
|
||||
cache = {}
|
||||
|
||||
--== Other stuff ==--
|
||||
XposLast = 0
|
||||
YposLast = 0
|
||||
room = 0
|
||||
workinglast = 0
|
||||
lagcount = emu.lagcount()
|
||||
gui.defaultPixelFont("fceux")
|
||||
|
||||
function main()
|
||||
rnd1 = rl (0xff001c)
|
||||
rnd2 = rw (0xff0020)
|
||||
working = rb (0xff0073)
|
||||
xblocks = rw (0xff00d4)
|
||||
mapw = rw (0xff00d4)*8
|
||||
maph = rw (0xff00d6)*8
|
||||
Xpos = rws(0xff0106)
|
||||
Ypos = rws(0xff0108)
|
||||
camx = rws(0xff010c)+16
|
||||
camy = rws(0xff010e)+16
|
||||
run = rb (0xff1699)
|
||||
inv = rw (0xff16d2)
|
||||
health = rws(0xff2cc6)
|
||||
backx = camx
|
||||
backy = camy
|
||||
Xspd = Xpos-XposLast
|
||||
Yspd = Ypos-YposLast
|
||||
facing = AND(rb(GolBase+0x48),2) -- object flag 1
|
||||
|
||||
Background()
|
||||
CamhackHUD()
|
||||
Objects()
|
||||
PlayerBoxes()
|
||||
HUD()
|
||||
RoomTime()
|
||||
Input()
|
||||
end
|
||||
|
||||
function RoomTime()
|
||||
local start11 = 894--767
|
||||
local start12 = 2294
|
||||
local start13 = 4101
|
||||
local startl4 = 6000
|
||||
timer = emu.framecount()
|
||||
|
||||
if timer < start11 then room = timer
|
||||
elseif timer < start12 then room = timer - start11
|
||||
elseif timer < start13 then room = timer - start12
|
||||
elseif timer < startl4 then room = timer - start13
|
||||
end
|
||||
text(160,214,"room cnt: "..room, "white")
|
||||
end
|
||||
|
||||
function HUD()
|
||||
text(1, 0,emu.framecount(), framecol)
|
||||
text(1,20,emu.lagcount(), "red")
|
||||
text(1,30,movie.rerecordcount(),"orange")
|
||||
|
||||
if working>0 then return end
|
||||
if rndlast ~= rnd1 then rndcol = "red" else rndcol = "white" end
|
||||
|
||||
text( 0,214,"rnd: ","yellow")
|
||||
text( 26,214,string.format("%08X %04X",rnd1,rnd2),rndcol)
|
||||
text(277, 0,string.format(
|
||||
"x: %4d\ny: %4d\ndx: %3d\ndy: %3d\nhp: %3d\nrun:%3d\ninv:%3d",
|
||||
Xpos,Ypos,Xspd,Yspd,health,run,inv)
|
||||
)
|
||||
end
|
||||
|
||||
function CamhackHUD()
|
||||
if working==0 then
|
||||
-- screen edge
|
||||
box((backx-camx- 1)/div,
|
||||
(backy-camy- 1)/div,
|
||||
(backx-camx+320)/div,
|
||||
(backy-camy+224)/div,
|
||||
0xff0000ff)
|
||||
-- map edge
|
||||
box( 0-camx/div+size,
|
||||
0-camy/div+size,
|
||||
mapw/div-camx/div,
|
||||
maph/div-camy/div,
|
||||
0xff0000ff)
|
||||
end
|
||||
|
||||
text(260,206,string.format("cHack: %s\nscale: %d",ch,div))
|
||||
end
|
||||
|
||||
function Background()
|
||||
if working>0 then
|
||||
cache = {}
|
||||
return
|
||||
end
|
||||
|
||||
if camhack then
|
||||
camx = Xpos-320/2*div
|
||||
camy = Ypos-224/2*div
|
||||
box(0,0,320,240,0,0x66000000)
|
||||
ch = "on"
|
||||
else
|
||||
ch = "off"
|
||||
end
|
||||
|
||||
local border = 0
|
||||
local offset = 32
|
||||
local basex = camx+border
|
||||
local basey = camy+border
|
||||
local basei = PosToIndex(basex-offset,basey-offset)
|
||||
local boundx = 320*div-border
|
||||
local boundy = 224*div-border
|
||||
local xblockstockeck = ((camx+boundx+offset)-(basex-offset))/size/div
|
||||
local yblockstockeck = ((camy+boundy+offset)-(basey-offset))/size/div
|
||||
|
||||
for yblock = 0,yblockstockeck do
|
||||
for xblock = 0,xblockstockeck do
|
||||
local i = yblock*xblocks+xblock+basei
|
||||
local x = basex+xblock*size*div
|
||||
local y = basey+yblock*size*div
|
||||
|
||||
if InBounds(x,basex-offset,camx+boundx+offset) then
|
||||
local unit = cache[i]
|
||||
|
||||
if unit == nil or workinglast>0 then
|
||||
if InBounds(x,basex,camx+boundx)
|
||||
and InBounds(y,basey,camy+boundy)
|
||||
then cache[i] = GetBlock(x,y)
|
||||
end
|
||||
else
|
||||
if not InBounds(x,basex,camx+boundx)
|
||||
and not InBounds(y,basey,camy+boundy)
|
||||
then cache[i] = nil
|
||||
end
|
||||
end
|
||||
|
||||
if unit ~= nil then
|
||||
DrawBG(unit,x,y)
|
||||
end
|
||||
elseif cache[i] ~= nil
|
||||
then cache[i] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function DrawBG(unit, x, y)
|
||||
local val= 0
|
||||
local x1 = x/div-camx/div-(camx%16)/div
|
||||
local x2 = x1+size-1
|
||||
local y1 = y/div-camy/div-(camy%16)/div
|
||||
local y2 = y1+size-1
|
||||
|
||||
if unit.contour ~= nil then
|
||||
box(x1,y1,x2,y2,0x5500ff00,0x5500ff00)
|
||||
|
||||
for pixel=0,15 do
|
||||
val = unit.contour[pixel]
|
||||
if val>0 then
|
||||
gui.drawPixel(
|
||||
x1+pixel/div,
|
||||
y1+val/div-1/div,
|
||||
0xffffff00)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if unit.block>0 then
|
||||
local Fn = DrawBlock[unit.block] or DrawBlockDefault
|
||||
Fn(x1,y1,x2,y2)
|
||||
box(x1,y1,x2,y2,col+opin,col+opout)
|
||||
end
|
||||
end
|
||||
|
||||
function GetBlock(x,y)
|
||||
if working>0 then return nil end
|
||||
|
||||
local final = { contour={}, block=0 }
|
||||
|
||||
if x>0 and x<mapw
|
||||
and y>0 and y<maph then
|
||||
local pixels = 0
|
||||
local x1 = x/div-camx/div
|
||||
local x2 = x1+size-1
|
||||
local y1 = y/div-camy/div
|
||||
local y2 = y1+size-1
|
||||
local d4 = rw(mapline_tab+SHIFT(y,4)*2)
|
||||
local a1 = r24(LevelFlr+1)
|
||||
local d1 = SHIFT(rw(MapA_Buff+d4+SHIFT(x,4)*2),1)
|
||||
final.block = rb(a1+d1+2)
|
||||
d1 = rw(a1+d1)
|
||||
a1 = r24(LevelCon+1)+d1
|
||||
|
||||
if rb(a1)>0 or rb(a1+8)>0 then
|
||||
for pixel=0,15 do
|
||||
final.contour[pixel] = rb(a1+pixel)
|
||||
end
|
||||
else
|
||||
final.contour = nil
|
||||
end
|
||||
else
|
||||
return nil
|
||||
end
|
||||
|
||||
return final
|
||||
end
|
||||
|
||||
function PosToIndex(x,y)
|
||||
return math.floor(x/16)+math.floor(y/16)*xblocks
|
||||
end
|
||||
|
||||
function IndexToPos(i)
|
||||
return { x=(i%xblocks)*16, y=math.floor(i/xblocks)*16 }
|
||||
end
|
||||
|
||||
function InBounds(x,minimum,maximum)
|
||||
if x>=minimum and x<=maximum
|
||||
then return true
|
||||
else return false
|
||||
end
|
||||
end
|
||||
|
||||
DrawBlock = {
|
||||
[0x80] = function(x1,y1,x2,y2) -- WALL
|
||||
col = 0x00ffffff -- white
|
||||
line(x1,y1,x1,y2,col+op) -- left
|
||||
line(x2,y1,x2,y2,col+op) -- right
|
||||
end,
|
||||
[0x81] = function(x1,y1,x2,y2) -- CEILING
|
||||
col = 0x00ffffff -- white
|
||||
line(x1,y2,x2,y2,col+op) -- bottom
|
||||
end,
|
||||
[0x82] = function(x1,y1,x2,y2) -- CLIMB_U
|
||||
col = 0x0000ffff -- cyan
|
||||
line(x1,y2,x2,y2,col+op) -- bottom
|
||||
end,
|
||||
[0x83] = function(x1,y1,x2,y2) -- CLIMB_R
|
||||
col = 0x0000ffff -- cyan
|
||||
line(x1,y1,x1,y2,col+op) -- left
|
||||
end,
|
||||
[0x84] = function(x1,y1,x2,y2) -- CLIMB_L
|
||||
col = 0x0000ffff -- cyan
|
||||
line(x2,y1,x2,y2,col+op) -- right
|
||||
end,
|
||||
[0x85] = function(x1,y1,x2,y2) -- CLIMB_LR
|
||||
col = 0x0000ffff -- cyan
|
||||
line(x1,y1,x1,y2,col+op) -- left
|
||||
line(x2,y1,x2,y2,col+op) -- right
|
||||
end,
|
||||
[0x86] = function(x1,y1,x2,y2) -- CLIMB_R_STAND_R
|
||||
col = 0x00ffffff -- white
|
||||
line(x1,y1,x2,y1,col+op) -- top
|
||||
col = 0x0000ffff -- cyan
|
||||
line(x1,y1,x1,y2,col+op) -- left
|
||||
end,
|
||||
[0x87] = function(x1,y1,x2,y2) -- CLIMB_L_STAND_L
|
||||
col = 0x00ffffff -- white
|
||||
line(x1,y1,x2,y1,col+op) -- top
|
||||
col = 0x0000ffff -- cyan
|
||||
line(x2,y1,x2,y2,col+op) -- right
|
||||
end,
|
||||
[0x88] = function(x1,y1,x2,y2) -- CLIMB_LR_STAND_LR
|
||||
col = 0x00ffffff -- white
|
||||
line(x1,y1,x2,y1,col+op) -- top
|
||||
col = 0x00ff00ff -- cyan
|
||||
line(x1,y1,x1,y2,col+op) -- left
|
||||
col = 0x0000ffff -- cyan
|
||||
line(x2,y1,x2,y2,col+op) -- right
|
||||
end,
|
||||
[0x70] = function(x1,y1,x2,y2) -- GRAB_SWING
|
||||
col = 0x0000ff00 -- green
|
||||
box(x1,y1,x2,y2,col,col+opout)
|
||||
end,
|
||||
[0x7f] = function(x1,y1,x2,y2) -- EXIT
|
||||
col = 0x00ffff00 -- yellow
|
||||
end,
|
||||
[0xd0] = function(x1,y1,x2,y2) -- SPIKES
|
||||
col = 0x00ff0000 -- red
|
||||
box(x1,y1,x2,y2,col,col+opout)
|
||||
end,
|
||||
[0xd1] = function(x1,y1,x2,y2) -- SPIKES
|
||||
col = 0x00ff0000 -- red
|
||||
box(x1,y1,x2,y2,col,col+opout)
|
||||
end
|
||||
}
|
||||
|
||||
function DrawBlockDefault(x1,y1,x2,y2)-- LEVEL_SPECIFIC
|
||||
col = 0x00ff8800 -- orange
|
||||
box(x1,y1,x2,y2,col+opin,col+opout)
|
||||
end
|
||||
|
||||
function Objects()
|
||||
if working>0 then return end
|
||||
|
||||
for i=0,63 do
|
||||
local base = GlobalBase+i*128
|
||||
local flag2 = AND(rb(base+0x49),0x10) -- active
|
||||
|
||||
if flag2==0x10 then
|
||||
local xpos = rw (base+0x00)
|
||||
local ypos = rw (base+0x02)
|
||||
local dmg = rb (base+0x10)
|
||||
local type = rw (base+0x40)
|
||||
local hp = rw (base+0x50)
|
||||
local cRAM = r24(base+0x75) -- pointer to 4 collision boxes per object
|
||||
local col = 0 -- collision color
|
||||
local xscr = (xpos-camx)/div
|
||||
local yscr = (ypos-camy)/div
|
||||
|
||||
for boxx=0,4 do
|
||||
local x1 = (rws(cRAM+boxx*8+0)-camx)/div
|
||||
local y1 = (rws(cRAM+boxx*8+2)-camy)/div
|
||||
local x2 = (rws(cRAM+boxx*8+4)-camx)/div
|
||||
local y2 = (rws(cRAM+boxx*8+6)-camy)/div
|
||||
|
||||
if boxx==0 then
|
||||
col = 0xff00ff00 -- body
|
||||
if type==282 or type==258 then hp = 1 end -- archer hp doesn't matter
|
||||
if hp>0 and type>0 then
|
||||
text(x1+2,y1+1,string.format("%d",hp),col,0x88000000,"gens")
|
||||
end
|
||||
elseif boxx==1 then
|
||||
col = 0xffffff00 -- floor
|
||||
elseif boxx==2 then
|
||||
if dmg>0
|
||||
then col = 0xffff0000 -- projectile
|
||||
else col = 0xff8800ff -- item
|
||||
end
|
||||
if dmg>0 then
|
||||
text(x1+2,y2+1,string.format("%d",dmg),col,0x88000000,"gens")
|
||||
end
|
||||
else
|
||||
col = 0xffffffff -- other
|
||||
end
|
||||
|
||||
if x1~=0x8888 and x2<320 and x1>0 and y2<224 and y1>0 then
|
||||
box(x1,y1,x2,y2,col)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function PlayerBoxes()
|
||||
if working>0 then return end
|
||||
|
||||
local xx = (Xpos-camx)/div
|
||||
local yy = (Ypos-camy)/div
|
||||
local col = 0xff00ffff
|
||||
local swcol = col -- usual detection
|
||||
|
||||
if Yspd>0 then -- gimme swings to grab!
|
||||
swcol = 0xff00ff00
|
||||
elseif Yspd==0 then -- can tell that too
|
||||
swcol = 0xffffffff
|
||||
end
|
||||
|
||||
if facing==2 then
|
||||
box(xx-0xf /div-2,yy-0x2c/div-1,xx-0xf /div+0,yy-0x2c/div+1,swcol) -- lefttop
|
||||
else
|
||||
box(xx+0xf /div-1,yy-0x2c/div-1,xx+0xf /div+1,yy-0x2c/div+1,swcol) -- rightttop
|
||||
end
|
||||
|
||||
box(xx -1,yy-0x2c/div-1,xx +1,yy-0x2c/div+1,col) -- top
|
||||
box(xx-0xf /div-2,yy-0x1f/div-1,xx-0xf /div+0,yy-0x1f/div+1,col) -- left
|
||||
box(xx+0x10/div-1,yy-0x1f/div-1,xx+0x10/div+1,yy-0x1f/div+1,col) -- right
|
||||
-- box(xx -1,yy-0x1f/div-1,xx +1,yy-0x1f/div+1,col) -- center
|
||||
box(xx -1,yy-0x0f/div-1,xx +1,yy-0x0f/div+1,col) -- bottom
|
||||
box(xx -1,yy -1,xx +1,yy +1,0xffffff00) -- feet
|
||||
-- box(xx -1,yy+0x10/div-1,xx +1,yy+0x10/div+1,col) -- ground
|
||||
end
|
||||
|
||||
function Input()
|
||||
local i,u,d,l,r,a,b,c,s
|
||||
|
||||
if movie.isloaded() then
|
||||
i = movie.getinput(emu.framecount()-1)
|
||||
else
|
||||
i = joypad.getimmediate()
|
||||
end
|
||||
|
||||
if i["P1 Up" ] then u = "U" else u = " " end
|
||||
if i["P1 Down" ] then d = "D" else d = " " end
|
||||
if i["P1 Left" ] then l = "L" else l = " " end
|
||||
if i["P1 Right"] then r = "R" else r = " " end
|
||||
if i["P1 A" ] then a = "A" else a = " " end
|
||||
if i["P1 B" ] then b = "B" else b = " " end
|
||||
if i["P1 C" ] then c = "C" else c = " " end
|
||||
if i["P1 Start"] then s = "S" else s = " " end
|
||||
|
||||
text(1,10,u..d..l..r..a..b..c..s,"yellow")
|
||||
end
|
||||
|
||||
event.onframeend(function()
|
||||
emu.setislagged(rb(0xfff6d4)==0)
|
||||
|
||||
if rb(0xfff6d4)==0 then
|
||||
lagcount = lagcount+1
|
||||
framecol = "red"
|
||||
else
|
||||
framecol = "white"
|
||||
end
|
||||
|
||||
emu.setlagcount(lagcount)
|
||||
|
||||
rndlast = rnd1
|
||||
workinglast = working
|
||||
XposLast = Xpos
|
||||
YposLast = Ypos
|
||||
end)
|
||||
|
||||
while true do
|
||||
main()
|
||||
emu.frameadvance()
|
||||
-- Gargoyles, Genesis (BizHawk)
|
||||
-- feos, 2015-2017
|
||||
|
||||
--== Shortcuts ==--
|
||||
local rb = memory.read_u8
|
||||
local rw = memory.read_u16_be
|
||||
local rws = memory.read_s16_be
|
||||
local r24 = memory.read_u24_be
|
||||
local rl = memory.read_u32_be
|
||||
local box = gui.drawBox
|
||||
local text = gui.text
|
||||
local ptext = gui.pixelText
|
||||
local line = gui.drawLine
|
||||
local AND = bit.band
|
||||
local SHIFT = bit.rshift
|
||||
|
||||
--== RAM addresses ==--
|
||||
local levnum = 0xff00ba
|
||||
local LevelFlr = 0xff00c0
|
||||
local LevelCon = 0xff00c4
|
||||
local mapline_tab = 0xff0244
|
||||
local GlobalBase = 0xff1c76
|
||||
local GolBase = 0xff2c76
|
||||
local MapA_Buff = 0xff4af0
|
||||
|
||||
--== Camera Hack ==--
|
||||
local camhack = false
|
||||
local div = 1 -- scale
|
||||
local size = 16/div -- block size
|
||||
|
||||
--== Block cache ==--
|
||||
local col = 0 -- block color
|
||||
local opout = 0x33000000 -- outer opacity
|
||||
local opin = 0x66000000 -- inner opacity
|
||||
local op = 0xff000000
|
||||
local cache = {}
|
||||
|
||||
--== Other stuff ==--
|
||||
local MsgCutoff = 20
|
||||
local MsgTime = 1
|
||||
local MsgStep = 14
|
||||
local MsgOffs = 2
|
||||
local MsgTable = {}
|
||||
local XposLast = 0
|
||||
local YposLast = 0
|
||||
local room = 0
|
||||
local workinglast = 0
|
||||
local wSize = client.getwindowsize()
|
||||
local lagcount = emu.lagcount()
|
||||
gui.defaultTextBackground(0xff000000)
|
||||
|
||||
--== Object types ==--
|
||||
local types = {
|
||||
"Goliath","Orb","Health1PLR","Health2PLR","Health1NME","Health2NME","Numeral",
|
||||
"BigExplode","SmallExplode","GlassDebris","MetalDebris","WoodDebris",
|
||||
"WallDebris","SignPiece","SteamVent","BreakWall","SkyLight","BreakLight",
|
||||
"ThrowCrate","BreakEdgeLeft","BreakEdgeRight","Spark","Spark2","Sparks",
|
||||
"Sparks2","Fireball","HomingProj1","HorzProj1","VertProj1","DirProj1",
|
||||
"DirProj2","DropMine","Scratch","Icon","RaptorBot","SniperBot","SpiderBot",
|
||||
"WaspBot","Xanatos","PlasmaBot","RabidHH","MorningStar","Archer","Arrow",
|
||||
"Valkyrie","Axe","WeaponExp","Couldron","SpittingCouldron","FireballHead",
|
||||
"FireballTrail","BigFireballHead","BigFireballTrail","Oil","OilGenerator",
|
||||
"Claw","Stump","StumpBubble","StumpFire","ClawStump","StumpFireGen","Vent",
|
||||
"VentSparks","Chain","FlameLick","Floor","MutVikBody","MutVikHead",
|
||||
"MutVikHammer","EyeOfOdin","EyeOfOdinTrail","L1BreakWall","Catapult",
|
||||
"L1BreakFloor","Gate","GateCrusher","Weight","WeightCrusher","WallFire",
|
||||
"Balista","BalistaLog","PasteWall","FlameBoulder","CastlePiece",
|
||||
"MutantSpiderBot","MutSpiLegs","MutSpiHead","MutSpiHeadFlame","MutSpiProj",
|
||||
"MutSpiElecV","MutSpiElecH","PlasmaBall","PlasmaBallTail","PlasmaDeadHead",
|
||||
"VertFlame","WallFlame","FloorFlame","OPPlatform","OPLink","OPOrb",
|
||||
"Furnace","RobotGenerator","RockGenerator","BigRock","MediumRock",
|
||||
"SmallRock","BigCouldronGen","BigCouldron","Trough","TroughGen","Energizer",
|
||||
"Demona","TrajectoryProj","WallPaste","EdgePaste","Tentacle","Infuser",
|
||||
"BigGuns","BigGunsProj","HighSignPole","HighSign","LowLight","L5Skylight",
|
||||
"L5Wall","ElecGenerator","Electricity","WaspGenerator","TunnelEdge",
|
||||
"ForegroundPost","Sorcerer","LightningTop","LightningBot","MDemonaWallFire",
|
||||
"MDemonaFloorFire","EyeRooftopUp","EyeRooftopDn","EyeRaptor"
|
||||
}
|
||||
|
||||
local function RoomTime()
|
||||
local start11 = 894--767
|
||||
local start12 = 2294
|
||||
local start13 = 5468 -- 4254 -- 4101
|
||||
local startl4 = 5506
|
||||
local startl5 = 7117
|
||||
local startl6 = 8412
|
||||
local startl7 = 17117
|
||||
local timer = emu.framecount()
|
||||
if timer < start11 then room = timer
|
||||
elseif timer < start12 then room = timer - start11
|
||||
elseif timer < start13 then room = timer - start12
|
||||
elseif timer < startl4 then room = timer - start13
|
||||
elseif timer < startl5 then room = timer - startl4
|
||||
elseif timer < startl6 then room = timer - startl5
|
||||
elseif timer < startl7 then room = timer - startl6
|
||||
end
|
||||
text(2, 2, string.format("cx:%5d\ncy:%5d\nroom:%d", camx, camy, room), "white", "bottomright")
|
||||
end
|
||||
|
||||
local function HUD()
|
||||
--if working > 0 then return end
|
||||
local rndcol = "white"
|
||||
if rndlast ~= rnd1 then rndcol = "red" end
|
||||
text(0, 2, string.format("RNG:%08X %04X", rnd1, rnd2), rndcol, "bottomleft")
|
||||
text(2, 0, string.format(
|
||||
"x: %4d\ny: %4d\ndx: %3d\ndy: %3d\nhp: %3d\nrun:%3d\ninv:%3d",
|
||||
Xpos, Ypos, Xspd, Yspd, health, run, inv),
|
||||
"white", "topright")
|
||||
end
|
||||
|
||||
local function CamhackHUD()
|
||||
if working == 0 then
|
||||
-- screen edge
|
||||
box((backx-camx- 1)/div,
|
||||
(backy-camy- 1)/div,
|
||||
(backx-camx+320)/div,
|
||||
(backy-camy+224)/div,
|
||||
0xff0000ff, 0)
|
||||
-- map edge
|
||||
box( 0-camx/div+size,
|
||||
0-camy/div+size,
|
||||
mapw/div-camx/div,
|
||||
maph/div-camy/div,
|
||||
0xff0000ff, 0)
|
||||
end
|
||||
if camhack or div > 1 then
|
||||
text(0, 0, string.format("div:%d", div), "white", "topleft")
|
||||
end
|
||||
end
|
||||
|
||||
local function PosToIndex(x, y)
|
||||
return math.floor(x/16)+math.floor(y/16)*xblocks
|
||||
end
|
||||
|
||||
local function IndexToPos(i)
|
||||
return { x=(i%xblocks)*16, y=math.floor(i/xblocks)*16 }
|
||||
end
|
||||
|
||||
local function InBounds(x, minimum, maximum)
|
||||
if x >= minimum and x <= maximum
|
||||
then return true
|
||||
else return false
|
||||
end
|
||||
end
|
||||
|
||||
local function GetBlock(x, y)
|
||||
if working > 0 then return nil end
|
||||
local final = { contour={}, block=0 }
|
||||
if x > 0 and x < mapw
|
||||
and y > 0 and y < maph then
|
||||
local pixels = 0
|
||||
local x1 = x/div-camx/div
|
||||
local x2 = x1+size-1
|
||||
local y1 = y/div-camy/div
|
||||
local y2 = y1+size-1
|
||||
local d4 = rw(mapline_tab+SHIFT(y, 4)*2)
|
||||
local a1 = r24(LevelFlr+1)
|
||||
local d1 = SHIFT(rw(MapA_Buff+d4+SHIFT(x, 4)*2), 1)
|
||||
final.block = rb(a1+d1+2)
|
||||
d1 = rw(a1+d1)
|
||||
a1 = r24(LevelCon+1)+d1
|
||||
if rb(a1) > 0 or rb(a1+8) > 0 then
|
||||
for pixel=0, 15 do
|
||||
final.contour[pixel] = rb(a1+pixel)
|
||||
end
|
||||
else
|
||||
final.contour = nil
|
||||
end
|
||||
else
|
||||
return nil
|
||||
end
|
||||
return final
|
||||
end
|
||||
|
||||
local DrawBlock = {
|
||||
[0x80] = function(x1, y1, x2, y2) -- WALL
|
||||
col = 0x00ffffff -- white
|
||||
line(x1, y1, x1, y2, col+op) -- left
|
||||
line(x2, y1, x2, y2, col+op) -- right
|
||||
end,
|
||||
[0x81] = function(x1, y1, x2, y2) -- CEILING
|
||||
col = 0x00ffffff -- white
|
||||
line(x1, y2, x2, y2, col+op) -- bottom
|
||||
end,
|
||||
[0x82] = function(x1, y1, x2, y2) -- CLIMB_U
|
||||
col = 0x0000ffff -- cyan
|
||||
line(x1, y2, x2, y2, col+op) -- bottom
|
||||
end,
|
||||
[0x83] = function(x1, y1, x2, y2) -- CLIMB_R
|
||||
col = 0x0000ffff -- cyan
|
||||
line(x1, y1, x1, y2, col+op) -- left
|
||||
end,
|
||||
[0x84] = function(x1, y1, x2, y2) -- CLIMB_L
|
||||
col = 0x0000ffff -- cyan
|
||||
line(x2, y1, x2, y2, col+op) -- right
|
||||
end,
|
||||
[0x85] = function(x1, y1, x2, y2) -- CLIMB_LR
|
||||
col = 0x0000ffff -- cyan
|
||||
line(x1, y1, x1, y2, col+op) -- left
|
||||
line(x2, y1, x2, y2, col+op) -- right
|
||||
end,
|
||||
[0x86] = function(x1, y1, x2, y2) -- CLIMB_R_STAND_R
|
||||
col = 0x00ffffff -- white
|
||||
line(x1, y1, x2, y1, col+op) -- top
|
||||
col = 0x0000ffff -- cyan
|
||||
line(x1, y1, x1, y2, col+op) -- left
|
||||
end,
|
||||
[0x87] = function(x1, y1, x2, y2) -- CLIMB_L_STAND_L
|
||||
col = 0x00ffffff -- white
|
||||
line(x1, y1, x2, y1, col+op) -- top
|
||||
col = 0x0000ffff -- cyan
|
||||
line(x2, y1, x2, y2, col+op) -- right
|
||||
end,
|
||||
[0x88] = function(x1, y1, x2, y2) -- CLIMB_LR_STAND_LR
|
||||
col = 0x00ffffff -- white
|
||||
line(x1, y1, x2, y1, col+op) -- top
|
||||
col = 0x00ff00ff -- cyan
|
||||
line(x1, y1, x1, y2, col+op) -- left
|
||||
col = 0x0000ffff -- cyan
|
||||
line(x2, y1, x2, y2, col+op) -- right
|
||||
end,
|
||||
[0x70] = function(x1, y1, x2, y2) -- GRAB_SWING
|
||||
col = 0x0000ff00 -- green
|
||||
box(x1, y1, x2, y2, col, col+opout)
|
||||
end,
|
||||
[0x7f] = function(x1, y1, x2, y2) -- EXIT
|
||||
col = 0x00ffff00 -- yellow
|
||||
end,
|
||||
[0xd0] = function(x1, y1, x2, y2) -- SPIKES
|
||||
col = 0x00ff0000 -- red
|
||||
box(x1, y1, x2, y2, col, col+opout)
|
||||
end,
|
||||
[0xd1] = function(x1, y1, x2, y2) -- SPIKES
|
||||
col = 0x00ff0000 -- red
|
||||
box(x1, y1, x2, y2, col, col+opout)
|
||||
end
|
||||
}
|
||||
|
||||
local function DrawBlockDefault(x1, y1, x2, y2) -- LEVEL_SPECIFIC
|
||||
col = 0x00ff8800 -- orange
|
||||
box(x1, y1, x2, y2, col+opin, col+opout)
|
||||
end
|
||||
|
||||
local function DrawBG(unit, x, y)
|
||||
local val= 0
|
||||
local x1 = x/div-camx/div-(camx%16)/div
|
||||
local x2 = x1+size-1
|
||||
local y1 = y/div-camy/div-(camy%16)/div
|
||||
local y2 = y1+size-1
|
||||
if unit.contour ~= nil then
|
||||
box(x1, y1, x2, y2, 0x5500ff00, 0x5500ff00)
|
||||
for pixel=0, 15 do
|
||||
val = unit.contour[pixel]
|
||||
--[ [--
|
||||
if val > 0 then
|
||||
gui.drawPixel(
|
||||
x1+pixel/div,
|
||||
y1+val/div-1/div,
|
||||
0xffffff00)
|
||||
end
|
||||
--]]--
|
||||
end
|
||||
end
|
||||
if unit.block > 0 then
|
||||
local Fn = DrawBlock[unit.block] or DrawBlockDefault
|
||||
Fn(x1, y1, x2, y2)
|
||||
box(x1, y1, x2, y2, col+opin, col+opout)
|
||||
end
|
||||
end
|
||||
|
||||
local function Background()
|
||||
if working > 0 then
|
||||
cache = {}
|
||||
return
|
||||
end
|
||||
if camhack then
|
||||
camx = Xpos-320/2*div
|
||||
camy = Ypos-224/2*div
|
||||
box(0, 0, 320, 240, 0, 0x66000000)
|
||||
end
|
||||
local border = 0
|
||||
local offset = 32
|
||||
local basex = camx+border
|
||||
local basey = camy+border
|
||||
local basei = PosToIndex(basex-offset, basey-offset)
|
||||
local boundx = 320*div-border
|
||||
local boundy = 224*div-border
|
||||
local xblockstockeck = ((camx+boundx+offset)-(basex-offset))/size/div
|
||||
local yblockstockeck = ((camy+boundy+offset)-(basey-offset))/size/div
|
||||
for yblock = 0, yblockstockeck do
|
||||
for xblock = 0, xblockstockeck do
|
||||
local i = yblock*xblocks+xblock+basei
|
||||
local x = basex+xblock*size*div
|
||||
local y = basey+yblock*size*div
|
||||
if InBounds(x, basex-offset, camx+boundx+offset) then
|
||||
local unit = cache[i]
|
||||
if unit == nil or workinglast > 0 then
|
||||
if InBounds(x, basex, camx+boundx)
|
||||
and InBounds(y, basey, camy+boundy)
|
||||
then cache[i] = GetBlock(x, y)
|
||||
end
|
||||
else
|
||||
if not InBounds(x, basex, camx+boundx)
|
||||
and not InBounds(y, basey, camy+boundy)
|
||||
then cache[i] = nil
|
||||
end
|
||||
end
|
||||
if unit ~= nil then
|
||||
DrawBG(unit, x, y)
|
||||
end
|
||||
elseif cache[i] ~= nil
|
||||
then cache[i] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
CamhackHUD()
|
||||
end
|
||||
|
||||
local function Clamp(v, vmin, vmax)
|
||||
if v < vmin then v = vmin end
|
||||
if v > vmax then v = vmax end
|
||||
return v
|
||||
end
|
||||
|
||||
local function Objects()
|
||||
if working > 0 then return end
|
||||
for i=0, 63 do
|
||||
local base = GlobalBase+i*128
|
||||
local flag2 = AND(rb(base+0x49), 0x10) -- active
|
||||
if flag2 == 0x10 then
|
||||
local xpos = rw (base+0x00)
|
||||
local ypos = rw (base+0x02)
|
||||
local state = rw (base+0x0c)
|
||||
local dmg = rb (base+0x10)
|
||||
local id = rw (base+0x40)
|
||||
local hp = rw (base+0x50)
|
||||
local cRAM = r24(base+0x75) -- pointer to 4 collision boxes per object
|
||||
local xscr = (xpos-camx)/div
|
||||
local yscr = (ypos-camy)/div
|
||||
local num = id/6
|
||||
local name = types[num]
|
||||
local col = 0 -- collision color
|
||||
for boxx=0, 4 do
|
||||
local x0 = rw (cRAM+boxx*8)
|
||||
local x1 = (rws(cRAM+boxx*8+0)-camx)/div
|
||||
local y1 = (rws(cRAM+boxx*8+2)-camy)/div
|
||||
local x2 = (rws(cRAM+boxx*8+4)-camx)/div
|
||||
local y2 = (rws(cRAM+boxx*8+6)-camy)/div
|
||||
if boxx == 0 then
|
||||
col = 0xff00ff00 -- body
|
||||
-- archer hp doesn't matter
|
||||
if id == 282 or id == 258 then hp = 1 end
|
||||
if hp > 0 and id > 0 and x0 ~= 0x8888 then
|
||||
local xx = Clamp(xscr, 0, 318-string.len(name)*4)
|
||||
local yy = Clamp(yscr, 0, 214)
|
||||
ptext(xx, yy+2, string.format("%d", hp), col)
|
||||
end
|
||||
elseif boxx == 1 then
|
||||
col = 0xffffff00 -- floor
|
||||
elseif boxx == 2 then
|
||||
if dmg > 0
|
||||
then col = 0xffff0000 -- projectile
|
||||
else col = 0xff8800ff -- item
|
||||
end
|
||||
if dmg > 0 then
|
||||
text(x1*wSize+2, y2*wSize+1,
|
||||
string.format("%d", dmg), col, 0x88000000)
|
||||
end
|
||||
else
|
||||
col = 0xffffffff -- other
|
||||
end
|
||||
if x1 ~= 0x8888
|
||||
and x1 <= 320 and x2 >= 0
|
||||
and y1 <= 224 and y2 >= 0 then
|
||||
box(x1, y1, x2, y2, col, 0)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function PostRndRoll()
|
||||
for i = 1,#MsgTable do
|
||||
if MsgTable[i] and MsgTable[i].index == i then
|
||||
local base = MsgTable[i].base
|
||||
local xpos = rw(base+0x00)
|
||||
local ypos = rw(base+0x02)
|
||||
local id = rw(base+0x40)
|
||||
local x = (xpos-camx)/div
|
||||
local y = (ypos-camy)/div
|
||||
local num = id/6
|
||||
local ymsg = 0
|
||||
local yoffs = math.floor((i-1)/MsgCutoff)*14
|
||||
local name = types[num]
|
||||
local color = 0xffffff00
|
||||
|
||||
if base == GolBase then
|
||||
name = "Goliath"
|
||||
elseif not name then
|
||||
name = string.format("%X", base)
|
||||
color = 0xff00ffff
|
||||
end
|
||||
if y < 224/2 then
|
||||
yoffs = -yoffs
|
||||
ymsg = 210
|
||||
end
|
||||
|
||||
x = Clamp(x, 2, 320-string.len(name)*4)
|
||||
y = Clamp(y, 20, 214)
|
||||
|
||||
line ((i-1)%MsgCutoff*MsgStep+3 +MsgOffs, ymsg+yoffs+4, x, y, color-0x88000000)
|
||||
ptext((i-1)%MsgCutoff*MsgStep*wSize+MsgOffs, ymsg+yoffs, i, color)
|
||||
|
||||
MsgTable[i].timer = MsgTable[i].timer-1
|
||||
if MsgTable[i].timer <= 0 then
|
||||
MsgTable[i] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function PlayerBoxes()
|
||||
if working > 0 then return end
|
||||
local xx = (Xpos-camx)/div
|
||||
local yy = (Ypos-camy)/div
|
||||
local col = 0xff00ffff
|
||||
local swcol = col -- usual detection
|
||||
if Yspd > 0 then -- gimme swings to grab!
|
||||
swcol = 0xff00ff00
|
||||
elseif Yspd == 0 then -- can tell that too
|
||||
swcol = 0xffffffff
|
||||
end
|
||||
if facing == 2
|
||||
then box(xx-0xf /div-2, yy-0x2c/div-1, xx-0xf/div+0, yy-0x2c/div+1, swcol, 0) -- lefttop
|
||||
else box(xx+0xf /div , yy-0x2c/div-1, xx+0xf/div+2, yy-0x2c/div+1, swcol, 0) -- rightttop
|
||||
end
|
||||
box(xx -1, yy-0x2c/div-1, xx +1, yy-0x2c/div+1, col, 0) -- top
|
||||
box(xx-0xf /div-2, yy-0x1f/div-1, xx-0xf /div+0, yy-0x1f/div+1, col, 0) -- left
|
||||
box(xx+0x10/div-1, yy-0x1f/div-1, xx+0x10/div+1, yy-0x1f/div+1, col, 0) -- right
|
||||
-- box(xx -1, yy-0x1f/div-1, xx +1, yy-0x1f/div+1, col, 0) -- center
|
||||
box(xx -1, yy-0x0f/div-1, xx +1, yy-0x0f/div+1, col, 0) -- bottom
|
||||
box(xx -1, yy -1, xx +1, yy +1,0xffffff00, 0) -- feet
|
||||
-- box(xx -1, yy+0x10/div-1, xx +1, yy+0x10/div+1, col, 0) -- ground
|
||||
end
|
||||
|
||||
local function Input()
|
||||
local i, u, d, l, r, a, b, c, s
|
||||
if movie.isloaded()
|
||||
then i = movie.getinput(emu.framecount()-1)
|
||||
else i = joypad.getimmediate()
|
||||
end
|
||||
if i["P1 Up" ] then u = "U" else u = " " end
|
||||
if i["P1 Down" ] then d = "D" else d = " " end
|
||||
if i["P1 Left" ] then l = "L" else l = " " end
|
||||
if i["P1 Right"] then r = "R" else r = " " end
|
||||
if i["P1 A" ] then a = "A" else a = " " end
|
||||
if i["P1 B" ] then b = "B" else b = " " end
|
||||
if i["P1 C" ] then c = "C" else c = " " end
|
||||
if i["P1 Start"] then s = "S" else s = " " end
|
||||
text(1, 10, u..d..l..r..a..b..c..s, "yellow")
|
||||
end
|
||||
|
||||
event.onframeend(function()
|
||||
emu.setislagged(rb(0xfff6d4) == 0)
|
||||
if rb(0xfff6d4) == 0 then
|
||||
lagcount = lagcount+1
|
||||
framecol = "red"
|
||||
else
|
||||
framecol = "white"
|
||||
end
|
||||
emu.setlagcount(lagcount)
|
||||
wSize = client.getwindowsize()
|
||||
rndlast = rnd1
|
||||
workinglast = working
|
||||
XposLast = Xpos
|
||||
YposLast = Ypos
|
||||
end)
|
||||
|
||||
event.onmemoryexecute(function()
|
||||
local a0 = AND(emu.getregister("M68K A0"), 0xffffff)
|
||||
if a0 ~= 0xff4044 then
|
||||
for i = 1, 200 do
|
||||
if MsgTable[i] == nil then
|
||||
MsgTable[i] = { index = i, timer = MsgTime, base = a0 }
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end, 0x257A, "RNGseed")
|
||||
|
||||
local function main()
|
||||
rnd1 = rl (0xff001c)
|
||||
rnd2 = rw (0xff0020)
|
||||
working = rb (0xff0073)
|
||||
xblocks = rw (0xff00d4)
|
||||
mapw = rw (0xff00d4)*8
|
||||
maph = rw (0xff00d6)*8
|
||||
Xpos = rws(0xff0106)
|
||||
Ypos = rws(0xff0108)
|
||||
camx = rws(0xff010c)+16
|
||||
camy = rws(0xff010e)+16
|
||||
run = rb (0xff1699)
|
||||
inv = rw (0xff16d2)
|
||||
health = rws(0xff2cc6)
|
||||
backx = camx
|
||||
backy = camy
|
||||
Xspd = Xpos-XposLast
|
||||
Yspd = Ypos-YposLast
|
||||
facing = AND(rb(GolBase+0x48), 2) -- object flag 1
|
||||
if working > 0 then MsgTable = {} end
|
||||
Background()
|
||||
PlayerBoxes()
|
||||
Objects()
|
||||
PostRndRoll()
|
||||
HUD()
|
||||
RoomTime()
|
||||
end
|
||||
|
||||
while true do
|
||||
main()
|
||||
emu.frameadvance()
|
||||
end
|
|
@ -0,0 +1,50 @@
|
|||
-- Gives a cross hair UI for the stylus for DS games
|
||||
|
||||
local upColor = 'white'
|
||||
local downColor = 'green'
|
||||
local dotColor = 'red'
|
||||
|
||||
function Draw(x, y, maxX, maxY, isDown)
|
||||
color = upColor
|
||||
if isDown then
|
||||
color = downColor
|
||||
end
|
||||
|
||||
gui.drawLine(0, y, maxX, y, color)
|
||||
gui.drawLine(x, 0, x, maxY, color)
|
||||
|
||||
if isDown then
|
||||
gui.drawPixel(x, y, dotColor)
|
||||
end
|
||||
end
|
||||
|
||||
while true do
|
||||
if emu.getsystemid() ~= "NDS" then
|
||||
console.log('This script is for Nintendo DS only')
|
||||
break
|
||||
end
|
||||
|
||||
local btns = joypad.get()
|
||||
|
||||
if movie.mode() == "PLAY" and emu.framecount() > 0 then
|
||||
btns = movie.getinput(emu.framecount() - 1)
|
||||
end
|
||||
|
||||
local x = btns['TouchX']
|
||||
local y = btns['TouchY']
|
||||
local isDown = btns['Touch']
|
||||
|
||||
-- A bit of a hack to ensure it is not drawing while mouse moving
|
||||
-- on the top screen
|
||||
if y == 0 then
|
||||
x = 0
|
||||
end
|
||||
|
||||
pts = client.transformPoint(x, y)
|
||||
local tx = pts["x"];
|
||||
local ty = pts["y"];
|
||||
gui.DrawNew("native")
|
||||
Draw(tx, ty, 10000, 10000, isDown)
|
||||
|
||||
emu.frameadvance()
|
||||
end
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
@ -8,10 +8,12 @@
|
|||
#include gamedb_gba.txt
|
||||
#include gamedb_gbc.txt
|
||||
#include gamedb_lynx.txt
|
||||
#include gamedb_msx1.txt
|
||||
#include gamedb_msx2.txt
|
||||
#include gamedb_msx.txt
|
||||
;#include gamedb_msx1-L.txt (legacy?)
|
||||
;#include gamedb_msx2-L.txt (legacy?)
|
||||
#include gamedb_n64.txt
|
||||
#include gamedb_nes.txt
|
||||
#include gamedb_Odyssey2.txt
|
||||
#include gamedb_pce_cd.txt
|
||||
#include gamedb_pce_hucards.txt
|
||||
#include gamedb_psx.txt
|
||||
|
@ -21,11 +23,13 @@
|
|||
#include gamedb_sega_md.txt
|
||||
#include gamedb_snes.txt
|
||||
#include gamedb_user.txt
|
||||
#include gamedb_vectrex.txt
|
||||
#include gamedb_ws.txt
|
||||
#include gamedb_wsc.txt
|
||||
#include gamedb_zxspectrum.txt
|
||||
#include gamedb_amstradcpc.txt
|
||||
#include gamedb_ngp.txt
|
||||
#include gamedb_channelf.txt
|
||||
|
||||
; ************ TI-83 ************
|
||||
|
||||
|
|
|
@ -0,0 +1,283 @@
|
|||
;;;
|
||||
;;; From the old gamedb file - uncomment if needed
|
||||
;;;
|
||||
|
||||
;;; Homebrew (but not derived from TOSEC)
|
||||
SHA1:26A044C68FF08F574F6649B731B82CACA8C0E797 D Death Race O2 US
|
||||
SHA1:E04D12B6290370B76F90E76D9DE75B6470B4F913 D redgreen O2 US
|
||||
SHA1:38D4AAB263E10B1DAC3410C120536EE079826BCB D Fatso 2 O2 US
|
||||
SHA1:3720DD6B5EE3DC62C5AF2EA9D915A2B83DE9463D D Chief Chef O2 US
|
||||
SHA1:FEB358E28587DE70D1E89BF0F9A3209CE0B67C57 D Haunted House O2 US
|
||||
SHA1:B1D65BEDB56FE7A9CF60AA054A9FD9BB7F65B77C D 3D Box O2 US
|
||||
SHA1:0270047E2B1FC07581BF0FF9E55035925CF0EFF0 D Guiseppe apr14 O2 US
|
||||
SHA1:0D6B44E2445DBB3BF70C4E05F222822845C29762 D Boob O2 US
|
||||
SHA1:DE888B7AA2716C3134CFF812A4E07E86B2479537 D Shoot the B O2 US
|
||||
SHA1:85A44A99B254D92A7433EE46E4CAA91483D7FEA2 D Go Sub 2 O2 US
|
||||
SHA1:2B34EF0E1A8C0371F00A33D6950E0807F3CB886E D Happy Emu O2 US
|
||||
SHA1:03C846187581A44CE4F7B056C05186520C2DB1B4 D Happy Bird O2 US
|
||||
SHA1:42AD0C57BD16B7F24C242F60B5C0E9988D8DFBA8 D Kill The Attacking Aliens O2 US
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Type: TOSEC
|
||||
;;; Source: Magnavox Odyssey2 - Applications (TOSEC-v2011-02-22)
|
||||
;;; FileGen: 2020-02-20 10:52:18 (UTC)
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Bad Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Hacks
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Over Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Translated
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Home Brew
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Believed Good
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
1E7035584D19AAA53EB3795D92FA6215 Computer Intro (1980)(Philips)(US) O2 US
|
||||
908E01082D7E30B7CE79DF2DD85ACFED Computer Programmer (1980)(Philips)(EU) O2 EU
|
||||
84AE1A8159716266F7AAE16AD7DFD062 Keyboard Creations (1980)(Philips)(US) O2 US
|
||||
F93D43B0E30539BA6FAB14CE6A57AAE3 Musician (1981)(Philips)(EU) O2 EU
|
||||
F2EDA19FFC8E52C5C2D13C7106A06303 Newscaster (1980)(Philips)(EU) O2 EU
|
||||
49ABEE5DDD1B475FE4CBB997F7EE83EF Type & Tell (1978)(Philips)(US) O2 US
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Type: TOSEC
|
||||
;;; Source: Magnavox Odyssey2 - Educational (TOSEC-v2011-02-22)
|
||||
;;; FileGen: 2020-02-20 10:52:18 (UTC)
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Bad Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Hacks
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Over Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Translated
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Home Brew
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Believed Good
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
A3C4D975FCABBEE4FDB253EB414242EE I've Got Your Number (1980)(Philips)(EU-US) O2 EU-US
|
||||
E074C77E2A2A8BE6D7BCAB50E11D6948 Kinder im Verkehr 1 (1982)(CSV - Philips)(DE) O2 DE
|
||||
9AA512409F1E3D10BFE2C2F2924C7A31 Math-A-Magic + Echo (1980)(Philips)(EU-US) O2 EU-US
|
||||
FE079714C9529588FF999910BDABC89E Mathematicien + Echo (1980)(Philips)(FR) O2 FR
|
||||
6FD09253957EC9018F2C80B7663BC8E4 Morse (1983)(Philips)(EU) O2 EU
|
||||
441F68A94B7B92FD5E7CCCAD07256E4C Morse (1983)(Philips)(FR) O2 FR
|
||||
98B2ED525AA9C060E8BE6C6210D16E41 Nimble Numbers Ned (1978)(Philips)(US) O2 US
|
||||
23BA6403E7206063D65DEC507A30664A Sid the Spellbinder (1978)(Philips)(US) O2 US
|
||||
49ABEE5DDD1B475FE4CBB997F7EE83EF Type & Tell (1978)(Philips)(US) O2 US
|
||||
317644C85BA8F8FDE8F7B60114A03288 Verkehrsspiele Traffic Games 1 (1982)(CSV - Philips)(DE) O2 DE
|
||||
A465615508DFB5EA1C5B0E18C97711A5 Verkehrsspiele Traffic Games 2 (1982)(CSV - Philips)(DE) O2 DE
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Type: TOSEC
|
||||
;;; Source: Magnavox Odyssey2 - Firmware (TOSEC-v2011-02-22)
|
||||
;;; FileGen: 2020-02-20 10:52:18 (UTC)
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Bad Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Hacks
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Over Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Translated
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Home Brew
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Believed Good
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
562D5EBF9E030A40D6FABFC2F33139FD Magnavox Odyssey2 BIOS (1978)(Philips)(EU-US) O2 EU-US
|
||||
F1071CDB0B6B10DDE94D3BC8A6146387 Philips C52 BIOS (19xx)(Philips)(FR) O2 FR
|
||||
A465615508DFB5EA1C5B0E18C97711A5 Verkehrsspiele Traffic Games 2 (1982)(CSV - Philips)(DE) O2 DE
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Type: TOSEC
|
||||
;;; Source: Magnavox Odyssey2 - Games (TOSEC-v2011-02-22)
|
||||
;;; FileGen: 2020-02-20 10:52:18 (UTC)
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Bad Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
1C2718C163781D675ABE7E7AA27D21B5 B 4 in 1 Row (1982)(Philips)(EU)[b] O2 EU
|
||||
66B54641B5786EA3FF0215AA39D61E01 B K.C. Munchkin (1982)(Philips)(US)[b] O2 US
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Hacks
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Over Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Translated
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Home Brew
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Believed Good
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
66E27CF1A0CDC9AD19AE20B537C4D3D8 4 en 1 Ligne (1982)(Philips)(FR) O2 FR
|
||||
61923D4FA32F8A6C3531A77031BD1494 4 in 1 Row (1982)(Philips)(EU) O2 EU
|
||||
4D6CFB7DA66C8D9327B3CCDCE9852509 Alien Invaders - Plus (1980)(Philips)(EU-US) O2 EU-US
|
||||
55D7B6575645BFB5890A39491F823FEA Alpine Skiing (1980)(Philips)(EU-US) O2 EU-US
|
||||
2D0D4CD8E699FCF97CAC366B867420F6 Amok (1998)(Dondzilla, John) O2
|
||||
8B4C318129A28E313DC89FE73269BE61 Armored Encounter + Sub Chase (1980)(Philips)(EU-US) O2 EU-US
|
||||
7D23DF55DFACA55BC4C87677855F4A45 Atlantis (1983)(Imagic)(EU-US) O2 EU-US
|
||||
4AC71DCC25881BF4D34D0A3C385568C8 Attack of the Timelord (1983)(Philips)(US) O2 US
|
||||
FF418E9819CBCD10F02225F7FA3B2362 Baseball (1980)(Philips)(EU-US) O2 EU-US
|
||||
3F71651BDF999AD414B0F122F643078A Billard Electrique (1980)(Philips)(FR) O2 FR
|
||||
7BF1A49928971514A73E674FF0356E02 Billiard Americain (1981)(Philips)(FR) O2 FR
|
||||
3430691FB9C0367505634909BE0297BE Blackjack (1980)(Philips)(FR) O2 FR
|
||||
5F36EBA1EFE84CD06012C0B8BF4C05CB Blockout + Breakdown (1981)(Philips)(EU-US) O2 EU-US
|
||||
B46E596A81E394246C45A0EA6DF1A1AD Bombardeio Submarino + Tiro ao Alvo (1980)(Philips)(BR) O2 BR
|
||||
16652634E75560DC830A0C38D7FE1711 Bowling + Basketball (1980)(Philips)(EU-US) O2 EU-US
|
||||
397EF93F7E804A32569006C8A50D6B7C Buraco Negro (19xx)(Philips)(BR) O2 BR
|
||||
31A6C912B7AD75ECD0B9387DE6F0FBE9 Casino Slot Machine (1980)(Philips)(EU-US) O2 EU-US
|
||||
DC6159188F940EED42DC3EB8336DFAFD Catch the Ball + Noughts and Crosses (1980)(Philips)(EU) O2 EU
|
||||
DFC578D793300DEC00847326DAEBC4C4 Chat et Souris (1983)(Philips)(FR) O2 FR
|
||||
78604F22CACFA1A7F3D5BFD1E7E75B3F Chess (19xx)(Philips)(EU) O2 EU
|
||||
248FCAD810254EAAC9E4550C0DA576A3 Chinese Logic (1980)(Philips)(EU) O2 EU
|
||||
77EA6C8C52837B0699CA50D26A181043 Clay Pigeon (19xx)(Philips)(BR) O2 BR
|
||||
CCA258910C9AF919FB62252C4B2817D0 Comando Noturno (1983)(Philips)(BR) O2 BR
|
||||
8B1B91361F92725B7587ED41FAC6D3E0 Computer Golf (1980)(Philips)(US) O2 US
|
||||
789E1D6CC41A8C830EA6900DDBBB7918 Conflit Cosmique (1980)(Philips)(CA) O2 CA
|
||||
619C1545BD9C7C9DE15E73A1BD23BDAF Conquest of the World (1981)(Philips)(EU-US) O2 EU-US
|
||||
43DCDD77FB09D69E9A65B874CD5F13FA Cosmic Conflict (1980)(Philips)(EU) O2 EU
|
||||
0FC7DED34DF6578680590559BFC2D636 Cosmic Conflict (1980)(Philips)(EU)[a] O2 EU
|
||||
86AC9DAF92ECF01996C56F1E75D558BD Cosmic Conflict (1980)(Philips)(US) O2 US
|
||||
65A02F5B349D00E9CB298A232C2B8905 Course de Voitures + Autodrome + Cryptogramme (1980)(Philips)(FR) O2 FR
|
||||
EF55AF1C7164948A245EEB71F804BED8 Demon Attack (1983)(Imagic)(EU-US) O2 EU-US
|
||||
94FC4722C6594DCC805E3B63C6257591 Depth Charge + Marksman (1980)(Philips)(EU) O2 EU
|
||||
11B36C560C5C677E11C8BD7BB6DF2D0C Desafio Chines (1980)(Philips)(BR) O2 BR
|
||||
B976C87CA8B790ABD2D6E2000D80CB02 Dynasty (1980)(Philips)(US) O2 US
|
||||
2F83125F4E5F1F5E87423CF52E6A2A1A Electronic Table Soccer (1981)(Philips)(EU-US) O2 EU-US
|
||||
5A64C4EA84E12A04A7F0070ED13A9507 Football (1980)(Philips)(EU-US) O2 EU-US
|
||||
5F149C42701F574203078983F1A47BBE Football Electronique + Hockey Electronique (1981)(Philips)(FR) O2 FR
|
||||
D85945B5E8C37E4298BD962D87728580 Freedom Fighters (1982)(Philips)(EU-US) O2 EU-US
|
||||
893CEC7B572160E81EAB8A6DAD37F7D3 Frogger (1983)(Parker Brothers)(BR) O2 BR
|
||||
88FB5E81BF58BC1195B31906CCEBEFF8 Frogger (1983)(Parker Brothers)(EU) O2 EU
|
||||
A251791690A6F2EFDD26F924DCF45928 Golf (1980)(Philips)(EU) O2 EU
|
||||
E3A89962603ED28584D3270D700B3A31 Great Wall Street Fortune Hunt, The (1983)(Philips)(EU-US) O2 EU-US
|
||||
DC3257CA69427B534A926373328CF58C Guerre Laser (1980)(Philips)(FR) O2 FR
|
||||
08C002AD3CC5B4D9163AD3EA4A7508C7 Gunfighter (1980)(Philips)(EU) O2 EU
|
||||
BB393FBE922CD34D81ECCDAEE40CBC4D Hockey + Soccer (1981)(Philips)(EU-US) O2 EU-US
|
||||
30B569D9AAD9F85F782AB2F427C3B94C Interpol (19xx)(Philips)(EU) O2 EU
|
||||
5F21DD12F47AC805EC69DC5CD3B977F1 Invaders from Hyperspace (1980)(Philips)(US) O2 US
|
||||
A8416AC5493FAC70848225DBBCA1FD35 Jeu de Quilles + Basketball (1980)(Philips)(FR) O2 FR
|
||||
E36FE0511F92B1CE3FB4C0F438356520 Jumping Acrobats (1981)(Philips)(EU) O2 EU
|
||||
8D7691607AA2DFD994AC098A0DFED416 Jumping Acrobats (1981)(Philips)(EU)[a] O2 EU
|
||||
2E528BD850F9A658B0AF6BFE1891A4FA K.C. Munchkin (1982)(Philips)(US) O2 US
|
||||
27EADDEDA2F30AD4A5310C6E9BDD9DC2 K.C.'s Krazy Chase (1982)(Philips)(EU-US) O2 EU-US
|
||||
5E7A037E1AA1F59AD2BE80452F81CC38 Killer Bees (1983)(Philips)(US) O2 US
|
||||
331B299E3B041884BD59C3BAD2D3F507 La Quete des Anneaux (1981)(Philips)(FR) O2 FR
|
||||
91B1F44DF0281147132535D9EA1D5590 Labyrinth Game, A + Supermind (1981)(Philips)(EU) O2 EU
|
||||
8E5B178B4ED546530FB0E40739A41EF4 Las Vegas (1980)(Philips)(FR) O2 FR
|
||||
972D38914E5AA8E80460B7D32C7C94B5 Las Vegas Blackjack (1980)(Philips)(EU-US) O2 EU-US
|
||||
D7723B9A0D15AE574CD0AF0136DDA5AD Laser War (1980)(Philips)(EU) O2 EU
|
||||
F7A034B2FCA71A6D1A4EBBA0B7AF5870 Loony Balloon (1983)(Philips)(EU)(proto) O2 EU
|
||||
6FB2F39CD702B9E05FC0F81305D3BBC0 Martian Threat (19xx)(Philips)(EU) O2 EU
|
||||
103681BA9EF22B1392865DCC355F0199 Martian Threat (19xx)(Philips)(EU)[a] O2 EU
|
||||
73A584CA53FAD9289CA01A58ECCC52B5 Matchmaker + Logix + Buzzword (1980)(Philips)(US) O2 US
|
||||
DEC3F2D19CA2E5D5F7D96C0BAF23144F Missao Impossivel (19xx)(Ectron)(BR) O2 BR
|
||||
4388131DBCE3B68A7D46F80BAFC4A828 Monkeyshines (1982)(Philips)(EU-US) O2 EU-US
|
||||
ACE64D75C07CD5C663AD422FDB25D1C8 Mousing Cat, The (1983)(Philips)(EU) O2 EU
|
||||
663BAA0B829F717D42DE4C1011BBFCD3 Munchkin (1982)(Philips)(EU) O2 EU
|
||||
02CF18672C21E2D0E68D331507BE9DE1 Mur Magique, Le (1981)(Philips)(FR) O2 FR
|
||||
F60FA7D5ED0E8E6A262F0136DB60268A Neutron Star (1983)(Philips)(EU)(proto) O2 EU
|
||||
AF5B0F0E38252C7391284D9671EB6518 Nightfighter (19xx)(-)(EU) O2 EU
|
||||
6E7A98BAFAB8A0B71DA7BA0321E1B5E9 Nightmare (1983)(Philips)(EU) O2 EU
|
||||
3FE371CAD9B660C0A76969BC53D17F9B O Malabarista + Jogo da Velha (1980)(Philips)(BR) O2 BR
|
||||
5EB860E357DB069A2CBC3FC51D022326 O Segredo do Farao (1980)(Philips)(BR) O2 BR
|
||||
21A8E6A7441A2990052E38F85A606DB4 Out of This World + Helicopter Rescue (1980)(Philips)(US) O2 US
|
||||
0812533CE84C9E28E699AF8BAEC7DF25 P.T. Barnum's Acrobats (1981)(Philips)(US) O2 US
|
||||
E00CA4155B88AACB044A2598C2180158 Pachinko (1981)(Philips)(EU-US) O2 EU-US
|
||||
0B5A7506275E49B3EDE60AF2B6C31098 Pairs + Space Rendezvous + Logic (1980)(Philips)(EU) O2 EU
|
||||
F1071CDB0B6B10DDE94D3BC8A6146387 Philips C52 BIOS (19xx)(Philips)(FR) O2 FR
|
||||
FFA665173861C544219565E000F79173 Pickaxe Pete (1982)(Philips)(EU-US) O2 EU-US
|
||||
B93F4CE768CF934774FDD895EAB59323 Pinball (19xx)(-)(US) O2 US
|
||||
C5D7C7B6D6F465610405082E35572F62 Play Tag (19xx)(Philips)(EU) O2 EU
|
||||
3F0223DD8609FE320264E45EEEEFE367 Pocket Billiards (1981)(Philips)(EU-US) O2 EU-US
|
||||
3D8310D2AB62A5A7BCC0ECF088133291 Popeye (1983)(Parker Brothers)(BR) O2 BR
|
||||
2A0A3E9AED2885A4E4798B380DBB64C3 Popeye (1983)(Parker Brothers)(EU) O2 EU
|
||||
8200734B7A6217B4847939ACD3CC1601 Power Lords (1978)(Philips)(US) O2 US
|
||||
67943D1BBA7CDF707305EDC14FEABC46 Power Lords (1978)(Philips)(US)[a] O2 US
|
||||
1F5F15CB9E0D1E65915D0C2263195284 Prendre l'Argent et Fuir (1980)(Philips)(FR) O2 FR
|
||||
18CABE4F94787A8A8E9F1EC6C6451E4C Qbert (1983)(Parker Brothers)(EU) O2 EU
|
||||
0B105A40C8FF6AE7728006CF80C4DDB7 Quest for the Rings (1981)(Philips)(EU-US) O2 EU-US
|
||||
1BACE5B9E272032F898563FB7EF33BC9 Red Baron (19xx)(-)(EU) O2 EU
|
||||
79FFBFD676F12A6B4DDE396345D354F1 Red Baron (19xx)(-)(EU)[a] O2 EU
|
||||
08B65F525E0064334F449F1971D83414 Robot City (19xx)(Philips)(EU) O2 EU
|
||||
75A751E527FA8DDF8FADDBDAA6357582 Samurai (1980)(Philips)(EU) O2 EU
|
||||
8E631FAE193F572B9D7E52C96B648D58 Satellite Attack (1981)(Philips)(EU) O2 EU
|
||||
676423953EF6EE953A999778C0BA0FF9 Secret of the Pharaohs (1980)(Philips)(EU) O2 EU
|
||||
1EC617026BC9562826F075D9AD15824E Shark Hunter (19xx)(Philips)(EU) O2 EU
|
||||
ADD9A7CFAC93608DB1845E49F3594964 Showdown in 2100 A.D. (1980)(Philips)(US) O2 US
|
||||
EA86B958C37DA876BB178DCAA92A8EE7 Skiing (1980)(Philips)(FR) O2 FR
|
||||
ED77BEEB30711F8EE03A23A4577F403A Smithereens (1980)(Philips)(US) O2 US
|
||||
BC66AB63FB5CE04A79AEF9E8FA445225 Speedway + Spin-out + Crypto-logic (1978)(Philips)(EU-US) O2 EU-US
|
||||
263B77AA79980BD0CB53A0625A2637EB Spider-Man (19xx)(Parker Brothers - Philips)(EU) O2 EU
|
||||
A0BA087F4A47B71C41E876B5069B8BA0 Spider-Man (19xx)(Parker Brothers - Philips)(EU)[a] O2 EU
|
||||
A7BFD5FA3233A3DF36742A368736727D Stone Sling (1980)(Philips)(EU) O2 EU
|
||||
EF316AF0ED3D1736129C53C1231B8569 Super Bee (1983)(Philips)(BR) O2 BR
|
||||
E201F5DF4BAA81A8D0ED25D58F5399FA Super Bee (1983)(Philips)(EU) O2 EU
|
||||
F274F1ED857324C1B3AC55B0C67A1BA2 Super Cobra (1983)(Parker Brothers)(BR) O2 BR
|
||||
8E4A6C96D67BBA26F41EE856DD919118 Super Cobra (1983)(Parker Brothers)(EU) O2 EU
|
||||
B2D810DCB97E38192A6DD3D213DBCE10 Take the Money and Run (1980)(Philips)(EU-US) O2 EU-US
|
||||
0602FD990F5E43BBAB23004286319B60 Thunderball (1980)(Philips)(EU-US) O2 EU-US
|
||||
817D89146F3B9914E7D502212917CC23 Turtles (1983)(Philips)(EU) O2 EU
|
||||
07737E70C041742DBCD8C52EFDA4EDAB Turtles (1983)(Philips)(US) O2 US
|
||||
C9590BFFC9A2C5A5B49D4FDA32524EDA Tutankham (19xx)(Parker Brothers)(EU) O2 EU
|
||||
7EBD2526D8C17B01B882E39E972C2691 UFO (1981)(Philips)(US) O2 US
|
||||
8F2B2EADCC1BD72366DB49C89B576EB4 Volleyball (1981)(Philips)(EU-US) O2 EU-US
|
||||
E9D2F13DABDCADE4C7D09E5DC8728C28 Volleyball Electronique (1981)(Philips)(FR) O2 FR
|
||||
4F0DD7AB05C033C27ECBDA05B14BF619 Wall Street (1983)(Philips)(BR) O2 BR
|
||||
30249D4A85B18F0320F1B5A00E55B5C7 War of Nerves (1981)(Philips)(EU-US) O2 EU-US
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -50,9 +50,9 @@ sha1:a65f487740069640952803218b70580b2fb724b7 A-Team, The (Atari) (Prototype) (
|
|||
sha1:821cffe5f5940b2951f280d07d2691e140f54ad2 A-Team, The (Atari) (Prototype) (PAL-60) [!] A26 m=F8;NTSC=true
|
||||
sha1:53413577afe7def1d390e3892c45822405513c07 A-Team, The (Atari) (Prototype) [!] A26 m=F8;NTSC=true
|
||||
sha1:3607f46475f4b1b8989f7327f90ca53a4ac0e9fe A-VCS-tec Challenge (beta 5) (PD) A26 m=F8;NTSC=true
|
||||
sha1:d7c62df8300a68b21ce672cfaa4d0f2f4b3d0ce1 Acid Drop (1992) (Salu) (PAL) [!] A26 m=F6;PAL=true
|
||||
sha1:66216ed98295f3fde35a0cc9398b4f2fc79f2375 Acid Drop (1992) (Salu) (PAL) [b1] A26 m=F8;PAL=true
|
||||
sha1:2ad5e47e360842bb5f9c23bbe2c19866d890f427 Acid Drop (NTSC Conversion) (TJ) A26 m=F8;NTSC=true
|
||||
sha1:d7c62df8300a68b21ce672cfaa4d0f2f4b3d0ce1 Acid Drop (1992) (Salu) (PAL) [!] A26 SP_RESET=true;m=F6;PAL=true
|
||||
sha1:66216ed98295f3fde35a0cc9398b4f2fc79f2375 Acid Drop (1992) (Salu) (PAL) [b1] A26 SP_RESET=true;m=F8;PAL=true
|
||||
sha1:2ad5e47e360842bb5f9c23bbe2c19866d890f427 Acid Drop (NTSC Conversion) (TJ) A26 SP_RESET=true;m=F8;NTSC=true
|
||||
sha1:9e6fb047ee9fa0a454ca23673ed9693430032dc6 Action Force (1983) (Parker Bros) (PAL) [!] A26 m=4K;PAL=true
|
||||
sha1:bfcc35feee3713f5028122844d027c88a84772b6 2 Pak Special Red - Motocross,Boom Bang (1990) (PAL) [!] A26 m=F6;PAL=true
|
||||
sha1:8a503416ca6f2404bc52382e337f31238bba9534 3-D Corridor Demo 2 (29-03-2003) (MP) A26 m=4K;NTSC=true
|
||||
|
@ -68,13 +68,13 @@ sha1:317a7b8693af44095c23437253a32cc748824ccf Adventure (Color Scrolling) [h1]
|
|||
sha1:4ffe36c5113305714e27c72d7f3abecc9b08a630 Adventure (New Graphics) [h1] A26 m=4K;NTSC=true
|
||||
sha1:0b0875ad1bd494c9dd8de4ff0a06938e699f60d5 Adventure 34 by Kurt Howe (Adventure Hack) A26 m=4K;NTSC=true
|
||||
sha1:8501444b12f7f9e2103cd2bcf0c8d3f5b7536569 Adventure II (Adventure Hack) A26 m=4K;NTSC=true
|
||||
sha1:03a495c7bfa0671e24aa4d9460d232731f68cb43 Adventures of Tron (1983) (Mattel) A26 m=4K;NTSC=true
|
||||
sha1:03a495c7bfa0671e24aa4d9460d232731f68cb43 Adventures of Tron (1983) (Mattel) A26 SP_RESET=true;m=4K;NTSC=true
|
||||
sha1:6e420544bf91f603639188824a2b570738bb7e02 Adventures on GX-12 (Telegames) (PAL) [!] A26 m=4K;PAL=true
|
||||
sha1:3b02e7dacb418c44d0d3dc77d60a9663b90b0fbc Air Raid (Men-A-Vision) A26 m=4K;NTSC=true
|
||||
sha1:e65a0c6c5a1f9f05ebcfaaa7b2c9ee6625bf2d83 Air Raiders (1982) (Mattel) (PAL) [p1][!] A26 m=4K;PAL=true
|
||||
sha1:29f5c73d1fe806a4284547274dd73f9972a7ed70 Air Raiders (1982) (Mattel) [!] A26 m=4K;NTSC=true
|
||||
sha1:a9a51405b521ae0b465f521fa098e8b3aedd018b Air Raiders (1982) (Mattel) [a1][!] A26 m=4K;NTSC=true
|
||||
sha1:39a98b42f0670dfe6a842645f09f24583ae8ee60 Air Raiders (1982) (Mattel) [h1] A26 m=4K;NTSC=true
|
||||
sha1:e65a0c6c5a1f9f05ebcfaaa7b2c9ee6625bf2d83 Air Raiders (1982) (Mattel) (PAL) [p1][!] A26 SP_RESET=true;m=4K;PAL=true
|
||||
sha1:29f5c73d1fe806a4284547274dd73f9972a7ed70 Air Raiders (1982) (Mattel) [!] A26 SP_RESET=true;m=4K;NTSC=true
|
||||
sha1:a9a51405b521ae0b465f521fa098e8b3aedd018b Air Raiders (1982) (Mattel) [a1][!] A26 SP_RESET=true;m=4K;NTSC=true
|
||||
sha1:39a98b42f0670dfe6a842645f09f24583ae8ee60 Air Raiders (1982) (Mattel) [h1] A26 SP_RESET=true;m=4K;NTSC=true
|
||||
sha1:b96c7a509bf610f61f82377bfd506db3dba2b423 Air-Sea Battle (1977) (Atari) (PAL) [!] A26 m=2K;PAL=true
|
||||
sha1:a746fdc82b336a9d499bf17f50b41e0193ba595e Air-Sea Battle (1977) (Atari) [!] A26 m=2K;NTSC=true
|
||||
sha1:d3897fc60585e420ae816a2db909400f6cbadd88 Air-Sea Battle (1977) (Atari) [o1] A26 m=2K;NTSC=true
|
||||
|
@ -323,9 +323,9 @@ sha1:67387d0d3d48a44800c44860bf15339a81f41aa9 Bugs (1982) (Data Age) [!] A26 m
|
|||
sha1:a8aedea627c67c38032cdde441fb98dad226916a Bugs (1983) (Gameworld) (PAL) [!] A26 m=4K;PAL=true
|
||||
sha1:9c0e13af336a986c271fe828fafdca250afba647 Bugs Bunny (Atari) (Prototype) [!] A26 m=F8;NTSC=true
|
||||
sha1:13534da5c382ed20d070ffe93f35c4c11b36e1bc Bullet Demo (20-12-2002) (CT) A26 m=4K;NTSC=true
|
||||
sha1:5614c32e76c8b272c38c16720ebbb1818d3d3103 Bump 'N' Jump (1983) (Mattel) [b1] A26 m=F6;NTSC=true
|
||||
sha1:1819ef408c1216c83dcfeceec28d13f6ea5ca477 Bump 'N' Jump (1983) (Mattel) A26 m=E7;NTSC=true
|
||||
sha1:35bc4048f58bb170313872a0bce44fb1ca3217cc Bump 'N' Jump (Telegames) (PAL) [!] A26 m=F8;PAL=true
|
||||
sha1:5614c32e76c8b272c38c16720ebbb1818d3d3103 Bump 'N' Jump (1983) (Mattel) [b1] A26 SP_RESET=true;m=F6;NTSC=true
|
||||
sha1:1819ef408c1216c83dcfeceec28d13f6ea5ca477 Bump 'N' Jump (1983) (Mattel) A26 SP_RESET=true;m=E7;NTSC=true
|
||||
sha1:35bc4048f58bb170313872a0bce44fb1ca3217cc Bump 'N' Jump (Telegames) (PAL) [!] A26 SP_RESET=true;m=F8;PAL=true
|
||||
sha1:ad48f4952e867a2b97900d965b69f50fddf8ba2d Bumper Bash (1983) (Spectravideo) (PAL) [!] A26 m=4K;PAL=true
|
||||
sha1:6c199782c79686dc0cbce6d5fe805f276a86a3f5 Bumper Bash (1983) (Spectravideo) A26 m=4K;NTSC=true
|
||||
sha1:49e01b8048ae344cb65838f6b1c1de0e1f416f29 Burgertime (1982) (Mattel) A26 SP_RESET=true;m=E7;NTSC=true
|
||||
|
@ -855,8 +855,8 @@ sha1:6b9e591cc53844795725fc66c564f0364d1fbe40 Frogger II - Threedeep! (1983) (P
|
|||
sha1:bce92de22fc8950f0eebb643d96fe9fa5dba2b72 Frogger II - Threedeep! (1984) (Parker Bros) (PAL) [!] A26 m=E0;PAL=true
|
||||
sha1:5215cf9051e833482e115d16ff90fee5f01c3e84 Frogger Preview (1982) (Starpath) [a1] A26 m=AR;NTSC=true
|
||||
sha1:2edb64be1bb6f4215f520ec2f487b19f29724b8d Frogger Preview (1982) (Starpath) A26 m=AR;NTSC=true
|
||||
sha1:7682b4b6d45865b7eec1244e5d76f0f2efdb17e7 Frogs and Flies (1982) (Mattel) (PAL) [p1][!] A26 m=4K;PAL=true
|
||||
sha1:f344d5a8dc895c5a2ae0288f3c6cb66650e49167 Frogs and Flies (1982) (Mattel) [!] A26 m=4K;NTSC=true
|
||||
sha1:7682b4b6d45865b7eec1244e5d76f0f2efdb17e7 Frogs and Flies (1982) (Mattel) (PAL) [p1][!] A26 SP_RESET=true;m=4K;PAL=true
|
||||
sha1:f344d5a8dc895c5a2ae0288f3c6cb66650e49167 Frogs and Flies (1982) (Mattel) [!] A26 SP_RESET=true;m=4K;NTSC=true
|
||||
sha1:cf32bfcd7f2c3b7d2a6ad2f298aea2dfad8242e7 Front Line (1982) (Coleco) A26 m=F8;NTSC=true
|
||||
sha1:58a6f82434ccf49ca420596809ce9545373845a2 Frostbite (1983) (Activision) (PAL) [!] A26 m=4K;PAL=true
|
||||
sha1:8ad03667bbf73d3c7760cb82f2c4442f8745483c Frostbite (1983) (Activision) (PAL) [p1][!] A26 m=4K;PAL=true
|
||||
|
@ -1256,9 +1256,9 @@ sha1:128c3a98d78b043edabe8964cf7998955342fa2d Kiss Meets Pacman (Cody Pittman)
|
|||
sha1:45623a1c8fb5074de98c37f005edd5b1d0937dae Klax (1990) (Atari) (PAL) [!] A26 m=F6SC;PAL=true
|
||||
sha1:3162259c6dbfbb57a2ea41d849155702151ee39b Klax (1990) (Atari) A26 m=F6SC;NTSC=true
|
||||
sha1:759597d1d779cfdfd7aa30fd28a59acc58ca2533 Knight on the Town (1982) (Playaround) A26 m=4K;NTSC=true
|
||||
sha1:2f550743e237f6dc8c75c389a01b02e9a396fdad Kool Aid Man (1982) (Mattel) A26 m=4K;NTSC=true
|
||||
sha1:f5c193ed00bf557ddd5ab698d92a7483b89c6519 Kool Aid Man (Fixed) (15-11-2002) (CT) A26 m=4K;NTSC=true
|
||||
sha1:38f55fc76bec14eb661a7b594301c271aa5f5f3b Kool Aid Man (PAL Conversion) (16-11-2002) (Fabrizio Zavagli) A26 m=4K;NTSC=true
|
||||
sha1:2f550743e237f6dc8c75c389a01b02e9a396fdad Kool Aid Man (1982) (Mattel) A26 SP_RESET=true;m=4K;NTSC=true
|
||||
sha1:f5c193ed00bf557ddd5ab698d92a7483b89c6519 Kool Aid Man (Fixed) (15-11-2002) (CT) A26 SP_RESET=true;m=4K;NTSC=true
|
||||
sha1:38f55fc76bec14eb661a7b594301c271aa5f5f3b Kool Aid Man (PAL Conversion) (16-11-2002) (Fabrizio Zavagli) A26 SP_RESET=true;m=4K;NTSC=true
|
||||
sha1:82e64366795b011c2a2f1755bf899cc2c0617fe8 Krieg Der Sterne (Atlantis-Ariola) (PAL) [!] A26 m=4K;PAL=true
|
||||
sha1:4bdf1cf73316bdb0002606facf11b6ddcb287207 Krull (1983) (Atari) [!] A26 m=F8;NTSC=true
|
||||
sha1:07a1c1b1a2297c4edde0e16f610b5ec23c775217 Krull (CCE) A26 m=F8;NTSC=true
|
||||
|
@ -1305,9 +1305,9 @@ sha1:4f3e51f68c10d2fa7c4b9764b0cb81fdded0fde4 Lilly Adventure (Starsoft) (NTSC
|
|||
sha1:63f4776aa4c35d124001918b733cdb4d46dfbe9b Lilly Adventure (Starsoft) (PAL) [!] A26 m=4K;PAL=true
|
||||
sha1:5425578808363ee72dbba6195533549679137777 Lines Demo (Eckhard Stolberg) (PAL) (PD) A26 m=2K;PAL=true
|
||||
sha1:fe208ad775cbf9523e7a99632b9f10f2c9c7aa87 Lochjaw (1982) (Apollo) A26 m=4K;NTSC=true
|
||||
sha1:119171935ed9ea877de4f2a68aee31cd55bc697d Lock 'N' Chase (1982) (Mattel) (PAL) [p1][!] A26 m=4K;PAL=true
|
||||
sha1:fc3d75d46d917457aa1701bf47844817d0ba96c3 Lock 'N' Chase (1982) (Mattel) [!] A26 m=4K;NTSC=true
|
||||
sha1:075ec3678ceabbee46a7d576fdd199a4ab908cc0 Lock 'N' Chase (1982) (Telegames) (PAL) [!] A26 m=4K;PAL=true
|
||||
sha1:119171935ed9ea877de4f2a68aee31cd55bc697d Lock 'N' Chase (1982) (Mattel) (PAL) [p1][!] A26 SP_RESET=true;m=4K;PAL=true
|
||||
sha1:fc3d75d46d917457aa1701bf47844817d0ba96c3 Lock 'N' Chase (1982) (Mattel) [!] A26 SP_RESET=true;m=4K;NTSC=true
|
||||
sha1:075ec3678ceabbee46a7d576fdd199a4ab908cc0 Lock 'N' Chase (1982) (Telegames) (PAL) [!] A26 SP_RESET=true;m=4K;PAL=true
|
||||
sha1:ef02fdb94ac092247bfcd5f556e01a68c06a4832 Lord of The Rings (1983) (Parker Bros) (Prototype) A26 m=E0;NTSC=true
|
||||
sha1:43575ed97f8a585c5bae6fb1a7b2133c87b4d256 Lord of the Rings - Fellowship of the Ring by Adam Thornton (Dark Mage Hack) (PD) [a1] A26 m=4K;NTSC=true
|
||||
sha1:721514e5c31c8f2b30b4a2bf2cda69a810cac75b Lord of the Rings - Fellowship of the Ring by Adam Thornton (Dark Mage Hack) (PD) A26 m=4K;NTSC=true
|
||||
|
@ -1359,8 +1359,8 @@ sha1:6ef010513e01520560616994cbe3f10995490996 Max3 (2001) (Maxime Beauvais) (PD
|
|||
sha1:a2b13017d759346174e3d8dd53b6347222d3b85d Maze (AKA Slot Racers) (1978) (Sears) [!] A26 m=2K;NTSC=true
|
||||
sha1:05f8d0e9f9bec192dfe5947965039817c8c390df Maze (AKA Slot Racers) (1978) (Sears) [o1] A26 m=2K;NTSC=true
|
||||
sha1:365a3af336d71f8f80345de9fcebb100f5141182 Maze 003 Demo (PD) A26 m=4K;NTSC=true
|
||||
sha1:4a255c1d277f9ceb98dfe61ec2c6f7537ca4e7bf Maze Craze (1978) (Atari) (PAL) [!] A26 m=4K;PAL=true
|
||||
sha1:aba25089d87cd6fee8d206b880baa5d938aae255 Maze Craze (1978) (Atari) A26 m=4K;NTSC=true
|
||||
sha1:4a255c1d277f9ceb98dfe61ec2c6f7537ca4e7bf Maze Craze (1978) (Atari) (PAL) [!] A26 SP_FRAME=true;m=4K;PAL=true
|
||||
sha1:aba25089d87cd6fee8d206b880baa5d938aae255 Maze Craze (1978) (Atari) A26 SP_FRAME=true;m=4K;NTSC=true
|
||||
sha1:43c309177fde4adf59c99ba5d3865df2a588a79e Maze Demo 1 (PD) A26 m=4K;NTSC=true
|
||||
sha1:648e91958afdf264e8e6b45521ecb542fb340586 Maze Demo 2 (PD) A26 m=4K;NTSC=true
|
||||
sha1:0103b35b1aef6b10c1c0a44b213ebf30af708df6 McDonald's (1983) (Parker Bros) (Prototype) [!] A26 m=4K;NTSC=true
|
||||
|
@ -1559,9 +1559,9 @@ sha1:03eb4a3b3db04c1782e1a91d27ea515163d258fb Oink! (CCE) A26 m=4K;NTSC=true
|
|||
sha1:7feef3965706bc64f0f0a940149b2523e0735ce6 Okie Dokie (4K) (PD) A26 m=4K;NTSC=true
|
||||
sha1:7bd1cbddefcf3bd24da570be015234d0c444a7e5 Okie Dokie (Older) (PD) A26 m=2K;NTSC=true
|
||||
sha1:8a47b1930971f271a935c50d423e152aaea6ac59 Okie Dokie (PD) A26 m=2K;NTSC=true
|
||||
sha1:ca4f26716120d2e4ba531c2ea50b570b9980756e Omega Race (1983) (CBS Electronics) [o1] A26 m=F6SC;NTSC=true
|
||||
sha1:dcaab259e7617c7ac7d349893451896a9ca0e292 Omega Race (1983) (CBS Electronics) A26 m=FA;NTSC=true
|
||||
sha1:c7a9ecad6c1a82048de54d33b231abd89fb08bd8 Omega Race JS (TJ) A26 m=FA;NTSC=true
|
||||
sha1:ca4f26716120d2e4ba531c2ea50b570b9980756e Omega Race (1983) (CBS Electronics) [o1] A26 SP_RESET=true;m=F6SC;NTSC=true
|
||||
sha1:dcaab259e7617c7ac7d349893451896a9ca0e292 Omega Race (1983) (CBS Electronics) A26 SP_RESET=true;m=FA;NTSC=true
|
||||
sha1:c7a9ecad6c1a82048de54d33b231abd89fb08bd8 Omega Race JS (TJ) A26 SP_RESET=true;m=FA;NTSC=true
|
||||
sha1:fbf180f8f35178099244bc1ae341ccff87838907 One Blue Bar Demo (PD) A26 m=4K;NTSC=true
|
||||
sha1:e52ca6e73c931ef71c63e164704fb398086e4308 One On One by Angelino (Basketball Hack) A26 m=2K;NTSC=true
|
||||
sha1:98007f26356b4032a2ae4e9fddea5a38a988eb13 Oscar's Trash Race (1983) (Atari) (PAL) [!] A26 m=F8;PAL=true
|
||||
|
@ -2302,8 +2302,8 @@ sha1:7c2a2ddbdef639ed2985ce66ae717b2285a94ae0 Star Raiders (1982) (Atari) (PAL)
|
|||
sha1:e10cce1a438c82bd499e1eb31a3f07d7254198f5 Star Raiders (1982) (Atari) A26 m=F8;NTSC=true
|
||||
sha1:d2b6290afb81bad126321d923d222c26e2de5fa8 Star Ship - Outer Space (1977) [o1] A26 m=2K;NTSC=true
|
||||
sha1:878e78ed46e29c44949d0904a2198826e412ed81 Star Ship - Outer Space (1977) A26 m=2K;NTSC=true
|
||||
sha1:de05d1ca8ad1e7a85df3faf25b1aa90b159afded Star Strike (1982) (Mattel) A26 m=4K;NTSC=true
|
||||
sha1:a0e29405a92773bf3baa2845788a8add8f3bc0b1 Star Strike (Telegames) (PAL) [!] A26 m=4K;PAL=true
|
||||
sha1:de05d1ca8ad1e7a85df3faf25b1aa90b159afded Star Strike (1982) (Mattel) A26 SP_RESET=true;m=4K;NTSC=true
|
||||
sha1:a0e29405a92773bf3baa2845788a8add8f3bc0b1 Star Strike (Telegames) (PAL) [!] A26 SP_RESET=true;m=4K;PAL=true
|
||||
sha1:667a528e8cf3fd7f533cf67993f48bcc3c100e0d Star Trek - Strategic Operations Simulator (1983) (Sega) (PAL) [!] A26 m=F8;PAL=true
|
||||
sha1:61a3ebbffa0bfb761295c66e189b62915f4818d9 Star Trek - Strategic Operations Simulator (1983) (Sega) A26 m=F8;NTSC=true
|
||||
sha1:417bb89e1117413321ffba48a17e005b2687680b Star Voyager (1982) (CCE) [!] A26 m=4K;NTSC=true
|
||||
|
@ -2554,8 +2554,8 @@ sha1:ccf422636180f24becaa8af0cc391f95e599a330 Tunnel Demo (28-03-2003) (AD) A26
|
|||
sha1:0f6552a0afe40cc1c448313569db8c9a8cda6d21 Tunnel Demo (Cycling Colours 2) (29-03-2003) (AD) A26 m=4K;NTSC=true
|
||||
sha1:8dad50a3918c7462811c2def42f289cd123822af Tunnel Demo (Red Spiral) (30-03-2003) (AD) A26 m=4K;NTSC=true
|
||||
sha1:4df103678f9c88b017e64f1e14e741fc6e15340c Tunnel Demo 2 (27-03-2003) (CT) A26 m=4K;NTSC=true
|
||||
sha1:fc1a0b58765a7dcbd8e33562e1074ddd9e0ac624 Tunnel Runner (1983) (CBS Electronics) [!] A26 m=FA;NTSC=true
|
||||
sha1:460094d7689ac0c4435b72e3e390f4b6f2ef112c Tunnel Runner (1983) (CBS Electronics) [a1][!] A26 m=FA;NTSC=true
|
||||
sha1:fc1a0b58765a7dcbd8e33562e1074ddd9e0ac624 Tunnel Runner (1983) (CBS Electronics) [!] A26 SP_RESET=true;m=FA;NTSC=true
|
||||
sha1:460094d7689ac0c4435b72e3e390f4b6f2ef112c Tunnel Runner (1983) (CBS Electronics) [a1][!] A26 SP_RESET=true;m=FA;NTSC=true
|
||||
sha1:0921fab66ce4b712701326ce105e1a84ac47b497 Turbo (Coleco) Prototype Fake v0.1 (TJ) A26 m=2K;NTSC=true
|
||||
sha1:b594a9acedd4734070776bf69d0f08abb5c261bf Turbo WIP (TJ) A26 m=F8;NTSC=true
|
||||
sha1:1162fe46977f01b4d25efab813e0d05ec90aeadc Turmoil (1982) (20th Century Fox) [!] A26 m=4K;NTSC=true
|
||||
|
@ -2596,7 +2596,7 @@ sha1:082a7bc7d0fdbf307501cd146e18ed3d03b9ec0f Vertical Ship Demo 1 (PD) A26 m=
|
|||
sha1:1d641abfb95e3b4b7abaad42a8760c8c9ce993a6 Vertically Scrolling Playfield (02-02-2003) (Aaron Bergstrom) A26 m=4K;NTSC=true
|
||||
sha1:24c1c6e1a495137bec53818c2cd8bd83c8336d21 Video Checkers (1978) (Atari) (PAL) [!] A26 m=4K;PAL=true
|
||||
sha1:babae88a832b76d8c5af6ea63b8f10a0da5bb992 Video Checkers (1978) (Atari) A26 m=4K;NTSC=true
|
||||
sha1:043ef523e4fcb9fc2fc2fda21f15671bf8620fc3 Video Chess (1978) (Atari) A26 m=4K;NTSC=true
|
||||
sha1:043ef523e4fcb9fc2fc2fda21f15671bf8620fc3 Video Chess (1978) (Atari) A26 SP_FRAME=true;m=4K;NTSC=true
|
||||
sha1:3f2ad3666eb713b20484e3677d8e1cac8fbd323e Video Cube (CCE) A26 m=4K;NTSC=true
|
||||
sha1:1554b146d076b64776bf49136cea01f60eeba4c1 Video Jogger (Exus) (PAL) A26 m=4K;PAL=true
|
||||
sha1:19d4f52d399c2ab70e411be51b715341db7a41bf Video Life (CommaVid) [h1] A26 m=CV;NTSC=true
|
||||
|
@ -2698,4 +2698,10 @@ sha1:9CD8217DCCBE60F9A25A930D614EE5384F432A83 Boulder Dash (2005) (Andrew Davie
|
|||
sha1:00CCF622E7BA4D0A39DCBABAB771CE815B0FB8FE Boulder Dash (2005) (Andrew Davie) (WIP) (PAL A26 m=3E;NTSC=true
|
||||
sha1:650DA2339D41D1D2F180A6CAFE8DC311AC588ACD Boulder Dash Intro Tune (2005) (Erik Ehrling) A26 m=4K;NTSC=true
|
||||
sha1:F28E52921646A18467577370808454F494C15EFE 0840 EconoBanking A26 m=0840;NTSC=true
|
||||
sha1:2A9647E27AB27E6CF82B3BF122EDF212FA34AE86 Halo2600 Final A26 m=m4K
|
||||
sha1:2A9647E27AB27E6CF82B3BF122EDF212FA34AE86 Halo2600 Final A26 m=4K
|
||||
sha1:341BB93E67C21063F3910845D1AF59FEA129FF21 Bang! A26 m=F4SC
|
||||
sha1:62E7A3CE40BE1C29870D892639FBD394977281F5 DHmoveValues(rev2) A26 m=F6SC
|
||||
sha1:FBB0FE0A859BF764D060E264561734B8F7CFC9D7 REF A26 m=4K;NTSC=true
|
||||
sha1:58AA6BBA1D0D26C1287135FC9237B684A984B6BE Princess Rescue A26 m=F4;NTSC=true
|
||||
sha1:29404640B4579938057969D93A77C9A676AF9965 Crazy Balloon A26 m=4K;NTSC=true
|
||||
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Type: NO-INTRO
|
||||
;;; Source: Fairchild - Channel F - 20120223-000000
|
||||
;;; FileGen: 2019-04-16 13:59:49 (UTC)
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Bad Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Hacks
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Over Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Translated
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Believed Good
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
F7BF7D55A7660FFA80D08AD1BA903FF7 Alien Invasion (USA) ChannelF USA
|
||||
D89B48AE8C906488CAAC2B2AE1D63D88 Backgammon, Acey-Deucey (USA) ChannelF USA
|
||||
4FA83F734C139963AA02BDBB7A52E500 Baseball (USA) ChannelF USA
|
||||
25E231E7A464A32B4715BFB47AF89240 Bowling (USA) ChannelF USA
|
||||
BB7F7BBBE21F142591CDCAFA98D7F6E4 Casino Poker (USA) ChannelF USA
|
||||
35D61D40EF7EC337CBA092AABAC74DBD Checkers (USA) ChannelF USA
|
||||
54CF17C48707467295749490D458EAFB Demonstration Cartridge (USA) ChannelF USA
|
||||
F6916B665893AA8138CDE57C37E50ADA Demonstration Cartridge 2 (USA) ChannelF USA
|
||||
4F11F13CBCA685CB20E888F87B3B1586 Desert Fox, Shooting Gallery (USA) ChannelF USA
|
||||
6FFEDAED3C5CD8BA74D98901849CC451 Dodge It (USA) ChannelF USA
|
||||
F80AF74B09D058B90E719BB7DFBDD50E Drag Race (USA) ChannelF USA
|
||||
9E0711B140E22729687DB1E1354980AB Galactic Space Wars, Lunar Lander (USA) ChannelF USA
|
||||
0124CD0B61DF5502AABD59029CCB6D5A Hangman (USA) ChannelF USA
|
||||
4C10FA5C7316C59EFA241043FC67DFA8 Magic Numbers - Mind Reader + Nim (USA) ChannelF USA
|
||||
A8E6103FCAE4D0F9E14D9EDCFC3FC493 Math Quiz I - Addition + Subtraction (USA) ChannelF USA
|
||||
86B77EAFDF7B806E19E01724987E384F Math Quiz II - Multiplication + Division (USA) ChannelF USA
|
||||
6565DF74539476D66FD78DE1BAC0259C Maze, Jailbreak, Blind-man's-bluff, Trailblazer (USA) ChannelF USA
|
||||
53E4CC2DA0F2C167E0692B794CB7692C Maze, Jailbreak, Blind-man's-bluff, Trailblazer (USA) (Alt 1) ChannelF USA
|
||||
2B3CA549E27579E4519A765FD8F52D0F Memory Match 1 & 2 (USA) ChannelF USA
|
||||
1FBD86DCCA0E4619963B902C48AE77F2 Muehle, Tontauben-Schiessen, Kreatives Malspiel, Videoscope (Germany) ChannelF Germany
|
||||
C2A44D22D3865B036479E9311C74D3AD Ordtaevling (Sweden) ChannelF Sweden
|
||||
E90339B7068C6227D54F3C0CA637E017 Pinball Challenge (USA) ChannelF USA
|
||||
5CBCDA1C44F0DAD02B0DFE209B6325D5 Pinball Challenge (USA) (Alt 1) ChannelF USA
|
||||
9A894D745356A050F95410983C3BC54A Pro Football (USA) ChannelF USA
|
||||
913ECBAA30816C6D78DE8651251761FC Rat' Mal (Germany) ChannelF Germany
|
||||
3783B6AC359E21B99CFA17773AA811C6 Robot War, Torpedo Alley (USA) ChannelF USA
|
||||
5568205F926333914DEDC8EF8BF16AF2 Schach (Germany) ChannelF Germany
|
||||
DFB66EE145FAB65062FDEADAFC8DC34C Slot Machine (USA) ChannelF USA
|
||||
4CB12EDAE37DF23851884B82CA410754 Sonar Search (USA) ChannelF USA
|
||||
32CCA8FF09041A39251D7AADE21EE22F Space War (USA) ChannelF USA
|
||||
1B409FE1154584F4D1AB76B344A73D99 Spitfire (USA) ChannelF USA
|
||||
7E5C26A6D1F9A90C68669A9800BA522D Tic-Tac-Toe, Shooting Gallery, Doodle, Quadra-Doodle (USA) ChannelF USA
|
||||
B074C867F235FB69CED96C6916673B45 Video Blackjack (USA) ChannelF USA
|
||||
90A9B3952568F91502A7088BFB0AE07E Video Whizball (USA) ChannelF USA
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,28 @@
|
|||
#include gamedb_msx_msx1_rom.txt
|
||||
#include gamedb_msx_msx1_dsk.txt
|
||||
#include gamedb_msx_msx1_cas.txt
|
||||
#include gamedb_msx_msx2_rom.txt
|
||||
#include gamedb_msx_msx2_dsk.txt
|
||||
#include gamedb_msx_msx2_cas.txt
|
||||
|
||||
;;;;----------------------------------------------
|
||||
;;;; Currently the above gamesdb files are generated automatically from TOSEC dat files
|
||||
;;;; Each file is commented automatically and split up first into the various files that were imported, then by RomStatus
|
||||
;;;;
|
||||
;;;; NOTE TO DEVS:
|
||||
;;;; Any overrides should be placed below.
|
||||
;;;; Bizhawk (I believe) takes the last entry it sees when duplicates are present, so this should work.
|
||||
;;;;
|
||||
;;;;----------------------------------------------
|
||||
|
||||
;;;;----------------------------------------------
|
||||
;;;; Overrides (dont edit the included files above directly!)
|
||||
;;;;----------------------------------------------
|
||||
|
||||
;;; BAD
|
||||
|
||||
;;; Actually GOOD
|
||||
|
||||
;;; Actually TRANSLATED
|
||||
|
||||
;;; Games NOT present in TOSEC
|
|
@ -0,0 +1,941 @@
|
|||
;MSX SHA-1
|
||||
FC71561A64F73DA0E0043D256F67FD18D7FC3A7F [BIOS] Kanji Rom - JIS 1st Class (Japan) MSX
|
||||
33536DAC686B375BA13FAF76A3BAF2D6978904E0 10-Yard Fight (Japan) MSX
|
||||
FD15698518172BCDE3318F08EE032531CBBB9F5D 10-Yard Fight (Japan) (Alt 1) MSX
|
||||
0733CD627467A866846E15CAF1770A5594EAF4CC 1942 (Japan) MSX
|
||||
DA397E783D677D1A78FFF222D9D6CB48B915DADA 1942 (Japan) (Alt 1) MSX
|
||||
F8164D3872B5D54EAEAFC6DE3BB98A472F0C828D 3-D Golf Simulation (Japan) MSX
|
||||
9A63D48C4FC05E76C9DE25E5C5F2A0C99B5D1BE4 3-D Golf Simulation (Japan) (High Speed) MSX
|
||||
6FE8C1725C35D85A5E489C0C8D21134DEF09ECFB 3-D Golf Simulation (Japan) (Alt 1) MSX
|
||||
8F71DDDD429173DF7CE52C5245AF1A76B482A901 3D Tennis (Japan) MSX
|
||||
6B8A684DDBADD798A8E599449B823BCECA9CDB58 A.E. (Japan) MSX
|
||||
937464EB371C68ADD2236BCEF91D24A8CE7C4ED1 A1 Spirit - The Way to Formula-1 (Japan) MSX
|
||||
CB48969F27EAEBF24C61F651399EC2433D85BCBC Actman (Japan) MSX
|
||||
3CA4A1AB35B3CBE3DDB238CE88CA9DF258AE37D6 Actman (Japan) (Alt 1) MSX
|
||||
AE0C0B0C9468E137EBA5B52F96241ACD55D9746A Adven' Chuta! (Japan) MSX
|
||||
EC5111E3B06D64EF51196FF87448E1C62BE4CDD8 Albatros (Japan) (Alt 1) MSX
|
||||
13D38CC80112BAA9BCBF03569988C163015D434C Albatros (Japan) MSX
|
||||
807676038CBBA043B8099EBA9C5840A4811A7E59 Alcazar - The Forgotten Fortress (Japan) MSX
|
||||
F3815211C6183B4F9C26B9E7D0A12C3B3870BDDA Alcazar - The Forgotten Fortress (Japan) (Alt 1) MSX
|
||||
639CB280544B060A618AF23DAF234A44BAAF88DE Alibaba and 40 Thieves (Japan) MSX
|
||||
ACC14E9886A3281B658DC458C1AE93FA9F24DB04 Alibaba and 40 Thieves (Japan) (Alt 1) MSX
|
||||
41B3B1830084EF00B61339C46C96BD0EF62CD6D3 Alibaba and 40 Thieves (Japan) (Alt 2) MSX
|
||||
3DE0CEA6A4575E631FEE0DB985E0F0F584761980 Alien 8 (Japan) (Alt 1) MSX
|
||||
5FB90BE078E432DB92DD39E621D12F612DBEA4A8 Alien 8 (Japan) MSX
|
||||
2639792DF6F7C7CFAFFC2616B0E1849F18897ACE Aliens - Alien 2 (Japan) (Alt 1) MSX
|
||||
5380E913D8DAC23470446844CAB21F6921101AF8 Aliens - Alien 2 (Japan) MSX
|
||||
0D9C472CF7687B86F3FE2E5AF6545A26A0EFD5FC Aliens - Alien 2 (Japan) (Alt 2) MSX
|
||||
627E4D311DFE8A43A629E63F444A6F41EEBAD835 Alpha Roid (Japan) (Alt 1) MSX
|
||||
97E7D0EE40C7D6CE1A8EDF7B06E5014E6745CFDA Alpha Roid (Japan) MSX
|
||||
1D81E6CC165B3330B9B3C8B4F4DA0417B1AB901E Alpha Squadron (Japan) MSX
|
||||
FD6CC08D4842A85A3C741CF9C30883DDFC378895 American Truck (Japan) (Alt 2) MSX
|
||||
88FA967C420F7090A11E5DE1D3674F4527F53D52 American Truck (Japan) (Alt 1) MSX
|
||||
076ABC988D51FAEF30143750DD41318A8A48C5C4 American Truck (Japan) MSX
|
||||
27C40EC7013C1AD1F9A7E1AC1E0C8BE99F1E703F Anaza - Kaleidoscope Special (Japan) MSX
|
||||
A1ABFC53A36D387B9F0687E3F5897C1EBDF21517 Angelo (Japan) MSX
|
||||
3A4A65DC6D540297A7AAE0A9914897AACF740807 Angelo (Japan) (Alt 1) MSX
|
||||
495876C504BDC4DE24860EA15B25DDA8F3B06C49 Animal Land (Japan) MSX
|
||||
E894A38F3E2AD435CC5D17A66600E6016B5E47FB Antarctic Adventure (Japan) MSX
|
||||
44DEAEF747C572A4550681FCCCC1BBBDC46A1FFC Antarctic Adventure (Europe) (Alt 1) MSX
|
||||
2185BE579CB51729F66BF02BDF3A7B6A3CBD7B40 Antarctic Adventure (Europe) MSX
|
||||
F236345F43828597739F4A326318B6A3876FF73F Anty (Japan) MSX
|
||||
1A00EEF3DF449D71ABF4BE5A4C8D01BA9DCD6B79 Anty (Japan) (Alt 1) MSX
|
||||
633CB458EEAB0FEA59A70A9A620B7783A44EB0A6 Aqua Polis SOS (Japan) MSX
|
||||
93462AC9A322C2E5E0D996FDDBE9EBA2F3436931 Aquattack (Japan) MSX
|
||||
EC53D72E41E114574F4C116CAB19E1633F3DA207 Aramo (Japan) MSX
|
||||
45CE64A455A2B07F3C8A6D541CDA3B0E058CC732 Arkanoid (Japan) (Alt 1) MSX
|
||||
E1527AE16D33A09D9CF3D4EA52E63337D2273910 Arkanoid (Japan) (Alt 2) MSX
|
||||
5002BA598469B34AF25BFF5011CCC70ED3723B0D Arkanoid (Japan) (Alt 3) MSX
|
||||
2183F07FA3BA87360100B2FA21FDA0F55C0F8814 Arkanoid (Japan) MSX
|
||||
FBE43D67A5BC0AEDB2E194A4E5F9497B7488362B Athletic Ball (Japan) MSX
|
||||
90BDD12D632D2E909AC5D69235AD0366F430B734 Athletic Land (Japan) MSX
|
||||
DE9EB0E9EF183F49E9D9B631F8818F9CAC5DF409 Athletic Land (Japan) (Beta) MSX
|
||||
866CB3AB10F17E4FB356FBD7277BBF17C4E27EBE Athletic Land (Japan) (Alt 1) MSX
|
||||
C5F1897C416F62CD58CD6257282E3428155CD698 Attack Four Volley Ball (Japan) MSX
|
||||
4C8A97669017296C2360FF9D53694A292197991E B.C.'s Quest (Japan) MSX
|
||||
0D504C359661AC731DE07A7319AFD0E31F01A5D7 B.C.'s Quest (Japan) (Alt 1) MSX
|
||||
C345357E71D1B8F2C9663BF28ABB5A3A2957D49F Back Gammon (Japan) (Alt 1) MSX
|
||||
2B8878609BCC0D1555AE250D621BA6E9DF4AFC52 Back Gammon (Japan) MSX
|
||||
469B07EEF08348C9ACC14E63BA0CD35AEF236983 Back to the Future (Japan) MSX
|
||||
1A6A751334C663FBFDF93F617A7D779F76F488CE Back to the Future (Japan) (Alt 1) MSX
|
||||
363B5A8C94CDB63A7EE72B9D25F7B5053CAB319A Backgammon (Europe) MSX
|
||||
CD452442338366411F6B24739FE59E20F3AC24DC Balance (Japan) MSX
|
||||
B103D4248729AEDA9EBF5766C1791B1950246968 Balance (Japan) (Alt 4) MSX
|
||||
28323E06A402747A1E131DC30CE031A339F6C947 Balance (Japan) (Alt 3) MSX
|
||||
134A6FAF1592978608B55269AEA101D5FAD68760 Balance (Japan) (Alt 2) MSX
|
||||
6D73EE99AC367A2558FD9366AF75AD39ED0D4E69 Balance (Japan) (Alt 1) MSX
|
||||
7A40237867F62611D0E976666451648EDB80753C Banana (Japan) MSX
|
||||
B0956B97C9087AABAB333C271C7AFD9754AE84CD Bank Panic (Japan) MSX
|
||||
B337EA56278523F984D1B000CD00F339D82017A0 Bank Panic (Japan) (Alt 1) MSX
|
||||
9F0CBB1191235ECCA4985DE976A0993744B57930 Basic Lessons 1 (Japan) MSX
|
||||
01CF858888F5A0D3AEE08F42A66C515AB0D06400 Basic Lessons 2 (Japan) MSX
|
||||
709FB35338F21897E275237CC4C5615D0A5C2753 Batman (Japan) MSX
|
||||
EE7DBD36A2B0BBAE11C68AC4DE75077F283BED05 Batten Tanuki no Daibouken (Japan) (Alt 2) MSX
|
||||
F86A7945B34C97CC58D5EE27964968870BFCEF93 Batten Tanuki no Daibouken (Japan) (Alt 1) MSX
|
||||
9B58C70B976CA1D841185DE862E7D663EC9DB56B Batten Tanuki no Daibouken (Japan) (v1.03) MSX
|
||||
8B63F36BE31D7D021C19103EBE8C68B69AAE699C Battle Cross (Japan) MSX
|
||||
0F214EA9E8D673EE0C66CB6615032E57920D588B Battleship Clapton II (Japan) (Alt 1) MSX
|
||||
59BC608B1CB5BDE2230BCA0EB045CD6C58650774 Battleship Clapton II (Japan) MSX
|
||||
1BDB1898796E2B48B62A356035192B163113962C Beach-Head (Europe) MSX
|
||||
1231984AE24BF35F9F38596B864420D8CCD3F30B Beam Rider (Japan) MSX
|
||||
F51F936887498D21F6EE9FE8A7701633BE67E79D Beam Rider (Japan) (Alt 1) MSX
|
||||
01EBDD5981C4841ABDDF6F76EB1F73E237E7688F Becky (Japan) (Alt 2) MSX
|
||||
702D8F1762D4EFE994F520E21E8867ADAE13B817 Becky (Japan) (Alt 1) MSX
|
||||
D69D4A6F2834B20DF3A2AFBD7A927220E96E31E1 Becky (Japan) MSX
|
||||
3197D73A5400A72420F91DEF6D3AA8BDCB392754 Bee & Flower (Japan) MSX
|
||||
250D4C7C6565B0C4935F6301E8DE2C182E659FD0 Bee & Flower (Japan) (Alt 1) MSX
|
||||
A2DE457567E87C794FBA8E35C992EAC352DA78BE Bee & Flower (Japan) (Alt 2) MSX
|
||||
4806E6BC1FD24D5A62C6DF57EA8FD1B51D6E4B80 Bifamu (Japan) (Alt 1) MSX
|
||||
EBFF5D2B4253F62D3A00F1A6D6B4D81053C7B8A6 Bifamu (Japan) MSX
|
||||
EF476E25FB6B7221CA778A379117885450DD36F0 Binary Land (Japan) MSX
|
||||
2588B9ADE775B93F03FD4B17FD3F78BA70B556D6 Black Onyx II, The - Search for the Fire Crystal (Japan) MSX
|
||||
5400C0C929B31A70E76AAC676B91D40445F1B427 Black Onyx, The (Japan) MSX
|
||||
65AF16D35B8D8454EC07718E9F8948335CA73BAD Blagger MSX (Europe) (Converted From Tape) MSX
|
||||
8E3E05E8928B5B77FA61F3B833E164BF5222A5FB Block Hole (Korea) (Unl) MSX
|
||||
BD4B8C48F1D8107F11AE680A787D7B3825669B7C Blockade Runner (Japan) MSX
|
||||
E2EF32F2FC312F96B8424569E9E85A6EA3B21CE4 Boggy '84 (Japan) (Alt 1) MSX
|
||||
5C96169207E197237AA728D8CE4E24C0635D5904 Boggy '84 (Japan) MSX
|
||||
04283AE02107917DA6F54A0F38D3A28254F7AB69 Boggy '84 (Japan) (Alt 2) MSX
|
||||
D7E2A4F78B3E240309C6367AC9DD9C9AEB95E3EE Boing Boing (Spain) MSX
|
||||
E5171C368883DE03FC8D75E61BF23D954EC1BBA4 Bokosuka Wars (Japan) MSX
|
||||
5503D23FAF94F076410D252F69F6BF5ECE4DA292 Bokosuka Wars (Japan) (Alt 1) MSX
|
||||
482CD650220E6931F85EE8532C61DAC561365E30 Bomber King (Japan) MSX
|
||||
5324E053709FF8DA6C18AE4AFBA6A2E0C3A722BA Bomber Man (Japan) MSX
|
||||
E700493E1C4C14F711E9C1C262FE3E8D76931CA3 Bomber Man Special (Japan) MSX
|
||||
0B3241202F0E2BE470E5F2E6139C01983A895BC8 Boogie Woogi Jungle (Japan) MSX
|
||||
05B7A1DB1FF15F712E619FD1C79FD7710E93CB3B Boogie Woogi Jungle (Japan) (Alt 1) MSX
|
||||
86F8E3250CDCBADCCF131255A1EF59ED291BE8E9 Boogie Woogi Jungle (Japan) (Alt 2) MSX
|
||||
EF535AB6013D9B6E38227272F2EBE6A0F0B33CB5 Boomerang (Japan) MSX
|
||||
DA7CFD16DD1A76AE6B551CEABFD7053CA8E3412F Boomerang (Japan) (Alt 1) MSX
|
||||
16C3CED0FB2E360BC7C43D372A0A30EB6BD3963D Borfesu (Japan) MSX
|
||||
451CBB072011B26A7E0BC9931E67995A71F5FD6F Bosconian (Japan) MSX
|
||||
33AD6D1BF1FB816B232EA706D149327E363C7B21 Bosconian (Japan) (Alt 1) MSX
|
||||
0BF7B432DC132F9A7BC74106261BCA07D5F99690 Bosconian (Japan) (Alt 2) MSX
|
||||
B15E73A5FF1AE17AC67F2CEBB5862D5E5BD80BC0 Bouken Roman - Dota (Japan) MSX
|
||||
1FFEF57E6C06068B330027294AAE173103C8F141 Bouken Roman - Dota (Japan) (Alt 1) MSX
|
||||
14FAE375B81C86F71E872ADCA792C23AAFAC66A0 Boulder Dash (Japan) MSX
|
||||
F1F571C1D9360839450C26D73C6AEF89E1E052EB Bouncing Block (Spain) MSX
|
||||
B76FFB94A08457DF0A51897CD87CD8A91610224C Bouncing Block (Spain) (Alt 1) MSX
|
||||
208CE6CBFF7402BFE52B1062E6B10AE09C0A3179 Brain, The (Japan) MSX
|
||||
BCFDB43B275C62A76856AAB94FB1B53BD92B2DB2 Break In (Japan) MSX
|
||||
3D065377F11B23410282B6B76F26BD93B9D05184 Break Out (Japan) MSX
|
||||
C64F2FAD6417C64595BC204D843527E17A58776F Brother Adventure (Korea) (Unl) MSX
|
||||
6F9B4D791F4A43D7182650F21A7BFE88D1C5C2B4 Brother Adventure (Korea) (Alt 1) (Unl) MSX
|
||||
621EA075A534584361C9E9D640E39007A79DFD78 Bruce Lee (Japan) MSX
|
||||
D1ECE8B5FFEB9B99230E640AF32CB488FEE51E35 Bubble Bobble (Korea) (Unl) MSX
|
||||
58551545E73C838A2E995E6951AB644ED2590786 Bubble Bobble (Korea) (Alt 1) (Unl) MSX
|
||||
CE1376941359471CAE41887FE11F10D3B696A926 Burgertime (Japan) MSX
|
||||
613C741535C92DFB01AFEC4135EF8EBDDB49F999 Buru To Marty Kikiippatsu - Inspecteur Z (Japan) MSX
|
||||
B755D7DB109CD0A9392ACCD1C83E6D995A8A04D6 Butam Pants (Japan) MSX
|
||||
2F7FF0438F1A8D80292C9E1CB8D77A92C600B505 Butam Pants (Japan) (Alt 1) MSX
|
||||
E6A1D90A7A8B4E4B8A8E1AFB3D971866931B986D Butam Pants (Japan) (Alt 2) MSX
|
||||
CD69CE70747BC0DEEBBA9FD307A07F5DFB926CC3 C-So! (Japan) MSX
|
||||
2A0F9899A4D8DBA76DB501D6E3435546CC7CD9AA Cabbage Patch Kids (Japan) (Alt 1) MSX
|
||||
C06DE0EDA82E1DAA3EA3CBC5EBA5D884FD0CE8E8 Cabbage Patch Kids (Japan) MSX
|
||||
69710F4B9CC3440E58C54BD4C562B3E90FF323E0 Candoo Ninja (Japan) MSX
|
||||
77F3F6758BD4CF5D2B44C51DE958AA967C41A9D7 Candoo Ninja (Japan) (Alt 1) MSX
|
||||
D32279E01FB5762778D696ACC2053B9503D5A715 Cannon Ball (Japan) (Alt 1) MSX
|
||||
B36C925005F1E530CAB2B5F6E2A5DDFD182C0140 Cannon Ball (Japan) MSX
|
||||
31D80470C8D23EC8B14256AA32F3D54DBC532D76 Cannon Fighter (Japan) MSX
|
||||
F025C9C2DB97DCE608FCC1050426BEFF0DEA43EB Captain Chef (Japan) MSX
|
||||
E93C396649BF6328103E8DA0247952EBEF2A04E9 Car Fighter (Japan) MSX
|
||||
11E2F95D1B58E1244EFDA761603A2AE6D0090D18 Car Jamboree (Japan) MSX
|
||||
8A158CDEC0923B81CE13AF2DFFA5D1B7E096A469 Car Jamboree (Japan) (Alt 1) MSX
|
||||
97AF4F422A283AC8BA387EB0B1B29395C2C966EB Car-Race (Japan) MSX
|
||||
AB7354C9CED9782D572C4DD69249B76A1244E5CE Car-Race (Japan) (Alt 2) MSX
|
||||
E7396AD700F7EDF98CC2B0EC2E6127A68D3CD9BA Car-Race (Japan) (Alt 1) MSX
|
||||
5B17CB69697CF55DFF1F0B8777E19D5ABC1771FC Casio Daishogai Keiba (Japan) MSX
|
||||
CAD653766B597A4AA130A9A1956ECE77BA4D52BC Casio Pachinko-U.F.O. (Japan) MSX
|
||||
17D6DB13D7D76FBD110F53B168AB0001C7E65817 Casio Ski Command (Japan) MSX
|
||||
FE53D85ADB758103097FD56132E71C7F4CB32313 Casio Ski Command (Japan) (Alt 1) MSX
|
||||
0A2209E0A71684493998F6618AF032BA580D4FF9 Casio Worldopen (Japan) MSX
|
||||
811DCA8FC14A2B00F503FBEF74FDEAE4F2873D4C Castle Excellent (Japan) MSX
|
||||
D55E9E237504BC6444C6B62894BF88292150042A Castle Excellent (Japan) (Alt 1) MSX
|
||||
615C08820B926E28B143CD7812852E011D3EEFFB Castle, The (Japan) MSX
|
||||
B6F10B6BEDC26D9415335997493139CE7A2C7916 Chack'n Pop (Japan) (Alt 1) MSX
|
||||
0B9A870D1E6CC712A3EFCE2349FB1C1CF6902D22 Chack'n Pop (Japan) MSX
|
||||
3ABAE41CB742B76FF45DD178BD7DB346137FE0FA Challenge Derby (Japan) MSX
|
||||
39CB046A9B6B6EF4E769CDC6FDF36B274CD44039 Champion Boxing (Japan) MSX
|
||||
EBB46DD4CF36407AD82D9F50D9BEF3E938DC144E Champion Ice Hockey (Japan) MSX
|
||||
F9E9A6E517EE0B9B3147ABB6144B31ED2CA8DBDA Champion Kendou (Japan) MSX
|
||||
A502E37F580BD287ED8338FCB1D809B8DC90BBE0 Champion Kendou (Japan) (Alt 1) MSX
|
||||
AF1A6F4DD12D726A7A4377753CE3DB82BF24EBA4 Champion Pro Wrestling (Japan) MSX
|
||||
D1E3AFECDE1656099DADFF99C6ED2AA8FA6DD834 Champion Pro Wrestling (Japan) (Alt 1) MSX
|
||||
0C364C3499DF76F2E15D2AEB744A0DE3730FF47B Champion Pro Wrestling (Japan) (Alt 2) MSX
|
||||
821C611B851DDD4CF8CFB4E77CECBC882F12EB72 Champion Soccer (Japan) MSX
|
||||
650381B96F36E74A4EAF5AE3F924F6F8DEAC7100 Championship Lode Runner (Japan) MSX
|
||||
A4BE5763CDF2DCD647B87E3AECBAB28ECC69776E Checkers in Tantan Tanuki (Japan) MSX
|
||||
DD5C2D2D5F0947159B7615F647FB8121F3B037A2 Cheese (Japan) (Program) MSX
|
||||
2C0C71C549738D668518DB317DD70AECEFD4AA72 Chess (Japan) MSX
|
||||
20AEB411AB5ADB9BD3DB412A7837E496969F8CE3 Chess Game, The (Europe) MSX
|
||||
A2A7C93C9C8B55A5CCE4C9005F3C194E3B762E9C Choplifter (Japan) MSX
|
||||
30673D173F96FE1830E579F18DAF8AC9FC3366CB Choplifter (Japan) (Alt 1) MSX
|
||||
B3CA70C8C8120F8261BB865BAF5F57B6506CA02E Choplifter (Japan) (Alt 2) MSX
|
||||
99F9E9753EDBAEE820E36A1A58F1CD7AE2B26265 Choro Q (Japan) MSX
|
||||
EE3CA231328534BBA92F9A908C4FAED865BCEA68 Choro Q (Japan) (Alt 1) MSX
|
||||
20CE189D670C0FE5F2A945D73107DF7D83070FF7 Chugaku Hisshu Eibunpo 1 (Japan) MSX
|
||||
AE6D0EFD55DEF94274F4CEC459DF8927D132675A Circus Charlie (Japan) MSX
|
||||
07AF8B1EC0786C44778F68EF3BB0B3D4793F42E3 City Connection (Japan) (Alt 1) MSX
|
||||
0071B2EB214FF002DBBB7532653585B35B56F243 City Connection (Japan) MSX
|
||||
308C73FC04C3B390B72EA8D4980C94C74BA38A5C Coaster Race (Japan) (Alt 1) MSX
|
||||
17F24B9339291DEA40D2ED36517F223B9E4F49E1 Coaster Race (Japan) MSX
|
||||
47EA8D512D9FEC15DF8770F3B5017AEA9BBBA9FD Coaster Race (Japan) (Alt 2) MSX
|
||||
AC391FE51F69E0A55FE3AB66C8EC3F2792DD5D08 Color Ball (Japan) MSX
|
||||
83FDAA429AD8B155AB2328A72FCB8DE642FF5615 Color Ball (Japan) (Alt 1) MSX
|
||||
95D8A590BAD595F9441AEA4BF68667DE05B1B34B Color Ball (Japan) (Alt 2) MSX
|
||||
9B4DA7636809D5690D6BD5D782FFA3CF9F4C63EC Columns (Japan) MSX
|
||||
1CF39E12313FF3064353C136262F176A56AB20A6 Come On! Picot (Japan) MSX
|
||||
546AAF36EE78717FE06125185F0D420FDFF0D34C Comecocos (Spain) MSX
|
||||
A054DDEAF471212764CC596BCBD30E94B10E6C28 Comet Tail (Japan) MSX
|
||||
FC327D3946366CA75DE0D0619EB0917A27E1BD61 Comic Bakery (Japan) MSX
|
||||
D2604A1F76CADD36EDE570E23AD49B0885187E25 Comic Bakery (Japan) (Alt 1) MSX
|
||||
8CF06F93D4E8BCF7BE04AE8532F72E6EEC8BA2F1 Comic Bakery (Japan) (Alt 2) MSX
|
||||
630AEC6F93DF8D1EF83C52A0BB6EC571B9C6EED4 Computer Billiards (Japan) MSX
|
||||
1FC9D3B54A617E57FD6ED10F2CE3C01456710E37 Computer Nyuumon - Computer Lessons (Japan) MSX
|
||||
BD8F335FC45E9920F0691A525A0FC853B2E4B595 Computer Othello (Japan) MSX
|
||||
81C50AF8EF09E0B7A8A69FD4715592B5E803CDB5 Computer Othello (Japan) (Alt 1) MSX
|
||||
99D3EF107F2AC4D452B05EB96B922924EF4C5434 Computer Pachinko (Japan) MSX
|
||||
09CC29B413DC7B8747420615BF798169AE68AD14 Con-Dori (Japan) MSX
|
||||
868D84F8A6AE0434BF86ADFBB86996CEDDEFBA84 Con-Dori (Japan) (Alt 1) MSX
|
||||
8592B14EE701EAAF433113A26B199084C124992F Con-Dori (Japan) (Alt 2) MSX
|
||||
9865F0BC4D54137809F0D8B48D5461DDF0C5BF4C Confused (Europe) MSX
|
||||
5AD0BA434407A7EEECB597B3D20BCFC6FE05C319 Cosmo (Japan) MSX
|
||||
BB7468DD32A160851B39121D24713B0B4E065C19 Cosmo (Japan) (Alt 1) MSX
|
||||
0AC6C061C3897A3989DCD75B4878C850C71E4BB8 Cosmo-Explorer (Japan) MSX
|
||||
B6F8E1431BDA1296C2959B10B021B80E0FF2A8A2 Cosmo-Explorer (Japan) (Alt 1) MSX
|
||||
613CC52FBD5822ADE47DAA3EC21479641A009C2C Courageous Perseus (Japan) MSX
|
||||
6CF3F098D592D7DCB767A0E24B5CAF327B5F22DB Courageous Perseus (Japan) (Alt 1) MSX
|
||||
9E0312E72F30A20F556B64FE37DBBFE0D4471823 Craze (Japan) MSX
|
||||
FF5B12275950EDAE9ECE3F49ED59402D47F23B1B Crazy Bullet (Japan) (Alt 1) MSX
|
||||
5D5DFE6CEC605DE421C3AED3A743D6840FEC1457 Crazy Bullet (Japan) MSX
|
||||
76C191BF7DCC0888D65E543C47F615AE45B75B92 Crazy Cars (Europe) MSX
|
||||
8ACA0EE5845B0B39AF624E8A998BB04F02D0FDA4 Crazy Train (Japan) MSX
|
||||
31B452FF42624C6AC1E0141D65869DF1EABE5BB3 Crazy Train (Japan) (Alt 1) MSX
|
||||
BB902E82A2BDDA61101A9B3646462ADECDD18C8D Cross Blaim (Japan) MSX
|
||||
C6F090882886DCF783E5B65BFF75C5E034FBB2EB Crusader (Japan) (Alt 2) MSX
|
||||
3D2D0A2EB3D12FA67ECBBB90B7AC1BDC76AD8412 Crusader (Japan) (Alt 1) MSX
|
||||
D0E8BC3F5FD93DCD07CBB945B00018A491842242 Crusader (Japan) MSX
|
||||
18E87E15B09EC2FDDC52FAD10EDC57918FADEC34 D-Day (Japan) MSX
|
||||
BA325451FB5A80C2872742C5BD61E7BB75C5763B D-Day (Japan) (Alt 1) MSX
|
||||
C62E058C2A54F3C9ADBA2E6A3006B8E749C43BD7 D-Day (Japan) (Alt 2) MSX
|
||||
0BA8AE697F3045B3B3175B27D00AC0E522288FF1 D-Day (Japan) (Alt 3) MSX
|
||||
27A487E56721E947C1F46644F2F8A50156DDA82D Daidasso (Japan) MSX
|
||||
2418C0302ABBCE8B0F8556B63169C60A849F60EE Daiva Story 4 - Asura's Bloodfeud (Japan) MSX
|
||||
D8C074267E0B2EC225D5ACBA688EA7304233DA13 Dam Busters, The (Japan) MSX
|
||||
0738FEFA62BE2ACBD0F324F28538BBA9551406AC Dam Busters, The (Japan) (Alt 1) MSX
|
||||
6A4E8325D2174747D56CBE4C6803CBF40EB40A62 Danger X4 (Japan) MSX
|
||||
7C618058809302BC3553D6189BCF310F2E5B0E08 Danger X4 (Japan) (Alt 1) MSX
|
||||
50EAFA5D735AF5B34D14F9F6B8C2D9CD2F0441DB Danger X4 (Japan) (Alt 2) MSX
|
||||
4B19979E01BAB2289ABB6034CB3C2D02C2E890D1 David II (Japan) MSX
|
||||
6856A13B67750D36C4C466D30472DC5465879BBF Dawn Patrol (Japan) MSX
|
||||
A1656F612360A126E09EF2BAAA8002D92054125D Decathlon (Japan) MSX
|
||||
5D43CB6CA89F31D5F543E4DCD3FA9987B9769602 Decathlon (Japan) (Alt 1) MSX
|
||||
E6419519C2D3247EA395E4FEAA494A2E23E469CE Deep Dungeon (Japan) MSX
|
||||
D82135A5E28B750C44995AF116DB890A15F6428A Deep Dungeon II (Japan) MSX
|
||||
6BAD9AF91907C2A97FA2F4B9DD2A699CE0D70FBA Demon Crystal, The (Japan) MSX
|
||||
D5B164797BC969B55C1A6F4006A4535C3FB03CF0 Demonia I (Europe) MSX
|
||||
4B4A58A310A1138B95192D7FE0881BBDC45601D4 Designer's Pencil, The (Europe) (Program) MSX
|
||||
91BA5C063D0ED383165B26E4609D7ABDA02A5242 Devil's Heaven (Japan) MSX
|
||||
6E2E5CFF4EE4DD935FBE6684F2C54B39ECA06092 Dig Dug (Japan) MSX
|
||||
E3391DAAB17710B3F34C70F60AC6C8BFEA15B6CC Dig Dug (Japan) (Alt 1) MSX
|
||||
7DC7F7E3966943280F34836656A7D1BD3ACE67CD Digital Devil Monogatari Megami Tensei (Japan) MSX
|
||||
03B42B77B1A7412F1D7BD0998CF8F2F003F77D0A Digital Devil Monogatari Megami Tensei (Japan) (Alt 1) MSX
|
||||
65F89C813A1D57A8F8A04E81682202F759EE6980 Dip Dip (Spain) MSX
|
||||
6B12BB291E1A98A43CCFF8CEB94D23585848FEBC Doki Doki Penguin Land (Japan) MSX
|
||||
23531B4E8A2B3E975483318846CF89E65F32F7D1 Doki Doki Penguin Land (Japan) (Alt 1) MSX
|
||||
F8FEEAC4384BC4F109C70F962E15CE925BF70C13 Doordoor (Japan) MSX
|
||||
19C610339C0480C3D2D0D1C21E3CCBF2179BB191 Dorodon (Japan) MSX
|
||||
6724B2ABCE8145609333C8B2964DE0F1A90D9CD5 Double Dragon (Korea) (Unl) MSX
|
||||
6E6B8CDC55713EABC724F3EC9624E9884254AB33 Dr. Copy (Japan) MSX
|
||||
533DC6D28CA60C090740879DCB3CFA386544EE45 Dragon Attack (Japan) (Alt 1) MSX
|
||||
761AB0AA7F528BF0F51EA9DE75C847EA949478D7 Dragon Attack (Japan) MSX
|
||||
7B94A728A5945A53D518C18994E1E09A09EC3C1B Dragon Quest (Japan) MSX
|
||||
3DF7C19F739D74D6EFDFD8151343E5A55D4AC842 Dragon Quest II (Japan) MSX
|
||||
D7B46AECE68C924E09F07E3DF45711F337D35D6A Dragon Quest II (Japan) (Alt 1) MSX
|
||||
397716D26A075C6D731F0B04F3FA24AA39521798 Dragon Slayer (Japan) MSX
|
||||
6C1814C70D69A50EC60E39EF281F0B8CD7BF8598 Dragon Slayer II - Xanadu (Japan) MSX
|
||||
F100A76117E95AB0335E89A901E47D844BBC0AB6 Dragon Slayer IV - Drasle Family (Japan) MSX
|
||||
2F0DB48FBCF3444F52B9C7C76BA9C4BD38BC2A15 Dragon Slayer Jr. - Romancia (Japan) MSX
|
||||
E34161034364EF03DF907D62976C2AC8F551404F Drainer (Japan) MSX
|
||||
9B815EFAA927C11827ACFDB0F9B9197B5AC97572 Druaga no Tou (Japan) MSX
|
||||
D1FBDBDF2E830139584D7DC796806AA3327720DD Dungeon Hunter (Japan) MSX
|
||||
353E2BD901E5502375DC92A04E1686C1192FCF42 Dungeon Master (Japan) MSX
|
||||
F63D274A8A7AD8E285DD8800264AB9C14AA9F870 Dunk Shot (Japan) MSX
|
||||
E7D9D1E4DCF48779DAB41EB6C15478F934BD8BC1 Dunk Shot (Japan) (Alt 1) MSX
|
||||
C20DEF84EFE71EFDF91DF3100919D151B2E7BDC1 DX7 Voicing Program (Japan) (Program) MSX
|
||||
D7109CF20A22558F923C833FF0B4E2311340ACB1 Dynamite Bowl (Japan) MSX
|
||||
D916F0E4BD3C829A0472C6EC18D08907A5C991F3 Eagle Fighter (Japan) MSX
|
||||
83FED4090D0942C8E0054437745C1C0EBEFC6222 Eagle Fighter (Japan) (Alt 1) MSX
|
||||
28BF2354CDD70E30B682F40B734029ECE44D70BD Eddy 2 (Japan) (Program) MSX
|
||||
20F1883C45FC3C39DDF48A7DE69B6EF588FAC8FB Eddy 2 (Japan) (Program) (Alt 1) MSX
|
||||
E49F66E8BA45D0647C93A57BBC1FB7ABA4665A6E Eggerland Mystery (Japan) MSX
|
||||
473BC0EA85ED1B218974796D819416E711AC193F Eiwa Jiten - English Japanese (Japan) (Program) MSX
|
||||
6CBDDD118AFE63E79CB8A40F8AA879DF1C7590E1 Elevator Action (Japan) MSX
|
||||
7DE755F98B6A68886E61473D524D0AA6AB6577D7 Erika (Japan) MSX
|
||||
7F6906FF7017A558952197198AC7A1C1E222ED9D Exa Innova (Japan) MSX
|
||||
A14B357A1B16163F5FFA96B0B617D352713AC047 Exa Innova (Japan) (Alt 1) MSX
|
||||
B5B28F53B16D43742D9D7DAF5EE7DCF74B80E6C8 Exchanger (Japan) (Alt 1) MSX
|
||||
DED8D969542B7BE02524037FA244E6648C3F4E03 Exchanger (Japan) MSX
|
||||
8ECC34EBFF9D37C0FE9560CFDC53A052CFF3D1AB Exerion (Japan) (Alt 2) MSX
|
||||
975FDF521C08030896EB50AF4F39A23500EAF7AC Exerion (Japan) MSX
|
||||
09B0EA7C5595F4E9C9A15219F30E3423BBC25F66 Exerion (Japan) (Alt 1) MSX
|
||||
2B36FE2B0D98D65AB31F13FCB858DB6858A51D46 Exerion II - Zorni (Japan) MSX
|
||||
AA1621A6B61F7CFB2DF8DD2CF8647A943E13DFA7 Exerion II - Zorni (Japan) (Alt 1) MSX
|
||||
3137E676C37195D46FE6ACC4395D0DC4D711D919 Exoide-Z (Japan) MSX
|
||||
06BFDD6D0F0D84B1D534C81B27150193969168B3 Exoide-Z (Japan) (Alt 1) MSX
|
||||
91BEE8AF612F69C5413A1D23102CC5EA896C2CAA Exoide-Z (Japan) (Alt 2) MSX
|
||||
22C7ABE6C8F4B7897ECB583D4913D35B5F62C5E1 Exoide-Z Area 5 (Japan) MSX
|
||||
42FBB18722DF3E34E5B0F935A2DC0CE0D85099E9 F-1 Spirit - The Way to Formula-1 (Japan) (Alt 1) MSX
|
||||
FF72A1788D47F9876D9FABD720F6A289FB409090 F-1 Spirit - The Way to Formula-1 (Japan) MSX
|
||||
5C7A13B64B48065231F05C35B4C8B209534F3A8B F16 Fighting Falcon (Japan) MSX
|
||||
A469935DD39A856C06676817F51B403A3678AC1A Fa Tetris (Korea) (Unl) MSX
|
||||
EDD61208E11149E226CD2EDDF5C9ECA8EE1BA33E Fairy (Japan) MSX
|
||||
E11AFC03DB4E1D03976D02796B29DA9C65D4FF3D Fairy Land Story, The (Japan) MSX
|
||||
2BB837A9051277BA574D8351A9F91F9E57033074 Fairy Land Story, The (Japan) (Alt 1) MSX
|
||||
216243B4BCB9070F9E86C3F04EDAAA493E4B459C Family Automation Language Community (Japan) (Program) MSX
|
||||
8557DCDB4CF1E15180D17ACC8E6D515BF7BF7E7C Fandom Library #1 (Japan) MSX
|
||||
7752B6624FB80D9499AAAD28DD5776EC74565576 Fandom Library #2 (Japan) MSX
|
||||
C2F4DF1BD91F7DEE1536774B9D7089086B9BF835 Fandom Library #3 (Japan) MSX
|
||||
048737F995EECB1DD8DD341D750EFD005267796F Fantasy Zone (Japan) MSX
|
||||
E6B71484D5AB578FD3695917FCE3C1E805A5B536 Farm Kit (Europe) (Program) MSX
|
||||
AE52922A197A2F47C7FC4ADF9DBFDE13C136ED14 Fathom (Japan) MSX
|
||||
43DBCC9536FE61C8172ECEEEC1481778F7A2B9BD FB-01 Voicing Program (Japan) (Program) MSX
|
||||
D833C66DD541239908555762E04BCBB22BCA748A Final Justice (Japan) (Alt 2) MSX
|
||||
9BCA89C71C033BB9A85EE30CF75960EC839C0462 Final Justice (Japan) MSX
|
||||
1E70296A07A5FF62D01E5115B8C8B87F891585C9 Final Justice (Japan) (Alt 1) MSX
|
||||
D086280DEA7FB10FABAAE26ED9D404BBE69C70C4 Final Mahjong (Japan) MSX
|
||||
A553C3F204C105C23B227A1E5AEB290671CCDBEB Final Zone Wolf (Japan) MSX
|
||||
0889CA383BCF24198DB1FB2DD23DEA1BF8C18BE8 Fire Rescue (Japan) MSX
|
||||
EC0320EDA10BF6BBEE8081F6672A7BF9D858C1BB Fire Rescue (Japan) (Alt 1) MSX
|
||||
40C626D8C53E2E2D4E7E25D55AA2C11C2645780F Flappy (Japan) MSX
|
||||
6F391D0408223138B7927ED719D7AC1B6C38CA0D Flappy (Japan) (Alt 1) MSX
|
||||
46F3954D7F92F5D00F45B82FDDE543C28A4B53C9 Flappy - Limited 85 (Japan) MSX
|
||||
DE95B99DFFEAB5C2B453778DBDC8723DC15CBFD7 Flash Point (Korea) (Unl) MSX
|
||||
A3FC0A55A91ED0041221F8DA788D824D9D795913 Flash Point (Korea) (Alt 1) (Unl) MSX
|
||||
60F685670DE6D2D8ED5F1B1DDD40FAC851FF1982 Flash Splash (Japan) MSX
|
||||
5999CC1407AFE5BA8A760F16178C4CAC9C3FA192 Flicky (Japan) MSX
|
||||
7BF28813FB11E9DB3BF78CC73EE5FB2D76B547DE Flics, Les (France) MSX
|
||||
3EEE7C72362522C27866D4367A8CF1E22932DB32 Flight Deck (Japan) MSX
|
||||
488F01314DA5644FBF2CA938C6F9720EF2B0D0F9 Flight Deck (Japan) (Alt 1) MSX
|
||||
453EAC7568D5D04C8CF7DA86F2E8DC79777343DA Flight Simulator (Japan) MSX
|
||||
3377D2017CC8433FA20B432C9D2328C53BBC10E6 Flipper Slipper (Japan) MSX
|
||||
49BFA9871BB0AD3B47A7C63B14A10E0E8AE48A52 Flipper Slipper (Japan) (Alt 1) MSX
|
||||
39C12004ADB3442F2C43AADE8A0BE420D59EEFB1 FM Music Composer (Japan) (Program) MSX
|
||||
E60E2ABF907B66F5B275C7B7B710439ADAE58D37 FM Music Composer II (Japan) (Program) MSX
|
||||
7C2743DF543C0D8A4BA7E42BF7DB580B996D102E FM Music Macro (Japan) (Program) MSX
|
||||
9D789166E3CAF28E4742FE933D962E99618C633D FM Pana Amusement Cartridge (Japan) (Program) MSX
|
||||
E4C8F3B87D755C21572040C51CEC1431AE59A0BE FM Voicing Program (Japan) (Program) MSX
|
||||
C0D33B513704ADC56718B1F56C1062718683C77C Formation Z (Japan) MSX
|
||||
CE01AFE30DA38DC58994C8264070195E1CD921B8 Formation Z (Japan) (Alt 1) MSX
|
||||
A194B845857C8B33EF4FD5E53D7F38150B4FA4CF Frogger (Japan) MSX
|
||||
D8E9FD3E9420BCBB1DD530FDA1E9C718AA08D8E4 Frogger (Japan) (Alt 1) MSX
|
||||
64AE3ACDCE06D1B41E23EE2730797FD7E472BDDF Front Line (Japan) (Alt 2) MSX
|
||||
883537F12814EE63C48A0AB744383F8D8E6A5CA2 Front Line (Japan) (Alt 1) MSX
|
||||
EC54E05A6F784F9C616C94AB8D57E5D2647ABC66 Front Line (Japan) MSX
|
||||
A41E43FA3C64D776831451C35FE8BDEE58625041 Fruit Search (Japan) (Alt 1) MSX
|
||||
A27EB9CD77837C1E443E275D0E10888E0FD248F4 Fruit Search (Japan) MSX
|
||||
E7657D8070399D8E4D65308B356E110D83D23151 Funky Mouse (Japan) MSX
|
||||
138A2D56237AEA915BAAEF85E69425A658506CFB Futbol (Spain) MSX
|
||||
53337B61D7B86E6D18501967FCFC0908A00CC55C Fuun Takeshijyou (Japan) MSX
|
||||
FAA5AEF23FEBC61A875E28EEBE3AADF83E1F5BA7 Galaga (Japan) MSX
|
||||
2A34F0221193712C43F336F08D2A6E58A1A8974A Galaga (Japan) (Alt 1) MSX
|
||||
25308EBB33FD87A7F6A8E61868D3DCDE3BD622C5 Galaga (Japan) (Alt 2) MSX
|
||||
95F36CF00CEE3DB55940EB60CD39412226A99E94 Galaga (Japan) (Alt 3) MSX
|
||||
692FD8A85978ADAFBB530510FFF71848F39D4FBD Galaxian (Japan) (Alt 2) MSX
|
||||
AA2BA89E0B1C91A4405F516EF003AD14A401096C Galaxian (Japan) (Alt 1) MSX
|
||||
E2ABB08ABACCE57703FC008881279890328F6277 Galaxian (Japan) MSX
|
||||
E8AB46785E75E19DAC497C4A82AC2F5B37AC0580 Gall Force - Defense of Chaos (Japan) MSX
|
||||
3425EEA336140DA03D7D7F09A94FD928D70E2212 Gall Force - Defense of Chaos (Japan) (Alt 1) MSX
|
||||
ABE52920E895C148851649ECB9C029FDC41A275F Gall Force - Defense of Chaos (Japan) (Alt 2) MSX
|
||||
89073C052B0FE29B6DE077C8BDF5373474081EDF Gambler Jiko Chuushinha (Japan) MSX
|
||||
39FFAACD0C2875018E7673A887A921FE9D31D6DC Game Land (Japan) MSX
|
||||
4FE90868376704336FBF45619A47CE18736FF1B2 Game Master (Europe) MSX
|
||||
70BA2331844BD5C14906E9F2284EBA119B3E41BF Game Master (Europe) (Alt 1) MSX
|
||||
9648D43F3C25D67B9E4972F777D7B02470080D1C Game Master (Japan) MSX
|
||||
ABCE0B855D67AC10BC667E0F23CEAB4A12FFEEE6 Game Master (Japan) (Alt 1) MSX
|
||||
FE74B4DF9698A61DFFD3AC88F47619675514BA1C Game Master II (Japan) (Alt 1) MSX
|
||||
5C00F9E3A48411E08FAC89B1DFDD2A6E95853919 Game Master II (Japan) MSX
|
||||
B2CCA92B7A51A43C310E58E011F3EDE1E7125A96 Game World - 126 Games (Korea) (Unl) MSX
|
||||
1CE1EBBB0F62224AA776C4523E2EF708154E7B52 Gang Master (Japan) MSX
|
||||
0CB11C766BD357D203879BD6BEE041A4690CC3DF Gate of Labyrinth (Japan) MSX
|
||||
12B3C31F0FD10FF5823DCC8BF6DFEB785A8AF2F7 Genghis Khan (Japan) MSX
|
||||
BA30AD98A8488BEC6D0C661F7B859BEB2FE219D1 Ghostbusters (Europe) MSX
|
||||
310AB424EDF15D5399E31FDBC1230DDCDE307D1A Glider (Japan) (Alt 1) MSX
|
||||
3A46902D265D98B27BFF3A34160DE1C7EF4F116C Glider (Japan) MSX
|
||||
2DACF7A08857CBDC706D24B4A46665113D16FF99 Gojira vs 3 Daikaijuu (Japan) MSX
|
||||
83FBA43371D8D3C50A97C96923E52B40DF2A7816 Gojira vs 3 Daikaijuu (Japan) (Alt 1) MSX
|
||||
8BD874AA854CC26D7FC48E7D2DE60DBBEE681721 Gojira-kun (Japan) (Alt 1) MSX
|
||||
D6B6CB3D85B991F8ADF2E07A0E8E74B586741D12 Gojira-kun (Japan) MSX
|
||||
30E3681BE376A76CF9E0F89E54555A7631759E15 Gokiburi Daisakusen - Bug Bomb (Japan) MSX
|
||||
69BDA8B4A96187597B95CD5C43E58DA0716D0FC8 Golf Game (Japan) MSX
|
||||
7A4126934F9E68C34BF00DD3D9A9E753C05EE73F Golvellius (Japan) MSX
|
||||
AACAF2E694A1C05F2EF20A8CE6892242C0F88919 Gomok Narabe - Omo Go (Japan) MSX
|
||||
6F0F61285BE1158ECF2E5393619187F26A7395BE Gomok Narabe - Omo Go (Japan) (Alt 1) MSX
|
||||
B1248F7B9D4E16A894555C51C533D3FD9A90802E Goonies, The (Japan) MSX
|
||||
B7B4D5C83D8C336DBFE32833BBA974CEA7F0CB8D Goonies, The (Japan) (Alt 2) MSX
|
||||
250D0D6E646EAE4817802C49E367AD8C1C35A462 Goonies, The (Japan) (Alt 1) MSX
|
||||
EADF124B91B996B890B1AE84B75B21EE6568D1F3 GP World (Japan) MSX
|
||||
3EA788262557F578B25E4E36E61C1CF9FB1155D1 Green Beret (Europe) MSX
|
||||
ACD46021A228B2B612C82D04C124B78E7D4C25E3 Green Beret (Europe) (Alt 1) MSX
|
||||
32615267E8497DB3F5E6F5348EE309E73C80A1A7 Grog's Revenge (Japan) MSX
|
||||
04325BFE5BC20A8F6D086933D138FB92CA200111 Grog's Revenge (Japan) (Alt 1) MSX
|
||||
5E28FA0CD90BCFB7995ACB025A22F6F556CCAC08 Guardic (Japan) (Alt 1) MSX
|
||||
67BAAAA870AD4A08F55EC1C67DBEABC97B6F18A0 Guardic (Japan) MSX
|
||||
CA5F14925A7D33D83DC581BBE2FF5258389BFBA7 Gulkave (Japan) MSX
|
||||
E90B579AC64798343ABB635FCBF929E83714312A Gulkave (Japan) (Alt 1) MSX
|
||||
445963FDDFBD0487ADDAF4B0AD620520E426A1D2 Gun Fright (Japan) MSX
|
||||
F2EC3714138175212B6B6E28B5DA4361CC4B5471 Gunjin Shougi Mars (Japan) MSX
|
||||
99A8631CDC37F0DD9D8793EA8EADD3F34E0BBA51 Gyrodine (Japan) MSX
|
||||
EBB70722F75279911CCE79E6BD78B8F514561B0F H.E.R.O. (Japan) MSX
|
||||
FCC6B6B9F05DE409492A1FB988FA671E46D54196 Hades no Monsho (Japan) MSX
|
||||
1804CFBC4F175136B7B934B575D49CBC0E726FFE Hades no Monsho (Japan) (Alt 1) MSX
|
||||
301EF3C728041EB1DFD89227A901C32EB000D348 Hafanuda Koi Koi - Gostop Godori (Japan) MSX
|
||||
44B23A175D04CA21236A5FEF18600B01B12AAF4D Haja No Fuin (Japan) MSX
|
||||
5370B7746112621169D503BBEC2E7FC526279F53 Hanafuta (Japan) MSX
|
||||
26FC48DDACA0FEDC90FC151D4ECD5CA6D1CCC77B Hang-On (Japan) MSX
|
||||
A67E699EDB471C35A217A5C3E6831C6CDB0EABE5 Hang-On (Japan) (Alt 1) MSX
|
||||
7F086CC2CA0C35BF599F48C2D5E901E89411239F Hang-On (Japan) (Alt 2) MSX
|
||||
8F35C41A5235DEC22C3B99CD6DD63CFDA0A7A821 Harapeko Pakkun (Japan) MSX
|
||||
A3DE07612DA7986387A4F5C41BBBC7E3B244E077 Harryfox MSX Special (Japan) MSX
|
||||
3626B5DD3188EC2A16E102D05C79F8F242FBD892 Harryfox Yki No Maoh (Japan) MSX
|
||||
15345C8745028C96FC79036B2E3E180AD2F62DAB Haunted Boynight (Japan) MSX
|
||||
69BC7CB436EA2EA3A6B49C3B050BAE24271A2F9C Heavy Boxing (Japan) MSX
|
||||
0FA2BB1EFFEFDE0861FE53A38FF5B56A6A320C80 Heavy Boxing (Japan) (Alt 1) MSX
|
||||
20191B437958E990D14660F476C340E140236C70 Heist, The (Japan) MSX
|
||||
6844DDF610E1A98B55E77FCC364B38A037751A2B Helitank (Japan) MSX
|
||||
F72681F09B52D530EC905E8DF21C4A15E30201AB High Way Star (Japan) MSX
|
||||
C0FA7D53B3E66BD1E1680BB135DB8F74ABBAC52E High Way Star (Korea) MSX
|
||||
3C2295FB9FC9F1B6A607A74F4538E24D170522E5 Hisya (Japan) MSX
|
||||
BBCA0B00374BA5366BA53B380285D38857450A7D Hitsuji Yai - Preety Sheep (Japan) MSX
|
||||
C344ED78465203E12143BD9889281BA981A195E4 Hole in One (Japan) (Alt 2) MSX
|
||||
2F8416D9CCE6587ABA4B71B1D3E3B626609CE7ED Hole in One (Japan) MSX
|
||||
4F73D4B731B8309145B2A9BF9C37620E4F4A391C Hole in One (Japan) (Alt 1) MSX
|
||||
F3952B790AE2A8A1434B52BF816C56C9E680F73E Hole in One (Japan) (Alt 3) MSX
|
||||
BB75492C6EBBBF1827B3695F70E481D65487DA44 Hole in One Professional (Japan) (Alt 1) MSX
|
||||
A55617157C5D89DB5900654B641E757A37FECD1A Hole in One Professional (Japan) MSX
|
||||
F29CAC37C5001DDC752FF4A0B9CC51A965906DA8 Home Calc (Japan) (Program) MSX
|
||||
CC06D65A9ABA634E3AD75675B960140932506FFE Home Writer (Japan) (Program) MSX
|
||||
F27721CF9EC316EA3B18233F699FEBF739B25678 Honkball (Japan) MSX
|
||||
DD9A41E4C8802CD4BBB87E30281711F4E7AE017F Hopper (Europe) MSX
|
||||
E904EFABC5A75840C50EA7EDB07052683468A64A Hudson 3D Golf (Japan) MSX
|
||||
27847B02D2ACBEBAB61F2F05BD2FFF0C2291A09D Hudson 3D Golf (Japan) (Alt 1) MSX
|
||||
E06ED9B0B3E1FBB9F27BE65C37B4D9B548889B4F Hustle! Chumy (Japan) MSX
|
||||
86E688CEA0F0C8BCD31B6BCD19FD72AC108646BB Hustle! Chumy (Japan) (Alt 1) MSX
|
||||
9DCB43B654A08DE2C52147F4A2E628B5FE3761C8 Hydlide (Japan) MSX
|
||||
74E9EA381E2FED07D989D1056002DE5737125AAF Hydlide 3 - The Space Memories (Japan) MSX
|
||||
A3537934A4D9DFBF27ACA5AAF42E0F18E4975366 Hydlide II - Shine of Darkness (Japan) (Alt 1) MSX
|
||||
DA4B44C734029F60388B7CEA4AB97C3D5C6A09E9 Hydlide II - Shine of Darkness (Japan) MSX
|
||||
56C4813AC549AF8711B2E2E42D7DB1B960C4C040 Hyper Olympic 1 (Japan) MSX
|
||||
CC9A82898DA39E5CFEB0400006D093D3B869F28C Hyper Olympic 2 (Japan) MSX
|
||||
14393568469C74BD6F8BE7770149DB19F0553AB6 Hyper Rally (Japan) (Alt 3) MSX
|
||||
D1A7CBAFF354B59003F0E297723B912CB6AD0B36 Hyper Rally (Japan) (Alt 2) MSX
|
||||
3B13E164130CAB9B36C1A95E06F8D9FD707FC97F Hyper Rally (Japan) (Alt 1) MSX
|
||||
7DFE091E02F6C1B21BD65E44EB5052D564D0EF92 Hyper Rally (Japan) MSX
|
||||
9CAB6A793E39076E3F598AA54BFFD5585DDC7E3E Hyper Sports 1 (Japan) (Alt 1) MSX
|
||||
2C85B993671DE612E9338D094565A4EB32A97EA0 Hyper Sports 1 (Japan) MSX
|
||||
9002AA0B2D49A9FC323180487FF591781867A99C Hyper Sports 2 (Japan) MSX
|
||||
AF4E0490C178A18A47B34831FB5E3CF8B61D34D9 Hyper Sports 3 (Japan) MSX
|
||||
6842FB21ABB2531C17FE0687D77E012348D3DC2C Hyper Sports 3 (Japan) (Alt 2) MSX
|
||||
EC76D4D9B61BDBDE9A4B5BE082DBDAE96321A591 Hyper Sports 3 (Japan) (Alt 1) MSX
|
||||
167B226B54CC5B681A69D2C1509116FFABA868E4 Ice World (Japan) MSX
|
||||
F629B8F7133C3442D0371A4D84275FB2E0974854 Iga Ninpouten - Small Ninja (Japan) MSX
|
||||
F52113B45062ADC75CF7A0ED0538B3A07696CC24 Iga Ninpouten 2 - Small Ninja 2 (Japan) MSX
|
||||
AA68633FF1AFD385535B2ABD7C8756B6CF79256A Indian no Bouken (Japan) MSX
|
||||
95AE5B3E24AD0BEA21902CB7DFD3FD9581166A76 Iriegas (Japan) MSX
|
||||
8AA6D0AADF00DE9112696DA5B7DC6E3B62F2D9BE Iriegas - Theseus (Japan) MSX
|
||||
ED1F7342B9B26EC02CA2D584570D75F925167EA1 Iriegas - Theseus (Japan) (Alt 1) MSX
|
||||
14451B2931A014E949A4B3D2973D424D910E0D9D Issunhoushi No Donnamondai (Japan) (Alt 1) MSX
|
||||
02A2FAFC7B9249DB76803ECE347BA73BE25F71B5 Issunhoushi No Donnamondai (Japan) MSX
|
||||
2391AE8C961B4A38B3BEAEE9ED3362FB2C71851F J.P. Winkle (Japan) MSX
|
||||
6FEFBE448674B6EA846D0C6B9C8A0D57A11AA410 Jagur (Japan) MSX
|
||||
1AEAE1180471E9A6E8E866993031B881A341F921 Jagur (Japan) (Alt 1) MSX
|
||||
ECC68B4A042794424DF771A3336361FDB50D0875 Janka (Japan) MSX
|
||||
4180544158A57C99162269E33E4F2C77C9FCE84E Japanese MSX-Write (Japan) (Program) MSX
|
||||
CB352E97E9416F4C3032118758FC77D6D0F3AD73 Jet Set Willy (Japan) (Alt 1) MSX
|
||||
45B5B0E9DD8D11D034E09803F92EC9720CDA1E3C Jet Set Willy (Japan) MSX
|
||||
F99919C8F42ADDB7F65AB4FB21B603EE7E716C90 Jigsaw Set (Japan) MSX
|
||||
EBDE4D61184438175DB424FDF25CEC238D91A15F Jissen - 4-nin Mahjong (Japan) MSX
|
||||
765413BB6B03BC3BB888EE8FE00B99EF69C1317A Jisyo Data (Japan) (Program) MSX
|
||||
5CEEDD2AE401FEBB79C1F6A64DDEF4B2E1790674 Joytelop (Japan) (Program) MSX
|
||||
39EF139D8D66FB18B04DFF8B9A5386011F497479 Jump (Japan) MSX
|
||||
A53D1EA775A6C90A84F1F36349540B16CF8307E4 Jump Coaster (Japan) MSX
|
||||
0B3A217D3278A43D7460136F955171C762A1F8E5 Jump Land (Japan) MSX
|
||||
B5CDEF44B22C7E234895B053E487233C117D1A4F Jumping Rabbit (Japan) MSX
|
||||
A70C6B0E90E7B8BA3E5BC06C9AE7D6AF344E491F Juno First (Japan) (Alt 1) MSX
|
||||
846BD4D89BD034AC5346CBC559752635AD2BDA6B Juno First (Japan) MSX
|
||||
4991DC097E248436506ED5C8BC3F367A65267EE7 Jyan Friend (Japan) MSX
|
||||
17E1111B1D6AA80E8BC525BE345C25E3B00ED504 Jyankyo (Japan) MSX
|
||||
666E82D8A8E5D2672A9B7159ADCDC861A31C8FA1 Kage no Densetsu - Legend of Kage, The (Japan) (Alt 1) MSX
|
||||
FFC8C57B26F2F495BD77EFAC5B815EFE9C25336C Kage no Densetsu - Legend of Kage, The (Japan) MSX
|
||||
632EF250C76B222158BA90DFC68B9E004DBAFE3A Kakikukekon (Japan) (Program) MSX
|
||||
223337DB25C942ECE732214ABA5DD624B574E9C4 Karamaru (Japan) MSX
|
||||
1C462C3629D43297A006BA9055B39A2DCCBA9F6C Karuizawa (Japan) MSX
|
||||
09779F0E9EC0C36EE3700690E2B6E282A4B40A0B Keiba, The (Japan) (Program) MSX
|
||||
3D5160331BEB1C5CC54BA6ECEF6B3CE2FF4660B6 Keystone Kapers (Japan) (Alt 1) MSX
|
||||
FB4724B8159BEAE132F89F394F71CE3934A61AE2 Keystone Kapers (Japan) MSX
|
||||
65334123C7D00CA623BF5F7A55756CC75958DEBB Kick It (Japan) MSX
|
||||
F033AB8A33E2D7A8AC1313B862BC138138B4346E Kick It (Japan) (Alt 1) MSX
|
||||
F772396BECDBD15BA0648BF1AEF8CCB155E1ADAD Kinasai (Japan) (Unl) MSX
|
||||
BEC70FBF9B1384B6A8ADC45226689F02D996B6A7 King & Balloon (Japan) (Alt 1) MSX
|
||||
ED15174DEC31A29F9D41A06DE3008DB04AF11A25 King & Balloon (Japan) MSX
|
||||
46062D3393C49884F84C2DC437FF27854E9D2E49 King Knight (Japan) (Alt 2) MSX
|
||||
A2CA7E6E216F8B450EB8DB10A4120F0353275B6B King Knight (Japan) (Alt 1) MSX
|
||||
122F659250A0AE10CE0BE0DDE626DD3E384AFFA7 King Knight (Japan) MSX
|
||||
43DC3911B9A336BB7B17BDBE6E48464E01F2C425 King's Valley (Japan, Europe) (Alt 2) MSX
|
||||
07448FFB20F260DF159A19DF2CAE1EE5545A0AEF King's Valley (Japan, Europe) MSX
|
||||
8C9A9A9AFE13A58E4CFB72489AF2D6B080DFFAF6 King's Valley (Japan, Europe) (Alt 4) MSX
|
||||
A4383F789482A9E868A9F136AA722129673C2A81 King's Valley (Japan, Europe) (Alt 3) MSX
|
||||
0CF26BF02C5B94DF118129A681A7F14ADD708177 King's Valley (Japan, Europe) (Alt 1) MSX
|
||||
CFD872D005B7BD4CDD6E06C4C0162191F0B0415D King's Valley II (Japan, Europe) MSX
|
||||
DD76EE1071E427CBFEDEEEDCB3A4B8BCAD56BA71 Kinnikuman - Muscle Man (Japan) (Alt 1) MSX
|
||||
BF7E27B3456F1A96D94A8DBF06688C8F833BD818 Kinnikuman - Muscle Man (Japan) MSX
|
||||
E98E4351119D78B6402C4499ED16FAEB3364F6C3 Knight Lore (Japan) MSX
|
||||
C8FF858D239C62A859F15C2F1BF44E1D657CEC13 Knightmare - Majou Densetsu (Japan) MSX
|
||||
DA8249452DA86C0BA44F0AE279CCFF82A1DDD756 Knightmare - Majou Densetsu (Japan) (Alt 1) MSX
|
||||
1D6A355A9CE84C78E3BAFC27A4F1151E240F68F0 Knightmare - Majou Densetsu (Japan) (Alt 2) MSX
|
||||
4D51D3C5036311392B173A576BC7D91DC9FED6CB Knightmare II - The Maze of Galious (Japan) MSX
|
||||
25F5ADECA8A2DDB754D25EB18CFF0D84E5B003BC Knightmare III - Shalom (Japan) MSX
|
||||
63D4E39C59F24F880809CAA534D7A46AE83F4C9F Knither Special (Japan) MSX
|
||||
076D6F5B9F8427F6959F7A255ABB4ACAC0DD9D0C Konami's Baseball (Japan) MSX
|
||||
9BDFE44A7A0D5151346FF14ECE3216B5108CC775 Konami's Baseball (Japan) (Alt 1) MSX
|
||||
FC6660A202DBD228C9E0D7C404340D1DCC1E2844 Konami's Billiards (Europe) MSX
|
||||
5E349166FCE12D45F3CE3F69ECD6B2A70EF4D68B Konami's Boxing (Japan) (Alt 1) MSX
|
||||
7ADB6812F3702B93AA2B2A872722BBD40915670D Konami's Boxing (Japan) MSX
|
||||
9E190CF3CA52D85FD34EB5DF2C0DD8490448B9A2 Konami's Boxing (Japan) (Alt 2) MSX
|
||||
10698EA6B0423F2E858A4C28C10F39646CA5495F Konami's Football (Europe) (Alt 2) MSX
|
||||
EAA6B787784BAE1C7F648B57DAA1C88CF2B1B095 Konami's Football (Europe) (Alt 1) MSX
|
||||
8E9FB34B356B02A839DCE5139C12030593BE13A2 Konami's Football (Europe) MSX
|
||||
6A3A68836A468CC761A268175C64D53C4C1C48BD Konami's Golf (Japan) MSX
|
||||
BCF72A4673C7982361DB4EFAF8EBC776B6539938 Konami's Golf (Japan) (Alt 1) MSX
|
||||
5C7971AA8688FFC429A3E315DD3D45C38F72DDEB Konami's Golf (Japan) (Alt 2) MSX
|
||||
F415E4096FF3F6A9F17BFBF02F146E44F0D5FB66 Konami's Mahjong (Japan) MSX
|
||||
AE5B8E69732A23AEE102BCD996AD06225F1B3EBA Konami's Ping-Pong (Japan) MSX
|
||||
6C68F7BE1EB46CCA6DCDBB9192CBFF9D59604357 Konami's Ping-Pong (Japan) (Alt 3) MSX
|
||||
5E1A50AFFE1FA973F69E423A8827751B93FC53EE Konami's Ping-Pong (Japan) (Alt 2) MSX
|
||||
9F4AC1287B8CAA286A847C86AC8601A711BE2D82 Konami's Ping-Pong (Japan) (Alt 1) MSX
|
||||
A0ED2C50E55241D23BB5D12CB6528A2A0C3BC156 Konami's Soccer (Japan) (Alt 2) MSX
|
||||
FD7518A6AEDB51630364082C27BDFE4411ADFD4C Konami's Soccer (Japan) MSX
|
||||
89CCB1A7FFAAA75CEE9BDC9B4A9EC9B063AF7199 Konami's Soccer (Japan) (Alt 1) MSX
|
||||
79C1BF77C08B733AE04E069DEAF25FD24B28BEB7 Konami's Soccer (Japan) (Alt 3) MSX
|
||||
2FEFF37D593683CE1C7DFAC33ED3207895E01A03 Konami's Synthesizer (Japan) (Program) MSX
|
||||
D5F5D2850B0BFDA45BA4DFFF70D3FD9986399A94 Konami's Tennis (Japan) (Alt 1) MSX
|
||||
5F6972E9E374753FAF092409F1EE10BBA5231B66 Konami's Tennis (Japan) MSX
|
||||
0039CFF292FE740D8C87CC2131A473CBB4F8C4F4 Koneko no Daibouken - Catboy (Japan) MSX
|
||||
530ECFF542A537C320B17BD5D64C86D5D65619F3 Kung Fu Acho (Japan) MSX
|
||||
FC22CEC076C0A0A1EE7E410772AF3D7D31DE3149 Kung Fu Acho (Japan) (Alt 1) MSX
|
||||
05DA84093D973D3BFBD3143FFD155A16A9EC5F82 Kung Fu Master (Japan) (Alt 2) MSX
|
||||
602C4D0D12FD59725C0C4E40F51D6BDEB679EA36 Kung Fu Master (Japan) (Alt 1) MSX
|
||||
C1DFC86C441E1128194F3AB490C94E29275B5DF9 Kung Fu Master (Japan) MSX
|
||||
304EA29469461F1CFA801F62AF0BF5045A6882FC Kung Fu Taigun (Japan) (Alt 1) MSX
|
||||
E817AB7B50674C414B1C1B72530024EB03396A41 Kung Fu Taigun (Japan) MSX
|
||||
15CA962994FD25A56BEE2F543A83F133F9D2265F Ladder Building (Japan) MSX
|
||||
C4F952258020DE9E23A718A78C18D22E2CCCFE3C Laptick 2 (Japan) MSX
|
||||
F69541B86C2B396CDCE765C2DEC498E11232B3C9 Le Mans 2 (Europe) MSX
|
||||
2CEA9CDD501D77F2B6BD78AE2AE9A63ABA64CFED Legendly Knight (Korea) (Alt 1) MSX
|
||||
6A98D5787DD0E76F04283CE0AEC55D45BA81565D Legendly Knight (Korea) MSX
|
||||
3103F0170BAE627BDEB77108E0E782284E4581C9 Leonard (Spain) MSX
|
||||
0442DD29EA0F7B78C9CD5849EC7EF5BB21EC0BF5 Light Corridor, The (Europe) MSX
|
||||
5DD2AC08FD05A1E091C7C6ECB6C10B49992BDD46 Links, The (Japan) (NGA II) (Program) (Alt 1) MSX
|
||||
88F3A72513B04459212289797942C4D76F495A05 Links, The (Japan) (NGA II) (Program) MSX
|
||||
BC76A04970C547B7C080E747D393D13C87E82E7D Links, The (Japan) (Program) MSX
|
||||
0421A25AFF3AE300B2A4536DD0AA5FA924E7DD72 Lode Runner (Japan) (Alt 1) MSX
|
||||
818A6CEDBFDF3A5AF0C844F32A18E3930178C798 Lode Runner (Japan) MSX
|
||||
4B04574B3B71958664AC730987C4C8EBEDEBA890 Lode Runner II (Japan) MSX
|
||||
4025045E93F51AFD58545104CC2C897226FEBAF7 Lord Over (Japan) MSX
|
||||
3C2DB6321EE84E3690757C08ADE9DC096BD209B3 Lot Lot (Japan) MSX
|
||||
95F75FAE9B3E961149E352CEF3D7E478E9887D5A Lunar Ball (Japan) MSX
|
||||
6BDE4E6761286A2909858ECEF04155E17072996E M36 - A Life Planet (Japan) MSX
|
||||
0949BD31CDBDFACB3224506C72A2210C50432157 Mac Attack (Europe) MSX
|
||||
97DD31B2F0DD056ABD808062E306B0C2536975BC Machinegun Joe vs The Mafia (Japan) MSX
|
||||
09AF3B68BE4EEA5F5594D5D2D124D92B127DD390 Macross (Japan) MSX
|
||||
81DDAF3A42C1E1A3D3722E0CD046316A202ACD33 Macross (Japan) (Alt 1) MSX
|
||||
A3D1212EB4C58958F063AA8577DDFA07903B28B3 Magical Kid Wiz (Japan) (Alt 1) MSX
|
||||
087AFEBB16BFD96F465FB0D004326D55452BDD81 Magical Kid Wiz (Japan) MSX
|
||||
3E2EF016F255168E2DF1906E678CA22F880917B8 Magical Kid Wiz (Japan) (Alt 2) MSX
|
||||
BF5678F3C065A4507F71ED6206A63AC922AD93DD Magical Tree (Japan) (Alt 1) MSX
|
||||
B82DC590AADC930B43DB303BB3E3458E7695E3B5 Magical Tree (Japan) MSX
|
||||
3243A5CC562451DE527917E9CA85657286B2852F Magnum Prohibition 1931 (Japan) MSX
|
||||
9C5C1C40EC30C34B1B436CF8CC494C0B509E81FC Magnum Prohibition 1931 (Japan) (Alt 1) MSX
|
||||
2729BB0E68A64AF525DF4C5D9687BAE07245980A Manes (Japan) MSX
|
||||
47129FE3791A7171F8FA792F953D7B5D58BA5C24 Manes (Japan) (Alt 1) MSX
|
||||
820174B4DD3F3DF87E5E32FB6F7ED457542D96C1 Manes (Japan) (Alt 2) MSX
|
||||
20CE82112BA0C50063667D61E43979AC464A3BB4 Mappy (Japan) (Alt 2) MSX
|
||||
E7D06C0A5C7F256C061E5B8173FDCC145D2FC4D6 Mappy (Japan) MSX
|
||||
A8313B0DCE35FAA80B399A220F19B04333FDEC1D Mappy (Japan) (Alt 1) MSX
|
||||
F7DD6841D280CBFFA9F0F2DA7AF3549F23270DDB Marchen Veil I (Japan) MSX
|
||||
A66E19E58AC5B4DA7DB071CA7EAD40C28A332198 Marine Battle (Japan) MSX
|
||||
A3772599CDB84DF71EF2BB38B1E2CB2F66593969 Mars II (Japan) MSX
|
||||
E4D61EE74867066B04B0F6ABA35D98D72665E6E0 Mashou no Tachi Goblin (Japan) MSX
|
||||
8F92EA214A7A11394C512080D3B65A7AFA9A92ED Mashou no Tachi Goblin (Japan) (Alt 1) MSX
|
||||
ADC65666DB35CD2CE694A8E2F32B95BD98D72291 Master Chess (Europe) MSX
|
||||
2AF58D6B3A8C77270FA5BB82F129FC97F999B7EC Megalopolis SOS (Japan) (Alt 2) MSX
|
||||
3167FFC2F2411138E4545CBDF4466C3237A04874 Megalopolis SOS (Japan) (Alt 1) MSX
|
||||
8C6E1E21CC45B2CA72CEEA93DF48EDA9CEF1DBAD Megalopolis SOS (Japan) MSX
|
||||
E92BAA5FDFB2715E68700024D964098EF35704D9 Meikyuu Shinwa (Japan) (Alt 1) MSX
|
||||
98B7A6AC44B82CCFC45EB51595E2905ADABAC1C7 Meikyuu Shinwa (Japan) MSX
|
||||
E7C800FA576B3A9554836AA9C5EAA3AE893805D4 MIDI Macro (Japan) (Program) MSX
|
||||
97ADCB652BC4BAF02D29A9ABE5E6547065DEC298 Midnight Brothers (Japan) MSX
|
||||
F1D68B477F3F54C0B6080985954208B0D95C5973 Midnight Brothers (Japan) (Alt 1) MSX
|
||||
5460AA3BE896AD949BEA75444BC6E7E072A859B8 Midnight Building (Japan) MSX
|
||||
3A8C815F9F97C067828E22F50386A9383F8E1A3D Midway (Japan) MSX
|
||||
7C50D00A0D7B8C3474ED492465A92622CA160151 Mil Caras (Spain) MSX
|
||||
5A709255F73EB8B601BF9D81210260488F8AC511 Mini Golf (Japan) (Alt 1) MSX
|
||||
D2BF27695023A3E7DAAEAB1CB76572F2C412DE1E Mini Golf (Japan) MSX
|
||||
7ABF89652396A648A84AE06E6DABC09735A75798 Mirai - Future (Japan) MSX
|
||||
176EC8E65A9FDBF59EDC245B9E8388CC94195DB9 Mitsumega Toohru - Three-Eyed One Comes Here, The (Japan) MSX
|
||||
428B5BDD5CBB3E4FF637CFA5DB8C41D8D0070813 Moai no Hibou (Japan) (Alt 1) MSX
|
||||
F924D89A28966A1D08C10D5DDBC9E0E182BE4669 Moai no Hibou (Japan) MSX
|
||||
336D714E3BC2DFE3626E55D01EE4EF74A48CF652 Mobile Planet Suthirus - Approach from the Westgate (Japan) MSX
|
||||
C0717A9831D66E29EB907BE598BA6606E17EA044 Mobile-Suit Gundam - Last Shooting (Japan) (Alt 1) MSX
|
||||
917270DD44C63DC883289B4E0902FE6C812F5EA3 Mobile-Suit Gundam - Last Shooting (Japan) MSX
|
||||
17AC538DD63BC93EC0B88B6DD92079E807C22908 Mokarimakka (Japan) MSX
|
||||
7D0BB1DAC966CEEE2E4C53F77E6E057D65F15D4D Mole (Japan) MSX
|
||||
F364A44D0B4CEAAA8706830237C0B824DCF9CE0C Mole Mole 2 (Japan) MSX
|
||||
6FEFE304CC8CD099456BBBBBCB23FF776CB113C9 Monkey Academy (Japan) (Alt 2) MSX
|
||||
E61F407E51EA4411145E236272842BDB3E0743E6 Monkey Academy (Japan) (Alt 1) MSX
|
||||
8B2626F8DBBB3E97A5087B340A3F3D56C8EE84D1 Monkey Academy (Japan) MSX
|
||||
E0D84B3B2AC7675C3ED104797840D43BC2347A5B Monkey Academy (Japan) (Alt 3) MSX
|
||||
B6D39BBAEDB89F8C908CC2F44A0AB17E4B80CA4F Monster's Fair (Japan) MSX
|
||||
B2D9DCEE787ACE26F8F4D2D18E24A3D645A6F853 Moon Landing (Japan) MSX
|
||||
D1CF5410ED71F77670F65EB08EE944436BC0EB10 Moon Patrol (Japan) MSX
|
||||
F93E23D958D2075BF476CB05A3C4F48D0C41AABB Moonsweeper (Japan) MSX
|
||||
33EC3136DFB6FD44014C8BBFFC8AC79C3CAFE75C Mopiranger (Japan) MSX
|
||||
4A185A3DB81C2CE20D176D13FA5F619C6B7A170C Mopiranger (Japan) (Alt 1) MSX
|
||||
1B3059C7873765A476FB7791A4D6FC846AB05ADE Mopiranger (Japan) (Alt 2) MSX
|
||||
DDC458BB3C70E0708841E516D9B89220C0E098A1 Mopiranger (Japan) (Alt 3) MSX
|
||||
14E7EF125CC902001995BBD8ACCA0EAE2F213DC1 Mopiranger (Japan) (Alt 4) MSX
|
||||
4DD934902907DB50BA76053F59AE7737D55824F4 Morita Kazuo no Othello (Japan) MSX
|
||||
1FB861152A9F3F9C2B2DACE26D5F1D93AB9B4AD8 Mouser (Japan) MSX
|
||||
B5D130A50F6939028702C1645426A29EC8EAD6E5 Mr. Chin (Japan) MSX
|
||||
DC69C7A9EA93CBB0093300955935EF156AF5C194 Mr. Do (Japan) MSX
|
||||
01544042B810C0B401FCE5D180ADB6FEA9B5ED20 Mr. Do vs Unicorns (Japan) MSX
|
||||
E9B3652482A5B09AE662203F8758A30AA23AF62F Mr. Do's Wild Ride (Japan) MSX
|
||||
CA05A183F4E7E56102706D1B9B852AD4350264BA MSX 21 (Japan) MSX
|
||||
0D246B0E3EDC63803FCCE861EA07EADF29DC488C MSX Audio (Japan) (HX-MU900) (Program) MSX
|
||||
930EAE7057AF1652ABAE794072B296A59DECD61B MSX Audio (Japan) (FS-CA1) (Program) MSX
|
||||
76D488497D9BA54B302A4326F45909F643BDCD7A MSX Baseball (Japan) (Alt 1) MSX
|
||||
85A3842EABAC50C4E1332666C161541BE3508249 MSX Baseball (Japan) MSX
|
||||
AC150939558EC4E56446BE9502177F28A29881EB MSX Baseball II National (Japan) MSX
|
||||
181BF58DA7184E128CD419DA3109B93344A543CF MSX Basic-kun (Japan) (Program) MSX
|
||||
C279C3F41D5368761F9088157B80214D835A548C MSX Basic-kun Plus (Japan) (Program) MSX
|
||||
8C7AE1A1720B1DAE9AF9904E638B868F56D905C2 MSX Bunsetsu Henkan Jisyo (Japan) (Program) MSX
|
||||
C1C350C719236AF5EEF8798C4532351BEFCFD348 MSX Derby (Japan) MSX
|
||||
35ABD4A14033710730DA72EDF278AAD42D641621 MSX Rugby (Japan) MSX
|
||||
C76CA96ED23621A6267D9906CC4A1EE428677F98 MSX Soccer (Japan) (Alt 1) MSX
|
||||
D2AA1605A6B56C118E18B385AB879536D74CC355 MSX Soccer (Japan) MSX
|
||||
D4EDB2AF4170FD4069960AD61D3F664462BEF568 MSX-Aid (Japan) (Program) MSX
|
||||
47663F883F98AB9DDAA0BF0C2831C567919F56F1 MSX-Logo (Netherlands) (Program) MSX
|
||||
2B10234DEBD2A6A9A02E0750BA6563768BC4A2F3 Mugen Senshi Valis - The Fantasm Soldier (Japan) MSX
|
||||
20A2E3D7966916F46EB26CC1AA226EC2D11646F9 Music Editor (Japan) (Program) MSX
|
||||
85E3386D30DD9A64F4CC1BCA03CFF35B440F70B5 Music Harmonizer 3 (Japan) (Program) MSX
|
||||
8C06D9E1E188431C13721AF965FAA7391140AF2E Music Studio G7 (Japan) (Program) MSX
|
||||
FC4C05CA47C94DF877BED2E02307BD6307F738A6 Musiwriter (Japan) (Program) MSX
|
||||
FB968A2407EEE00C683AF3AC19E88015341564AD Nausicaa (Japan) MSX
|
||||
F0E4168EA18188FCA2581526C2503223B9A28581 Nemesis (Japan, Europe) (Alt 1) MSX
|
||||
E31AC6520E912C27CE96431A1DFB112BF71CB7B9 Nemesis (Japan, Europe) MSX
|
||||
4C2F015685A17DB7A8C3893E868E0A84A8DBF1E5 Nemesis 2 (Japan, Europe) (Beta) MSX
|
||||
D63E20369F98487767810A0C57603BEF6A2A07E5 Nemesis 2 (Japan, Europe) MSX
|
||||
6844758FF5C2C410115D4D7CF12498C42E931732 Nemesis 2 (Japan) (Demo) MSX
|
||||
AB30CDEAACBDF14E6366D43D881338178FC665CB Nemesis 2 (Japan, Europe) (Alt 1) MSX
|
||||
0413BB3AEACB0C28429B8C85B42796DBE48BEF6D Nemesis 3 - The Eve of Destruction (Japan, Europe) (Alt 1) MSX
|
||||
7393F677E0FAE5FC83071C6B74756117B7D75E2D Nemesis 3 - The Eve of Destruction (Japan, Europe) MSX
|
||||
5692E41B3A4C5E767CF290FD6C24942D0FD7B2E3 Nemesis 3 - The Eve of Destruction (Japan, Europe) (Alt 2) MSX
|
||||
B7FD07B7825C6BEEB19B1F38631D2869F60939FB Nessen Koushiyen (Japan) MSX
|
||||
EC1BB5C36952B12E6C0805E9A8D5BF31C20A68C4 New Horizon - English Course 1 (Japan) (Program) MSX
|
||||
50E27C5B83C8AFE00B077406081D063263E98B62 Night Shade (Japan) MSX
|
||||
7013FCF8C76BC610CEC9F55FBB99374182641251 Nihon-Shi Nenpyou (Japan) (Program) MSX
|
||||
371DE6F12D834DA07C8E67B13E75FC22618BA5E9 Ninja Jajamaru-kun (Japan) MSX
|
||||
9DFC71887FFC6D94B8780B5D6F207E24C1F58B54 Ninja Princess (Japan) MSX
|
||||
62BFFF23E2BEAE00DB14B6C3E933043218B33DED Ninja Princess (Japan) (Alt 1) MSX
|
||||
EC2F1E747756BA1FDAE606658AEEAFA07E6E7FD4 Ninjakun (Japan) MSX
|
||||
C9D10B1DF3BCADB3D917CF2A6877AE6E71CA3A57 Ninjakun Majou (Japan) MSX
|
||||
049892D1633BCB3F1D5067BA710ADEB89B38FCAC Ninjya Kage (Japan) (Alt 1) MSX
|
||||
0125BCE373C95EE78DF074D19AD032158EDC74A2 Ninjya Kage (Japan) MSX
|
||||
E6DE8BBD60123444DE2A90928853985CEB0B4CBF Nobunaga no Yabou - Zenkoku Ban (Japan) MSX
|
||||
AEECB99ED7BFE2FF39A5F42637B6B33ECC79C443 Nyan Nyan Pro Wrestling (Japan) MSX
|
||||
98E33DCA445850CDF24F09050756C3B75202AC13 Nyorols (Japan) MSX
|
||||
5DCECC7C790E398A1C652DB568C1E66C6F25E5E4 O'Mac Farmer (Japan) MSX
|
||||
5B53794D3D73DF29CBCEC411C0F65E9E9898977F Oil's Well (Japan) MSX
|
||||
244EAE705DF950F60B7D4B523D57B9CFDED96B8E Oil's Well (Japan) (Alt 1) MSX
|
||||
031A611BA1F75B7D5FE3ED088A61C24598B4B314 Okami no Su (Japan) MSX
|
||||
6238F9C5F4C0012B3425BE203C23092F6B624FE8 Othello (Japan) MSX
|
||||
41BA54C945104915CCC8D465930445C905D839E4 Oyoide Tango (Japan) MSX
|
||||
61695EB1DC6242D8A70C7EF2172CF86A26E3C2DD Pac-Man (Japan) MSX
|
||||
A72724A79C2C50EC66046C0828934B5CAD11B7C9 Pac-Man (Japan) (Alt 1) MSX
|
||||
56FEBD50BE4ACCB3EB8C73FF4FF641EA767108B3 Pac-Man (Japan) (Alt 2) MSX
|
||||
A2E144546A191DA8829B9CA9FA019884FE95156C Pachi Com (Japan) MSX
|
||||
5558BA634018B22DCC687A01F9422FE60EA57ADC Pai Panic (Japan) MSX
|
||||
DF13ED647ED4F5A6B04F1710FC1140EA65DC966F Pairs (Japan) (Alt 1) MSX
|
||||
27BC809518FBB6C0D52C949E7CBE81980A801D32 Pairs (Japan) MSX
|
||||
479608B5A86D7C77BD6C4DD00605B8EFB2E5B43E Panther (Japan) MSX
|
||||
75D3B72D9CEEAA55C76223D935629A30AE4124D6 Parodius (Japan) (Alt 1) MSX
|
||||
2220363AE56EF707AB2471FCDB36F4816AD1D32C Parodius (Japan) MSX
|
||||
A6B2FDAE9551EF3633926F6177C771D794D1E91B Pasokon Sakkyokuka (Japan) (Program) MSX
|
||||
AEB705AC42F8D9D62ECDB25899535D1F14F1C49C Pass Ball (Japan) MSX
|
||||
8117EC66C0645A54422841A632CFD6602F35C4F9 Pastfinder (Japan) MSX
|
||||
0486938B52FBCF30A4FA206E07960A5B866FCA61 Pay Load (Japan) (Alt 1) MSX
|
||||
5F965BBBA026134818759D25119D4114599132A8 Pay Load (Japan) MSX
|
||||
190BCAB0325DED99F42F32976BF965F0164AD2A4 Peetan (Japan) MSX
|
||||
37E6FE7D07B3F8B2C585C77B231207AC8BAA1EA3 Pegasus (Japan) MSX
|
||||
D53E0C8BCD98820AFE820F756AF35CC97911BFE4 Penguin Adventure (Japan, Europe) MSX
|
||||
5AAB681334F9E97FE8D7E0EB008B2AFD5E0FC3AC Penguin-kun Wars (Japan) MSX
|
||||
683478868F6C6423CC3E9C6AABE1868B30B1E47D Pico Pico (Japan) MSX
|
||||
336A7C451A03C9A55726D171603B54628AD832C8 Picture Puzzle (Japan) MSX
|
||||
663D12F6FED3CE5017B783DB3032EB69D8554FED Picture Puzzle (Japan) (Alt 1) MSX
|
||||
3450F93FC2B08A052A709930C97EDEAD0099E447 Pillbox (Japan) (Alt 1) MSX
|
||||
76A79DD0554B8F7E84468FCD3BF73459CE4AEB2B Pillbox (Japan) MSX
|
||||
C95F8EDB24EDCA9F5D38C26D0E8A34C6B61EFB0C Pinball Blaster (Europe) MSX
|
||||
211E1F7E86495178FB2B05E163B04ED4B7455034 Pine Applin (Japan) (Alt 1) MSX
|
||||
878554D3B579E72B2D3C22E6330208EE0D1EE8A6 Pine Applin (Japan) MSX
|
||||
91BD6C21530654FAB12CD8A797044D494834C223 Pingball Maker (Japan) MSX
|
||||
1FBD7AF23177AB1DE799764D8A26BC2BBF85B042 Pinky Chase (Japan) MSX
|
||||
BE8BB7F5E812CD31A65AEC3782A2D526BEF9B3D6 Pipi (Japan) MSX
|
||||
10E63EBA7D2B10D946822F21E7FD106F5DFAB632 Pippols (Japan) MSX
|
||||
CF8E40315F34E30E1BE4776BBEBC08C0A8403523 Pippols (Japan) (Alt 3) MSX
|
||||
D621E2A2F0F924A17673F5D47F2182095074ACF4 Pippols (Japan) (Alt 2) MSX
|
||||
0A9C576EABAF2651DDCA35BF17F96E509D6C6BA0 Pippols (Japan) (Alt 1) MSX
|
||||
78079266711E60420480E4D95A39F0D7D974AD32 Pitfall II - Lost Caverns (Japan) MSX
|
||||
AE8C7355C829248305384243F78A870453367E77 Pitfall II - Lost Caverns (Japan) (Alt 1) MSX
|
||||
5FB4B6C3735E4D9415565A856BB69F9FB4857161 Pitfall! (Japan) (Alt 1) MSX
|
||||
2FA9C0F016EFC2D1752A272C632393F5063EA06C Pitfall! (Japan) (Alt 2) MSX
|
||||
B88E9C548873DCFD190E0E38F7B279344EEA41EC Pitfall! (Japan) MSX
|
||||
E6FBFB4B10DC393953211DDA4B114080A08302A1 Play Ball (Japan) MSX
|
||||
6F247C8AF6FC1881242281F19912068B03CA4126 Poiny X Senryosakusen - Operation Thanksgiving (Japan) MSX
|
||||
CDAF507DBA4A48B5C98850A96F61F6D2E8464E00 Police Story, The (Japan) MSX
|
||||
835B3E2BAE1D680D7050CE188C617FBCFB326EB3 Police Story, The (Japan) (Alt 1) MSX
|
||||
692A55393E8EEF0800A612C01456E9CECD9C1418 Pooyan (Japan) MSX
|
||||
C713ECD0E2EF89B2443E516D5FFA53D3A3422E22 Poppaq the Fish (Japan) MSX
|
||||
AC109DAC24DF4DAE813CA5D9F0938CC48A162BB1 Price of Magik, The (Europe) MSX
|
||||
24C5CBF1EE4CAA6D83A5AA7A5F3818692542FDA8 Professional Baseball (Japan) MSX
|
||||
DA5FD6CE2F92A40B1CCAF6E3C425D720FEBC3543 Professional Mahjong (Japan) MSX
|
||||
D03FDCA57B55BDB7E6B5481615B8AD0C8A71F77D Protector, The (Japan) MSX
|
||||
FAE437072234C65BCA174DB9AEFD2107A53C358A Psychedelia (Europe) (Program) MSX
|
||||
16C692A2C9BABFDADD8408D2F0F8FAE3A8D96FD5 Psychic War - Cosmic Soldier 2 (Japan) MSX
|
||||
A36C00F32CAD6B603BC5525A741CB09064670F34 Puzzle Panic (Japan) MSX
|
||||
1AD2178C27874704B395AB250200D9ACB7D3DE9C Pyramid Warp (Japan) MSX
|
||||
531A7F736D86095D791D6D0F267BE66EEF07949C Q-bert (Japan) MSX
|
||||
2E16A588246743C9B901AFDBF1BA094A0B1C8B5D Q-bert (Japan) (Alt 1) MSX
|
||||
1F72E0CD58AFE22075A129AC854BBDCE0704B0C8 Queen's Golf (Japan) MSX
|
||||
BE9D337DD412056F5FE78FD19467A63E80E3864C Queen's Golf (Japan) (Alt 2) MSX
|
||||
97C39DAD3E065F9083FEFAE157F278844B208058 Queen's Golf (Japan) (Alt 1) MSX
|
||||
9C886FFF02779267041EFE45DADEFC5FD7F4B9A2 R-Type (Japan) (Alt 2) MSX
|
||||
0B379610CB7085005A56B24A0890B79DD5A7E817 R-Type (Japan) (Alt 1) MSX
|
||||
37BD4680A36C3A1A078E2BC47B631D858D9296B8 R-Type (Japan) MSX
|
||||
636EB837C5D80FB6B0692A72954CA91291BA831B Raid on Bungeling Bay (Japan) MSX
|
||||
C5AF6C4255BAB55D68E82FA016CB35E3213BA244 Rally-X (Japan) (Alt 2) MSX
|
||||
3DCECD610E832E7769547D3B6CE2B767F65F3563 Rally-X (Japan) (Alt 1) MSX
|
||||
FC7212C6813574224114C3BB5BFA99206C0816A5 Rally-X (Japan) MSX
|
||||
770805BD0BE8B09A3BE10030060D6AD8DC07D1C3 Rambo (Japan) MSX
|
||||
4334ACC2BD5C921BC4DCB6DE9A1FCC79D843EE15 Rambo (Japan) (Alt 1) MSX
|
||||
AC381DFB4D0B52DEDB18A8DF7A4651ED2978D12F Rambo (Japan) (Alt 2) MSX
|
||||
FE1D02284B0B051308E3C796E8E9EEE2F86521B8 Rambo (Japan) (Alt 3) MSX
|
||||
54A49A3C8B42B8B246E62ED45346CF52836DDCAC Real Tennis (Japan) MSX
|
||||
91E17ABA249925C7E0E5C280469BEF09D5534DA8 Red Zone (Japan) (Alt 1) MSX
|
||||
61E26157F0701CCE2DDB860A12F187912398B1B4 Red Zone (Japan) MSX
|
||||
74AE85D44CB8EF1BAE428C90200CB74BE6D56D3A Relics (Japan) MSX
|
||||
C72AF5118835E49AC6D181CC832336AB22EC5DCB Renju & Ojama Dogs (Japan) MSX
|
||||
F02CA47BE665E83D812979D8074A985E5637B979 Rise Out from Dungeons (Japan) (Alt 1) MSX
|
||||
5FBC5D6A01E66A1C456B82AC1190CCDE61BC7832 Rise Out from Dungeons (Japan) MSX
|
||||
33BE9017FAF173EAE04D0C91CA8D42D1C20596C0 River Raid (Japan) (Alt 1) MSX
|
||||
A1E14912D45944B9A6BAEF1D4D3A04C1AE8DF923 River Raid (Japan) MSX
|
||||
BF4A0BAB1E8EAA70A8B12CD9A81D7A90A74C9E26 Road Fighter (Japan) MSX
|
||||
7ABDF08E9C0A511B8182C502ED8C5F42778437E9 Road Fighter (Japan) (Alt 1) MSX
|
||||
46C98A3143F5A80B2090311A770F9B73000881C0 Robo Wres 2001 (Japan) MSX
|
||||
A2F9E1250C67D2E98BE70900D4370545321CDBFE Robofrog (Japan) (Alt 1) MSX
|
||||
ACCE81BF851FA5869CD75181DF4FCF7D4489A9DB Robofrog (Japan) MSX
|
||||
1EDABC3226648B54AE98D524B31F37CA47C8C88B Rock'n Bolt (Japan) MSX
|
||||
1500A07693A7C06189F4CD6764D5EE62F0EDD85D Roger Rubbish (Europe) (Alt 1) MSX
|
||||
8607B92458584D5AA770369D94D50361B1D64BD3 Roger Rubbish (Europe) MSX
|
||||
FF9877666D983759D41398C5E3E29801AD95A589 Roller Ball (Japan) (Alt 1) MSX
|
||||
44BAA180F6C9E0F140AC1F0AFAE75C412CB06B9E Roller Ball (Japan) MSX
|
||||
34544106FBD29B2A72E1E8C2E0F260B79A0B0883 Rotors (Japan) MSX
|
||||
0D459788B6C464B50CBC2436E67A2CEF248E0C4A Salamander (Japan) MSX
|
||||
3F741BA2AB08C5E9FB658882B36B8E3D01682F58 Sangokushi (Japan) (Alt 1) MSX
|
||||
14FF6FE464362C6B7DBB47B2ECDA3A8C5F05EF79 Sangokushi (Japan) MSX
|
||||
E767C0239B79821463FA42F2C1989D3FD1B4B868 Sasa (Japan) MSX
|
||||
395C5F40692C45B891ABE07C89D1E87829665FC7 Sasa (Japan) (Alt 1) MSX
|
||||
1A6DE1CFF831429394DC2B9528993A1DFCAE14C6 Saurus Land (Japan) MSX
|
||||
BC3BE8F829211DD8A8EB854F86FF014C47ED9254 Scarlet 7 - The Mightiest Women (Japan) MSX
|
||||
09FBBD923E0DEB82F5E20FA8CE2D842ADBF4A646 Scion (Japan) MSX
|
||||
C73D4C27AA2B0FB946E398323BD67D9E53C4F9EF Scope On - Fight in Space (Japan) MSX
|
||||
05182561E05FA8E7C8A8184EDA885DC4FD12CC5B Scramble Eggs (Japan) MSX
|
||||
C1D272645A249757B8BE5BD913BA2D3447892387 Sea Hunter (Europe) MSX
|
||||
2B255C3E5615B2F5E2365419A35E4115A060E93C Senjo no Ookami (Japan) MSX
|
||||
4936916BF914D99C5B9E3F4C7385F44B6B97D4C5 Senjyo (Japan) (Alt 1) MSX
|
||||
E373E3E9BE4F6D30D5DB84B699082C00B2021BA3 Senjyo (Japan) MSX
|
||||
DB0ED31C779FFFD2084946E3BA69512B372D845F Sewer Sam (Japan) MSX
|
||||
83DF4081529FE5B8BB0A3601614D36C8384C9202 Shougi (Japan) MSX
|
||||
0E06519E68C78A8F018152511F4F13374C5856AA Shougi 2 (Japan) MSX
|
||||
299E52DFBBB94ACE4FD1EF59ECE45364CE0BB450 Shougi Game (Japan) MSX
|
||||
F9AD0CDB227C588B1A5C75220ED53D0314550D7F Shougi Meijin (Japan) MSX
|
||||
1C4DE8D4A1CBF5AA2BCF7816A1E55EE4584F59FB Shougi Sinan 1 (Japan) MSX
|
||||
D844C4C5AE9C7AC671C4BE71AC1190A1E5DB4D36 Shout Match (Japan) MSX
|
||||
4937A8E35072012A980F85ECFC60604D9D900244 Simple ASM 1.0 (Japan) (Program) MSX
|
||||
D120CA303C3E1DD56ADEE68F10E9E1AB51F50AB3 Sinbad (Japan) MSX
|
||||
D264152D4974B78959465ACFE0D5678E72930073 Skooter (Japan) (Alt 1) MSX
|
||||
64F1CE4691056047F404460031ACB0B82A76968D Skooter (Japan) MSX
|
||||
136D838CC1297940D96CD8E27AEA9F9E3C7088A6 Sky Galdo (Japan) MSX
|
||||
1F8334DC7459CFCF2AD132E94976015C02E51390 Sky Jaguar (Japan) MSX
|
||||
E3A52D448E69D6D14F67D35F24D9924158B1CCE1 Slapshot (Spain) MSX
|
||||
7300D44A753DACF582D3079ED09EAFC9DD629530 Snake It (Europe) MSX
|
||||
5A12439F74CA5D1C2664F01FF6A8302D3CE907A8 Sofia (Japan) MSX
|
||||
2338946A671D31D12360ACE4EEB33F7BC7DB56F1 Soukoban (Japan) (Alt 2) MSX
|
||||
CF55B0D12E550F71CEF709358BC7E799ECED0083 Soukoban (Japan) (Alt 1) MSX
|
||||
04BD78730B100DD879E2FBD3FE646D2BC9BBC46B Soukoban (Japan) MSX
|
||||
DE10AA2A2ABFDCAFE0064E1E76B676F54C7AAFC6 Space Camp (Japan) MSX
|
||||
D1AD3BEB29AECAA7C3BC1FD8A4BE3B10D38CC47A Space Camp (Japan) (Alt 1) MSX
|
||||
4971BDD3DB63D394FBC2186182C901CA4B32535B Space Invaders (Japan) MSX
|
||||
FBBD9A77004F9BDBCFC292F85C32106FAA18CFA6 Space Maze Attack (Japan) (Alt 2) MSX
|
||||
A00F9E66F1FA3DE15B028E0FBFED636E194BB967 Space Maze Attack (Japan) (Alt 1) MSX
|
||||
93BF6725A3C1B7071064A01884E1B6E8C6F8B579 Space Maze Attack (Japan) MSX
|
||||
7C0F720C7601CA6DC86C81AB6A76E0587A052F75 Space Trouble (Japan) MSX
|
||||
FFF31B8C7549493D8EC220F85E3E8536F150D82A Space Walk (Europe) MSX
|
||||
4B996BDDF88605C432F73564922106A63D31F62C Sparkie (Japan) (Alt 1) MSX
|
||||
B9C98B80216983F97E28293B576CA9BE3602C1A1 Sparkie (Japan) MSX
|
||||
4D80FAE5133D55503968EE246C1346CDDB020FFC Spelunker (Japan) (Alt 1) MSX
|
||||
49E14B0248C649E7B5754357597695ABEF70C17D Spelunker (Japan) MSX
|
||||
97F1790146116198133C083DE113ED1E5CA6FF21 Spider, The (Japan) MSX
|
||||
33C62E6F7478BE369580A2D985FF57667F13CF84 Spread Sheet (Europe) (Program) MSX
|
||||
1D129BDE09C9DB2433B334D36762704DE94983BA Spy vs Spy II - The Island Caper (Europe) MSX
|
||||
18B90AAA2284EB46233E9203AF1E8CF1922C417C Square Dancer (Japan) MSX
|
||||
7BF7BD134DDF9ED5B489F7F2EB0AA26BB2428FC9 Squish'em (Japan) MSX
|
||||
364AE6695509F5CF16985CC2946A45AF5CA4CF56 Squish'em (Japan) (Alt 1) MSX
|
||||
A1E1BFFE4B4EA6D67C973FA483C4D6273F68DE3C Star Blazer (Japan) (Alt 2) MSX
|
||||
EDA9580A1AC75707F621C251A7424DF3846E4EC0 Star Blazer (Japan) MSX
|
||||
B07A6AE619FCC6291838959DC1A899DE832F8D97 Star Blazer (Japan) (Alt 1) MSX
|
||||
225894DA7E3AFABF33ABF05E519E1F6BCAC77A21 Star Command (Japan) MSX
|
||||
5FE86465119343804A722CE4768EB33DE806A39F Star Force (Japan) (Alt 1) MSX
|
||||
C1746EFEB4B44DCC80DFC4F429009FEAC91D9C48 Star Force (Japan) MSX
|
||||
6A56B46B8BF014B25863433D6D96E64641A93EEF Star Soldier (Japan) MSX
|
||||
B58CAF47C953B6F00935A201BFCCF7EE968DFF32 Star Soldier (Japan) (Alt 1) MSX
|
||||
B2BCC1C0D64B6EE9F0E9BBBCF0EF7B64D80D3B90 Star Trap (Japan) MSX
|
||||
E3CE88E95115765E31193777E57FCB9B40E10D3A Starship Simulator (Japan) (Alt 1) MSX
|
||||
0E5062BB18B4A6FB93A89318772928874DD4D6EA Starship Simulator (Japan) MSX
|
||||
FC5D252A26C93DC4CC30984B954A6A5124DEE653 Step Up (Japan) (Alt 1) MSX
|
||||
27CE427EB1C86BA22707A6EE9086DB9D39962DC6 Step Up (Japan) MSX
|
||||
1FA7398005FB0BD7075141035E8D888197162030 Stepper (Japan) MSX
|
||||
3950F22265139A84CF57F3C0936E7927173F3D7A Stone of Wisdom, The (Japan) MSX
|
||||
3063BC3AC5AF6D990D8D002ACBC9C3A18BAB71F6 Strange Loop (Japan) MSX
|
||||
CCF6E244D27EC61195280D0915A3B43D291E3FAD Suparobo (Japan) MSX
|
||||
05D7016F39E94BF9FC33D0E8482FF3038D6E01BD Super Billiards (Japan) MSX
|
||||
DACC9ED6A80FB15C3E82C4081C07211E033BA820 Super Bioman 4 (Korea) (Unl) MSX
|
||||
5D65A308BB9EC8C4B4CE334B18D699B1F53227EF Super Boy 3 (Korea) (Unl) MSX
|
||||
8B65D999BA187C98BA97A038EA46655FD9D62DEB Super Boy I (Korea) (Unl) MSX
|
||||
85153A8F25882CADDE8295D040DDB7586C93CEFE Super Boy II (Korea) (Unl) MSX
|
||||
03F112B38FB1D05A9B0B50D3C6A54AA2CE9DD2B0 Super Bubble Bobble (Korea) (Unl) MSX
|
||||
A84608F1C2FE1AEA1A8A586F2E335CB64BB951FC Super Cobra (Japan) MSX
|
||||
7AD00597CEB5A02379055230D907C4421982329A Super Cobra (Japan) (Alt 1) MSX
|
||||
16553C30FCDD0E1D00A48FE1CB2DEF537C4A7C3F Super Columns (Japan) MSX
|
||||
54F288590F0C882F6E3A9B7C3F7D15B407190975 Super Cross Force (Europe) MSX
|
||||
82C68A93D01F103AF4FE9F9205184FFD1A36A90F Super Drinker (Japan) MSX
|
||||
27C2CDEE4BE0CA166C2EBD2DAC61115A56BB9856 Super Golf (Japan) MSX
|
||||
2DFBCA8F5CC3A9E9D151382EBE0DA410F5393EAF Super Laydock - Mission Striker (Japan) MSX
|
||||
55F30C8B7118870802D00DB860BC1945F18A42C0 Super Monitor (Japan) (v1.1) (Program) MSX
|
||||
35F13B5A32C64B21517F0C4009F264067338912E Super Monitor (Japan) (v1.2) (Program) MSX
|
||||
991EF9890DC3E0C0D29D6D249675EAE182ACA30C Super Pachinko (Japan) MSX
|
||||
0D2F86DBB70F4B4A4E4DC1BC95DF232F48856037 Super Pierrot (Japan) MSX
|
||||
0348F1758DAA118EBAF2BC593FF9A0A622FC89E8 Super Snake (Japan) (Alt 1) MSX
|
||||
58B3B3A678364D0649C1AF0C27DA144CFEE85146 Super Snake (Japan) MSX
|
||||
8DCD9618F92FB014D16E8F4EC9A813E65424AD7D Super Snake (Japan) (Alt 2) MSX
|
||||
996A1C0D92400287C15545116B952F84C7DC03B1 Super Soccer (Japan) MSX
|
||||
830EFA0B25E1CF34D5F55D08CB80709D0A2C82EC Super Synth (Japan) (Program) MSX
|
||||
A2F8F8F9F46262342EEE0A1DF7C6871008A3A189 Super Synth (Japan) (Program) (Alt 1) MSX
|
||||
4A1282901221207DA79432FB0BCB4F1E722C8278 Super Tennis (Japan) MSX
|
||||
1A5295A337E5B969C939644CB5AD55B84A6AD31D Super Tripper (Spain) MSX
|
||||
221C76D6AC483FB1F11C87D37B9617F1E1D7BC6D Sweet Acorn (Japan) MSX
|
||||
C8015D4453EFB9F78005F6C8481CBCE9D99F6CC5 Sweet Acorn (Japan) (Alt 1) MSX
|
||||
2D8E39F210DA6D633F773CDA03E9970712EA84CF Swing (Japan) MSX
|
||||
719F457D8FCBF6C21A88E88F34FCD54F5E96AD68 Swing (Japan) (Alt 1) MSX
|
||||
16351E6A7D7FC38C23B54EE15AC6F0275621BA96 Syougun (Japan) MSX
|
||||
5BBCBD47F05A2742CFB0CAD88856EB2DF6E469FE Tank Battalion (Japan) MSX
|
||||
7FEF9411858B1FF3FF019646E9E7AA0C61C7E87D Tatica (Japan) MSX
|
||||
8F74C91E6598D8DE188AE1B506C44229C768B11F Tawara-kun (Japan) (Alt 2) MSX
|
||||
8DD49E12677443AEDE319F41BF3F82A08D0E5B5D Tawara-kun (Japan) (Alt 1) MSX
|
||||
14F2D64D05E2E53E876E3D6AF0A5711E557E3C96 Tawara-kun (Japan) MSX
|
||||
A8EFF8C532DA894C86198B04B0A5D7707FEB28C5 Tear of Nile (Japan) MSX
|
||||
4E17EFBE87ADC232C055D0DC26EB4476C661AAFE Telebunnie (Japan) MSX
|
||||
50439F12DDFF3ED449DA3CC1442385AABA609E7D Telebunnie (Japan) (Alt 1) MSX
|
||||
249DA12E2711C643C5E18CF96184D33DBF7E2305 Tensai Rabbian Daifunsen (Japan) MSX
|
||||
010D5F325FC38C5B590841D15CE4F07D59F2A4CB Tensidachino Gogo (Japan) MSX
|
||||
A0D85C5FC74547F46025369DA687569FB5AA3991 Tension (Spain) MSX
|
||||
4FF12FC3ADF389A1F76A7A9BAB6B2FD20044F5B4 Tetra Horror (Japan) (Alt 1) MSX
|
||||
53814FDFEACCE237BB68FB9056D005EB614B708A Tetra Horror (Japan) MSX
|
||||
E9398ACEB9F8A648E4BCEBE02E5D7B14A3744C7D Tetris (Korea) (Unl) MSX
|
||||
3C29EEF381D77F8C1F425A3E29919013C72F875C Tetsuman (Japan) MSX
|
||||
F6711E1E2BAC04D45B8988F1D03529AD777ABF4E Tetsuman (Japan) (Alt 1) MSX
|
||||
6420473EC647E4D750BC2247020B6722435B5211 Thexder (Japan) (Alt 1) MSX
|
||||
049E7DCCD3977049B5F68AAD7754105B014BA771 Thexder (Japan) (Alt 2) MSX
|
||||
A2109DA08B1921C4B3B47C6847598D424581B508 Thexder (Japan) MSX
|
||||
DE5DA311941056A90CAB28FD91522C054871513F Thunder Ball (Japan) (Alt 1) MSX
|
||||
4F73BA24163946F6247523FC3F2AA5DE00C3D7A6 Thunder Ball (Japan) MSX
|
||||
136F2DEDD45F4419837EB1E4E623CB1DC317EF39 Thunderbolt (Japan) MSX
|
||||
B3D57F968FDFEBE77F78C05F4A075D139F219AE0 Thunderbolt (Japan) (Alt 1) MSX
|
||||
D1FCD47F6B68FCEE9914B32FD48B2634CF60C994 Thunderbolt (Japan) (Alt 2) MSX
|
||||
B3C2DC4D1C940DDB4B9E742B8F5A47AB1E2D385F Time Pilot (Japan) (Alt 1) MSX
|
||||
C1C5EC4042760880216F781EBD5E7174A3B0F9CA Time Pilot (Japan) MSX
|
||||
D147F2CAC0600527CE49BFFFC865C54EB783E5E5 Toobin (Europe) MSX
|
||||
37C85041128EE21300327726B7300A20EF6B84DD Top Roller! (Japan) MSX
|
||||
EA8D86AC74DCDCA1C72DAAE517722431767C5AD2 Topple Zip (Japan) MSX
|
||||
9B55970341AAAB59A73AE921C6CCF29009C1A8F0 Track & Field 1 (Europe) MSX
|
||||
BE16501255617BADE264DBF63DC59008E1D84AC8 Track & Field 2 (Europe) MSX
|
||||
503CBAD7516C6FDE89761388AB32845F35284CC6 Traffic (Japan) (Alt 1) MSX
|
||||
7DBEAF25E3A1A66F9C6B331332DC36E73B511D4A Traffic (Japan) MSX
|
||||
DFD7EF6FD86EFD5C8019B59D8FA5C5A47CF90CD0 Trial Ski (Japan) MSX
|
||||
E93DA3D1910D513DBB78AD599ADBB05EB92B5930 Trick Boy (Japan) MSX
|
||||
4A35065D97D81A94A7649D19B3F9ABD34F834EAB Tritorn (Japan) MSX
|
||||
8547AE0FA25B9F3E26B90D4F3E1A4325B9248549 Trumpaid (Japan) MSX
|
||||
BFE8046F8CCC6D6016D7752C04F0654420EF81E7 Tumego 120 (Japan) MSX
|
||||
08BE92145A99DD6E0539FF79DCA62B2F4CC59B0B Turboat (Japan) MSX
|
||||
6B496A50626C3E67DFE49C15A3847448DBEB05A8 Turmoil (Japan) (Alt 1) MSX
|
||||
D33FE18EDE20DA4DD3D6991A9C2995E149C8FC3F Twin Bee (Japan) MSX
|
||||
751D722A4F36A03E88AC62118AE8D880E40C1C84 Twin Bee (Japan) (Alt 1) MSX
|
||||
ADB3977309D373AD1DC995AE7D2F8280F1673D66 Twin Bee (Japan) (Alt 2) MSX
|
||||
8B828D33DCDFD324DF1827EF79F5CA9635968C6E Twin Bee (Japan) (Alt 3) MSX
|
||||
4FA5382DF5A8FF7D631BE22BB8445E7BC8018A11 Twin Hammer (Europe) MSX
|
||||
F3C0C1F0EC3E10CD4A5EAAE26D593198B1A5AB9A TZR - Grand Prix Rider (Japan) MSX
|
||||
E73A449E34652C18AF0A72AB5C3637AFA57D5842 Ultraman (Japan) MSX
|
||||
4340A2580C949D498D2C8E71699FFF860214E9EA Vaxol - Heavy Armed Storm Vehicle (Japan) MSX
|
||||
DF797593395346E94AA1CF13A9524E30D631888D Venus Fire (Japan) MSX
|
||||
82868A81D805FB391FCE588623FC888296CBF62A Video Hustler (Japan) MSX
|
||||
EED68D254A17D76C36E094DD8A50A362A964E1B7 Video Hustler (Japan) (Alt 1) MSX
|
||||
6DFC622E350D29859F05FDDB3FA1F974CD4C8BF2 Volguard (Japan) MSX
|
||||
52F95F6F4261BE00AE1B9CAF88A05C021C229E28 Warp & Warp (Japan) MSX
|
||||
DE6DB54CEF2CC4CBCC09C57C8ED0A1FF01347B6E Warroid (Japan) MSX
|
||||
6CE0632ACC2351AE968D7D3CE9C9A0AF05C713CF Warroid (Japan) (Alt 1) MSX
|
||||
28AAF59DADB425C1EF6FCA860439F4E42E1737B8 Water Driver (Japan) MSX
|
||||
818D91505AD39BBA2EAF7F4857C7D41E95FCB233 Wing Man 2 (Japan) MSX
|
||||
D74C381EA17ACB94527EF3ABAA280793A824D322 Wonder Boy (Japan) MSX
|
||||
1672AF5BC1740480E8302F7690589EA5B5391BCB Wonder Boy (Japan) (Alt 1) MSX
|
||||
76209C36BEC7CA971C6DB2E3BBCE267147E4A361 Wrangler (Spain) MSX
|
||||
58E335C943D2647C3FF1E689069D9FA5E1C7FF6E Wreck, The (Europe) MSX
|
||||
15CC2F7412373253E908689A778738D52656AD74 Xyxolog (Japan) MSX
|
||||
1E2ABAC01EB37E43A7A61DA25DC147BBDC30AD32 Xyxolog (Japan) (Alt 1) MSX
|
||||
1A6C5BA03E0CC76F7E001784E1A205375F5602B8 Yab Yum (Netherlands) MSX
|
||||
8161D9B325C708AF463C5622BD89CA94754CFDEF Yamaha Play Card System (Japan) (Program) MSX
|
||||
939ED6053363112C34766335B93D0DDF25059468 Yellow Submarine (Japan) MSX
|
||||
8B3994AB39768F15617FB2CD9199000226B935BD Yie Ar Kung-Fu (Japan) (Alt 1) MSX
|
||||
A3090A15C95334DA3E0F94030EADEE02B5032C0C Yie Ar Kung-Fu (Japan) MSX
|
||||
57827F8D49369E4DBF20A968E535374D35FF1648 Yie Ar Kung-Fu II - The Emperor Yie-Gah (Japan) MSX
|
||||
609D0BAC4933D1BCC877746A3E14D82C204F40E7 Yie Ar Kung-Fu II - The Emperor Yie-Gah (Japan) (Alt 1) MSX
|
||||
5017ABECA8FBED43FF2FD1A936843ACDC7192DCC Yie Ar Kung-Fu II - The Emperor Yie-Gah (Japan) (Alt 2) MSX
|
||||
C60A28A4048710AD3C63EF5BCF4CE03DB54C00BB Yokai Tanken Chimachima (Japan) MSX
|
||||
97E173DAC64DBDE7D6A60DE7606CBA0C860813DB Young Sherlock - The Legacy of Doyle (Japan) MSX
|
||||
DE765E699AF4D76D8FA80FB10D1E41581BEC11BF Zaider - Battle of Peguss (Japan) MSX
|
||||
F784350AF0C5C7407D83DA2BB499C59A08496AAC Zaider - Battle of Peguss (Japan) (Alt 1) MSX
|
||||
B030B3C22BAADD0D419657DCFA4B974AE1CD7508 Zanac (Japan) (v2) MSX
|
||||
FFA8FC5756F7E1D1EF168618F5606ACA10F8B2C7 Zanac (Japan) (v2) (Alt 1) MSX
|
||||
372623401599C57968DAAC0312DD9A0ABBC6BD2F Zanac (Japan) (Alt 1) MSX
|
||||
46E9ED7B7F6DFDA8EEE266476C9EBC4DD9D8FCC2 Zanac (Japan) MSX
|
||||
D88F33EE40839F87CDCE6CC4820E1DD192A01776 Zaxxon (Japan) MSX
|
||||
3DA301B1082C158E505523FA22C19F1B3F4D851C Zaxxon (Japan) (Alt 1) MSX
|
||||
59679B1ED40416F4C8D65085E5473C621BEA6AC4 Zen (Europe) (Program) MSX
|
||||
2F4404D141ACC40E48AF0B12C70CD44B066ECE10 Zenji (Japan) MSX
|
||||
C9440172802818CC5B9AE559FBD3F346A263605C Zenji (Japan) (Alt 1) MSX
|
||||
9D5F6098B71712E9D9E386739B82FC484380F114 Zexas Limited (Japan) (Alt 1) MSX
|
||||
71442AC703C2966142B04071FEDF180E81DAAB9A Zexas Limited (Japan) (Alt 2) MSX
|
||||
A87971B9DF0DE44644C2188F5F475AEF7AE85304 Zexas Limited (Japan) MSX
|
||||
07DB3E3FFB16C138F9DA12CACDE48BF7522A188C Zoom 909 (Japan) MSX
|
||||
FCE65889DC551C83638F2E2ADE1FD61DD44D6F58 Bit Logic MSX
|
||||
C4DFDA5C87C132830B6D776DDE4DE82FE6EC2865 BURNUS v2.0 MSX
|
||||
|
||||
|
|
@ -1,937 +0,0 @@
|
|||
;MSX1 SHA-1
|
||||
FC71561A64F73DA0E0043D256F67FD18D7FC3A7F [BIOS] Kanji Rom - JIS 1st Class (Japan)" MSX1
|
||||
33536DAC686B375BA13FAF76A3BAF2D6978904E0 10-Yard Fight (Japan)" MSX1
|
||||
FD15698518172BCDE3318F08EE032531CBBB9F5D 10-Yard Fight (Japan) (Alt 1)" MSX1
|
||||
0733CD627467A866846E15CAF1770A5594EAF4CC 1942 (Japan)" MSX1
|
||||
DA397E783D677D1A78FFF222D9D6CB48B915DADA 1942 (Japan) (Alt 1)" MSX1
|
||||
F8164D3872B5D54EAEAFC6DE3BB98A472F0C828D 3-D Golf Simulation (Japan)" MSX1
|
||||
9A63D48C4FC05E76C9DE25E5C5F2A0C99B5D1BE4 3-D Golf Simulation (Japan) (High Speed)" MSX1
|
||||
6FE8C1725C35D85A5E489C0C8D21134DEF09ECFB 3-D Golf Simulation (Japan) (Alt 1)" MSX1
|
||||
8F71DDDD429173DF7CE52C5245AF1A76B482A901 3D Tennis (Japan)" MSX1
|
||||
6B8A684DDBADD798A8E599449B823BCECA9CDB58 A.E. (Japan)" MSX1
|
||||
937464EB371C68ADD2236BCEF91D24A8CE7C4ED1 A1 Spirit - The Way to Formula-1 (Japan)" MSX1
|
||||
CB48969F27EAEBF24C61F651399EC2433D85BCBC Actman (Japan)" MSX1
|
||||
3CA4A1AB35B3CBE3DDB238CE88CA9DF258AE37D6 Actman (Japan) (Alt 1)" MSX1
|
||||
AE0C0B0C9468E137EBA5B52F96241ACD55D9746A Adven' Chuta! (Japan)" MSX1
|
||||
EC5111E3B06D64EF51196FF87448E1C62BE4CDD8 Albatros (Japan) (Alt 1)" MSX1
|
||||
13D38CC80112BAA9BCBF03569988C163015D434C Albatros (Japan)" MSX1
|
||||
807676038CBBA043B8099EBA9C5840A4811A7E59 Alcazar - The Forgotten Fortress (Japan)" MSX1
|
||||
F3815211C6183B4F9C26B9E7D0A12C3B3870BDDA Alcazar - The Forgotten Fortress (Japan) (Alt 1)" MSX1
|
||||
639CB280544B060A618AF23DAF234A44BAAF88DE Alibaba and 40 Thieves (Japan)" MSX1
|
||||
ACC14E9886A3281B658DC458C1AE93FA9F24DB04 Alibaba and 40 Thieves (Japan) (Alt 1)" MSX1
|
||||
41B3B1830084EF00B61339C46C96BD0EF62CD6D3 Alibaba and 40 Thieves (Japan) (Alt 2)" MSX1
|
||||
3DE0CEA6A4575E631FEE0DB985E0F0F584761980 Alien 8 (Japan) (Alt 1)" MSX1
|
||||
5FB90BE078E432DB92DD39E621D12F612DBEA4A8 Alien 8 (Japan)" MSX1
|
||||
2639792DF6F7C7CFAFFC2616B0E1849F18897ACE Aliens - Alien 2 (Japan) (Alt 1)" MSX1
|
||||
5380E913D8DAC23470446844CAB21F6921101AF8 Aliens - Alien 2 (Japan)" MSX1
|
||||
0D9C472CF7687B86F3FE2E5AF6545A26A0EFD5FC Aliens - Alien 2 (Japan) (Alt 2)" MSX1
|
||||
627E4D311DFE8A43A629E63F444A6F41EEBAD835 Alpha Roid (Japan) (Alt 1)" MSX1
|
||||
97E7D0EE40C7D6CE1A8EDF7B06E5014E6745CFDA Alpha Roid (Japan)" MSX1
|
||||
1D81E6CC165B3330B9B3C8B4F4DA0417B1AB901E Alpha Squadron (Japan)" MSX1
|
||||
FD6CC08D4842A85A3C741CF9C30883DDFC378895 American Truck (Japan) (Alt 2)" MSX1
|
||||
88FA967C420F7090A11E5DE1D3674F4527F53D52 American Truck (Japan) (Alt 1)" MSX1
|
||||
076ABC988D51FAEF30143750DD41318A8A48C5C4 American Truck (Japan)" MSX1
|
||||
27C40EC7013C1AD1F9A7E1AC1E0C8BE99F1E703F Anaza - Kaleidoscope Special (Japan)" MSX1
|
||||
A1ABFC53A36D387B9F0687E3F5897C1EBDF21517 Angelo (Japan)" MSX1
|
||||
3A4A65DC6D540297A7AAE0A9914897AACF740807 Angelo (Japan) (Alt 1)" MSX1
|
||||
495876C504BDC4DE24860EA15B25DDA8F3B06C49 Animal Land (Japan)" MSX1
|
||||
E894A38F3E2AD435CC5D17A66600E6016B5E47FB Antarctic Adventure (Japan)" MSX1
|
||||
44DEAEF747C572A4550681FCCCC1BBBDC46A1FFC Antarctic Adventure (Europe) (Alt 1)" MSX1
|
||||
2185BE579CB51729F66BF02BDF3A7B6A3CBD7B40 Antarctic Adventure (Europe)" MSX1
|
||||
F236345F43828597739F4A326318B6A3876FF73F Anty (Japan)" MSX1
|
||||
1A00EEF3DF449D71ABF4BE5A4C8D01BA9DCD6B79 Anty (Japan) (Alt 1)" MSX1
|
||||
633CB458EEAB0FEA59A70A9A620B7783A44EB0A6 Aqua Polis SOS (Japan)" MSX1
|
||||
93462AC9A322C2E5E0D996FDDBE9EBA2F3436931 Aquattack (Japan)" MSX1
|
||||
EC53D72E41E114574F4C116CAB19E1633F3DA207 Aramo (Japan)" MSX1
|
||||
45CE64A455A2B07F3C8A6D541CDA3B0E058CC732 Arkanoid (Japan) (Alt 1)" MSX1
|
||||
E1527AE16D33A09D9CF3D4EA52E63337D2273910 Arkanoid (Japan) (Alt 2)" MSX1
|
||||
5002BA598469B34AF25BFF5011CCC70ED3723B0D Arkanoid (Japan) (Alt 3)" MSX1
|
||||
2183F07FA3BA87360100B2FA21FDA0F55C0F8814 Arkanoid (Japan)" MSX1
|
||||
FBE43D67A5BC0AEDB2E194A4E5F9497B7488362B Athletic Ball (Japan)" MSX1
|
||||
90BDD12D632D2E909AC5D69235AD0366F430B734 Athletic Land (Japan)" MSX1
|
||||
DE9EB0E9EF183F49E9D9B631F8818F9CAC5DF409 Athletic Land (Japan) (Beta)" MSX1
|
||||
866CB3AB10F17E4FB356FBD7277BBF17C4E27EBE Athletic Land (Japan) (Alt 1)" MSX1
|
||||
C5F1897C416F62CD58CD6257282E3428155CD698 Attack Four Volley Ball (Japan)" MSX1
|
||||
4C8A97669017296C2360FF9D53694A292197991E B.C.'s Quest (Japan)" MSX1
|
||||
0D504C359661AC731DE07A7319AFD0E31F01A5D7 B.C.'s Quest (Japan) (Alt 1)" MSX1
|
||||
C345357E71D1B8F2C9663BF28ABB5A3A2957D49F Back Gammon (Japan) (Alt 1)" MSX1
|
||||
2B8878609BCC0D1555AE250D621BA6E9DF4AFC52 Back Gammon (Japan)" MSX1
|
||||
469B07EEF08348C9ACC14E63BA0CD35AEF236983 Back to the Future (Japan)" MSX1
|
||||
1A6A751334C663FBFDF93F617A7D779F76F488CE Back to the Future (Japan) (Alt 1)" MSX1
|
||||
363B5A8C94CDB63A7EE72B9D25F7B5053CAB319A Backgammon (Europe)" MSX1
|
||||
CD452442338366411F6B24739FE59E20F3AC24DC Balance (Japan)" MSX1
|
||||
B103D4248729AEDA9EBF5766C1791B1950246968 Balance (Japan) (Alt 4)" MSX1
|
||||
28323E06A402747A1E131DC30CE031A339F6C947 Balance (Japan) (Alt 3)" MSX1
|
||||
134A6FAF1592978608B55269AEA101D5FAD68760 Balance (Japan) (Alt 2)" MSX1
|
||||
6D73EE99AC367A2558FD9366AF75AD39ED0D4E69 Balance (Japan) (Alt 1)" MSX1
|
||||
7A40237867F62611D0E976666451648EDB80753C Banana (Japan)" MSX1
|
||||
B0956B97C9087AABAB333C271C7AFD9754AE84CD Bank Panic (Japan)" MSX1
|
||||
B337EA56278523F984D1B000CD00F339D82017A0 Bank Panic (Japan) (Alt 1)" MSX1
|
||||
9F0CBB1191235ECCA4985DE976A0993744B57930 Basic Lessons 1 (Japan)" MSX1
|
||||
01CF858888F5A0D3AEE08F42A66C515AB0D06400 Basic Lessons 2 (Japan)" MSX1
|
||||
709FB35338F21897E275237CC4C5615D0A5C2753 Batman (Japan)" MSX1
|
||||
EE7DBD36A2B0BBAE11C68AC4DE75077F283BED05 Batten Tanuki no Daibouken (Japan) (Alt 2)" MSX1
|
||||
F86A7945B34C97CC58D5EE27964968870BFCEF93 Batten Tanuki no Daibouken (Japan) (Alt 1)" MSX1
|
||||
9B58C70B976CA1D841185DE862E7D663EC9DB56B Batten Tanuki no Daibouken (Japan) (v1.03)" MSX1
|
||||
8B63F36BE31D7D021C19103EBE8C68B69AAE699C Battle Cross (Japan)" MSX1
|
||||
0F214EA9E8D673EE0C66CB6615032E57920D588B Battleship Clapton II (Japan) (Alt 1)" MSX1
|
||||
59BC608B1CB5BDE2230BCA0EB045CD6C58650774 Battleship Clapton II (Japan)" MSX1
|
||||
1BDB1898796E2B48B62A356035192B163113962C Beach-Head (Europe)" MSX1
|
||||
1231984AE24BF35F9F38596B864420D8CCD3F30B Beam Rider (Japan)" MSX1
|
||||
F51F936887498D21F6EE9FE8A7701633BE67E79D Beam Rider (Japan) (Alt 1)" MSX1
|
||||
01EBDD5981C4841ABDDF6F76EB1F73E237E7688F Becky (Japan) (Alt 2)" MSX1
|
||||
702D8F1762D4EFE994F520E21E8867ADAE13B817 Becky (Japan) (Alt 1)" MSX1
|
||||
D69D4A6F2834B20DF3A2AFBD7A927220E96E31E1 Becky (Japan)" MSX1
|
||||
3197D73A5400A72420F91DEF6D3AA8BDCB392754 Bee & Flower (Japan)" MSX1
|
||||
250D4C7C6565B0C4935F6301E8DE2C182E659FD0 Bee & Flower (Japan) (Alt 1)" MSX1
|
||||
A2DE457567E87C794FBA8E35C992EAC352DA78BE Bee & Flower (Japan) (Alt 2)" MSX1
|
||||
4806E6BC1FD24D5A62C6DF57EA8FD1B51D6E4B80 Bifamu (Japan) (Alt 1)" MSX1
|
||||
EBFF5D2B4253F62D3A00F1A6D6B4D81053C7B8A6 Bifamu (Japan)" MSX1
|
||||
EF476E25FB6B7221CA778A379117885450DD36F0 Binary Land (Japan)" MSX1
|
||||
2588B9ADE775B93F03FD4B17FD3F78BA70B556D6 Black Onyx II, The - Search for the Fire Crystal (Japan)" MSX1
|
||||
5400C0C929B31A70E76AAC676B91D40445F1B427 Black Onyx, The (Japan)" MSX1
|
||||
65AF16D35B8D8454EC07718E9F8948335CA73BAD Blagger MSX (Europe) (Converted From Tape)" MSX1
|
||||
8E3E05E8928B5B77FA61F3B833E164BF5222A5FB Block Hole (Korea) (Unl)" MSX1
|
||||
BD4B8C48F1D8107F11AE680A787D7B3825669B7C Blockade Runner (Japan)" MSX1
|
||||
E2EF32F2FC312F96B8424569E9E85A6EA3B21CE4 Boggy '84 (Japan) (Alt 1)" MSX1
|
||||
5C96169207E197237AA728D8CE4E24C0635D5904 Boggy '84 (Japan)" MSX1
|
||||
04283AE02107917DA6F54A0F38D3A28254F7AB69 Boggy '84 (Japan) (Alt 2)" MSX1
|
||||
D7E2A4F78B3E240309C6367AC9DD9C9AEB95E3EE Boing Boing (Spain)" MSX1
|
||||
E5171C368883DE03FC8D75E61BF23D954EC1BBA4 Bokosuka Wars (Japan)" MSX1
|
||||
5503D23FAF94F076410D252F69F6BF5ECE4DA292 Bokosuka Wars (Japan) (Alt 1)" MSX1
|
||||
482CD650220E6931F85EE8532C61DAC561365E30 Bomber King (Japan)" MSX1
|
||||
5324E053709FF8DA6C18AE4AFBA6A2E0C3A722BA Bomber Man (Japan)" MSX1
|
||||
E700493E1C4C14F711E9C1C262FE3E8D76931CA3 Bomber Man Special (Japan)" MSX1
|
||||
0B3241202F0E2BE470E5F2E6139C01983A895BC8 Boogie Woogi Jungle (Japan)" MSX1
|
||||
05B7A1DB1FF15F712E619FD1C79FD7710E93CB3B Boogie Woogi Jungle (Japan) (Alt 1)" MSX1
|
||||
86F8E3250CDCBADCCF131255A1EF59ED291BE8E9 Boogie Woogi Jungle (Japan) (Alt 2)" MSX1
|
||||
EF535AB6013D9B6E38227272F2EBE6A0F0B33CB5 Boomerang (Japan)" MSX1
|
||||
DA7CFD16DD1A76AE6B551CEABFD7053CA8E3412F Boomerang (Japan) (Alt 1)" MSX1
|
||||
16C3CED0FB2E360BC7C43D372A0A30EB6BD3963D Borfesu (Japan)" MSX1
|
||||
451CBB072011B26A7E0BC9931E67995A71F5FD6F Bosconian (Japan)" MSX1
|
||||
33AD6D1BF1FB816B232EA706D149327E363C7B21 Bosconian (Japan) (Alt 1)" MSX1
|
||||
0BF7B432DC132F9A7BC74106261BCA07D5F99690 Bosconian (Japan) (Alt 2)" MSX1
|
||||
B15E73A5FF1AE17AC67F2CEBB5862D5E5BD80BC0 Bouken Roman - Dota (Japan)" MSX1
|
||||
1FFEF57E6C06068B330027294AAE173103C8F141 Bouken Roman - Dota (Japan) (Alt 1)" MSX1
|
||||
14FAE375B81C86F71E872ADCA792C23AAFAC66A0 Boulder Dash (Japan)" MSX1
|
||||
F1F571C1D9360839450C26D73C6AEF89E1E052EB Bouncing Block (Spain)" MSX1
|
||||
B76FFB94A08457DF0A51897CD87CD8A91610224C Bouncing Block (Spain) (Alt 1)" MSX1
|
||||
208CE6CBFF7402BFE52B1062E6B10AE09C0A3179 Brain, The (Japan)" MSX1
|
||||
BCFDB43B275C62A76856AAB94FB1B53BD92B2DB2 Break In (Japan)" MSX1
|
||||
3D065377F11B23410282B6B76F26BD93B9D05184 Break Out (Japan)" MSX1
|
||||
C64F2FAD6417C64595BC204D843527E17A58776F Brother Adventure (Korea) (Unl)" MSX1
|
||||
6F9B4D791F4A43D7182650F21A7BFE88D1C5C2B4 Brother Adventure (Korea) (Alt 1) (Unl)" MSX1
|
||||
621EA075A534584361C9E9D640E39007A79DFD78 Bruce Lee (Japan)" MSX1
|
||||
D1ECE8B5FFEB9B99230E640AF32CB488FEE51E35 Bubble Bobble (Korea) (Unl)" MSX1
|
||||
58551545E73C838A2E995E6951AB644ED2590786 Bubble Bobble (Korea) (Alt 1) (Unl)" MSX1
|
||||
CE1376941359471CAE41887FE11F10D3B696A926 Burgertime (Japan)" MSX1
|
||||
613C741535C92DFB01AFEC4135EF8EBDDB49F999 Buru To Marty Kikiippatsu - Inspecteur Z (Japan)" MSX1
|
||||
B755D7DB109CD0A9392ACCD1C83E6D995A8A04D6 Butam Pants (Japan)" MSX1
|
||||
2F7FF0438F1A8D80292C9E1CB8D77A92C600B505 Butam Pants (Japan) (Alt 1)" MSX1
|
||||
E6A1D90A7A8B4E4B8A8E1AFB3D971866931B986D Butam Pants (Japan) (Alt 2)" MSX1
|
||||
CD69CE70747BC0DEEBBA9FD307A07F5DFB926CC3 C-So! (Japan)" MSX1
|
||||
2A0F9899A4D8DBA76DB501D6E3435546CC7CD9AA Cabbage Patch Kids (Japan) (Alt 1)" MSX1
|
||||
C06DE0EDA82E1DAA3EA3CBC5EBA5D884FD0CE8E8 Cabbage Patch Kids (Japan)" MSX1
|
||||
69710F4B9CC3440E58C54BD4C562B3E90FF323E0 Candoo Ninja (Japan)" MSX1
|
||||
77F3F6758BD4CF5D2B44C51DE958AA967C41A9D7 Candoo Ninja (Japan) (Alt 1)" MSX1
|
||||
D32279E01FB5762778D696ACC2053B9503D5A715 Cannon Ball (Japan) (Alt 1)" MSX1
|
||||
B36C925005F1E530CAB2B5F6E2A5DDFD182C0140 Cannon Ball (Japan)" MSX1
|
||||
31D80470C8D23EC8B14256AA32F3D54DBC532D76 Cannon Fighter (Japan)" MSX1
|
||||
F025C9C2DB97DCE608FCC1050426BEFF0DEA43EB Captain Chef (Japan)" MSX1
|
||||
E93C396649BF6328103E8DA0247952EBEF2A04E9 Car Fighter (Japan)" MSX1
|
||||
11E2F95D1B58E1244EFDA761603A2AE6D0090D18 Car Jamboree (Japan)" MSX1
|
||||
8A158CDEC0923B81CE13AF2DFFA5D1B7E096A469 Car Jamboree (Japan) (Alt 1)" MSX1
|
||||
97AF4F422A283AC8BA387EB0B1B29395C2C966EB Car-Race (Japan)" MSX1
|
||||
AB7354C9CED9782D572C4DD69249B76A1244E5CE Car-Race (Japan) (Alt 2)" MSX1
|
||||
E7396AD700F7EDF98CC2B0EC2E6127A68D3CD9BA Car-Race (Japan) (Alt 1)" MSX1
|
||||
5B17CB69697CF55DFF1F0B8777E19D5ABC1771FC Casio Daishogai Keiba (Japan)" MSX1
|
||||
CAD653766B597A4AA130A9A1956ECE77BA4D52BC Casio Pachinko-U.F.O. (Japan)" MSX1
|
||||
17D6DB13D7D76FBD110F53B168AB0001C7E65817 Casio Ski Command (Japan)" MSX1
|
||||
FE53D85ADB758103097FD56132E71C7F4CB32313 Casio Ski Command (Japan) (Alt 1)" MSX1
|
||||
0A2209E0A71684493998F6618AF032BA580D4FF9 Casio Worldopen (Japan)" MSX1
|
||||
811DCA8FC14A2B00F503FBEF74FDEAE4F2873D4C Castle Excellent (Japan)" MSX1
|
||||
D55E9E237504BC6444C6B62894BF88292150042A Castle Excellent (Japan) (Alt 1)" MSX1
|
||||
615C08820B926E28B143CD7812852E011D3EEFFB Castle, The (Japan)" MSX1
|
||||
B6F10B6BEDC26D9415335997493139CE7A2C7916 Chack'n Pop (Japan) (Alt 1)" MSX1
|
||||
0B9A870D1E6CC712A3EFCE2349FB1C1CF6902D22 Chack'n Pop (Japan)" MSX1
|
||||
3ABAE41CB742B76FF45DD178BD7DB346137FE0FA Challenge Derby (Japan)" MSX1
|
||||
39CB046A9B6B6EF4E769CDC6FDF36B274CD44039 Champion Boxing (Japan)" MSX1
|
||||
EBB46DD4CF36407AD82D9F50D9BEF3E938DC144E Champion Ice Hockey (Japan)" MSX1
|
||||
F9E9A6E517EE0B9B3147ABB6144B31ED2CA8DBDA Champion Kendou (Japan)" MSX1
|
||||
A502E37F580BD287ED8338FCB1D809B8DC90BBE0 Champion Kendou (Japan) (Alt 1)" MSX1
|
||||
AF1A6F4DD12D726A7A4377753CE3DB82BF24EBA4 Champion Pro Wrestling (Japan)" MSX1
|
||||
D1E3AFECDE1656099DADFF99C6ED2AA8FA6DD834 Champion Pro Wrestling (Japan) (Alt 1)" MSX1
|
||||
0C364C3499DF76F2E15D2AEB744A0DE3730FF47B Champion Pro Wrestling (Japan) (Alt 2)" MSX1
|
||||
821C611B851DDD4CF8CFB4E77CECBC882F12EB72 Champion Soccer (Japan)" MSX1
|
||||
650381B96F36E74A4EAF5AE3F924F6F8DEAC7100 Championship Lode Runner (Japan)" MSX1
|
||||
A4BE5763CDF2DCD647B87E3AECBAB28ECC69776E Checkers in Tantan Tanuki (Japan)" MSX1
|
||||
DD5C2D2D5F0947159B7615F647FB8121F3B037A2 Cheese (Japan) (Program)" MSX1
|
||||
2C0C71C549738D668518DB317DD70AECEFD4AA72 Chess (Japan)" MSX1
|
||||
20AEB411AB5ADB9BD3DB412A7837E496969F8CE3 Chess Game, The (Europe)" MSX1
|
||||
A2A7C93C9C8B55A5CCE4C9005F3C194E3B762E9C Choplifter (Japan)" MSX1
|
||||
30673D173F96FE1830E579F18DAF8AC9FC3366CB Choplifter (Japan) (Alt 1)" MSX1
|
||||
B3CA70C8C8120F8261BB865BAF5F57B6506CA02E Choplifter (Japan) (Alt 2)" MSX1
|
||||
99F9E9753EDBAEE820E36A1A58F1CD7AE2B26265 Choro Q (Japan)" MSX1
|
||||
EE3CA231328534BBA92F9A908C4FAED865BCEA68 Choro Q (Japan) (Alt 1)" MSX1
|
||||
20CE189D670C0FE5F2A945D73107DF7D83070FF7 Chugaku Hisshu Eibunpo 1 (Japan)" MSX1
|
||||
AE6D0EFD55DEF94274F4CEC459DF8927D132675A Circus Charlie (Japan)" MSX1
|
||||
07AF8B1EC0786C44778F68EF3BB0B3D4793F42E3 City Connection (Japan) (Alt 1)" MSX1
|
||||
0071B2EB214FF002DBBB7532653585B35B56F243 City Connection (Japan)" MSX1
|
||||
308C73FC04C3B390B72EA8D4980C94C74BA38A5C Coaster Race (Japan) (Alt 1)" MSX1
|
||||
17F24B9339291DEA40D2ED36517F223B9E4F49E1 Coaster Race (Japan)" MSX1
|
||||
47EA8D512D9FEC15DF8770F3B5017AEA9BBBA9FD Coaster Race (Japan) (Alt 2)" MSX1
|
||||
AC391FE51F69E0A55FE3AB66C8EC3F2792DD5D08 Color Ball (Japan)" MSX1
|
||||
83FDAA429AD8B155AB2328A72FCB8DE642FF5615 Color Ball (Japan) (Alt 1)" MSX1
|
||||
95D8A590BAD595F9441AEA4BF68667DE05B1B34B Color Ball (Japan) (Alt 2)" MSX1
|
||||
9B4DA7636809D5690D6BD5D782FFA3CF9F4C63EC Columns (Japan)" MSX1
|
||||
1CF39E12313FF3064353C136262F176A56AB20A6 Come On! Picot (Japan)" MSX1
|
||||
546AAF36EE78717FE06125185F0D420FDFF0D34C Comecocos (Spain)" MSX1
|
||||
A054DDEAF471212764CC596BCBD30E94B10E6C28 Comet Tail (Japan)" MSX1
|
||||
FC327D3946366CA75DE0D0619EB0917A27E1BD61 Comic Bakery (Japan)" MSX1
|
||||
D2604A1F76CADD36EDE570E23AD49B0885187E25 Comic Bakery (Japan) (Alt 1)" MSX1
|
||||
8CF06F93D4E8BCF7BE04AE8532F72E6EEC8BA2F1 Comic Bakery (Japan) (Alt 2)" MSX1
|
||||
630AEC6F93DF8D1EF83C52A0BB6EC571B9C6EED4 Computer Billiards (Japan)" MSX1
|
||||
1FC9D3B54A617E57FD6ED10F2CE3C01456710E37 Computer Nyuumon - Computer Lessons (Japan)" MSX1
|
||||
BD8F335FC45E9920F0691A525A0FC853B2E4B595 Computer Othello (Japan)" MSX1
|
||||
81C50AF8EF09E0B7A8A69FD4715592B5E803CDB5 Computer Othello (Japan) (Alt 1)" MSX1
|
||||
99D3EF107F2AC4D452B05EB96B922924EF4C5434 Computer Pachinko (Japan)" MSX1
|
||||
09CC29B413DC7B8747420615BF798169AE68AD14 Con-Dori (Japan)" MSX1
|
||||
868D84F8A6AE0434BF86ADFBB86996CEDDEFBA84 Con-Dori (Japan) (Alt 1)" MSX1
|
||||
8592B14EE701EAAF433113A26B199084C124992F Con-Dori (Japan) (Alt 2)" MSX1
|
||||
9865F0BC4D54137809F0D8B48D5461DDF0C5BF4C Confused (Europe)" MSX1
|
||||
5AD0BA434407A7EEECB597B3D20BCFC6FE05C319 Cosmo (Japan)" MSX1
|
||||
BB7468DD32A160851B39121D24713B0B4E065C19 Cosmo (Japan) (Alt 1)" MSX1
|
||||
0AC6C061C3897A3989DCD75B4878C850C71E4BB8 Cosmo-Explorer (Japan)" MSX1
|
||||
B6F8E1431BDA1296C2959B10B021B80E0FF2A8A2 Cosmo-Explorer (Japan) (Alt 1)" MSX1
|
||||
613CC52FBD5822ADE47DAA3EC21479641A009C2C Courageous Perseus (Japan)" MSX1
|
||||
6CF3F098D592D7DCB767A0E24B5CAF327B5F22DB Courageous Perseus (Japan) (Alt 1)" MSX1
|
||||
9E0312E72F30A20F556B64FE37DBBFE0D4471823 Craze (Japan)" MSX1
|
||||
FF5B12275950EDAE9ECE3F49ED59402D47F23B1B Crazy Bullet (Japan) (Alt 1)" MSX1
|
||||
5D5DFE6CEC605DE421C3AED3A743D6840FEC1457 Crazy Bullet (Japan)" MSX1
|
||||
76C191BF7DCC0888D65E543C47F615AE45B75B92 Crazy Cars (Europe)" MSX1
|
||||
8ACA0EE5845B0B39AF624E8A998BB04F02D0FDA4 Crazy Train (Japan)" MSX1
|
||||
31B452FF42624C6AC1E0141D65869DF1EABE5BB3 Crazy Train (Japan) (Alt 1)" MSX1
|
||||
BB902E82A2BDDA61101A9B3646462ADECDD18C8D Cross Blaim (Japan)" MSX1
|
||||
C6F090882886DCF783E5B65BFF75C5E034FBB2EB Crusader (Japan) (Alt 2)" MSX1
|
||||
3D2D0A2EB3D12FA67ECBBB90B7AC1BDC76AD8412 Crusader (Japan) (Alt 1)" MSX1
|
||||
D0E8BC3F5FD93DCD07CBB945B00018A491842242 Crusader (Japan)" MSX1
|
||||
18E87E15B09EC2FDDC52FAD10EDC57918FADEC34 D-Day (Japan)" MSX1
|
||||
BA325451FB5A80C2872742C5BD61E7BB75C5763B D-Day (Japan) (Alt 1)" MSX1
|
||||
C62E058C2A54F3C9ADBA2E6A3006B8E749C43BD7 D-Day (Japan) (Alt 2)" MSX1
|
||||
0BA8AE697F3045B3B3175B27D00AC0E522288FF1 D-Day (Japan) (Alt 3)" MSX1
|
||||
27A487E56721E947C1F46644F2F8A50156DDA82D Daidasso (Japan)" MSX1
|
||||
2418C0302ABBCE8B0F8556B63169C60A849F60EE Daiva Story 4 - Asura's Bloodfeud (Japan)" MSX1
|
||||
D8C074267E0B2EC225D5ACBA688EA7304233DA13 Dam Busters, The (Japan)" MSX1
|
||||
0738FEFA62BE2ACBD0F324F28538BBA9551406AC Dam Busters, The (Japan) (Alt 1)" MSX1
|
||||
6A4E8325D2174747D56CBE4C6803CBF40EB40A62 Danger X4 (Japan)" MSX1
|
||||
7C618058809302BC3553D6189BCF310F2E5B0E08 Danger X4 (Japan) (Alt 1)" MSX1
|
||||
50EAFA5D735AF5B34D14F9F6B8C2D9CD2F0441DB Danger X4 (Japan) (Alt 2)" MSX1
|
||||
4B19979E01BAB2289ABB6034CB3C2D02C2E890D1 David II (Japan)" MSX1
|
||||
6856A13B67750D36C4C466D30472DC5465879BBF Dawn Patrol (Japan)" MSX1
|
||||
A1656F612360A126E09EF2BAAA8002D92054125D Decathlon (Japan)" MSX1
|
||||
5D43CB6CA89F31D5F543E4DCD3FA9987B9769602 Decathlon (Japan) (Alt 1)" MSX1
|
||||
E6419519C2D3247EA395E4FEAA494A2E23E469CE Deep Dungeon (Japan)" MSX1
|
||||
D82135A5E28B750C44995AF116DB890A15F6428A Deep Dungeon II (Japan)" MSX1
|
||||
6BAD9AF91907C2A97FA2F4B9DD2A699CE0D70FBA Demon Crystal, The (Japan)" MSX1
|
||||
D5B164797BC969B55C1A6F4006A4535C3FB03CF0 Demonia I (Europe)" MSX1
|
||||
4B4A58A310A1138B95192D7FE0881BBDC45601D4 Designer's Pencil, The (Europe) (Program)" MSX1
|
||||
91BA5C063D0ED383165B26E4609D7ABDA02A5242 Devil's Heaven (Japan)" MSX1
|
||||
6E2E5CFF4EE4DD935FBE6684F2C54B39ECA06092 Dig Dug (Japan)" MSX1
|
||||
E3391DAAB17710B3F34C70F60AC6C8BFEA15B6CC Dig Dug (Japan) (Alt 1)" MSX1
|
||||
7DC7F7E3966943280F34836656A7D1BD3ACE67CD Digital Devil Monogatari Megami Tensei (Japan)" MSX1
|
||||
03B42B77B1A7412F1D7BD0998CF8F2F003F77D0A Digital Devil Monogatari Megami Tensei (Japan) (Alt 1)" MSX1
|
||||
65F89C813A1D57A8F8A04E81682202F759EE6980 Dip Dip (Spain)" MSX1
|
||||
6B12BB291E1A98A43CCFF8CEB94D23585848FEBC Doki Doki Penguin Land (Japan)" MSX1
|
||||
23531B4E8A2B3E975483318846CF89E65F32F7D1 Doki Doki Penguin Land (Japan) (Alt 1)" MSX1
|
||||
F8FEEAC4384BC4F109C70F962E15CE925BF70C13 Doordoor (Japan)" MSX1
|
||||
19C610339C0480C3D2D0D1C21E3CCBF2179BB191 Dorodon (Japan)" MSX1
|
||||
6724B2ABCE8145609333C8B2964DE0F1A90D9CD5 Double Dragon (Korea) (Unl)" MSX1
|
||||
6E6B8CDC55713EABC724F3EC9624E9884254AB33 Dr. Copy (Japan)" MSX1
|
||||
533DC6D28CA60C090740879DCB3CFA386544EE45 Dragon Attack (Japan) (Alt 1)" MSX1
|
||||
761AB0AA7F528BF0F51EA9DE75C847EA949478D7 Dragon Attack (Japan)" MSX1
|
||||
7B94A728A5945A53D518C18994E1E09A09EC3C1B Dragon Quest (Japan)" MSX1
|
||||
3DF7C19F739D74D6EFDFD8151343E5A55D4AC842 Dragon Quest II (Japan)" MSX1
|
||||
D7B46AECE68C924E09F07E3DF45711F337D35D6A Dragon Quest II (Japan) (Alt 1)" MSX1
|
||||
397716D26A075C6D731F0B04F3FA24AA39521798 Dragon Slayer (Japan)" MSX1
|
||||
6C1814C70D69A50EC60E39EF281F0B8CD7BF8598 Dragon Slayer II - Xanadu (Japan)" MSX1
|
||||
F100A76117E95AB0335E89A901E47D844BBC0AB6 Dragon Slayer IV - Drasle Family (Japan)" MSX1
|
||||
2F0DB48FBCF3444F52B9C7C76BA9C4BD38BC2A15 Dragon Slayer Jr. - Romancia (Japan)" MSX1
|
||||
E34161034364EF03DF907D62976C2AC8F551404F Drainer (Japan)" MSX1
|
||||
9B815EFAA927C11827ACFDB0F9B9197B5AC97572 Druaga no Tou (Japan)" MSX1
|
||||
D1FBDBDF2E830139584D7DC796806AA3327720DD Dungeon Hunter (Japan)" MSX1
|
||||
353E2BD901E5502375DC92A04E1686C1192FCF42 Dungeon Master (Japan)" MSX1
|
||||
F63D274A8A7AD8E285DD8800264AB9C14AA9F870 Dunk Shot (Japan)" MSX1
|
||||
E7D9D1E4DCF48779DAB41EB6C15478F934BD8BC1 Dunk Shot (Japan) (Alt 1)" MSX1
|
||||
C20DEF84EFE71EFDF91DF3100919D151B2E7BDC1 DX7 Voicing Program (Japan) (Program)" MSX1
|
||||
D7109CF20A22558F923C833FF0B4E2311340ACB1 Dynamite Bowl (Japan)" MSX1
|
||||
D916F0E4BD3C829A0472C6EC18D08907A5C991F3 Eagle Fighter (Japan)" MSX1
|
||||
83FED4090D0942C8E0054437745C1C0EBEFC6222 Eagle Fighter (Japan) (Alt 1)" MSX1
|
||||
28BF2354CDD70E30B682F40B734029ECE44D70BD Eddy 2 (Japan) (Program)" MSX1
|
||||
20F1883C45FC3C39DDF48A7DE69B6EF588FAC8FB Eddy 2 (Japan) (Program) (Alt 1)" MSX1
|
||||
E49F66E8BA45D0647C93A57BBC1FB7ABA4665A6E Eggerland Mystery (Japan)" MSX1
|
||||
473BC0EA85ED1B218974796D819416E711AC193F Eiwa Jiten - English Japanese (Japan) (Program)" MSX1
|
||||
6CBDDD118AFE63E79CB8A40F8AA879DF1C7590E1 Elevator Action (Japan)" MSX1
|
||||
7DE755F98B6A68886E61473D524D0AA6AB6577D7 Erika (Japan)" MSX1
|
||||
7F6906FF7017A558952197198AC7A1C1E222ED9D Exa Innova (Japan)" MSX1
|
||||
A14B357A1B16163F5FFA96B0B617D352713AC047 Exa Innova (Japan) (Alt 1)" MSX1
|
||||
B5B28F53B16D43742D9D7DAF5EE7DCF74B80E6C8 Exchanger (Japan) (Alt 1)" MSX1
|
||||
DED8D969542B7BE02524037FA244E6648C3F4E03 Exchanger (Japan)" MSX1
|
||||
8ECC34EBFF9D37C0FE9560CFDC53A052CFF3D1AB Exerion (Japan) (Alt 2)" MSX1
|
||||
975FDF521C08030896EB50AF4F39A23500EAF7AC Exerion (Japan)" MSX1
|
||||
09B0EA7C5595F4E9C9A15219F30E3423BBC25F66 Exerion (Japan) (Alt 1)" MSX1
|
||||
2B36FE2B0D98D65AB31F13FCB858DB6858A51D46 Exerion II - Zorni (Japan)" MSX1
|
||||
AA1621A6B61F7CFB2DF8DD2CF8647A943E13DFA7 Exerion II - Zorni (Japan) (Alt 1)" MSX1
|
||||
3137E676C37195D46FE6ACC4395D0DC4D711D919 Exoide-Z (Japan)" MSX1
|
||||
06BFDD6D0F0D84B1D534C81B27150193969168B3 Exoide-Z (Japan) (Alt 1)" MSX1
|
||||
91BEE8AF612F69C5413A1D23102CC5EA896C2CAA Exoide-Z (Japan) (Alt 2)" MSX1
|
||||
22C7ABE6C8F4B7897ECB583D4913D35B5F62C5E1 Exoide-Z Area 5 (Japan)" MSX1
|
||||
42FBB18722DF3E34E5B0F935A2DC0CE0D85099E9 F-1 Spirit - The Way to Formula-1 (Japan) (Alt 1)" MSX1
|
||||
FF72A1788D47F9876D9FABD720F6A289FB409090 F-1 Spirit - The Way to Formula-1 (Japan)" MSX1
|
||||
5C7A13B64B48065231F05C35B4C8B209534F3A8B F16 Fighting Falcon (Japan)" MSX1
|
||||
A469935DD39A856C06676817F51B403A3678AC1A Fa Tetris (Korea) (Unl)" MSX1
|
||||
EDD61208E11149E226CD2EDDF5C9ECA8EE1BA33E Fairy (Japan)" MSX1
|
||||
E11AFC03DB4E1D03976D02796B29DA9C65D4FF3D Fairy Land Story, The (Japan)" MSX1
|
||||
2BB837A9051277BA574D8351A9F91F9E57033074 Fairy Land Story, The (Japan) (Alt 1)" MSX1
|
||||
216243B4BCB9070F9E86C3F04EDAAA493E4B459C Family Automation Language Community (Japan) (Program)" MSX1
|
||||
8557DCDB4CF1E15180D17ACC8E6D515BF7BF7E7C Fandom Library #1 (Japan)" MSX1
|
||||
7752B6624FB80D9499AAAD28DD5776EC74565576 Fandom Library #2 (Japan)" MSX1
|
||||
C2F4DF1BD91F7DEE1536774B9D7089086B9BF835 Fandom Library #3 (Japan)" MSX1
|
||||
048737F995EECB1DD8DD341D750EFD005267796F Fantasy Zone (Japan)" MSX1
|
||||
E6B71484D5AB578FD3695917FCE3C1E805A5B536 Farm Kit (Europe) (Program)" MSX1
|
||||
AE52922A197A2F47C7FC4ADF9DBFDE13C136ED14 Fathom (Japan)" MSX1
|
||||
43DBCC9536FE61C8172ECEEEC1481778F7A2B9BD FB-01 Voicing Program (Japan) (Program)" MSX1
|
||||
D833C66DD541239908555762E04BCBB22BCA748A Final Justice (Japan) (Alt 2)" MSX1
|
||||
9BCA89C71C033BB9A85EE30CF75960EC839C0462 Final Justice (Japan)" MSX1
|
||||
1E70296A07A5FF62D01E5115B8C8B87F891585C9 Final Justice (Japan) (Alt 1)" MSX1
|
||||
D086280DEA7FB10FABAAE26ED9D404BBE69C70C4 Final Mahjong (Japan)" MSX1
|
||||
A553C3F204C105C23B227A1E5AEB290671CCDBEB Final Zone Wolf (Japan)" MSX1
|
||||
0889CA383BCF24198DB1FB2DD23DEA1BF8C18BE8 Fire Rescue (Japan)" MSX1
|
||||
EC0320EDA10BF6BBEE8081F6672A7BF9D858C1BB Fire Rescue (Japan) (Alt 1)" MSX1
|
||||
40C626D8C53E2E2D4E7E25D55AA2C11C2645780F Flappy (Japan)" MSX1
|
||||
6F391D0408223138B7927ED719D7AC1B6C38CA0D Flappy (Japan) (Alt 1)" MSX1
|
||||
46F3954D7F92F5D00F45B82FDDE543C28A4B53C9 Flappy - Limited 85 (Japan)" MSX1
|
||||
DE95B99DFFEAB5C2B453778DBDC8723DC15CBFD7 Flash Point (Korea) (Unl)" MSX1
|
||||
A3FC0A55A91ED0041221F8DA788D824D9D795913 Flash Point (Korea) (Alt 1) (Unl)" MSX1
|
||||
60F685670DE6D2D8ED5F1B1DDD40FAC851FF1982 Flash Splash (Japan)" MSX1
|
||||
5999CC1407AFE5BA8A760F16178C4CAC9C3FA192 Flicky (Japan)" MSX1
|
||||
7BF28813FB11E9DB3BF78CC73EE5FB2D76B547DE Flics, Les (France)" MSX1
|
||||
3EEE7C72362522C27866D4367A8CF1E22932DB32 Flight Deck (Japan)" MSX1
|
||||
488F01314DA5644FBF2CA938C6F9720EF2B0D0F9 Flight Deck (Japan) (Alt 1)" MSX1
|
||||
453EAC7568D5D04C8CF7DA86F2E8DC79777343DA Flight Simulator (Japan)" MSX1
|
||||
3377D2017CC8433FA20B432C9D2328C53BBC10E6 Flipper Slipper (Japan)" MSX1
|
||||
49BFA9871BB0AD3B47A7C63B14A10E0E8AE48A52 Flipper Slipper (Japan) (Alt 1)" MSX1
|
||||
39C12004ADB3442F2C43AADE8A0BE420D59EEFB1 FM Music Composer (Japan) (Program)" MSX1
|
||||
E60E2ABF907B66F5B275C7B7B710439ADAE58D37 FM Music Composer II (Japan) (Program)" MSX1
|
||||
7C2743DF543C0D8A4BA7E42BF7DB580B996D102E FM Music Macro (Japan) (Program)" MSX1
|
||||
9D789166E3CAF28E4742FE933D962E99618C633D FM Pana Amusement Cartridge (Japan) (Program)" MSX1
|
||||
E4C8F3B87D755C21572040C51CEC1431AE59A0BE FM Voicing Program (Japan) (Program)" MSX1
|
||||
C0D33B513704ADC56718B1F56C1062718683C77C Formation Z (Japan)" MSX1
|
||||
CE01AFE30DA38DC58994C8264070195E1CD921B8 Formation Z (Japan) (Alt 1)" MSX1
|
||||
A194B845857C8B33EF4FD5E53D7F38150B4FA4CF Frogger (Japan)" MSX1
|
||||
D8E9FD3E9420BCBB1DD530FDA1E9C718AA08D8E4 Frogger (Japan) (Alt 1)" MSX1
|
||||
64AE3ACDCE06D1B41E23EE2730797FD7E472BDDF Front Line (Japan) (Alt 2)" MSX1
|
||||
883537F12814EE63C48A0AB744383F8D8E6A5CA2 Front Line (Japan) (Alt 1)" MSX1
|
||||
EC54E05A6F784F9C616C94AB8D57E5D2647ABC66 Front Line (Japan)" MSX1
|
||||
A41E43FA3C64D776831451C35FE8BDEE58625041 Fruit Search (Japan) (Alt 1)" MSX1
|
||||
A27EB9CD77837C1E443E275D0E10888E0FD248F4 Fruit Search (Japan)" MSX1
|
||||
E7657D8070399D8E4D65308B356E110D83D23151 Funky Mouse (Japan)" MSX1
|
||||
138A2D56237AEA915BAAEF85E69425A658506CFB Futbol (Spain)" MSX1
|
||||
53337B61D7B86E6D18501967FCFC0908A00CC55C Fuun Takeshijyou (Japan)" MSX1
|
||||
FAA5AEF23FEBC61A875E28EEBE3AADF83E1F5BA7 Galaga (Japan)" MSX1
|
||||
2A34F0221193712C43F336F08D2A6E58A1A8974A Galaga (Japan) (Alt 1)" MSX1
|
||||
25308EBB33FD87A7F6A8E61868D3DCDE3BD622C5 Galaga (Japan) (Alt 2)" MSX1
|
||||
95F36CF00CEE3DB55940EB60CD39412226A99E94 Galaga (Japan) (Alt 3)" MSX1
|
||||
692FD8A85978ADAFBB530510FFF71848F39D4FBD Galaxian (Japan) (Alt 2)" MSX1
|
||||
AA2BA89E0B1C91A4405F516EF003AD14A401096C Galaxian (Japan) (Alt 1)" MSX1
|
||||
E2ABB08ABACCE57703FC008881279890328F6277 Galaxian (Japan)" MSX1
|
||||
E8AB46785E75E19DAC497C4A82AC2F5B37AC0580 Gall Force - Defense of Chaos (Japan)" MSX1
|
||||
3425EEA336140DA03D7D7F09A94FD928D70E2212 Gall Force - Defense of Chaos (Japan) (Alt 1)" MSX1
|
||||
ABE52920E895C148851649ECB9C029FDC41A275F Gall Force - Defense of Chaos (Japan) (Alt 2)" MSX1
|
||||
89073C052B0FE29B6DE077C8BDF5373474081EDF Gambler Jiko Chuushinha (Japan)" MSX1
|
||||
39FFAACD0C2875018E7673A887A921FE9D31D6DC Game Land (Japan)" MSX1
|
||||
4FE90868376704336FBF45619A47CE18736FF1B2 Game Master (Europe)" MSX1
|
||||
70BA2331844BD5C14906E9F2284EBA119B3E41BF Game Master (Europe) (Alt 1)" MSX1
|
||||
9648D43F3C25D67B9E4972F777D7B02470080D1C Game Master (Japan)" MSX1
|
||||
ABCE0B855D67AC10BC667E0F23CEAB4A12FFEEE6 Game Master (Japan) (Alt 1)" MSX1
|
||||
FE74B4DF9698A61DFFD3AC88F47619675514BA1C Game Master II (Japan) (Alt 1)" MSX1
|
||||
5C00F9E3A48411E08FAC89B1DFDD2A6E95853919 Game Master II (Japan)" MSX1
|
||||
B2CCA92B7A51A43C310E58E011F3EDE1E7125A96 Game World - 126 Games (Korea) (Unl)" MSX1
|
||||
1CE1EBBB0F62224AA776C4523E2EF708154E7B52 Gang Master (Japan)" MSX1
|
||||
0CB11C766BD357D203879BD6BEE041A4690CC3DF Gate of Labyrinth (Japan)" MSX1
|
||||
12B3C31F0FD10FF5823DCC8BF6DFEB785A8AF2F7 Genghis Khan (Japan)" MSX1
|
||||
BA30AD98A8488BEC6D0C661F7B859BEB2FE219D1 Ghostbusters (Europe)" MSX1
|
||||
310AB424EDF15D5399E31FDBC1230DDCDE307D1A Glider (Japan) (Alt 1)" MSX1
|
||||
3A46902D265D98B27BFF3A34160DE1C7EF4F116C Glider (Japan)" MSX1
|
||||
2DACF7A08857CBDC706D24B4A46665113D16FF99 Gojira vs 3 Daikaijuu (Japan)" MSX1
|
||||
83FBA43371D8D3C50A97C96923E52B40DF2A7816 Gojira vs 3 Daikaijuu (Japan) (Alt 1)" MSX1
|
||||
8BD874AA854CC26D7FC48E7D2DE60DBBEE681721 Gojira-kun (Japan) (Alt 1)" MSX1
|
||||
D6B6CB3D85B991F8ADF2E07A0E8E74B586741D12 Gojira-kun (Japan)" MSX1
|
||||
30E3681BE376A76CF9E0F89E54555A7631759E15 Gokiburi Daisakusen - Bug Bomb (Japan)" MSX1
|
||||
69BDA8B4A96187597B95CD5C43E58DA0716D0FC8 Golf Game (Japan)" MSX1
|
||||
7A4126934F9E68C34BF00DD3D9A9E753C05EE73F Golvellius (Japan)" MSX1
|
||||
AACAF2E694A1C05F2EF20A8CE6892242C0F88919 Gomok Narabe - Omo Go (Japan)" MSX1
|
||||
6F0F61285BE1158ECF2E5393619187F26A7395BE Gomok Narabe - Omo Go (Japan) (Alt 1)" MSX1
|
||||
B1248F7B9D4E16A894555C51C533D3FD9A90802E Goonies, The (Japan)" MSX1
|
||||
B7B4D5C83D8C336DBFE32833BBA974CEA7F0CB8D Goonies, The (Japan) (Alt 2)" MSX1
|
||||
250D0D6E646EAE4817802C49E367AD8C1C35A462 Goonies, The (Japan) (Alt 1)" MSX1
|
||||
EADF124B91B996B890B1AE84B75B21EE6568D1F3 GP World (Japan)" MSX1
|
||||
3EA788262557F578B25E4E36E61C1CF9FB1155D1 Green Beret (Europe)" MSX1
|
||||
ACD46021A228B2B612C82D04C124B78E7D4C25E3 Green Beret (Europe) (Alt 1)" MSX1
|
||||
32615267E8497DB3F5E6F5348EE309E73C80A1A7 Grog's Revenge (Japan)" MSX1
|
||||
04325BFE5BC20A8F6D086933D138FB92CA200111 Grog's Revenge (Japan) (Alt 1)" MSX1
|
||||
5E28FA0CD90BCFB7995ACB025A22F6F556CCAC08 Guardic (Japan) (Alt 1)" MSX1
|
||||
67BAAAA870AD4A08F55EC1C67DBEABC97B6F18A0 Guardic (Japan)" MSX1
|
||||
CA5F14925A7D33D83DC581BBE2FF5258389BFBA7 Gulkave (Japan)" MSX1
|
||||
E90B579AC64798343ABB635FCBF929E83714312A Gulkave (Japan) (Alt 1)" MSX1
|
||||
445963FDDFBD0487ADDAF4B0AD620520E426A1D2 Gun Fright (Japan)" MSX1
|
||||
F2EC3714138175212B6B6E28B5DA4361CC4B5471 Gunjin Shougi Mars (Japan)" MSX1
|
||||
99A8631CDC37F0DD9D8793EA8EADD3F34E0BBA51 Gyrodine (Japan)" MSX1
|
||||
EBB70722F75279911CCE79E6BD78B8F514561B0F H.E.R.O. (Japan)" MSX1
|
||||
FCC6B6B9F05DE409492A1FB988FA671E46D54196 Hades no Monsho (Japan)" MSX1
|
||||
1804CFBC4F175136B7B934B575D49CBC0E726FFE Hades no Monsho (Japan) (Alt 1)" MSX1
|
||||
301EF3C728041EB1DFD89227A901C32EB000D348 Hafanuda Koi Koi - Gostop Godori (Japan)" MSX1
|
||||
44B23A175D04CA21236A5FEF18600B01B12AAF4D Haja No Fuin (Japan)" MSX1
|
||||
5370B7746112621169D503BBEC2E7FC526279F53 Hanafuta (Japan)" MSX1
|
||||
26FC48DDACA0FEDC90FC151D4ECD5CA6D1CCC77B Hang-On (Japan)" MSX1
|
||||
A67E699EDB471C35A217A5C3E6831C6CDB0EABE5 Hang-On (Japan) (Alt 1)" MSX1
|
||||
7F086CC2CA0C35BF599F48C2D5E901E89411239F Hang-On (Japan) (Alt 2)" MSX1
|
||||
8F35C41A5235DEC22C3B99CD6DD63CFDA0A7A821 Harapeko Pakkun (Japan)" MSX1
|
||||
A3DE07612DA7986387A4F5C41BBBC7E3B244E077 Harryfox MSX Special (Japan)" MSX1
|
||||
3626B5DD3188EC2A16E102D05C79F8F242FBD892 Harryfox Yki No Maoh (Japan)" MSX1
|
||||
15345C8745028C96FC79036B2E3E180AD2F62DAB Haunted Boynight (Japan)" MSX1
|
||||
69BC7CB436EA2EA3A6B49C3B050BAE24271A2F9C Heavy Boxing (Japan)" MSX1
|
||||
0FA2BB1EFFEFDE0861FE53A38FF5B56A6A320C80 Heavy Boxing (Japan) (Alt 1)" MSX1
|
||||
20191B437958E990D14660F476C340E140236C70 Heist, The (Japan)" MSX1
|
||||
6844DDF610E1A98B55E77FCC364B38A037751A2B Helitank (Japan)" MSX1
|
||||
F72681F09B52D530EC905E8DF21C4A15E30201AB High Way Star (Japan)" MSX1
|
||||
C0FA7D53B3E66BD1E1680BB135DB8F74ABBAC52E High Way Star (Korea)" MSX1
|
||||
3C2295FB9FC9F1B6A607A74F4538E24D170522E5 Hisya (Japan)" MSX1
|
||||
BBCA0B00374BA5366BA53B380285D38857450A7D Hitsuji Yai - Preety Sheep (Japan)" MSX1
|
||||
C344ED78465203E12143BD9889281BA981A195E4 Hole in One (Japan) (Alt 2)" MSX1
|
||||
2F8416D9CCE6587ABA4B71B1D3E3B626609CE7ED Hole in One (Japan)" MSX1
|
||||
4F73D4B731B8309145B2A9BF9C37620E4F4A391C Hole in One (Japan) (Alt 1)" MSX1
|
||||
F3952B790AE2A8A1434B52BF816C56C9E680F73E Hole in One (Japan) (Alt 3)" MSX1
|
||||
BB75492C6EBBBF1827B3695F70E481D65487DA44 Hole in One Professional (Japan) (Alt 1)" MSX1
|
||||
A55617157C5D89DB5900654B641E757A37FECD1A Hole in One Professional (Japan)" MSX1
|
||||
F29CAC37C5001DDC752FF4A0B9CC51A965906DA8 Home Calc (Japan) (Program)" MSX1
|
||||
CC06D65A9ABA634E3AD75675B960140932506FFE Home Writer (Japan) (Program)" MSX1
|
||||
F27721CF9EC316EA3B18233F699FEBF739B25678 Honkball (Japan)" MSX1
|
||||
DD9A41E4C8802CD4BBB87E30281711F4E7AE017F Hopper (Europe)" MSX1
|
||||
E904EFABC5A75840C50EA7EDB07052683468A64A Hudson 3D Golf (Japan)" MSX1
|
||||
27847B02D2ACBEBAB61F2F05BD2FFF0C2291A09D Hudson 3D Golf (Japan) (Alt 1)" MSX1
|
||||
E06ED9B0B3E1FBB9F27BE65C37B4D9B548889B4F Hustle! Chumy (Japan)" MSX1
|
||||
86E688CEA0F0C8BCD31B6BCD19FD72AC108646BB Hustle! Chumy (Japan) (Alt 1)" MSX1
|
||||
9DCB43B654A08DE2C52147F4A2E628B5FE3761C8 Hydlide (Japan)" MSX1
|
||||
74E9EA381E2FED07D989D1056002DE5737125AAF Hydlide 3 - The Space Memories (Japan)" MSX1
|
||||
A3537934A4D9DFBF27ACA5AAF42E0F18E4975366 Hydlide II - Shine of Darkness (Japan) (Alt 1)" MSX1
|
||||
DA4B44C734029F60388B7CEA4AB97C3D5C6A09E9 Hydlide II - Shine of Darkness (Japan)" MSX1
|
||||
56C4813AC549AF8711B2E2E42D7DB1B960C4C040 Hyper Olympic 1 (Japan)" MSX1
|
||||
CC9A82898DA39E5CFEB0400006D093D3B869F28C Hyper Olympic 2 (Japan)" MSX1
|
||||
14393568469C74BD6F8BE7770149DB19F0553AB6 Hyper Rally (Japan) (Alt 3)" MSX1
|
||||
D1A7CBAFF354B59003F0E297723B912CB6AD0B36 Hyper Rally (Japan) (Alt 2)" MSX1
|
||||
3B13E164130CAB9B36C1A95E06F8D9FD707FC97F Hyper Rally (Japan) (Alt 1)" MSX1
|
||||
7DFE091E02F6C1B21BD65E44EB5052D564D0EF92 Hyper Rally (Japan)" MSX1
|
||||
9CAB6A793E39076E3F598AA54BFFD5585DDC7E3E Hyper Sports 1 (Japan) (Alt 1)" MSX1
|
||||
2C85B993671DE612E9338D094565A4EB32A97EA0 Hyper Sports 1 (Japan)" MSX1
|
||||
9002AA0B2D49A9FC323180487FF591781867A99C Hyper Sports 2 (Japan)" MSX1
|
||||
AF4E0490C178A18A47B34831FB5E3CF8B61D34D9 Hyper Sports 3 (Japan)" MSX1
|
||||
6842FB21ABB2531C17FE0687D77E012348D3DC2C Hyper Sports 3 (Japan) (Alt 2)" MSX1
|
||||
EC76D4D9B61BDBDE9A4B5BE082DBDAE96321A591 Hyper Sports 3 (Japan) (Alt 1)" MSX1
|
||||
167B226B54CC5B681A69D2C1509116FFABA868E4 Ice World (Japan)" MSX1
|
||||
F629B8F7133C3442D0371A4D84275FB2E0974854 Iga Ninpouten - Small Ninja (Japan)" MSX1
|
||||
F52113B45062ADC75CF7A0ED0538B3A07696CC24 Iga Ninpouten 2 - Small Ninja 2 (Japan)" MSX1
|
||||
AA68633FF1AFD385535B2ABD7C8756B6CF79256A Indian no Bouken (Japan)" MSX1
|
||||
95AE5B3E24AD0BEA21902CB7DFD3FD9581166A76 Iriegas (Japan)" MSX1
|
||||
8AA6D0AADF00DE9112696DA5B7DC6E3B62F2D9BE Iriegas - Theseus (Japan)" MSX1
|
||||
ED1F7342B9B26EC02CA2D584570D75F925167EA1 Iriegas - Theseus (Japan) (Alt 1)" MSX1
|
||||
14451B2931A014E949A4B3D2973D424D910E0D9D Issunhoushi No Donnamondai (Japan) (Alt 1)" MSX1
|
||||
02A2FAFC7B9249DB76803ECE347BA73BE25F71B5 Issunhoushi No Donnamondai (Japan)" MSX1
|
||||
2391AE8C961B4A38B3BEAEE9ED3362FB2C71851F J.P. Winkle (Japan)" MSX1
|
||||
6FEFBE448674B6EA846D0C6B9C8A0D57A11AA410 Jagur (Japan)" MSX1
|
||||
1AEAE1180471E9A6E8E866993031B881A341F921 Jagur (Japan) (Alt 1)" MSX1
|
||||
ECC68B4A042794424DF771A3336361FDB50D0875 Janka (Japan)" MSX1
|
||||
4180544158A57C99162269E33E4F2C77C9FCE84E Japanese MSX-Write (Japan) (Program)" MSX1
|
||||
CB352E97E9416F4C3032118758FC77D6D0F3AD73 Jet Set Willy (Japan) (Alt 1)" MSX1
|
||||
45B5B0E9DD8D11D034E09803F92EC9720CDA1E3C Jet Set Willy (Japan)" MSX1
|
||||
F99919C8F42ADDB7F65AB4FB21B603EE7E716C90 Jigsaw Set (Japan)" MSX1
|
||||
EBDE4D61184438175DB424FDF25CEC238D91A15F Jissen - 4-nin Mahjong (Japan)" MSX1
|
||||
765413BB6B03BC3BB888EE8FE00B99EF69C1317A Jisyo Data (Japan) (Program)" MSX1
|
||||
5CEEDD2AE401FEBB79C1F6A64DDEF4B2E1790674 Joytelop (Japan) (Program)" MSX1
|
||||
39EF139D8D66FB18B04DFF8B9A5386011F497479 Jump (Japan)" MSX1
|
||||
A53D1EA775A6C90A84F1F36349540B16CF8307E4 Jump Coaster (Japan)" MSX1
|
||||
0B3A217D3278A43D7460136F955171C762A1F8E5 Jump Land (Japan)" MSX1
|
||||
B5CDEF44B22C7E234895B053E487233C117D1A4F Jumping Rabbit (Japan)" MSX1
|
||||
A70C6B0E90E7B8BA3E5BC06C9AE7D6AF344E491F Juno First (Japan) (Alt 1)" MSX1
|
||||
846BD4D89BD034AC5346CBC559752635AD2BDA6B Juno First (Japan)" MSX1
|
||||
4991DC097E248436506ED5C8BC3F367A65267EE7 Jyan Friend (Japan)" MSX1
|
||||
17E1111B1D6AA80E8BC525BE345C25E3B00ED504 Jyankyo (Japan)" MSX1
|
||||
666E82D8A8E5D2672A9B7159ADCDC861A31C8FA1 Kage no Densetsu - Legend of Kage, The (Japan) (Alt 1)" MSX1
|
||||
FFC8C57B26F2F495BD77EFAC5B815EFE9C25336C Kage no Densetsu - Legend of Kage, The (Japan)" MSX1
|
||||
632EF250C76B222158BA90DFC68B9E004DBAFE3A Kakikukekon (Japan) (Program)" MSX1
|
||||
223337DB25C942ECE732214ABA5DD624B574E9C4 Karamaru (Japan)" MSX1
|
||||
1C462C3629D43297A006BA9055B39A2DCCBA9F6C Karuizawa (Japan)" MSX1
|
||||
09779F0E9EC0C36EE3700690E2B6E282A4B40A0B Keiba, The (Japan) (Program)" MSX1
|
||||
3D5160331BEB1C5CC54BA6ECEF6B3CE2FF4660B6 Keystone Kapers (Japan) (Alt 1)" MSX1
|
||||
FB4724B8159BEAE132F89F394F71CE3934A61AE2 Keystone Kapers (Japan)" MSX1
|
||||
65334123C7D00CA623BF5F7A55756CC75958DEBB Kick It (Japan)" MSX1
|
||||
F033AB8A33E2D7A8AC1313B862BC138138B4346E Kick It (Japan) (Alt 1)" MSX1
|
||||
F772396BECDBD15BA0648BF1AEF8CCB155E1ADAD Kinasai (Japan) (Unl)" MSX1
|
||||
BEC70FBF9B1384B6A8ADC45226689F02D996B6A7 King & Balloon (Japan) (Alt 1)" MSX1
|
||||
ED15174DEC31A29F9D41A06DE3008DB04AF11A25 King & Balloon (Japan)" MSX1
|
||||
46062D3393C49884F84C2DC437FF27854E9D2E49 King Knight (Japan) (Alt 2)" MSX1
|
||||
A2CA7E6E216F8B450EB8DB10A4120F0353275B6B King Knight (Japan) (Alt 1)" MSX1
|
||||
122F659250A0AE10CE0BE0DDE626DD3E384AFFA7 King Knight (Japan)" MSX1
|
||||
43DC3911B9A336BB7B17BDBE6E48464E01F2C425 King's Valley (Japan, Europe) (Alt 2)" MSX1
|
||||
07448FFB20F260DF159A19DF2CAE1EE5545A0AEF King's Valley (Japan, Europe)" MSX1
|
||||
8C9A9A9AFE13A58E4CFB72489AF2D6B080DFFAF6 King's Valley (Japan, Europe) (Alt 4)" MSX1
|
||||
A4383F789482A9E868A9F136AA722129673C2A81 King's Valley (Japan, Europe) (Alt 3)" MSX1
|
||||
0CF26BF02C5B94DF118129A681A7F14ADD708177 King's Valley (Japan, Europe) (Alt 1)" MSX1
|
||||
CFD872D005B7BD4CDD6E06C4C0162191F0B0415D King's Valley II (Japan, Europe)" MSX1
|
||||
DD76EE1071E427CBFEDEEEDCB3A4B8BCAD56BA71 Kinnikuman - Muscle Man (Japan) (Alt 1)" MSX1
|
||||
BF7E27B3456F1A96D94A8DBF06688C8F833BD818 Kinnikuman - Muscle Man (Japan)" MSX1
|
||||
E98E4351119D78B6402C4499ED16FAEB3364F6C3 Knight Lore (Japan)" MSX1
|
||||
C8FF858D239C62A859F15C2F1BF44E1D657CEC13 Knightmare - Majou Densetsu (Japan)" MSX1
|
||||
DA8249452DA86C0BA44F0AE279CCFF82A1DDD756 Knightmare - Majou Densetsu (Japan) (Alt 1)" MSX1
|
||||
1D6A355A9CE84C78E3BAFC27A4F1151E240F68F0 Knightmare - Majou Densetsu (Japan) (Alt 2)" MSX1
|
||||
4D51D3C5036311392B173A576BC7D91DC9FED6CB Knightmare II - The Maze of Galious (Japan)" MSX1
|
||||
25F5ADECA8A2DDB754D25EB18CFF0D84E5B003BC Knightmare III - Shalom (Japan)" MSX1
|
||||
63D4E39C59F24F880809CAA534D7A46AE83F4C9F Knither Special (Japan)" MSX1
|
||||
076D6F5B9F8427F6959F7A255ABB4ACAC0DD9D0C Konami's Baseball (Japan)" MSX1
|
||||
9BDFE44A7A0D5151346FF14ECE3216B5108CC775 Konami's Baseball (Japan) (Alt 1)" MSX1
|
||||
FC6660A202DBD228C9E0D7C404340D1DCC1E2844 Konami's Billiards (Europe)" MSX1
|
||||
5E349166FCE12D45F3CE3F69ECD6B2A70EF4D68B Konami's Boxing (Japan) (Alt 1)" MSX1
|
||||
7ADB6812F3702B93AA2B2A872722BBD40915670D Konami's Boxing (Japan)" MSX1
|
||||
9E190CF3CA52D85FD34EB5DF2C0DD8490448B9A2 Konami's Boxing (Japan) (Alt 2)" MSX1
|
||||
10698EA6B0423F2E858A4C28C10F39646CA5495F Konami's Football (Europe) (Alt 2)" MSX1
|
||||
EAA6B787784BAE1C7F648B57DAA1C88CF2B1B095 Konami's Football (Europe) (Alt 1)" MSX1
|
||||
8E9FB34B356B02A839DCE5139C12030593BE13A2 Konami's Football (Europe)" MSX1
|
||||
6A3A68836A468CC761A268175C64D53C4C1C48BD Konami's Golf (Japan)" MSX1
|
||||
BCF72A4673C7982361DB4EFAF8EBC776B6539938 Konami's Golf (Japan) (Alt 1)" MSX1
|
||||
5C7971AA8688FFC429A3E315DD3D45C38F72DDEB Konami's Golf (Japan) (Alt 2)" MSX1
|
||||
F415E4096FF3F6A9F17BFBF02F146E44F0D5FB66 Konami's Mahjong (Japan)" MSX1
|
||||
AE5B8E69732A23AEE102BCD996AD06225F1B3EBA Konami's Ping-Pong (Japan)" MSX1
|
||||
6C68F7BE1EB46CCA6DCDBB9192CBFF9D59604357 Konami's Ping-Pong (Japan) (Alt 3)" MSX1
|
||||
5E1A50AFFE1FA973F69E423A8827751B93FC53EE Konami's Ping-Pong (Japan) (Alt 2)" MSX1
|
||||
9F4AC1287B8CAA286A847C86AC8601A711BE2D82 Konami's Ping-Pong (Japan) (Alt 1)" MSX1
|
||||
A0ED2C50E55241D23BB5D12CB6528A2A0C3BC156 Konami's Soccer (Japan) (Alt 2)" MSX1
|
||||
FD7518A6AEDB51630364082C27BDFE4411ADFD4C Konami's Soccer (Japan)" MSX1
|
||||
89CCB1A7FFAAA75CEE9BDC9B4A9EC9B063AF7199 Konami's Soccer (Japan) (Alt 1)" MSX1
|
||||
79C1BF77C08B733AE04E069DEAF25FD24B28BEB7 Konami's Soccer (Japan) (Alt 3)" MSX1
|
||||
2FEFF37D593683CE1C7DFAC33ED3207895E01A03 Konami's Synthesizer (Japan) (Program)" MSX1
|
||||
D5F5D2850B0BFDA45BA4DFFF70D3FD9986399A94 Konami's Tennis (Japan) (Alt 1)" MSX1
|
||||
5F6972E9E374753FAF092409F1EE10BBA5231B66 Konami's Tennis (Japan)" MSX1
|
||||
0039CFF292FE740D8C87CC2131A473CBB4F8C4F4 Koneko no Daibouken - Catboy (Japan)" MSX1
|
||||
530ECFF542A537C320B17BD5D64C86D5D65619F3 Kung Fu Acho (Japan)" MSX1
|
||||
FC22CEC076C0A0A1EE7E410772AF3D7D31DE3149 Kung Fu Acho (Japan) (Alt 1)" MSX1
|
||||
05DA84093D973D3BFBD3143FFD155A16A9EC5F82 Kung Fu Master (Japan) (Alt 2)" MSX1
|
||||
602C4D0D12FD59725C0C4E40F51D6BDEB679EA36 Kung Fu Master (Japan) (Alt 1)" MSX1
|
||||
C1DFC86C441E1128194F3AB490C94E29275B5DF9 Kung Fu Master (Japan)" MSX1
|
||||
304EA29469461F1CFA801F62AF0BF5045A6882FC Kung Fu Taigun (Japan) (Alt 1)" MSX1
|
||||
E817AB7B50674C414B1C1B72530024EB03396A41 Kung Fu Taigun (Japan)" MSX1
|
||||
15CA962994FD25A56BEE2F543A83F133F9D2265F Ladder Building (Japan)" MSX1
|
||||
C4F952258020DE9E23A718A78C18D22E2CCCFE3C Laptick 2 (Japan)" MSX1
|
||||
F69541B86C2B396CDCE765C2DEC498E11232B3C9 Le Mans 2 (Europe)" MSX1
|
||||
2CEA9CDD501D77F2B6BD78AE2AE9A63ABA64CFED Legendly Knight (Korea) (Alt 1)" MSX1
|
||||
6A98D5787DD0E76F04283CE0AEC55D45BA81565D Legendly Knight (Korea)" MSX1
|
||||
3103F0170BAE627BDEB77108E0E782284E4581C9 Leonard (Spain)" MSX1
|
||||
0442DD29EA0F7B78C9CD5849EC7EF5BB21EC0BF5 Light Corridor, The (Europe)" MSX1
|
||||
5DD2AC08FD05A1E091C7C6ECB6C10B49992BDD46 Links, The (Japan) (NGA II) (Program) (Alt 1)" MSX1
|
||||
88F3A72513B04459212289797942C4D76F495A05 Links, The (Japan) (NGA II) (Program)" MSX1
|
||||
BC76A04970C547B7C080E747D393D13C87E82E7D Links, The (Japan) (Program)" MSX1
|
||||
0421A25AFF3AE300B2A4536DD0AA5FA924E7DD72 Lode Runner (Japan) (Alt 1)" MSX1
|
||||
818A6CEDBFDF3A5AF0C844F32A18E3930178C798 Lode Runner (Japan)" MSX1
|
||||
4B04574B3B71958664AC730987C4C8EBEDEBA890 Lode Runner II (Japan)" MSX1
|
||||
4025045E93F51AFD58545104CC2C897226FEBAF7 Lord Over (Japan)" MSX1
|
||||
3C2DB6321EE84E3690757C08ADE9DC096BD209B3 Lot Lot (Japan)" MSX1
|
||||
95F75FAE9B3E961149E352CEF3D7E478E9887D5A Lunar Ball (Japan)" MSX1
|
||||
6BDE4E6761286A2909858ECEF04155E17072996E M36 - A Life Planet (Japan)" MSX1
|
||||
0949BD31CDBDFACB3224506C72A2210C50432157 Mac Attack (Europe)" MSX1
|
||||
97DD31B2F0DD056ABD808062E306B0C2536975BC Machinegun Joe vs The Mafia (Japan)" MSX1
|
||||
09AF3B68BE4EEA5F5594D5D2D124D92B127DD390 Macross (Japan)" MSX1
|
||||
81DDAF3A42C1E1A3D3722E0CD046316A202ACD33 Macross (Japan) (Alt 1)" MSX1
|
||||
A3D1212EB4C58958F063AA8577DDFA07903B28B3 Magical Kid Wiz (Japan) (Alt 1)" MSX1
|
||||
087AFEBB16BFD96F465FB0D004326D55452BDD81 Magical Kid Wiz (Japan)" MSX1
|
||||
3E2EF016F255168E2DF1906E678CA22F880917B8 Magical Kid Wiz (Japan) (Alt 2)" MSX1
|
||||
BF5678F3C065A4507F71ED6206A63AC922AD93DD Magical Tree (Japan) (Alt 1)" MSX1
|
||||
B82DC590AADC930B43DB303BB3E3458E7695E3B5 Magical Tree (Japan)" MSX1
|
||||
3243A5CC562451DE527917E9CA85657286B2852F Magnum Prohibition 1931 (Japan)" MSX1
|
||||
9C5C1C40EC30C34B1B436CF8CC494C0B509E81FC Magnum Prohibition 1931 (Japan) (Alt 1)" MSX1
|
||||
2729BB0E68A64AF525DF4C5D9687BAE07245980A Manes (Japan)" MSX1
|
||||
47129FE3791A7171F8FA792F953D7B5D58BA5C24 Manes (Japan) (Alt 1)" MSX1
|
||||
820174B4DD3F3DF87E5E32FB6F7ED457542D96C1 Manes (Japan) (Alt 2)" MSX1
|
||||
20CE82112BA0C50063667D61E43979AC464A3BB4 Mappy (Japan) (Alt 2)" MSX1
|
||||
E7D06C0A5C7F256C061E5B8173FDCC145D2FC4D6 Mappy (Japan)" MSX1
|
||||
A8313B0DCE35FAA80B399A220F19B04333FDEC1D Mappy (Japan) (Alt 1)" MSX1
|
||||
F7DD6841D280CBFFA9F0F2DA7AF3549F23270DDB Marchen Veil I (Japan)" MSX1
|
||||
A66E19E58AC5B4DA7DB071CA7EAD40C28A332198 Marine Battle (Japan)" MSX1
|
||||
A3772599CDB84DF71EF2BB38B1E2CB2F66593969 Mars II (Japan)" MSX1
|
||||
E4D61EE74867066B04B0F6ABA35D98D72665E6E0 Mashou no Tachi Goblin (Japan)" MSX1
|
||||
8F92EA214A7A11394C512080D3B65A7AFA9A92ED Mashou no Tachi Goblin (Japan) (Alt 1)" MSX1
|
||||
ADC65666DB35CD2CE694A8E2F32B95BD98D72291 Master Chess (Europe)" MSX1
|
||||
2AF58D6B3A8C77270FA5BB82F129FC97F999B7EC Megalopolis SOS (Japan) (Alt 2)" MSX1
|
||||
3167FFC2F2411138E4545CBDF4466C3237A04874 Megalopolis SOS (Japan) (Alt 1)" MSX1
|
||||
8C6E1E21CC45B2CA72CEEA93DF48EDA9CEF1DBAD Megalopolis SOS (Japan)" MSX1
|
||||
E92BAA5FDFB2715E68700024D964098EF35704D9 Meikyuu Shinwa (Japan) (Alt 1)" MSX1
|
||||
98B7A6AC44B82CCFC45EB51595E2905ADABAC1C7 Meikyuu Shinwa (Japan)" MSX1
|
||||
E7C800FA576B3A9554836AA9C5EAA3AE893805D4 MIDI Macro (Japan) (Program)" MSX1
|
||||
97ADCB652BC4BAF02D29A9ABE5E6547065DEC298 Midnight Brothers (Japan)" MSX1
|
||||
F1D68B477F3F54C0B6080985954208B0D95C5973 Midnight Brothers (Japan) (Alt 1)" MSX1
|
||||
5460AA3BE896AD949BEA75444BC6E7E072A859B8 Midnight Building (Japan)" MSX1
|
||||
3A8C815F9F97C067828E22F50386A9383F8E1A3D Midway (Japan)" MSX1
|
||||
7C50D00A0D7B8C3474ED492465A92622CA160151 Mil Caras (Spain)" MSX1
|
||||
5A709255F73EB8B601BF9D81210260488F8AC511 Mini Golf (Japan) (Alt 1)" MSX1
|
||||
D2BF27695023A3E7DAAEAB1CB76572F2C412DE1E Mini Golf (Japan)" MSX1
|
||||
7ABF89652396A648A84AE06E6DABC09735A75798 Mirai - Future (Japan)" MSX1
|
||||
176EC8E65A9FDBF59EDC245B9E8388CC94195DB9 Mitsumega Toohru - Three-Eyed One Comes Here, The (Japan)" MSX1
|
||||
428B5BDD5CBB3E4FF637CFA5DB8C41D8D0070813 Moai no Hibou (Japan) (Alt 1)" MSX1
|
||||
F924D89A28966A1D08C10D5DDBC9E0E182BE4669 Moai no Hibou (Japan)" MSX1
|
||||
336D714E3BC2DFE3626E55D01EE4EF74A48CF652 Mobile Planet Suthirus - Approach from the Westgate (Japan)" MSX1
|
||||
C0717A9831D66E29EB907BE598BA6606E17EA044 Mobile-Suit Gundam - Last Shooting (Japan) (Alt 1)" MSX1
|
||||
917270DD44C63DC883289B4E0902FE6C812F5EA3 Mobile-Suit Gundam - Last Shooting (Japan)" MSX1
|
||||
17AC538DD63BC93EC0B88B6DD92079E807C22908 Mokarimakka (Japan)" MSX1
|
||||
7D0BB1DAC966CEEE2E4C53F77E6E057D65F15D4D Mole (Japan)" MSX1
|
||||
F364A44D0B4CEAAA8706830237C0B824DCF9CE0C Mole Mole 2 (Japan)" MSX1
|
||||
6FEFE304CC8CD099456BBBBBCB23FF776CB113C9 Monkey Academy (Japan) (Alt 2)" MSX1
|
||||
E61F407E51EA4411145E236272842BDB3E0743E6 Monkey Academy (Japan) (Alt 1)" MSX1
|
||||
8B2626F8DBBB3E97A5087B340A3F3D56C8EE84D1 Monkey Academy (Japan)" MSX1
|
||||
E0D84B3B2AC7675C3ED104797840D43BC2347A5B Monkey Academy (Japan) (Alt 3)" MSX1
|
||||
B6D39BBAEDB89F8C908CC2F44A0AB17E4B80CA4F Monster's Fair (Japan)" MSX1
|
||||
B2D9DCEE787ACE26F8F4D2D18E24A3D645A6F853 Moon Landing (Japan)" MSX1
|
||||
D1CF5410ED71F77670F65EB08EE944436BC0EB10 Moon Patrol (Japan)" MSX1
|
||||
F93E23D958D2075BF476CB05A3C4F48D0C41AABB Moonsweeper (Japan)" MSX1
|
||||
33EC3136DFB6FD44014C8BBFFC8AC79C3CAFE75C Mopiranger (Japan)" MSX1
|
||||
4A185A3DB81C2CE20D176D13FA5F619C6B7A170C Mopiranger (Japan) (Alt 1)" MSX1
|
||||
1B3059C7873765A476FB7791A4D6FC846AB05ADE Mopiranger (Japan) (Alt 2)" MSX1
|
||||
DDC458BB3C70E0708841E516D9B89220C0E098A1 Mopiranger (Japan) (Alt 3)" MSX1
|
||||
14E7EF125CC902001995BBD8ACCA0EAE2F213DC1 Mopiranger (Japan) (Alt 4)" MSX1
|
||||
4DD934902907DB50BA76053F59AE7737D55824F4 Morita Kazuo no Othello (Japan)" MSX1
|
||||
1FB861152A9F3F9C2B2DACE26D5F1D93AB9B4AD8 Mouser (Japan)" MSX1
|
||||
B5D130A50F6939028702C1645426A29EC8EAD6E5 Mr. Chin (Japan)" MSX1
|
||||
DC69C7A9EA93CBB0093300955935EF156AF5C194 Mr. Do (Japan)" MSX1
|
||||
01544042B810C0B401FCE5D180ADB6FEA9B5ED20 Mr. Do vs Unicorns (Japan)" MSX1
|
||||
E9B3652482A5B09AE662203F8758A30AA23AF62F Mr. Do's Wild Ride (Japan)" MSX1
|
||||
CA05A183F4E7E56102706D1B9B852AD4350264BA MSX 21 (Japan)" MSX1
|
||||
0D246B0E3EDC63803FCCE861EA07EADF29DC488C MSX Audio (Japan) (HX-MU900) (Program)" MSX1
|
||||
930EAE7057AF1652ABAE794072B296A59DECD61B MSX Audio (Japan) (FS-CA1) (Program)" MSX1
|
||||
76D488497D9BA54B302A4326F45909F643BDCD7A MSX Baseball (Japan) (Alt 1)" MSX1
|
||||
85A3842EABAC50C4E1332666C161541BE3508249 MSX Baseball (Japan)" MSX1
|
||||
AC150939558EC4E56446BE9502177F28A29881EB MSX Baseball II National (Japan)" MSX1
|
||||
181BF58DA7184E128CD419DA3109B93344A543CF MSX Basic-kun (Japan) (Program)" MSX1
|
||||
C279C3F41D5368761F9088157B80214D835A548C MSX Basic-kun Plus (Japan) (Program)" MSX1
|
||||
8C7AE1A1720B1DAE9AF9904E638B868F56D905C2 MSX Bunsetsu Henkan Jisyo (Japan) (Program)" MSX1
|
||||
C1C350C719236AF5EEF8798C4532351BEFCFD348 MSX Derby (Japan)" MSX1
|
||||
35ABD4A14033710730DA72EDF278AAD42D641621 MSX Rugby (Japan)" MSX1
|
||||
C76CA96ED23621A6267D9906CC4A1EE428677F98 MSX Soccer (Japan) (Alt 1)" MSX1
|
||||
D2AA1605A6B56C118E18B385AB879536D74CC355 MSX Soccer (Japan)" MSX1
|
||||
D4EDB2AF4170FD4069960AD61D3F664462BEF568 MSX-Aid (Japan) (Program)" MSX1
|
||||
47663F883F98AB9DDAA0BF0C2831C567919F56F1 MSX-Logo (Netherlands) (Program)" MSX1
|
||||
2B10234DEBD2A6A9A02E0750BA6563768BC4A2F3 Mugen Senshi Valis - The Fantasm Soldier (Japan)" MSX1
|
||||
20A2E3D7966916F46EB26CC1AA226EC2D11646F9 Music Editor (Japan) (Program)" MSX1
|
||||
85E3386D30DD9A64F4CC1BCA03CFF35B440F70B5 Music Harmonizer 3 (Japan) (Program)" MSX1
|
||||
8C06D9E1E188431C13721AF965FAA7391140AF2E Music Studio G7 (Japan) (Program)" MSX1
|
||||
FC4C05CA47C94DF877BED2E02307BD6307F738A6 Musiwriter (Japan) (Program)" MSX1
|
||||
FB968A2407EEE00C683AF3AC19E88015341564AD Nausicaa (Japan)" MSX1
|
||||
F0E4168EA18188FCA2581526C2503223B9A28581 Nemesis (Japan, Europe) (Alt 1)" MSX1
|
||||
E31AC6520E912C27CE96431A1DFB112BF71CB7B9 Nemesis (Japan, Europe)" MSX1
|
||||
4C2F015685A17DB7A8C3893E868E0A84A8DBF1E5 Nemesis 2 (Japan, Europe) (Beta)" MSX1
|
||||
D63E20369F98487767810A0C57603BEF6A2A07E5 Nemesis 2 (Japan, Europe)" MSX1
|
||||
6844758FF5C2C410115D4D7CF12498C42E931732 Nemesis 2 (Japan) (Demo)" MSX1
|
||||
AB30CDEAACBDF14E6366D43D881338178FC665CB Nemesis 2 (Japan, Europe) (Alt 1)" MSX1
|
||||
0413BB3AEACB0C28429B8C85B42796DBE48BEF6D Nemesis 3 - The Eve of Destruction (Japan, Europe) (Alt 1)" MSX1
|
||||
7393F677E0FAE5FC83071C6B74756117B7D75E2D Nemesis 3 - The Eve of Destruction (Japan, Europe)" MSX1
|
||||
5692E41B3A4C5E767CF290FD6C24942D0FD7B2E3 Nemesis 3 - The Eve of Destruction (Japan, Europe) (Alt 2)" MSX1
|
||||
B7FD07B7825C6BEEB19B1F38631D2869F60939FB Nessen Koushiyen (Japan)" MSX1
|
||||
EC1BB5C36952B12E6C0805E9A8D5BF31C20A68C4 New Horizon - English Course 1 (Japan) (Program)" MSX1
|
||||
50E27C5B83C8AFE00B077406081D063263E98B62 Night Shade (Japan)" MSX1
|
||||
7013FCF8C76BC610CEC9F55FBB99374182641251 Nihon-Shi Nenpyou (Japan) (Program)" MSX1
|
||||
371DE6F12D834DA07C8E67B13E75FC22618BA5E9 Ninja Jajamaru-kun (Japan)" MSX1
|
||||
9DFC71887FFC6D94B8780B5D6F207E24C1F58B54 Ninja Princess (Japan)" MSX1
|
||||
62BFFF23E2BEAE00DB14B6C3E933043218B33DED Ninja Princess (Japan) (Alt 1)" MSX1
|
||||
EC2F1E747756BA1FDAE606658AEEAFA07E6E7FD4 Ninjakun (Japan)" MSX1
|
||||
C9D10B1DF3BCADB3D917CF2A6877AE6E71CA3A57 Ninjakun Majou (Japan)" MSX1
|
||||
049892D1633BCB3F1D5067BA710ADEB89B38FCAC Ninjya Kage (Japan) (Alt 1)" MSX1
|
||||
0125BCE373C95EE78DF074D19AD032158EDC74A2 Ninjya Kage (Japan)" MSX1
|
||||
E6DE8BBD60123444DE2A90928853985CEB0B4CBF Nobunaga no Yabou - Zenkoku Ban (Japan)" MSX1
|
||||
AEECB99ED7BFE2FF39A5F42637B6B33ECC79C443 Nyan Nyan Pro Wrestling (Japan)" MSX1
|
||||
98E33DCA445850CDF24F09050756C3B75202AC13 Nyorols (Japan)" MSX1
|
||||
5DCECC7C790E398A1C652DB568C1E66C6F25E5E4 O'Mac Farmer (Japan)" MSX1
|
||||
5B53794D3D73DF29CBCEC411C0F65E9E9898977F Oil's Well (Japan)" MSX1
|
||||
244EAE705DF950F60B7D4B523D57B9CFDED96B8E Oil's Well (Japan) (Alt 1)" MSX1
|
||||
031A611BA1F75B7D5FE3ED088A61C24598B4B314 Okami no Su (Japan)" MSX1
|
||||
6238F9C5F4C0012B3425BE203C23092F6B624FE8 Othello (Japan)" MSX1
|
||||
41BA54C945104915CCC8D465930445C905D839E4 Oyoide Tango (Japan)" MSX1
|
||||
61695EB1DC6242D8A70C7EF2172CF86A26E3C2DD Pac-Man (Japan)" MSX1
|
||||
A72724A79C2C50EC66046C0828934B5CAD11B7C9 Pac-Man (Japan) (Alt 1)" MSX1
|
||||
56FEBD50BE4ACCB3EB8C73FF4FF641EA767108B3 Pac-Man (Japan) (Alt 2)" MSX1
|
||||
A2E144546A191DA8829B9CA9FA019884FE95156C Pachi Com (Japan)" MSX1
|
||||
5558BA634018B22DCC687A01F9422FE60EA57ADC Pai Panic (Japan)" MSX1
|
||||
DF13ED647ED4F5A6B04F1710FC1140EA65DC966F Pairs (Japan) (Alt 1)" MSX1
|
||||
27BC809518FBB6C0D52C949E7CBE81980A801D32 Pairs (Japan)" MSX1
|
||||
479608B5A86D7C77BD6C4DD00605B8EFB2E5B43E Panther (Japan)" MSX1
|
||||
75D3B72D9CEEAA55C76223D935629A30AE4124D6 Parodius (Japan) (Alt 1)" MSX1
|
||||
2220363AE56EF707AB2471FCDB36F4816AD1D32C Parodius (Japan)" MSX1
|
||||
A6B2FDAE9551EF3633926F6177C771D794D1E91B Pasokon Sakkyokuka (Japan) (Program)" MSX1
|
||||
AEB705AC42F8D9D62ECDB25899535D1F14F1C49C Pass Ball (Japan)" MSX1
|
||||
8117EC66C0645A54422841A632CFD6602F35C4F9 Pastfinder (Japan)" MSX1
|
||||
0486938B52FBCF30A4FA206E07960A5B866FCA61 Pay Load (Japan) (Alt 1)" MSX1
|
||||
5F965BBBA026134818759D25119D4114599132A8 Pay Load (Japan)" MSX1
|
||||
190BCAB0325DED99F42F32976BF965F0164AD2A4 Peetan (Japan)" MSX1
|
||||
37E6FE7D07B3F8B2C585C77B231207AC8BAA1EA3 Pegasus (Japan)" MSX1
|
||||
D53E0C8BCD98820AFE820F756AF35CC97911BFE4 Penguin Adventure (Japan, Europe)" MSX1
|
||||
5AAB681334F9E97FE8D7E0EB008B2AFD5E0FC3AC Penguin-kun Wars (Japan)" MSX1
|
||||
683478868F6C6423CC3E9C6AABE1868B30B1E47D Pico Pico (Japan)" MSX1
|
||||
336A7C451A03C9A55726D171603B54628AD832C8 Picture Puzzle (Japan)" MSX1
|
||||
663D12F6FED3CE5017B783DB3032EB69D8554FED Picture Puzzle (Japan) (Alt 1)" MSX1
|
||||
3450F93FC2B08A052A709930C97EDEAD0099E447 Pillbox (Japan) (Alt 1)" MSX1
|
||||
76A79DD0554B8F7E84468FCD3BF73459CE4AEB2B Pillbox (Japan)" MSX1
|
||||
C95F8EDB24EDCA9F5D38C26D0E8A34C6B61EFB0C Pinball Blaster (Europe)" MSX1
|
||||
211E1F7E86495178FB2B05E163B04ED4B7455034 Pine Applin (Japan) (Alt 1)" MSX1
|
||||
878554D3B579E72B2D3C22E6330208EE0D1EE8A6 Pine Applin (Japan)" MSX1
|
||||
91BD6C21530654FAB12CD8A797044D494834C223 Pingball Maker (Japan)" MSX1
|
||||
1FBD7AF23177AB1DE799764D8A26BC2BBF85B042 Pinky Chase (Japan)" MSX1
|
||||
BE8BB7F5E812CD31A65AEC3782A2D526BEF9B3D6 Pipi (Japan)" MSX1
|
||||
10E63EBA7D2B10D946822F21E7FD106F5DFAB632 Pippols (Japan)" MSX1
|
||||
CF8E40315F34E30E1BE4776BBEBC08C0A8403523 Pippols (Japan) (Alt 3)" MSX1
|
||||
D621E2A2F0F924A17673F5D47F2182095074ACF4 Pippols (Japan) (Alt 2)" MSX1
|
||||
0A9C576EABAF2651DDCA35BF17F96E509D6C6BA0 Pippols (Japan) (Alt 1)" MSX1
|
||||
78079266711E60420480E4D95A39F0D7D974AD32 Pitfall II - Lost Caverns (Japan)" MSX1
|
||||
AE8C7355C829248305384243F78A870453367E77 Pitfall II - Lost Caverns (Japan) (Alt 1)" MSX1
|
||||
5FB4B6C3735E4D9415565A856BB69F9FB4857161 Pitfall! (Japan) (Alt 1)" MSX1
|
||||
2FA9C0F016EFC2D1752A272C632393F5063EA06C Pitfall! (Japan) (Alt 2)" MSX1
|
||||
B88E9C548873DCFD190E0E38F7B279344EEA41EC Pitfall! (Japan)" MSX1
|
||||
E6FBFB4B10DC393953211DDA4B114080A08302A1 Play Ball (Japan)" MSX1
|
||||
6F247C8AF6FC1881242281F19912068B03CA4126 Poiny X Senryosakusen - Operation Thanksgiving (Japan)" MSX1
|
||||
CDAF507DBA4A48B5C98850A96F61F6D2E8464E00 Police Story, The (Japan)" MSX1
|
||||
835B3E2BAE1D680D7050CE188C617FBCFB326EB3 Police Story, The (Japan) (Alt 1)" MSX1
|
||||
692A55393E8EEF0800A612C01456E9CECD9C1418 Pooyan (Japan)" MSX1
|
||||
C713ECD0E2EF89B2443E516D5FFA53D3A3422E22 Poppaq the Fish (Japan)" MSX1
|
||||
AC109DAC24DF4DAE813CA5D9F0938CC48A162BB1 Price of Magik, The (Europe)" MSX1
|
||||
24C5CBF1EE4CAA6D83A5AA7A5F3818692542FDA8 Professional Baseball (Japan)" MSX1
|
||||
DA5FD6CE2F92A40B1CCAF6E3C425D720FEBC3543 Professional Mahjong (Japan)" MSX1
|
||||
D03FDCA57B55BDB7E6B5481615B8AD0C8A71F77D Protector, The (Japan)" MSX1
|
||||
FAE437072234C65BCA174DB9AEFD2107A53C358A Psychedelia (Europe) (Program)" MSX1
|
||||
16C692A2C9BABFDADD8408D2F0F8FAE3A8D96FD5 Psychic War - Cosmic Soldier 2 (Japan)" MSX1
|
||||
A36C00F32CAD6B603BC5525A741CB09064670F34 Puzzle Panic (Japan)" MSX1
|
||||
1AD2178C27874704B395AB250200D9ACB7D3DE9C Pyramid Warp (Japan)" MSX1
|
||||
531A7F736D86095D791D6D0F267BE66EEF07949C Q-bert (Japan)" MSX1
|
||||
2E16A588246743C9B901AFDBF1BA094A0B1C8B5D Q-bert (Japan) (Alt 1)" MSX1
|
||||
1F72E0CD58AFE22075A129AC854BBDCE0704B0C8 Queen's Golf (Japan)" MSX1
|
||||
BE9D337DD412056F5FE78FD19467A63E80E3864C Queen's Golf (Japan) (Alt 2)" MSX1
|
||||
97C39DAD3E065F9083FEFAE157F278844B208058 Queen's Golf (Japan) (Alt 1)" MSX1
|
||||
9C886FFF02779267041EFE45DADEFC5FD7F4B9A2 R-Type (Japan) (Alt 2)" MSX1
|
||||
0B379610CB7085005A56B24A0890B79DD5A7E817 R-Type (Japan) (Alt 1)" MSX1
|
||||
37BD4680A36C3A1A078E2BC47B631D858D9296B8 R-Type (Japan)" MSX1
|
||||
636EB837C5D80FB6B0692A72954CA91291BA831B Raid on Bungeling Bay (Japan)" MSX1
|
||||
C5AF6C4255BAB55D68E82FA016CB35E3213BA244 Rally-X (Japan) (Alt 2)" MSX1
|
||||
3DCECD610E832E7769547D3B6CE2B767F65F3563 Rally-X (Japan) (Alt 1)" MSX1
|
||||
FC7212C6813574224114C3BB5BFA99206C0816A5 Rally-X (Japan)" MSX1
|
||||
770805BD0BE8B09A3BE10030060D6AD8DC07D1C3 Rambo (Japan)" MSX1
|
||||
4334ACC2BD5C921BC4DCB6DE9A1FCC79D843EE15 Rambo (Japan) (Alt 1)" MSX1
|
||||
AC381DFB4D0B52DEDB18A8DF7A4651ED2978D12F Rambo (Japan) (Alt 2)" MSX1
|
||||
FE1D02284B0B051308E3C796E8E9EEE2F86521B8 Rambo (Japan) (Alt 3)" MSX1
|
||||
54A49A3C8B42B8B246E62ED45346CF52836DDCAC Real Tennis (Japan)" MSX1
|
||||
91E17ABA249925C7E0E5C280469BEF09D5534DA8 Red Zone (Japan) (Alt 1)" MSX1
|
||||
61E26157F0701CCE2DDB860A12F187912398B1B4 Red Zone (Japan)" MSX1
|
||||
74AE85D44CB8EF1BAE428C90200CB74BE6D56D3A Relics (Japan)" MSX1
|
||||
C72AF5118835E49AC6D181CC832336AB22EC5DCB Renju & Ojama Dogs (Japan)" MSX1
|
||||
F02CA47BE665E83D812979D8074A985E5637B979 Rise Out from Dungeons (Japan) (Alt 1)" MSX1
|
||||
5FBC5D6A01E66A1C456B82AC1190CCDE61BC7832 Rise Out from Dungeons (Japan)" MSX1
|
||||
33BE9017FAF173EAE04D0C91CA8D42D1C20596C0 River Raid (Japan) (Alt 1)" MSX1
|
||||
A1E14912D45944B9A6BAEF1D4D3A04C1AE8DF923 River Raid (Japan)" MSX1
|
||||
BF4A0BAB1E8EAA70A8B12CD9A81D7A90A74C9E26 Road Fighter (Japan)" MSX1
|
||||
7ABDF08E9C0A511B8182C502ED8C5F42778437E9 Road Fighter (Japan) (Alt 1)" MSX1
|
||||
46C98A3143F5A80B2090311A770F9B73000881C0 Robo Wres 2001 (Japan)" MSX1
|
||||
A2F9E1250C67D2E98BE70900D4370545321CDBFE Robofrog (Japan) (Alt 1)" MSX1
|
||||
ACCE81BF851FA5869CD75181DF4FCF7D4489A9DB Robofrog (Japan)" MSX1
|
||||
1EDABC3226648B54AE98D524B31F37CA47C8C88B Rock'n Bolt (Japan)" MSX1
|
||||
1500A07693A7C06189F4CD6764D5EE62F0EDD85D Roger Rubbish (Europe) (Alt 1)" MSX1
|
||||
8607B92458584D5AA770369D94D50361B1D64BD3 Roger Rubbish (Europe)" MSX1
|
||||
FF9877666D983759D41398C5E3E29801AD95A589 Roller Ball (Japan) (Alt 1)" MSX1
|
||||
44BAA180F6C9E0F140AC1F0AFAE75C412CB06B9E Roller Ball (Japan)" MSX1
|
||||
34544106FBD29B2A72E1E8C2E0F260B79A0B0883 Rotors (Japan)" MSX1
|
||||
0D459788B6C464B50CBC2436E67A2CEF248E0C4A Salamander (Japan)" MSX1
|
||||
3F741BA2AB08C5E9FB658882B36B8E3D01682F58 Sangokushi (Japan) (Alt 1)" MSX1
|
||||
14FF6FE464362C6B7DBB47B2ECDA3A8C5F05EF79 Sangokushi (Japan)" MSX1
|
||||
E767C0239B79821463FA42F2C1989D3FD1B4B868 Sasa (Japan)" MSX1
|
||||
395C5F40692C45B891ABE07C89D1E87829665FC7 Sasa (Japan) (Alt 1)" MSX1
|
||||
1A6DE1CFF831429394DC2B9528993A1DFCAE14C6 Saurus Land (Japan)" MSX1
|
||||
BC3BE8F829211DD8A8EB854F86FF014C47ED9254 Scarlet 7 - The Mightiest Women (Japan)" MSX1
|
||||
09FBBD923E0DEB82F5E20FA8CE2D842ADBF4A646 Scion (Japan)" MSX1
|
||||
C73D4C27AA2B0FB946E398323BD67D9E53C4F9EF Scope On - Fight in Space (Japan)" MSX1
|
||||
05182561E05FA8E7C8A8184EDA885DC4FD12CC5B Scramble Eggs (Japan)" MSX1
|
||||
C1D272645A249757B8BE5BD913BA2D3447892387 Sea Hunter (Europe)" MSX1
|
||||
2B255C3E5615B2F5E2365419A35E4115A060E93C Senjo no Ookami (Japan)" MSX1
|
||||
4936916BF914D99C5B9E3F4C7385F44B6B97D4C5 Senjyo (Japan) (Alt 1)" MSX1
|
||||
E373E3E9BE4F6D30D5DB84B699082C00B2021BA3 Senjyo (Japan)" MSX1
|
||||
DB0ED31C779FFFD2084946E3BA69512B372D845F Sewer Sam (Japan)" MSX1
|
||||
83DF4081529FE5B8BB0A3601614D36C8384C9202 Shougi (Japan)" MSX1
|
||||
0E06519E68C78A8F018152511F4F13374C5856AA Shougi 2 (Japan)" MSX1
|
||||
299E52DFBBB94ACE4FD1EF59ECE45364CE0BB450 Shougi Game (Japan)" MSX1
|
||||
F9AD0CDB227C588B1A5C75220ED53D0314550D7F Shougi Meijin (Japan)" MSX1
|
||||
1C4DE8D4A1CBF5AA2BCF7816A1E55EE4584F59FB Shougi Sinan 1 (Japan)" MSX1
|
||||
D844C4C5AE9C7AC671C4BE71AC1190A1E5DB4D36 Shout Match (Japan)" MSX1
|
||||
4937A8E35072012A980F85ECFC60604D9D900244 Simple ASM 1.0 (Japan) (Program)" MSX1
|
||||
D120CA303C3E1DD56ADEE68F10E9E1AB51F50AB3 Sinbad (Japan)" MSX1
|
||||
D264152D4974B78959465ACFE0D5678E72930073 Skooter (Japan) (Alt 1)" MSX1
|
||||
64F1CE4691056047F404460031ACB0B82A76968D Skooter (Japan)" MSX1
|
||||
136D838CC1297940D96CD8E27AEA9F9E3C7088A6 Sky Galdo (Japan)" MSX1
|
||||
1F8334DC7459CFCF2AD132E94976015C02E51390 Sky Jaguar (Japan)" MSX1
|
||||
E3A52D448E69D6D14F67D35F24D9924158B1CCE1 Slapshot (Spain)" MSX1
|
||||
7300D44A753DACF582D3079ED09EAFC9DD629530 Snake It (Europe)" MSX1
|
||||
5A12439F74CA5D1C2664F01FF6A8302D3CE907A8 Sofia (Japan)" MSX1
|
||||
2338946A671D31D12360ACE4EEB33F7BC7DB56F1 Soukoban (Japan) (Alt 2)" MSX1
|
||||
CF55B0D12E550F71CEF709358BC7E799ECED0083 Soukoban (Japan) (Alt 1)" MSX1
|
||||
04BD78730B100DD879E2FBD3FE646D2BC9BBC46B Soukoban (Japan)" MSX1
|
||||
DE10AA2A2ABFDCAFE0064E1E76B676F54C7AAFC6 Space Camp (Japan)" MSX1
|
||||
D1AD3BEB29AECAA7C3BC1FD8A4BE3B10D38CC47A Space Camp (Japan) (Alt 1)" MSX1
|
||||
4971BDD3DB63D394FBC2186182C901CA4B32535B Space Invaders (Japan)" MSX1
|
||||
FBBD9A77004F9BDBCFC292F85C32106FAA18CFA6 Space Maze Attack (Japan) (Alt 2)" MSX1
|
||||
A00F9E66F1FA3DE15B028E0FBFED636E194BB967 Space Maze Attack (Japan) (Alt 1)" MSX1
|
||||
93BF6725A3C1B7071064A01884E1B6E8C6F8B579 Space Maze Attack (Japan)" MSX1
|
||||
7C0F720C7601CA6DC86C81AB6A76E0587A052F75 Space Trouble (Japan)" MSX1
|
||||
FFF31B8C7549493D8EC220F85E3E8536F150D82A Space Walk (Europe)" MSX1
|
||||
4B996BDDF88605C432F73564922106A63D31F62C Sparkie (Japan) (Alt 1)" MSX1
|
||||
B9C98B80216983F97E28293B576CA9BE3602C1A1 Sparkie (Japan)" MSX1
|
||||
4D80FAE5133D55503968EE246C1346CDDB020FFC Spelunker (Japan) (Alt 1)" MSX1
|
||||
49E14B0248C649E7B5754357597695ABEF70C17D Spelunker (Japan)" MSX1
|
||||
97F1790146116198133C083DE113ED1E5CA6FF21 Spider, The (Japan)" MSX1
|
||||
33C62E6F7478BE369580A2D985FF57667F13CF84 Spread Sheet (Europe) (Program)" MSX1
|
||||
1D129BDE09C9DB2433B334D36762704DE94983BA Spy vs Spy II - The Island Caper (Europe)" MSX1
|
||||
18B90AAA2284EB46233E9203AF1E8CF1922C417C Square Dancer (Japan)" MSX1
|
||||
7BF7BD134DDF9ED5B489F7F2EB0AA26BB2428FC9 Squish'em (Japan)" MSX1
|
||||
364AE6695509F5CF16985CC2946A45AF5CA4CF56 Squish'em (Japan) (Alt 1)" MSX1
|
||||
A1E1BFFE4B4EA6D67C973FA483C4D6273F68DE3C Star Blazer (Japan) (Alt 2)" MSX1
|
||||
EDA9580A1AC75707F621C251A7424DF3846E4EC0 Star Blazer (Japan)" MSX1
|
||||
B07A6AE619FCC6291838959DC1A899DE832F8D97 Star Blazer (Japan) (Alt 1)" MSX1
|
||||
225894DA7E3AFABF33ABF05E519E1F6BCAC77A21 Star Command (Japan)" MSX1
|
||||
5FE86465119343804A722CE4768EB33DE806A39F Star Force (Japan) (Alt 1)" MSX1
|
||||
C1746EFEB4B44DCC80DFC4F429009FEAC91D9C48 Star Force (Japan)" MSX1
|
||||
6A56B46B8BF014B25863433D6D96E64641A93EEF Star Soldier (Japan)" MSX1
|
||||
B58CAF47C953B6F00935A201BFCCF7EE968DFF32 Star Soldier (Japan) (Alt 1)" MSX1
|
||||
B2BCC1C0D64B6EE9F0E9BBBCF0EF7B64D80D3B90 Star Trap (Japan)" MSX1
|
||||
E3CE88E95115765E31193777E57FCB9B40E10D3A Starship Simulator (Japan) (Alt 1)" MSX1
|
||||
0E5062BB18B4A6FB93A89318772928874DD4D6EA Starship Simulator (Japan)" MSX1
|
||||
FC5D252A26C93DC4CC30984B954A6A5124DEE653 Step Up (Japan) (Alt 1)" MSX1
|
||||
27CE427EB1C86BA22707A6EE9086DB9D39962DC6 Step Up (Japan)" MSX1
|
||||
1FA7398005FB0BD7075141035E8D888197162030 Stepper (Japan)" MSX1
|
||||
3950F22265139A84CF57F3C0936E7927173F3D7A Stone of Wisdom, The (Japan)" MSX1
|
||||
3063BC3AC5AF6D990D8D002ACBC9C3A18BAB71F6 Strange Loop (Japan)" MSX1
|
||||
CCF6E244D27EC61195280D0915A3B43D291E3FAD Suparobo (Japan)" MSX1
|
||||
05D7016F39E94BF9FC33D0E8482FF3038D6E01BD Super Billiards (Japan)" MSX1
|
||||
DACC9ED6A80FB15C3E82C4081C07211E033BA820 Super Bioman 4 (Korea) (Unl)" MSX1
|
||||
5D65A308BB9EC8C4B4CE334B18D699B1F53227EF Super Boy 3 (Korea) (Unl)" MSX1
|
||||
8B65D999BA187C98BA97A038EA46655FD9D62DEB Super Boy I (Korea) (Unl)" MSX1
|
||||
85153A8F25882CADDE8295D040DDB7586C93CEFE Super Boy II (Korea) (Unl)" MSX1
|
||||
03F112B38FB1D05A9B0B50D3C6A54AA2CE9DD2B0 Super Bubble Bobble (Korea) (Unl)" MSX1
|
||||
A84608F1C2FE1AEA1A8A586F2E335CB64BB951FC Super Cobra (Japan)" MSX1
|
||||
7AD00597CEB5A02379055230D907C4421982329A Super Cobra (Japan) (Alt 1)" MSX1
|
||||
16553C30FCDD0E1D00A48FE1CB2DEF537C4A7C3F Super Columns (Japan)" MSX1
|
||||
54F288590F0C882F6E3A9B7C3F7D15B407190975 Super Cross Force (Europe)" MSX1
|
||||
82C68A93D01F103AF4FE9F9205184FFD1A36A90F Super Drinker (Japan)" MSX1
|
||||
27C2CDEE4BE0CA166C2EBD2DAC61115A56BB9856 Super Golf (Japan)" MSX1
|
||||
2DFBCA8F5CC3A9E9D151382EBE0DA410F5393EAF Super Laydock - Mission Striker (Japan)" MSX1
|
||||
55F30C8B7118870802D00DB860BC1945F18A42C0 Super Monitor (Japan) (v1.1) (Program)" MSX1
|
||||
35F13B5A32C64B21517F0C4009F264067338912E Super Monitor (Japan) (v1.2) (Program)" MSX1
|
||||
991EF9890DC3E0C0D29D6D249675EAE182ACA30C Super Pachinko (Japan)" MSX1
|
||||
0D2F86DBB70F4B4A4E4DC1BC95DF232F48856037 Super Pierrot (Japan)" MSX1
|
||||
0348F1758DAA118EBAF2BC593FF9A0A622FC89E8 Super Snake (Japan) (Alt 1)" MSX1
|
||||
58B3B3A678364D0649C1AF0C27DA144CFEE85146 Super Snake (Japan)" MSX1
|
||||
8DCD9618F92FB014D16E8F4EC9A813E65424AD7D Super Snake (Japan) (Alt 2)" MSX1
|
||||
996A1C0D92400287C15545116B952F84C7DC03B1 Super Soccer (Japan)" MSX1
|
||||
830EFA0B25E1CF34D5F55D08CB80709D0A2C82EC Super Synth (Japan) (Program)" MSX1
|
||||
A2F8F8F9F46262342EEE0A1DF7C6871008A3A189 Super Synth (Japan) (Program) (Alt 1)" MSX1
|
||||
4A1282901221207DA79432FB0BCB4F1E722C8278 Super Tennis (Japan)" MSX1
|
||||
1A5295A337E5B969C939644CB5AD55B84A6AD31D Super Tripper (Spain)" MSX1
|
||||
221C76D6AC483FB1F11C87D37B9617F1E1D7BC6D Sweet Acorn (Japan)" MSX1
|
||||
C8015D4453EFB9F78005F6C8481CBCE9D99F6CC5 Sweet Acorn (Japan) (Alt 1)" MSX1
|
||||
2D8E39F210DA6D633F773CDA03E9970712EA84CF Swing (Japan)" MSX1
|
||||
719F457D8FCBF6C21A88E88F34FCD54F5E96AD68 Swing (Japan) (Alt 1)" MSX1
|
||||
16351E6A7D7FC38C23B54EE15AC6F0275621BA96 Syougun (Japan)" MSX1
|
||||
5BBCBD47F05A2742CFB0CAD88856EB2DF6E469FE Tank Battalion (Japan)" MSX1
|
||||
7FEF9411858B1FF3FF019646E9E7AA0C61C7E87D Tatica (Japan)" MSX1
|
||||
8F74C91E6598D8DE188AE1B506C44229C768B11F Tawara-kun (Japan) (Alt 2)" MSX1
|
||||
8DD49E12677443AEDE319F41BF3F82A08D0E5B5D Tawara-kun (Japan) (Alt 1)" MSX1
|
||||
14F2D64D05E2E53E876E3D6AF0A5711E557E3C96 Tawara-kun (Japan)" MSX1
|
||||
A8EFF8C532DA894C86198B04B0A5D7707FEB28C5 Tear of Nile (Japan)" MSX1
|
||||
4E17EFBE87ADC232C055D0DC26EB4476C661AAFE Telebunnie (Japan)" MSX1
|
||||
50439F12DDFF3ED449DA3CC1442385AABA609E7D Telebunnie (Japan) (Alt 1)" MSX1
|
||||
249DA12E2711C643C5E18CF96184D33DBF7E2305 Tensai Rabbian Daifunsen (Japan)" MSX1
|
||||
010D5F325FC38C5B590841D15CE4F07D59F2A4CB Tensidachino Gogo (Japan)" MSX1
|
||||
A0D85C5FC74547F46025369DA687569FB5AA3991 Tension (Spain)" MSX1
|
||||
4FF12FC3ADF389A1F76A7A9BAB6B2FD20044F5B4 Tetra Horror (Japan) (Alt 1)" MSX1
|
||||
53814FDFEACCE237BB68FB9056D005EB614B708A Tetra Horror (Japan)" MSX1
|
||||
E9398ACEB9F8A648E4BCEBE02E5D7B14A3744C7D Tetris (Korea) (Unl)" MSX1
|
||||
3C29EEF381D77F8C1F425A3E29919013C72F875C Tetsuman (Japan)" MSX1
|
||||
F6711E1E2BAC04D45B8988F1D03529AD777ABF4E Tetsuman (Japan) (Alt 1)" MSX1
|
||||
6420473EC647E4D750BC2247020B6722435B5211 Thexder (Japan) (Alt 1)" MSX1
|
||||
049E7DCCD3977049B5F68AAD7754105B014BA771 Thexder (Japan) (Alt 2)" MSX1
|
||||
A2109DA08B1921C4B3B47C6847598D424581B508 Thexder (Japan)" MSX1
|
||||
DE5DA311941056A90CAB28FD91522C054871513F Thunder Ball (Japan) (Alt 1)" MSX1
|
||||
4F73BA24163946F6247523FC3F2AA5DE00C3D7A6 Thunder Ball (Japan)" MSX1
|
||||
136F2DEDD45F4419837EB1E4E623CB1DC317EF39 Thunderbolt (Japan)" MSX1
|
||||
B3D57F968FDFEBE77F78C05F4A075D139F219AE0 Thunderbolt (Japan) (Alt 1)" MSX1
|
||||
D1FCD47F6B68FCEE9914B32FD48B2634CF60C994 Thunderbolt (Japan) (Alt 2)" MSX1
|
||||
B3C2DC4D1C940DDB4B9E742B8F5A47AB1E2D385F Time Pilot (Japan) (Alt 1)" MSX1
|
||||
C1C5EC4042760880216F781EBD5E7174A3B0F9CA Time Pilot (Japan)" MSX1
|
||||
D147F2CAC0600527CE49BFFFC865C54EB783E5E5 Toobin (Europe)" MSX1
|
||||
37C85041128EE21300327726B7300A20EF6B84DD Top Roller! (Japan)" MSX1
|
||||
EA8D86AC74DCDCA1C72DAAE517722431767C5AD2 Topple Zip (Japan)" MSX1
|
||||
9B55970341AAAB59A73AE921C6CCF29009C1A8F0 Track & Field 1 (Europe)" MSX1
|
||||
BE16501255617BADE264DBF63DC59008E1D84AC8 Track & Field 2 (Europe)" MSX1
|
||||
503CBAD7516C6FDE89761388AB32845F35284CC6 Traffic (Japan) (Alt 1)" MSX1
|
||||
7DBEAF25E3A1A66F9C6B331332DC36E73B511D4A Traffic (Japan)" MSX1
|
||||
DFD7EF6FD86EFD5C8019B59D8FA5C5A47CF90CD0 Trial Ski (Japan)" MSX1
|
||||
E93DA3D1910D513DBB78AD599ADBB05EB92B5930 Trick Boy (Japan)" MSX1
|
||||
4A35065D97D81A94A7649D19B3F9ABD34F834EAB Tritorn (Japan)" MSX1
|
||||
8547AE0FA25B9F3E26B90D4F3E1A4325B9248549 Trumpaid (Japan)" MSX1
|
||||
BFE8046F8CCC6D6016D7752C04F0654420EF81E7 Tumego 120 (Japan)" MSX1
|
||||
08BE92145A99DD6E0539FF79DCA62B2F4CC59B0B Turboat (Japan)" MSX1
|
||||
6B496A50626C3E67DFE49C15A3847448DBEB05A8 Turmoil (Japan) (Alt 1)" MSX1
|
||||
D33FE18EDE20DA4DD3D6991A9C2995E149C8FC3F Twin Bee (Japan)" MSX1
|
||||
751D722A4F36A03E88AC62118AE8D880E40C1C84 Twin Bee (Japan) (Alt 1)" MSX1
|
||||
ADB3977309D373AD1DC995AE7D2F8280F1673D66 Twin Bee (Japan) (Alt 2)" MSX1
|
||||
8B828D33DCDFD324DF1827EF79F5CA9635968C6E Twin Bee (Japan) (Alt 3)" MSX1
|
||||
4FA5382DF5A8FF7D631BE22BB8445E7BC8018A11 Twin Hammer (Europe)" MSX1
|
||||
F3C0C1F0EC3E10CD4A5EAAE26D593198B1A5AB9A TZR - Grand Prix Rider (Japan)" MSX1
|
||||
E73A449E34652C18AF0A72AB5C3637AFA57D5842 Ultraman (Japan)" MSX1
|
||||
4340A2580C949D498D2C8E71699FFF860214E9EA Vaxol - Heavy Armed Storm Vehicle (Japan)" MSX1
|
||||
DF797593395346E94AA1CF13A9524E30D631888D Venus Fire (Japan)" MSX1
|
||||
82868A81D805FB391FCE588623FC888296CBF62A Video Hustler (Japan)" MSX1
|
||||
EED68D254A17D76C36E094DD8A50A362A964E1B7 Video Hustler (Japan) (Alt 1)" MSX1
|
||||
6DFC622E350D29859F05FDDB3FA1F974CD4C8BF2 Volguard (Japan)" MSX1
|
||||
52F95F6F4261BE00AE1B9CAF88A05C021C229E28 Warp & Warp (Japan)" MSX1
|
||||
DE6DB54CEF2CC4CBCC09C57C8ED0A1FF01347B6E Warroid (Japan)" MSX1
|
||||
6CE0632ACC2351AE968D7D3CE9C9A0AF05C713CF Warroid (Japan) (Alt 1)" MSX1
|
||||
28AAF59DADB425C1EF6FCA860439F4E42E1737B8 Water Driver (Japan)" MSX1
|
||||
818D91505AD39BBA2EAF7F4857C7D41E95FCB233 Wing Man 2 (Japan)" MSX1
|
||||
D74C381EA17ACB94527EF3ABAA280793A824D322 Wonder Boy (Japan)" MSX1
|
||||
1672AF5BC1740480E8302F7690589EA5B5391BCB Wonder Boy (Japan) (Alt 1)" MSX1
|
||||
76209C36BEC7CA971C6DB2E3BBCE267147E4A361 Wrangler (Spain)" MSX1
|
||||
58E335C943D2647C3FF1E689069D9FA5E1C7FF6E Wreck, The (Europe)" MSX1
|
||||
15CC2F7412373253E908689A778738D52656AD74 Xyxolog (Japan)" MSX1
|
||||
1E2ABAC01EB37E43A7A61DA25DC147BBDC30AD32 Xyxolog (Japan) (Alt 1)" MSX1
|
||||
1A6C5BA03E0CC76F7E001784E1A205375F5602B8 Yab Yum (Netherlands)" MSX1
|
||||
8161D9B325C708AF463C5622BD89CA94754CFDEF Yamaha Play Card System (Japan) (Program)" MSX1
|
||||
939ED6053363112C34766335B93D0DDF25059468 Yellow Submarine (Japan)" MSX1
|
||||
8B3994AB39768F15617FB2CD9199000226B935BD Yie Ar Kung-Fu (Japan) (Alt 1)" MSX1
|
||||
A3090A15C95334DA3E0F94030EADEE02B5032C0C Yie Ar Kung-Fu (Japan)" MSX1
|
||||
57827F8D49369E4DBF20A968E535374D35FF1648 Yie Ar Kung-Fu II - The Emperor Yie-Gah (Japan)" MSX1
|
||||
609D0BAC4933D1BCC877746A3E14D82C204F40E7 Yie Ar Kung-Fu II - The Emperor Yie-Gah (Japan) (Alt 1)" MSX1
|
||||
5017ABECA8FBED43FF2FD1A936843ACDC7192DCC Yie Ar Kung-Fu II - The Emperor Yie-Gah (Japan) (Alt 2)" MSX1
|
||||
C60A28A4048710AD3C63EF5BCF4CE03DB54C00BB Yokai Tanken Chimachima (Japan)" MSX1
|
||||
97E173DAC64DBDE7D6A60DE7606CBA0C860813DB Young Sherlock - The Legacy of Doyle (Japan)" MSX1
|
||||
DE765E699AF4D76D8FA80FB10D1E41581BEC11BF Zaider - Battle of Peguss (Japan)" MSX1
|
||||
F784350AF0C5C7407D83DA2BB499C59A08496AAC Zaider - Battle of Peguss (Japan) (Alt 1)" MSX1
|
||||
B030B3C22BAADD0D419657DCFA4B974AE1CD7508 Zanac (Japan) (v2)" MSX1
|
||||
FFA8FC5756F7E1D1EF168618F5606ACA10F8B2C7 Zanac (Japan) (v2) (Alt 1)" MSX1
|
||||
372623401599C57968DAAC0312DD9A0ABBC6BD2F Zanac (Japan) (Alt 1)" MSX1
|
||||
46E9ED7B7F6DFDA8EEE266476C9EBC4DD9D8FCC2 Zanac (Japan)" MSX1
|
||||
D88F33EE40839F87CDCE6CC4820E1DD192A01776 Zaxxon (Japan)" MSX1
|
||||
3DA301B1082C158E505523FA22C19F1B3F4D851C Zaxxon (Japan) (Alt 1)" MSX1
|
||||
59679B1ED40416F4C8D65085E5473C621BEA6AC4 Zen (Europe) (Program)" MSX1
|
||||
2F4404D141ACC40E48AF0B12C70CD44B066ECE10 Zenji (Japan)" MSX1
|
||||
C9440172802818CC5B9AE559FBD3F346A263605C Zenji (Japan) (Alt 1)" MSX1
|
||||
9D5F6098B71712E9D9E386739B82FC484380F114 Zexas Limited (Japan) (Alt 1)" MSX1
|
||||
71442AC703C2966142B04071FEDF180E81DAAB9A Zexas Limited (Japan) (Alt 2)" MSX1
|
||||
A87971B9DF0DE44644C2188F5F475AEF7AE85304 Zexas Limited (Japan)" MSX1
|
||||
07DB3E3FFB16C138F9DA12CACDE48BF7522A188C Zoom 909 (Japan)" MSX1
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,169 @@
|
|||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Type: TOSEC
|
||||
;;; Source: MSX MSX2 - Applications - [CAS] (TOSEC-v2012-04-15)
|
||||
;;; FileGen: 2020-02-07 11:00:47 (UTC)
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Bad Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Hacks
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Over Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Translated
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Home Brew
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Believed Good
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
76184CB39317FBD31EA0B3D0989217C3 Leonardo (1987)(Omega System)(JP)[CLOAD + RUN] MSX JP
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Type: TOSEC
|
||||
;;; Source: MSX MSX2 - Compilations - [CAS] (TOSEC-v2012-04-15)
|
||||
;;; FileGen: 2020-02-07 11:00:47 (UTC)
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Bad Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Hacks
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Over Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Translated
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Home Brew
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Believed Good
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
DE2CB726C084FE985ECC39FD67890B96 Games Collection, The - 747 400b Flight Simulator (1988)(Eurosoft)(NL)(Tape 2 Side B)[a][RUN'CAS-'] MSX NL
|
||||
DB5F0174F92169783D504C9086E77A7F Games Collection, The - 747 400b Flight Simulator (1988)(Eurosoft)(NL)(Tape 2 Side B)[RUN'CAS-'] MSX NL
|
||||
DF837999C4F1332954BADA0EB5521F97 Games Collection, The - Astro Blaster (1988)(Eurosoft)(NL)(Tape 1 Side A)[RUN'CAS-'] MSX NL
|
||||
4B4A90D8BD471592CC481C67014F43D6 Games Collection, The - Blow Up (1988)(Eurosoft)(NL)(Tape 1 Side A)[RUN'CAS-'] MSX NL
|
||||
87CC54D27254C3240A89CDFE4D88B685 Games Collection, The - Boom (1988)(Eurosoft)(NL)(Tape 1 Side A)[RUN'CAS-'] MSX NL
|
||||
51280DB1CA8817F5F7A0E80C49A34389 Games Collection, The - Booty (1988)(Eurosoft)(NL)(Tape 4 Side B)[RUN'CAS-'] MSX NL
|
||||
B5AAE51F647A24D345F86E04BEBA702E Games Collection, The - Breaker Breaker (1988)(Eurosoft)(NL)(Tape 2 Side A)[RUN'CAS-'] MSX NL
|
||||
EB0AF3520CDE7102C5A6FAE1E5A28E12 Games Collection, The - Burgerkill (1988)(Eurosoft)(NL)(Tape 5 Side A)[aka Mac Attack][RUN'CAS-'] MSX NL
|
||||
A0FF3472ABDDE06056E5992BB77D001B Games Collection, The - CD Version - 01 - Sequential Loader (1988)(Eurosoft)[RUN'CAS-'][Martos] MSX
|
||||
D5DF03F56D0E2B2E4214099DF9199CAA Games Collection, The - CD Version - 02 - Eagle Control (1988)(Eurosoft)(NL)[Martos] MSX NL
|
||||
366D0C7D783E19B7C8B4FCD11FC15ECB Games Collection, The - CD Version - 03 - Search and Rescue (1988)(Eurosoft)(NL)[Martos] MSX NL
|
||||
19AE2148979B103A7556AB7E3461D68D Games Collection, The - CD Version - 04 - 747 400b Flight Simulator (1988)(Eurosoft)(NL)[Martos] MSX NL
|
||||
B9DBA77E8AA635DE680F74E9D8AFBAF2 Games Collection, The - CD Version - 05 - Vortex Raider (1988)(Eurosoft)(NL)[Martos] MSX NL
|
||||
9EE711DBA8AD9D80D6DC9A37D1AE93AA Games Collection, The - CD Version - 06 - Red Dawn (1988)(Eurosoft)(NL)[Martos] MSX NL
|
||||
DC056822F4CB7B93A7680999FD20EF54 Games Collection, The - CD Version - 07 - Blow Up (1988)(Eurosoft)(NL)[Martos] MSX NL
|
||||
A3E04B0B56FC39BD2101D866822FF783 Games Collection, The - CD Version - 08 - Booty (1988)(Eurosoft)[Martos] MSX
|
||||
2C5857BBC92802BDE292470463C4321B Games Collection, The - CD Version - 09 - Chess Player MSX1 version (1988)(Eurosoft)(NL)[Martos] MSX NL
|
||||
62D968C7BE1C264B517B0753026E55A6 Games Collection, The - CD Version - 10 - Chopper One (1988)(Eurosoft)(NL)[Martos] MSX NL
|
||||
CB0FAA88525FB53255BB08F63B1F46E2 Games Collection, The - CD Version - 11 - Gutt Blaster (1988)(Eurosoft)(NL)[Martos] MSX NL
|
||||
AB2C26D123E20061A689C30479CA3D75 Games Collection, The - CD Version - 12 - Burgerkill (1988)(Eurosoft)(NL)[Martos] MSX NL
|
||||
2B59B346ABBA2B3E30B7CD043083D586 Games Collection, The - CD Version - 13 - Playhouse Strippoker (1988)(Eurosoft)[Martos] MSX
|
||||
43BFF8CA33DCFB42F1EA7AFA32B4369E Games Collection, The - CD Version - 14 - Discovery (1988)(Eurosoft)[Martos] MSX
|
||||
4CABB26757D85551B4FA65C583E54F2F Games Collection, The - CD Version - 15 - Kong (1988)(Eurosoft)[Martos] MSX
|
||||
F1E1AA433722627E2EE3F1CAC50BDFE5 Games Collection, The - CD Version - 16 - Haunted House (1988)(Eurosoft)(NL)[Martos] MSX NL
|
||||
B042F9D5BABBABF48913DFA1557FA006 Games Collection, The - CD Version - 17 - Breaker Breaker (1988)(Eurosoft)(NL)[Martos] MSX NL
|
||||
BCEED94702A962620A2F51723CE7759A Games Collection, The - CD Version - 18 - Boom (1988)(Eurosoft)[Martos] MSX
|
||||
568D9C6C52205D4B684697BEE7648B31 Games Collection, The - CD Version - 19 - Missile Command (1988)(Eurosoft)[Martos] MSX
|
||||
F91C425B2DEF3D8F226529DBF7A7ACE2 Games Collection, The - CD Version - 20 - Frog (1988)(Eurosoft)(NL)[Martos] MSX NL
|
||||
7CFA5A2AEFA6671A3F9852A6FBD3EC70 Games Collection, The - CD Version - 21 - Jet Fighter (1988)(Eurosoft)(NL)[Martos] MSX NL
|
||||
1484D0340F38984743BF7C18046329B2 Games Collection, The - CD Version - 22 - Time Rider (1988)(Eurosoft)(NL)[Martos] MSX NL
|
||||
ED81FBD72DFF4F5E825E83C12BA66A44 Games Collection, The - CD Version - 23 - Starbite (1988)(Eurosoft)[Martos] MSX
|
||||
06F7AA5121E37FD87E8783CD90005415 Games Collection, The - CD Version - 24 - Quebert (1988)(Eurosoft)(NL)[Martos] MSX NL
|
||||
D6EDBE813FFB162444158C7CB6EC365A Games Collection, The - CD Version - 25 - Penguin (1988)(Eurosoft)(NL)[Martos] MSX NL
|
||||
0431627824B9EF2B045EE473C1595565 Games Collection, The - CD Version - 26 - Pinball Blaster (1988)(Eurosoft)(NL)[Martos] MSX NL
|
||||
50AFE7A69449F59CAF75DD55FBC7034D Games Collection, The - CD Version - 27 - Space Rescue (1988)(Eurosoft)(NL)[Martos] MSX NL
|
||||
3542174CBABE159B3717A81A27B1C8CF Games Collection, The - CD Version - 28 - Starbuggy (1988)(Eurosoft)(NL)[Martos] MSX NL
|
||||
A54FFE44FD7D19E91F89BA607A11611D Games Collection, The - CD Version - 29 - Astro Blaster (1988)(Eurosoft)(NL)[Martos] MSX NL
|
||||
8390F3AF176466DA7EC0C0433ABC5BA0 Games Collection, The - CD Version - 30 - Winterhawk (1988)(Eurosoft)(NL)[Martos] MSX NL
|
||||
89081F1ECAA7849490BDE785632C8840 Games Collection, The - CD Version - 31 - Pharao's Revenge (1988)(Eurosoft)(NL)[Martos] MSX NL
|
||||
09EAAE43054EBAB7177EA3A9B5BEE6BC Games Collection, The - CD Version - 32 - Scentipede (1988)(Eurosoft)[Martos] MSX
|
||||
617DBB4B020C57FA81DD549E56642445 Games Collection, The - CD Version - 33 - Chess Player MSX2 version (1988)(Eurosoft)(NL)[Martos] MSX NL
|
||||
53FDFE0D184981D510250CC02858F205 Games Collection, The - CD Version - 34 - Bankbuster (1988)(Eurosoft)(NL)[Martos] MSX NL
|
||||
B9DBC1F422591EEA1D74009256C92983 Games Collection, The - CD Version - Sequential Loader (1988)(Eurosoft)(NL)[RUN'CAS-'] MSX NL
|
||||
5EB26001D25F0AE751D44B29FFEDB41F Games Collection, The - Chess Player (1988)(Eurosoft)(NL)(Tape 3 Side A)[a][RUN'CAS-'] MSX NL
|
||||
751786B0C69D61918DD440C4BAAA0A10 Games Collection, The - Chess Player (1988)(Eurosoft)(NL)(Tape 3 Side A)[RUN'CAS-'] MSX NL
|
||||
AC7447DD8761619B50362C1D2E84B4C0 Games Collection, The - Chopper One (1988)(Eurosoft)(NL)(Tape 2 Side A)[RUN'CAS-'] MSX NL
|
||||
0CBA2F209E39A2A02A0A977380E964BD Games Collection, The - Discovery (1988)(Eurosoft)(NL)(Tape 1 Side B)[RUN'CAS-'] MSX NL
|
||||
820005A70375EF10A0B30B43B3252CD5 Games Collection, The - Eagle Control (1988)(Eurosoft)(NL)(Tape 6 Side A)[a][RUN'CAS-'] MSX NL
|
||||
65230164A7E44DF1C636AA892232E704 Games Collection, The - Eagle Control (1988)(Eurosoft)(NL)(Tape 6 Side A)[RUN'CAS-'] MSX NL
|
||||
AA3F4B62BB4ACDFA8819299F7095D71D Games Collection, The - Frog (1988)(Eurosoft)(NL)(Tape 3 Side A)[a][RUN'CAS-'] MSX NL
|
||||
14235D540AF93F69663CA0FCDFBF0530 Games Collection, The - Frog (1988)(Eurosoft)(NL)(Tape 3 Side A)[RUN'CAS-'] MSX NL
|
||||
679670788022649C7903341B95F4971F Games Collection, The - Guttblaster (1988)(Eurosoft)(NL)(Tape 2 Side B)[RUN'CAS-'] MSX NL
|
||||
5F13F0C621207AE80B790DE11806B25F Games Collection, The - Haunted House (1988)(Eurosoft)(NL)(Tape 3 Side A)[RUN'CAS-'] MSX NL
|
||||
93AD9F3CB7C3E3F6758339BE68DFE654 Games Collection, The - Jet Fighter (1988)(Eurosoft)(NL)(Tape 3 Side A)[RUN'CAS-'] MSX NL
|
||||
2AB35EFCBC118D43E7C25891CC1F0588 Games Collection, The - Kong (1988)(Eurosoft)(NL)(Tape 1 Side A)[RUN'CAS-'] MSX NL
|
||||
C2A878824DC0D52275F98E1D1D20E32A Games Collection, The - Missile Command (1988)(Eurosoft)(NL)(Tape 2 Side B)[RUN'CAS-'] MSX NL
|
||||
84BE4A2C87B2D9D4E1CB537219E9DDC4 Games Collection, The - Penguin (1988)(Eurosoft)(NL)(Tape 6 Side B)[a][RUN'CAS-'] MSX NL
|
||||
8356A628343BC3AAAAFBA06762571982 Games Collection, The - Penguin (1988)(Eurosoft)(NL)(Tape 6 Side B)[RUN'CAS-'] MSX NL
|
||||
8A1B15919D6ECE2D6ED4197D1262ECA8 Games Collection, The - Pharaoh's Revenge (1988)(Eurosoft)(NL)(Tape 6 Side B)[RUN'CAS-'] MSX NL
|
||||
3B21D2D9252941B6C7DB01E2DEDEECFC Games Collection, The - Pinball Blaster (1988)(Eurosoft)(NL)(Tape 5 Side A)[RUN'CAS-'] MSX NL
|
||||
A90FBB398D0F0D3457613426A0AA7F10 Games Collection, The - Playhouse Strippoker (1988)(Eurosoft)(NL)(Tape 1 Side B)[RUN'CAS-'] MSX NL
|
||||
79D3B4B2A3243FD1DB09A0C5C4F4E59E Games Collection, The - Quebert (1988)(Eurosoft)(NL)(Tape 2 Side A)[RUN'CAS-'] MSX NL
|
||||
BF40424B37A24708B9C7E30F460DA0B1 Games Collection, The - Red Dawn (1988)(Eurosoft)(NL)(Tape 4 Side A)[RUN'CAS-'] MSX NL
|
||||
CDD73CEB030471FA329C4739913DDE57 Games Collection, The - SAR (1988)(Eurosoft)(NL)(Tape 6 Side B)[a][RUN'CAS-'] MSX NL
|
||||
B91D646963BE44055333175591A6C86F Games Collection, The - SAR (1988)(Eurosoft)(NL)(Tape 6 Side B)[RUN'CAS-'] MSX NL
|
||||
5CD12C507F631D61B5F35BFB3BE2A7B1 Games Collection, The - Scentipede (1988)(Eurosoft)(NL)(Tape 4 Side A)[a][RUN'CAS-'] MSX NL
|
||||
AE74D86AA248C19D4CA168B68B597348 Games Collection, The - Scentipede (1988)(Eurosoft)(NL)(Tape 4 Side A)[RUN'CAS-'] MSX NL
|
||||
72A6B18A3E4F0A62AD15F94405A1E0E1 Games Collection, The - Space Rescue (1988)(Eurosoft)(NL)(Tape 5 Side A)[RUN'CAS-'] MSX NL
|
||||
F3ED1C23B1A5610EF0ED0409A5FDC996 Games Collection, The - Starbite (1988)(Eurosoft)(NL)(Tape 3 Side A)[RUN'CAS-'] MSX NL
|
||||
1E9D7A7E2A97DDDA624A69AD08A44E38 Games Collection, The - Starbuggy (1988)(Eurosoft)(NL)(Tape 5 Side B)[RUN'CAS-'] MSX NL
|
||||
8D29C18C8100AB53A95E4EBD66EBC6AD Games Collection, The - Tape 4 Side B - Bank Buster (1988)(Eurosoft)(NL)[a][RUN'CAS-'] MSX NL
|
||||
769B3F0B1208A21D330EA2F90419329F Games Collection, The - Tape 4 Side B - Bank Buster (1988)(Eurosoft)(NL)[RUN'CAS-'] MSX NL
|
||||
E33A9E5CD7CB69EC643171511864989C Games Collection, The - Tape 5 Side B - Chess Player 2 (1988)(Eurosoft)(NL)[a][RUN'CAS-'] MSX NL
|
||||
D86AEA1DA285B143AEA00EF7E540CC54 Games Collection, The - Tape 5 Side B - Chess Player 2 (1988)(Eurosoft)(NL)[RUN'CAS-'] MSX NL
|
||||
BDD6D393E330C9BCA638618532F3C7EF Games Collection, The - Time Rider (1988)(Eurosoft)(NL)(Tape 3 Side A)[a][RUN'CAS-'] MSX NL
|
||||
91657EDC9921EFBBA32B274B124402D2 Games Collection, The - Time Rider (1988)(Eurosoft)(NL)(Tape 3 Side A)[RUN'CAS-'] MSX NL
|
||||
7C9B74B99F2788570248EE68FE737383 Games Collection, The - Vortex Raider (1988)(Eurosoft)(NL)(Tape 4 Side A)[RUN'CAS-'] MSX NL
|
||||
E03114BC042BC5D183B83D29384C50CE Games Collection, The - Winterhawk (1988)(Eurosoft)(NL)(Tape 6 Side A)[RUN'CAS-'] MSX NL
|
||||
76184CB39317FBD31EA0B3D0989217C3 Leonardo (1987)(Omega System)(JP)[CLOAD + RUN] MSX JP
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Type: TOSEC
|
||||
;;; Source: MSX MSX2 - Games - [CAS] (TOSEC-v2012-04-15)
|
||||
;;; FileGen: 2020-02-07 11:00:47 (UTC)
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Bad Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Hacks
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Over Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Translated
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Home Brew
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Believed Good
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
E180C7B2910B2C35A03910DCBEE852F3 Chess Game 2, The (1986)(Eaglesoft)(NL)[RUN'CAS-'] MSX NL
|
||||
E03114BC042BC5D183B83D29384C50CE Games Collection, The - Winterhawk (1988)(Eurosoft)(NL)(Tape 6 Side A)[RUN'CAS-'] MSX NL
|
||||
A2CC4D5BDBD30AFB3BD9A5561B4F6820 Red Lights of Amsterdam (1986)(Eaglesoft)(NL)(Side A)[RUN'CAS-'] MSX NL
|
||||
839D2ED8DE9BFA8FE4F96ED05BF11476 Red Lights of Amsterdam (1986)(Eaglesoft)(NL)(Side B)[RUN'CAS-'] MSX NL
|
||||
C12B24782084B8F604B21D39EA58659A Red Lights of Amsterdam (1986)(Eaglesoft)(NL)[RUN'CAS-'] MSX NL
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,494 @@
|
|||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Type: TOSEC
|
||||
;;; Source: MSX MSX2 - Applications - [ROM] (TOSEC-v2012-04-15)
|
||||
;;; FileGen: 2020-02-07 11:00:07 (UTC)
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Bad Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Hacks
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Over Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Translated
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Home Brew
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Believed Good
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
16F08E7CDCE9AA13259B9E904EEB0E2B Cheese 2 (1985)(Nipon Electronics)(JP)[mouse] MSX JP
|
||||
A0FB9B61195D7CFA9905F72D32C0C730 Garakuta (1988)(Wachi Electronics)(JP) MSX JP
|
||||
43E912285287A9CF52ABDC3BFAB2951F Halnote v0.4 (1986)(HAL Laboratory)(JP) MSX JP
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Type: TOSEC
|
||||
;;; Source: MSX MSX2 - Firmware (TOSEC-v2012-04-15)
|
||||
;;; FileGen: 2020-02-07 11:00:07 (UTC)
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Bad Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
FE33DF038805A982522ABF4DA202AAA9 B Panasonic FS-PW1 MSX Word Processor (1987)(Matsushita Electric Industrial)(JP)[b] MSX JP
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Hacks
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Over Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Translated
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Home Brew
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Believed Good
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
9CB06CE20FEA9CE06265EC0C0EA20F3D Bit2 Midisaurus-C v1.00 (1990)(Bit2)(JP)[MIDISAUR.ROM] MSX JP
|
||||
30A0B3402A0A13B516AF76D39F45A365 Daewoo X-II CPC-400 MSX Extended BASIC v2.0 + Hangul BIOS v3.0 (1987)(Daewoo)(KR)[MSX2EXT.ROM] MSX KR
|
||||
7B9466546009D419EBD0DC27DB90C30E Daewoo X-II CPC-400 MSX Hangul Input Software v3.0 + MSX-Tutor (1987)(Daewoo)(KR)[MSX2HAN.ROM] MSX KR
|
||||
9BAF17B190F631405B6B0EEEEB162B87 Daewoo X-II CPC-400 MSX Kanji + Hangul Font (1987)(Daewoo)(KR)[KANJI.ROM] MSX KR
|
||||
25128F53E854D4BE82B6178BDC2AFC78 Daewoo X-II CPC-400S MSX Disk BASIC v1.0 (1987)(Daewoo)(KR)[DISK.ROM] MSX KR
|
||||
1BF039533043C2860387720278F285DB Daewoo X-II CPC-400S MSX Hangul Input Software v3.0 + MSX-Tutor (1987)(Daewoo)(KR)[MSX2HAN.ROM] MSX KR
|
||||
392218C5E7F761066CBF6000AE577060 Daewoo X-II CPC-400S MSX Kanji + Hangul Font (1987)(Daewoo)(KR)[KANJI.ROM] MSX KR
|
||||
43E912285287A9CF52ABDC3BFAB2951F Halnote v0.4 (1986)(HAL Laboratory)(JP) MSX JP
|
||||
5353336D9C81946FA17582DACCBB5CAE Kanji Driver 32k Unknown (19xx)(-)[KNJDRV.ROM] MSX
|
||||
CB30A978BD4BDDF957C66D1D05273658 Kanji ROM - JIS 1st+2nd Class for MSX-Write II (1988)(ASCII)(JP) MSX JP
|
||||
FB86EE3A1DF57AA5D747B75081085F6F MSX System v2.0 + MSX BASIC (1985)(Microsoft)(US)[a][MSX2.ROM] MSX US
|
||||
98E74ADD928BF5E933D9C9CDC71C6216 MSX System v2.0 + MSX BASIC (1985)(Microsoft)(US)[MSX2.ROM] MSX US
|
||||
53BEC1C22B30C0A15263E04B91A7814F MSX System v2.0 + MSX BASIC Japanese (1985)(Microsoft)(US)[MSX2.ROM] MSX US
|
||||
6819A1533502261BFDD52436B8346073 MSX System v2.0 + MSX BASIC Korean (1985)(Microsoft)(US)[MSX2.ROM] MSX US
|
||||
EC3A01C91F24FBDDCBCAB0AD301BC9EF MSX System v2.1 + MSX BASIC (1986)(Microsoft)(US)[a][MSX2.ROM] MSX US
|
||||
44B64F986946C4E47CB8BA47DC47C772 MSX System v2.1 + MSX BASIC (1986)(Microsoft)(US)[a2][MSX2.ROM] MSX US
|
||||
82F84D7E1A9ACBA428228A5F83A63581 MSX System v2.1 + MSX BASIC (1986)(Microsoft)(US)[a3][MSX2.ROM] MSX US
|
||||
91764E84F977671AC7CAA50B36273FD2 MSX System v2.1 + MSX BASIC Arabic (1986)(Microsoft)(US)[MSX2.ROM] MSX US
|
||||
2A950B02D5394D1ACBCB626E5A142B4A MSX System v2.1 + MSX BASIC Arabic + Alalamia (1986)(Microsoft)(US)[MSX2.ROM] MSX US
|
||||
BBE55AD0C98AE5481E0FB0FBF40FF308 MSX System v2.1 + MSX BASIC Russian 16k (1986)(Microsoft)(US)[MSX2.ROM] MSX US
|
||||
DB56360C85EF8410DC4BCF8E8602F61E MSX System v2.1 + MSX BASIC Russian 32k (1986)(Microsoft)(US)[MSX2.ROM] MSX US
|
||||
1AC8A1DC4BF28F46327A794AC93E563F MSX2 Disk BIOS (19xx)(-)[R87-4000.MS2] MSX
|
||||
F8A2AA28C5D2629E2ECAF557EE7D230E MSX2 Extension (19xx)(-)[R87-0000.MS2] MSX
|
||||
1CD63FC602B83024E33CE7B3D8504F79 MSX2 First 8k (19xx)(-)[R83-C000.MS2] MSX
|
||||
80C81019A61740A2E95FFEEEE8C91289 MSX2 Painter (19xx)(-)(Disk 1 of 4)[0][R83-0000.MS2] MSX
|
||||
38E88DF5C6BBFCA7D0404FD9572DE2E4 MSX2 Painter (19xx)(-)(Disk 2 of 4)[1][R83-4000.MS2] MSX
|
||||
16924EA00CBE7B96F91FEB0124342CFF MSX2 Painter (19xx)(-)(Disk 3 of 4)[2][R83-8000.MS2] MSX
|
||||
A6946EA5FDBBE03F7AFAF7516CBFE971 MSX2 Painter (19xx)(-)(Disk 4 of 4)[3][R8F-8000.MS2] MSX
|
||||
A10F14CAF176F65A0A606039748007A2 MSX2 Painter (19xx)(-)[R8F-4000.MS2] MSX
|
||||
7118F76D5363831DF928A8150DFC0FEB MSX2 ROM BIOS Extension (19xx)(-)(Disk 1 of 2)[0][R00-0000.MS2] MSX
|
||||
CCB6D9E58A310B150742B477EAD4DFD3 MSX2 ROM BIOS Extension (19xx)(-)(Disk 2 of 2)[1][R00-4000.MS2] MSX
|
||||
8445A818FE1A843D66FBEBA6657BB21B MSX2 Sub (19xx)(-)[MSX2SUB.ROM] MSX
|
||||
55AC7585E16477E8AAB908BC100C8DA4 MSX2 Sub 700 (19xx)(-)[MSX2SUB.ROM] MSX
|
||||
8E4AF1124E2B82FBDC74A7BC5F20DC6E MSX2 Sub Russian (19xx)(-)[MSX2SUB.ROM] MSX
|
||||
BE5D1EC8001D945CA1432285722E9D16 MSX2 System Extension Arabic (19xx)(-)[MSX2EXT.ROM] MSX
|
||||
810D8B696625A0231FAF68E1F3150093 MSX2 System Extension Korean (19xx)(-)[MSX2EXT.ROM] MSX
|
||||
248514ABA82A0EC7FE2A9106862B05CD MSX2 System Extension Unknown (19xx)(-)[MSX2EXT.ROM] MSX
|
||||
2183C2AFF17CF4297BDB496DE78C2E8A MSX2 System Extension v2.0 (19xx)(-)[MSX2EXT.ROM] MSX
|
||||
8AABDE714A42256BEF36EA9B04F6EF59 MSX2 System Extension v2.1 (19xx)(-)[MSX2EXT.ROM] MSX
|
||||
597AE1A6FB6AFCEE4E907D05D23AF253 MSX2 v2.0 Korean Han (1985)(Microsoft)(US)[MSX2HAN.ROM] MSX US
|
||||
D9758D2A6E9A78417EC98D9F4DB4B782 MSX2, MSX2+ Non Volatile Memory (19xx)(-)[a][CMOS.ROM] MSX
|
||||
5F4EF6A79253356F6930D7F7F5C8DCF2 MSX2, MSX2+ Non Volatile Memory (19xx)(-)[a2][CMOS.ROM] MSX
|
||||
DC0227A3CB677D19BD84BC473394482B MSX2, MSX2+ Non Volatile Memory (19xx)(-)[a3][CMOS.ROM] MSX
|
||||
B18F453E4F8AF12997EECBA7F0FEBFD8 MSX2, MSX2+ Non Volatile Memory (19xx)(-)[a4][CMOS.ROM] MSX
|
||||
4A15F260E72E523B3D4795C6278B9AA8 MSX2, MSX2+ Non Volatile Memory (19xx)(-)[a5][CMOS.ROM] MSX
|
||||
D5793F1264EC8DEEAC40AE5B0975A92E MSX2, MSX2+ Non Volatile Memory (19xx)(-)[CMOS.ROM] MSX
|
||||
6418D091CD6907BBCF940324339E43BB MSX-DOS Kernel v2.20 + Disk BASIC v2.01 (1989)(ASCII)(JP)[MSXDOS22.ROM] MSX JP
|
||||
C79C07B3A898F7EDF84C66A18A25588F MSX-DOS v2.2 (1984)(Microsoft)(US) MSX US
|
||||
C4F51D2241E22F107C9EABF2CA0A0C05 MSX-DOS v2.2 ACVS-CIEL - Memory Based (1984)(Microsoft)(US)[NOVACIEL.ROM] MSX US
|
||||
D83260402F93E64FC24A705FEB4DC2FA MSX-DOS v2.2 Arabic (1984)(Microsoft)(US)[DISK.ROM] MSX US
|
||||
1E4EF11E18575F052EA5DE49872D4F4B MSX-Write II (1988)(ASCII)(JP) MSX JP
|
||||
3CAE22BB6C306E39869E6FDFC1E383B0 Multiboot v0.0 for Mega Flash ROM (2003)(Pazos & Ramones Games) MSX
|
||||
5A90854D0C911D8C754DBE52E11D326A National FS-SR023 48 Dots Mouhitsu Shotai (1987)(National) MSX
|
||||
9BADE4B9CBD9A0BC39B70C119C57D1EF National Matsushita FS A1F MSX1 BASIC ROM (19xx)(Matsushita Electric Industrial)(JP)[KANJIBASIC.DSK] MSX JP
|
||||
C3B61B0E5F99BD7FADC267F02571EABE National Matsushita FS A1F MSX2 BASIC ROM (19xx)(Matsushita Electric Industrial)(JP)[KANJIBASIC.DSK] MSX JP
|
||||
85B108BD05FA43BFEEF704413D7BDAD3 National Matsushita FS-4500 MSX Address Book + Name Card (1986)(Matsushita Electric Industrial)(JP)[MSXJUSHO.ROM] MSX JP
|
||||
60B6A10F68BFD076D35FF58797405F76 National Matsushita FS-4500 MSX Extended BASIC v2.0 (1986)(Matsushita Electric Industrial)(JP)[MSX2EXT.ROM] MSX JP
|
||||
86B6B1054C4415E9CC7867D1ED219FB4 National Matsushita FS-4500 MSX Japanese Phrase Dictionary Data v2.0 (1986)(Matsushita Electric Industrial)(JP)[MSXBUDIC.ROM] MSX JP
|
||||
6E11D27C971D8CCB20F492CAFA4650EC National Matsushita FS-4500 MSX Japanese Sentence Phragraph Exchanger v2.0 (1986)(Matsushita Electric Industrial)(JP)[MSXBUNSE.ROM] MSX JP
|
||||
53E434D764C3221A22082EDAC958D537 National Matsushita FS-4500 MSX Standard Kanji Driver 1 (1986)(Matsushita Electric Industrial)(JP)[MSXKANJ1.ROM] MSX JP
|
||||
BD607B5E9B63B5AA8F9AA614D60E0AA8 National Matsushita FS-4500 MSX Standard Kanji Driver 2 (1986)(Matsushita Electric Industrial)(JP)[MSXKANJ2.ROM] MSX JP
|
||||
31820EAF403B031E3693C2EDDF4DF76B National Matsushita FS-4500 MSX Word Processor II v1.0 (1986)(Matsushita Electric Industrial)(JP)[MSXWORD1.ROM] MSX JP
|
||||
236D5A0FE6DACB401E6C90C77149066B National Matsushita FS-4500 MSX Word Processor II v2.0 (1986)(Matsushita Electric Industrial)(JP)[MSXWORD2.ROM] MSX JP
|
||||
82FFCB0F405DDB2C89605E8B826338B9 National Matsushita FS-4500 MSX Word Processor II's Font (1986)(Matsushita Electric Industrial)(JP)[MSXWORD2.ROM] MSX JP
|
||||
20989124671593AB04EEB01D52A1E25C Novaxis MSX2-Turbo-R SCSI BIOS version (1996)(KMcs - MSX Club Gouda)(NL)[NOVAXIS.ROM] MSX NL
|
||||
403CDEA1CBD2BB24FAE506941F8F655E Painter, The v1.0 (1986)(Yamaha)(JP)[PAINTER.ROM] MSX JP
|
||||
41DB0D7B37BE479296FFD59FCD6775F0 Painter, The v1.1 (1986)(Yamaha)(JP)(ar)[SKRPAINT.ROM] MSX ar JP
|
||||
999551126F5A9CE5C04DBB2AA5460D04 Panasonic FS-A1MK2 A1 Cockpit 1 (1987)(Matsushita Electric Industrial)(JP)[COCKPIT1.ROM] MSX JP
|
||||
93EDB927DD2A24F8CD02523F6C7351FE Panasonic FS-A1MK2 A1 Cockpit 2 (1987)(Matsushita Electric Industrial)(JP)[COCKPIT2.ROM] MSX JP
|
||||
360470BDF5795BB07274B3DEB234D831 Panasonic FS-A1MK2 A1 Cockpit 3 (1987)(Matsushita Electric Industrial)(JP)[COCKPIT3.ROM] MSX JP
|
||||
5E864081218C02674F33D56C27732C57 Panasonic FS-SR021 MSX2 Word Processor (1988)(Matsushita Electric Industrial)(JP) MSX JP
|
||||
C2F548FDB9C888B6D7FD494D04B8E764 Panasonic MSX Audio + BASIC (19xx)(-)[MSXAUDIO.ROM] MSX
|
||||
47485766A10AAA475DCA3F8DAA4D9E8E Philips NMS-8220 Designer Pencil v1.0 (1986)(Philips)[DESIGNV1.ROM] MSX
|
||||
8BC76427B4D08D0FC26F17E16BF9840B Philips NMS-8220 Designer Pencil v2.0 (1986)(Philips)[DESIGNV2.ROM] MSX
|
||||
8092522A88C45138CF857AEB138651ED Philips NMS-8220 MSX Extended BASIC v2.1 (1986)(Philips)[MSX2EXT.ROM] MSX
|
||||
3525EA046DDEDC66991790EEAE32ACFD Philips NMS-8245 BASIC Disk (1986)(Philips)(NL)[DISK.DSK] MSX NL
|
||||
01DD1D72ED9BB6AFE8A9B441C198A1CD Philips NMS-8245 MSX Disk BASIC v1.0 Original (1987)(Philips)(NL)[DISKO.ROM] MSX NL
|
||||
7FB4F6AC77435C91C456E2D48CADFAB9 Philips NMS-8255 BASIC Disk (1986)(Philips)(NL)[DISK.DSK] MSX NL
|
||||
B6C33B7B3508D691D7872589C778F808 Philips NMS-8280 German BASIC BIOS (19xx)(Philips) MSX
|
||||
4047CE143A8BF391E21991835AA65B59 Philips NMS-8280 German BIOS (19xx)(Philips) MSX
|
||||
DD9F3185BACB96BA130B4D7BFD04418D Philips NMS-8280 German Disk ROM (19xx)(Philips) MSX
|
||||
3BAB6D8182BAE46EA2A8B13CCCF8CF1C Philips NMS-8280 MSX System v2.1 + MSX BASIC (1986)(Philips)[MSX2.ROM] MSX
|
||||
F897DE0228DE4B9FD5EA028390184B0A Philips NMS-8280 MSX2 Sub (19xx)(Philips)[MSX2SUB.ROM] MSX
|
||||
ADA1DB6B4F86FE46E179EFF9547AF9C8 Philips NMS-8280 MSX2 Sub, Panasonic WSX MSX2+ (19xx)(Microsoft)(US)[MSX2SUB.ROM] MSX US
|
||||
432F2DA8A8A96A6C69919A1E05F6DE92 Philips VG-8235 MSX BIOS + BASIC v1.0 (1985)(Philips)[DISK.DSK] MSX
|
||||
6317A8CC9AB1268C52F57FB3AA0B8DA2 ProfiSoft Network Card (19xx)(-)[PROFI.ROM] MSX
|
||||
DFB89903D8E7E567FDD8B058C1AE36EF Sakhr Word Processor (1987)(Al Alamiah)(KW)[type CALL SWP] MSX
|
||||
0B8F0EC02C1F723F5E669462CB1C800C Sony HB-F500P BASIC BIOS (19xx)(Sony)(JP) MSX JP
|
||||
0AB7E6F51E2ABBABD1B9FDDDAD1E6369 Sony HB-F500P Disk (19xx)(Sony)(JP) MSX JP
|
||||
484AC98AEBF62F35E370861D686E7C3B Sony HB-F9P Internal Software Part-1 (1986)(Sony)(JP)[INTERN1.ROM] MSX JP
|
||||
3C6D68DD209552FB1DD30598D74E5A92 Sony HB-F9P Internal Software Part-2 (1986)(Sony)(JP)[INTERN2.ROM] MSX JP
|
||||
061A87CBB20E6C695F980EDA1204F4A5 Sony HB-F9P MSX BIOS + BASIC v2.0 (1986)(Sony)(JP)[MSX2.ROM] MSX JP
|
||||
58A5BABB3702DADF40C71516C27B7941 Sony HB-F9P MSX Extended BASIC v2.0 (1986)(Sony)(JP)[MSX2EXT.ROM] MSX JP
|
||||
392673199BB16D1E96A081E5449A9748 Sony HBI-V1 Video Digitizer (1989)(Sony)(JP) MSX JP
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Type: TOSEC
|
||||
;;; Source: MSX MSX2 - Games - [ROM] (TOSEC-v2012-04-15)
|
||||
;;; FileGen: 2020-02-07 11:00:07 (UTC)
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Bad Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
AB5F637F768E358020B7D4ED3B4D03D0 B AcroJet (1988)(System Soft)(JP)[b] MSX JP
|
||||
6048E1EA4F3D5ACBEAABE9067E706733 B American Soccer (1987)(Nidecom)(JP)[b] MSX JP
|
||||
2ECCDCFD28C7DC95F21BDF856C0704D6 B Andorogynus (1988)(Telenet Japan)(JP)[b] MSX JP
|
||||
FD462E58D7D9F6CBEC959F1BB40447FD B Arkanoid II - Revenge of Doh (1987)(Nidecom)(JP)[b] MSX JP
|
||||
5E2A02BAFED932679ACBF1DA777D77FA B Dragon Quest II (1988)(Enix)(JP)[b] MSX JP
|
||||
B14DCCED836DAA6024CC1E6A9FC6D5F4 B Famicle Parodic (1988)(Bit2)(JP)[b] MSX JP
|
||||
CCAB31DE87CC187E5A3CC63401F43B00 B Ikari Warriors (1987)(SNK)(JP)[b] MSX JP
|
||||
F6DC168468002FD37CBC78A964E48BAA B Makaijima - Higemaru (1987)(Capcom)(JP)[b] MSX JP
|
||||
8153CC9023D0E38D7DA0B359C47DF5E8 B Malaya no Hihou (1989)(Pony Canyon)(JP)[b] MSX JP
|
||||
3ED0C73232B43571D99EC980C58F15BE B Mejon (19xx)(-)[b] MSX
|
||||
0F31F8927CB3940B2909A6956C3EB37C B Metal Gear 2 - Solid Snake (1990)(Konami)(JP)[b][RC-767] MSX JP
|
||||
219B1DE65F8C4215134D75A66EED059B B Mon Mon Monster (1989)(Hot-B)(JP)[b] MSX JP
|
||||
F0C367BE0F5CA0EA142B4A1E9443A50B B Ogre (1987)(System Soft)(JP)[b] MSX JP
|
||||
54F8FF0E312C5FC349BA08603CAB0618 B Out Run (1988)(Pony Canyon)(JP)[b] MSX JP
|
||||
41387351B5FDFF0A0A206F61A8E1E680 B Penguin Kun Wars 2 (1988)(ASCII)(JP)[b] MSX JP
|
||||
E10B0C9BD774BE29D398DF02C36E49AD B Rastan (1988)(Taito)[b] MSX
|
||||
4DF8BE4C3E7CCA2535A9EEC067E364EA B Relics (1986)(Bothtec)(JP)[o][b] MSX JP
|
||||
EE977849B8182DC4ED07BED9A4C7B860 B Scramble Formation (1987)(Taito)(JP)[b] MSX JP
|
||||
6777DE50268E91358A24D4974B3C4FB1 B Scramble Formation (1987)(Taito)(JP)[o][b] MSX JP
|
||||
D86040ACF8167274E136955E63BB1941 B Super Rambo Special (1985)(Zemina)(KR)[b] MSX KR
|
||||
E05383FCC5DC9B33591CB41634FADE04 B Victorius Nine II (1988)(Nidecom)(JP)[b] MSX JP
|
||||
18DDA437C0591212190B337AAD95E559 B Xevious - Fardraut Saga (1988)(Namcot)(JP)[b] MSX JP
|
||||
9169B99C9085CE39189124CF289A07D1 B Yaksa (1987)(Wolfteam)(JP)[b] MSX JP
|
||||
9B5014CBD65FE145479A206F5450862A B Zoids (1988)(Toshiba-EMI)(JP)[b] MSX JP
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Hacks
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
2516867ABFD70BA0B240C9FF55C6C01F H Contra. Gryzor (1989)(Konami)(JP)[t][RC-762] MSX JP
|
||||
AEF44E669988772F0B6226EAA8BE4085 H Space Manbow (1989)(Konami)(JP)[t][RC-768] MSX JP
|
||||
3342EE4FF67EE336A01B99F05DFB1D5A H Treasure of Usas, The (1987)(Konami)(JP)[t][RC-753] MSX JP
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Over Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
C98E5BE4DE2A35FCE878F8F20F9138B3 O Dragon Slayer 4 - Drasle Family (1987)(Falcom)(JP)[o] MSX JP
|
||||
9C28725C720BB2597766FC80D8B4ED65 O Maison Ikkoku (1987)(Micro Cabin)(JP)[o] MSX JP
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Translated
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
384689388DCC00D4E01804664ACF5989 T Metal Gear (1987)(Konami)(JP)[tr es][RC-750] MSX JP
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Home Brew
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Believed Good
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
668570DD413D5CDF271E58D61B5B99E7 1942 (1986)(ASCII)(JP) MSX JP
|
||||
98854B14932A7183CAFEB16DE27DD1D4 1942 (1987)(Zemina)(KR) MSX KR
|
||||
1F73A16C2B3CD400E026B578B7567A72 AcroJet (1988)(System Soft)(JP) MSX JP
|
||||
51D021AF50C3A48124331A9FBC738B97 Akumajyo Drakyula. Vampire Killer (1986)(Konami)(JP)[a][RC-744] MSX JP
|
||||
5D50C1C7BC164C3D01C41B0B8A501D72 Akumajyo Drakyula. Vampire Killer (1986)(Konami)(JP)[a2][RC-744] MSX JP
|
||||
EF4636EFB770AE5BE8B3D6AF245A594A Akumajyo Drakyula. Vampire Killer (1986)(Konami)(JP)[a3][RC-744] MSX JP
|
||||
273C3DFF8315A6A4FCED758F07D54AAA Akumajyo Drakyula. Vampire Killer (1986)(Konami)(JP)[a4][RC-744] MSX JP
|
||||
2AC9A5946A300FCC71E9956C9CB6A47C Akumajyo Drakyula. Vampire Killer (1986)(Konami)(JP)[a5][RC-744] MSX JP
|
||||
92BA9DAB3C7A4AC6C8A130F6CCBAC91C Akumajyo Drakyula. Vampire Killer (1986)(Konami)(JP)[RC-744] MSX JP
|
||||
4B1A5DC67B2EABDDA3D78169BA00E9E0 Aleste (1988)(Compile)(JP) MSX JP
|
||||
D00EAA8A362DD87A8153A6E2A5B40E62 Aleste (1988)(Compile)(JP)[a] MSX JP
|
||||
7087B51F3CCFDF314CE60D5D8AAF644A Aleste (1988)(Compile)(JP)[a2] MSX JP
|
||||
A3648A5DD95179C00FC11FE455BB5828 American Soccer (1987)(Nidecom)(JP) MSX JP
|
||||
31502091EA075C4E3B20461267026CEB American Soccer (1987)(Nidecom)(JP)[a] MSX JP
|
||||
79363F8F57233E4E4AE544FDBB6E21A0 Andorogynus (1988)(Telenet Japan)(JP) MSX JP
|
||||
65ED7FCE763E5E7EC60306E86FFF872F Andorogynus (1988)(Telenet Japan)(JP)[a] MSX JP
|
||||
634DD13762378630BFE50AC9B87DBF5F Arctic (1989)(Pony Canyon)(JP) MSX JP
|
||||
F709083DA5B2B078C3621A17374AAF1E Arctic (1989)(Pony Canyon)(JP)[a] MSX JP
|
||||
CAC9788C86BBCB65A042BFC43D12402F Arkanoid II - Revenge of Doh (1987)(Nidecom)(JP) MSX JP
|
||||
2D594D9EBFB36FABA7EEA3C6B4E55DC8 Arkanoid II - Revenge of Doh (1987)(Nidecom)(JP)[a] MSX JP
|
||||
1E3CB2C08DE58F371979B40E498E309C Arkanoid II - Revenge of Doh (1987)(Nidecom)(JP)[a2] MSX JP
|
||||
2E3BC2A2599AE662002EF3ADEA151B7C Arkanoid II - Revenge of Doh (1988)(Zemina)(KR) MSX KR
|
||||
14C078A9ED5C14AC54A6EB5E94FA34D2 Arsene Lupin 3rd - Cariostoro no Siro (1987)(Toho)(JP) MSX JP
|
||||
4FEFE2334038D0F2F189A8434B1C8BC2 Arsene Lupin 3rd - Cariostoro no Siro (1987)(Toho)(JP)[a] MSX JP
|
||||
2BD8B20B342976A5CF7B4B30399C5083 Arsene Lupin 3rd 2 - Babiron no Ougon Densetsu (1988)(Toho)(JP) MSX JP
|
||||
B15C73F408756E444BD8EE347E7F98AE Arsene Lupin 3rd 2 - Babiron no Ougon Densetsu (1988)(Toho)(JP)[a] MSX JP
|
||||
790E45F34CEC0F5064161109653537C5 Arugisu no Yoku. Wings of Arugisu (1988)(Kogado)(JP) MSX JP
|
||||
4761DC4891D87F2F2FEEEB237C9CD526 Asada Tetsuya no Akyoo Mahjong. Nap Tetsuya's A-Class Mahjong (1988)(Pony Canyon)(JP) MSX JP
|
||||
851ACA1E5D3F0E8D9B1CBEC2E8451831 AshGuine (1987)(Panasoft)(JP) MSX JP
|
||||
D92486E62049282C43C54881DE3684A3 AshGuine (1987)(Panasoft)(JP)[a] MSX JP
|
||||
6B98C47831C9AAB49192FA3ED26C9309 AshGuine 2 (1987)(Panasoft)(JP) MSX JP
|
||||
3B191BA16E7C5DEF2F1E9FEBC1FB92E5 AshGuine 2 (1987)(Panasoft)(JP)[a] MSX JP
|
||||
F582DF437DDE65D958EEC72260801B32 AshGuine 3 (1987)(Panasoft)(JP) MSX JP
|
||||
831243E740C25D11EC55E202602C1EAE Blade Lords (1994)(Parallax)(NL) MSX NL
|
||||
921A8C523A5F699D0D32F691E2A9326D Blade Lords (1994)(Parallax)(NL)[a] MSX NL
|
||||
78CFCD46880A80B26839158CBA7094A1 Bubble Bobble (1987)(TAITO)(JP) MSX JP
|
||||
BD8B1F6C998657B96BF7DC7825D0A600 Bubble Bobble (1987)(Taito)(JP)[a] MSX JP
|
||||
027CA1D6C89909FD0D19703502DE1F76 Bubble Bobble (1987)(Zemina)(KR) MSX KR
|
||||
9454F30EB16BC0ECD406939D1C1834D4 Bubble Bobble (1987)(Zemina)(KR)[a] MSX KR
|
||||
10B02D5C4600B342E98559518BDBC96D Cockpit, The (1988)(Nidecom)(JP) MSX JP
|
||||
855DC91E683D897662C2F676B4DC3E3A Contra. Gryzor (1989)(Konami)(JP)[RC-762] MSX JP
|
||||
32FBDAD6529038179EEEF3F2DB7DBE85 Contra. Gryzor (1989)(Konami)(JP)[SCC][RC-762] MSX JP
|
||||
C787A2825169FA5B13BCB1EAEC3E289A Crimson (1987)(Scaptrust)(JP) MSX JP
|
||||
CC6D64C4A9880B6111F6B491275EB62A Daikoukai Jidai. Uncharted Waters (1990)(Koei)(JP) MSX JP
|
||||
57F718A9F3ADD36B71F606D636CB1D6F Daisenryaku. Risk (1987)(Micro Cabin)(JP) MSX JP
|
||||
CA9CB10E2415775418C85F47E1BFB5D5 Darwin 4078 (1987)(Hudson Soft)(JP) MSX JP
|
||||
E84D7E53B40D406042E9B3AE837AAD62 Darwin 4078 (1987)(Hudson Soft)(JP)[a] MSX JP
|
||||
1A06186F14DE3C724215997EEE18D6FD Darwin 4078 (1987)(Hudson Soft)(JP)[a2] MSX JP
|
||||
56DAE5F0998359D68CDBA7CB6947FD3F Deep Forest (1987)(Xain)(JP) MSX JP
|
||||
DC9C2178FEC7958FDDE3F7762FFE0B2E Deep Forest (1987)(Xain)(JP)[a] MSX JP
|
||||
9C16B2BA7956A86819BDBC12CD266E29 Dires - Giger Loop (1987)(Bothtec)(JP) MSX JP
|
||||
0CB6D4D086306F22D6D4A8C96A0F44E3 Double Vision - Beauty Girl Photo Studio (1987)(Hard)(JP) MSX JP
|
||||
52BD14A491AA5802E842BFF023D4F728 Dragon Buster (1987)(Namcot)(JP) MSX JP
|
||||
3283755BDAD01C78EFF2AD0F2751805C Dragon Buster (1987)(Zemina)(KR) MSX KR
|
||||
B6A39A89FB0DF0BE5DFF7D64F5FE8900 Dragon Quest (1986)(Enix)(JP) MSX JP
|
||||
63672A3FDC8A481E3AC38AB1A36B5167 Dragon Quest (1986)(Enix)(JP)[a] MSX JP
|
||||
38415491E0F07C722C15F0E4103650FF Dragon Quest II (1988)(Enix)(JP) MSX JP
|
||||
92139E59F1E8FE30D5550112B300CC5C Dragon Quest II (1988)(Enix)(JP)[a] MSX JP
|
||||
B2E0120F0A937FAB09A37A252AB0FAEA Dragon Quest II (1988)(Enix)(JP)[a2] MSX JP
|
||||
560544F37BF6F806B200D5DB3D562E26 Dragon Slayer 3 - Romancia. Dragon Slayer Jr (1987)(Falcom)(JP) MSX JP
|
||||
E6936C2B6472591505ACD1EE1B6C5865 Dragon Slayer 4 - Drasle Family (1987)(Falcom)(JP) MSX JP
|
||||
38209DD384CA5A791E97FFC6C68097A2 Dragon Slayer 4 - Drasle Family (1987)(Falcom)(JP)[a] MSX JP
|
||||
94C971E98392459A2629240DB7679666 Dragon Slayer 4 - Drasle Family (1987)(Falcom)(JP)[a2] MSX JP
|
||||
65845A220992EA4962D96919278B7A23 Druid (1987)(Nippon Dexter)(JP) MSX JP
|
||||
62F67225074FEC95BAA131F687238FD0 Druid (1987)(Nippon Dexter)(JP)[a] MSX JP
|
||||
35BE85738C2405771681371DC892202B Druid (1987)(Nippon Dexter)(JP)[a2] MSX JP
|
||||
14311B9FE54716ED22EFE313A7503E53 Dynamite Bowl (1987)(Toshiba-EMI)(JP) MSX JP
|
||||
A495DC8678497B284B8A2B675F8BB6CC Dynamite Bowl (1987)(Toshiba-EMI)(JP)[a] MSX JP
|
||||
FF25F8CCDE5CF7D49A758D19F46E41D0 Eidolon, The (1986)(Pony Canyon)(JP) MSX JP
|
||||
3F68D8E286B9B46B5400381BDACBAA52 Elslid. Erenubu. Eagle War (1988)(NCS)(JP) MSX JP
|
||||
C6EF60D5FD83FF363C4E856D00D78356 Elslid. Erenubu. Eagle War (1988)(NCS)(JP)[a] MSX JP
|
||||
CAFAA2EAB655943AD4064A1DBDB09A67 Empereur, L' (1990)(Koei)(JP) MSX JP
|
||||
35D9D247A298181BB0C70A45D5E0746E Europa Sensen. Europe War. Battle Front Europe (1992)(Koei)(JP) MSX JP
|
||||
C4C2BF153650B33AAAB97AC00D07685B F-15 Strike Eagle (1988)(System Soft)(JP) MSX JP
|
||||
3A14E2D8039DBF2E475C6FE7F3830D04 Famicle Parodic (1988)(Bit2)(JP) MSX JP
|
||||
ECCBB5B0E92BA466DA7A55434BBC0556 Famicle Parodic (1988)(Bit2)(JP)[a] MSX JP
|
||||
B0777D767FBE554B943B866C3191FADE Famicle Parodic (1988)(Bit2)(JP)[a2] MSX JP
|
||||
54038E0DCC4AD3F0A2FD3859EB3E5C9B Family Billiards (1987)(Pack In Video)(JP) MSX JP
|
||||
C99F4C45159150AD4C8152A7181966EF Family Billiards (1989)(Zemina)(KR) MSX KR
|
||||
9B92EB8A340FED695FB4D86D94E6A4D6 Family Boxing (1988)(Sony)(JP) MSX JP
|
||||
FE9ED2D6A48E347D6794214722E41827 Family Boxing (1988)(Sony)(JP)[a] MSX JP
|
||||
206945B66A897271269CDCF12070993B Family Stadium Pro Baseball (1989)(Namcot)(JP) MSX JP
|
||||
88AB9038BE379184C70ED4AEF1766A57 Fantasy Zone II - The Tears of Opa-Opa (1987)(Pony Canyon)(JP) MSX JP
|
||||
CF739DB66ADC5A2F2D06F19E3D852CCB Fantasy Zone II - The Tears of Opa-Opa (1987)(Pony Canyon)(JP)[a] MSX JP
|
||||
BEAE4B0BEE7B028644804FA41DA96F40 Fire Ball (1988)(Humming Bird Soft)(JP) MSX JP
|
||||
93C57C72F5991BC3F56729D0E3488593 Fire Ball (1988)(Humming Bird Soft)(JP)[a] MSX JP
|
||||
C164B82E38BE62C3CFE38D587E20CC31 Fleet Commander II (1990)(ASCII)(JP) MSX JP
|
||||
D58D87E7A359DF92C3AEAE0EA93672B5 Gakuen Monogatari. High School Story (1988)(Great)(JP) MSX JP
|
||||
889E438FEA6EEECE702446311AFCE84F Gambler Jikichushinpa 2 (1988)(Game Arts)(JP) MSX JP
|
||||
BFA3F3717D706C047C5B0363B56811A0 Ganbare Goemon. Samurai (1987)(Konami)(JP)[a][RC-748] MSX JP
|
||||
15BDB1FF79FBC55CE9972A3D1EBD9B9C Ganbare Goemon. Samurai (1987)(Konami)(JP)[a2][RC-748] MSX JP
|
||||
44C47AE77D38EE95D311F90204ED4AC5 Ganbare Goemon. Samurai (1987)(Konami)(JP)[RC-748] MSX JP
|
||||
ED4978EC21C4D0E7C7A336C58E9B7800 Garyuoh. Dragon King (1987)(Xain)(JP) MSX JP
|
||||
C9A6C43ADD06E8F57FFDB4FE40DF753C Garyuoh. Dragon King (1987)(Xain)(JP)[a] MSX JP
|
||||
B82BDDBC0DEC393986C0FADAA7DAC22C Gekitotsu Pennant Race (1988)(Konami)(JP)[a][RC-757] MSX JP
|
||||
D289FA8BCF442197900082A0D6F87B25 Gekitotsu Pennant Race (1988)(Konami)(JP)[a2][RC-757] MSX JP
|
||||
AB8C5E6D4BE4A2979019DF24CA0AD679 Gekitotsu Pennant Race (1988)(Konami)(JP)[a3][RC-757] MSX JP
|
||||
933618A3D26EE6BEB32527113996F483 Gekitotsu Pennant Race (1988)(Konami)(JP)[RC-757] MSX JP
|
||||
D3FF5D3E1BDE29BA2AED232F95C891FD Gekitotsu Pennant Race (1988)(Konami)(JP)[SCC][RC-757] MSX JP
|
||||
AF91306740FF42FFD25F0F75D3E4FCA8 Gekitotsu Pennant Race 2 (1989)(Konami)(JP)[a][RC-766] MSX JP
|
||||
97936E206E44474E7A2062D2682D5F54 Gekitotsu Pennant Race 2 (1989)(Konami)(JP)[a2][RC-766] MSX JP
|
||||
19C8DB6C2560623AF02EED59D5AD8D76 Gekitotsu Pennant Race 2 (1989)(Konami)(JP)[RC-766] MSX JP
|
||||
76BBA6B3F1AE93CFAFB3AF904B978098 Genchouhishi (1992)(Koei)(JP) MSX JP
|
||||
67BC15B268C9E35DF72121911D4412EA Genghis Khan (1988)(Koei)(JP) MSX JP
|
||||
8A5F64A74E66BE96EBF1F1719E669B89 Girly Block (1988)(Telenet Japan)(JP) MSX JP
|
||||
CB955EC12B62B62D8F3DF6F2073ACFC1 Gitahei (1986)(Micro Cabin)(JP) MSX JP
|
||||
A086184D0D646AA3DCFFF48AFA0E37E2 Go Othello. Connect Stones (1989)(Konami)(JP)[a][SCC+] MSX JP
|
||||
64155315FD0FC14EAC84A412DAB410DF Go Othello. Connect Stones (1989)(Konami)(JP)[SCC] MSX JP
|
||||
9A30411D8D3017491FDFE0D19BF27076 Go Othello. Connect Stones (1989)(Konami)(JP)[SCC+] MSX JP
|
||||
5FD491B7B8C674FC78A56405C27D9221 Hacker (1988)(Pony Canyon)(JP) MSX JP
|
||||
C04D63B2A8ABCF7A75FBCF385850964D Hai no Majutsushi - Mahjong 2 (1989)(Konami)(JP)[a][no PCM][RC-765] MSX JP
|
||||
A9187C70AB0F678E06C773DABF2F7E5F Hai no Majutsushi - Mahjong 2 (1989)(Konami)(JP)[a][RC-765] MSX JP
|
||||
6FA69BC2FC1C872EFC130EEAF857F74B Hai no Majutsushi - Mahjong 2 (1989)(Konami)(JP)[a2][no PCM][RC-765] MSX JP
|
||||
157948F839762DC9922E4011BB4DC9E6 Hai no Majutsushi - Mahjong 2 (1989)(Konami)(JP)[no PCM][RC-765] MSX JP
|
||||
4CD9BBA883A16BCF67835BF4D6AE13EE Hai no Majutsushi - Mahjong 2 (1989)(Konami)(JP)[RC-765] MSX JP
|
||||
B6F896927EFDE131A1CBB14B5CEA942D Hardball (1987)(Sony)(JP) MSX JP
|
||||
53CB808A7A5A5E4CB13F8905E8BD9A34 Hardball (1987)(Sony)(JP)[a] MSX JP
|
||||
EA1CA54CFE5222B49EAD093CC6EAFCA0 Heroes of the Lance (1991)(Pony Canyon)(JP) MSX JP
|
||||
D18FA99AE42EBB6AC7B10556C172DE7E High School Kimengumi (1987)(Pony Canyon)(JP) MSX JP
|
||||
C35D87613BC6C7F5C03BFB8FA220A3F6 Hinotori. Firebird (1987)(Konami)(JP)[a][RC-747] MSX JP
|
||||
8D89CAF4804637E302FE1D57D2E2AF73 Hinotori. Firebird (1987)(Konami)(JP)[a2][RC-747] MSX JP
|
||||
AB9BAB9F3DDF1B4BB1532E384890A50C Hinotori. Firebird (1987)(Konami)(JP)[a3][RC-747] MSX JP
|
||||
E2AE336EBFFBC696633A57FE46E170B5 Hinotori. Firebird (1987)(Konami)(JP)[RC-747] MSX JP
|
||||
67B6FAFCFE5D552AFA572DAA3A26C45D Hinotori. Firebird (1987)(Zemina)(KR)[RC-747] MSX KR
|
||||
6BEAF41221E7CD325D32B3112CC898DA Hole in One Special (1987)(HAL Laboratory)(JP) MSX JP
|
||||
DF9D9E1DD54409D5B35339EA60B1045E Hole in One Special (1987)(HAL Laboratory)(JP)[a] MSX JP
|
||||
C8F2A1A93F852096EAEBAA18E59350CF Hydlide III - The Space Memories (1987)(T&E Soft)(JP) MSX JP
|
||||
68F5D063D42AC44F479139CE9654E4C2 Hyper Somen. Rice Eating (1989)(Konami)(JP)[a][SCC+] MSX JP
|
||||
8BB842380DDDC4047C839F47D3E93E39 Hyper Somen. Rice Eating (1989)(Konami)(JP)[SCC] MSX JP
|
||||
D67A50CF4D6911CF06DEBF053F179BBD Hyper Somen. Rice Eating (1989)(Konami)(JP)[SCC+] MSX JP
|
||||
77A23DA8AF09CCB05F19CA50E717875B Ide Yousuke no Jissen Mahjong (1988)(Pack In Video)(JP) MSX JP
|
||||
65C426E4CF02A1F211641A2DFC035486 Ikari Warriors (1987)(SNK)(JP) MSX JP
|
||||
D2F178FB8B16B2EBE002FEFCCB7D3191 Inindo Datou Nobunaga. Way of the Ninja (1991)(Koei)(JP) MSX JP
|
||||
6C3AC4FC067D82977A11611EC29AE4C4 Ishin no Arashi. Storm of the Meiji Restoration (1989)(Koei)(JP) MSX JP
|
||||
D9C9EE473B5E1E372B2B53A3C9558D5F Jyansei. Jansei. Mahjong King (1986)(Sony)(JP) MSX JP
|
||||
F64C38D0010B872A435B041936100CBD Jyansei. Jansei. Mahjong King (1986)(Sony)(JP)[a] MSX JP
|
||||
A7E3B3B64A54078D7D92FBEA2E1CF8A8 Kenpelen Chess (1988)(Pony Canyon)(JP) MSX JP
|
||||
7C981F0DDF3A459FB854C9B827061A44 Kiki Kaikai. Mystery (1987)(Sony) MSX
|
||||
CDB2B8705218E6215E509B464A842111 Kiki Kaikai. Mystery (1988)(Zemina)(KR) MSX KR
|
||||
1FC6CC9CCF7B846F52E06A80F31C2FE7 Kiki Kaikai. Mystery (1988)(Zemina)(KR)[a] MSX KR
|
||||
A7BC0525D6367FE9B32EB568A14133E7 King Kong 2 (1986)(Konami)(JP)[a][RC-745] MSX JP
|
||||
E9708E4DA8020193510752BE73DE6C2E King Kong 2 (1986)(Konami)(JP)[a2][RC-745] MSX JP
|
||||
EF22E9381D6D73C8001CCCF57CA70AC7 King Kong 2 (1986)(Konami)(JP)[a3][RC-745] MSX JP
|
||||
65B5DBFDDBFB71975511412AFCEA17F8 King Kong 2 (1986)(Konami)(JP)[RC-745] MSX JP
|
||||
A94A47593514299CAE379B974DC088F5 King's Valley II - The Seal of El Giza - Edit Contest Version (1988)(Konami)(JP) MSX JP
|
||||
DFCAF859E699F8995D054622C5A561BA King's Valley II - The Seal of El Giza (1988)(Konami)(JP)[RC-761] MSX JP
|
||||
7681E24059D52272F5745EBCD22C1E0F King's Valley II - The Seal of El Giza (1988)(Konami)(JP)[SCC][RC-761] MSX JP
|
||||
8CFE4EBB5BFD4C2AB838B81B0D2ACB37 Kisei (1987)(Sony) MSX
|
||||
29020908BAFEA060960CA7E65CDFE6CA Koji Tanigawa's Shougi Shinan II (1988)(Pony Canyon)(JP) MSX JP
|
||||
E95759A5332959A0F497C99508F738CC Koronis Rift (1987)(Pony Canyon)(JP) MSX JP
|
||||
4140B44E0923026E50F88787E208CCB5 Kyoto Ryu no Tera Satsujin Jiken (1988)(Taito)(JP) MSX JP
|
||||
6258D916A2E8A44DCC571FA3DD26BD3C Labyrinth, The (1987)(Pack In Video)(JP) MSX JP
|
||||
121EB1B9DCE5C12832A5C7B97265A773 Labyrinth, The (1987)(Pack In Video)(JP)[a] MSX JP
|
||||
82A73F6B3186409232F988F28226F9E6 Labyrinth, The (1987)(Pack In Video)(JP)[a2] MSX JP
|
||||
71AE9C3540D5CFEF4EBAB4254F39818D Livingstone Supongo (1986)(Opera Soft)(ES) MSX ES
|
||||
668F400E33557D24C9413310634C8ACE Mad Rider (1987)(Carry Lab)(JP) MSX JP
|
||||
93C665DAB6503B4FF2712ADFEB3A8531 Mad Rider (1987)(Carry Lab)(JP)[a] MSX JP
|
||||
ED5C5D1F0A3CCD435AC3D28668EE5EC9 Maison Ikkoku - Kanketsuhen (1988)(Micro Cabin)(JP) MSX JP
|
||||
E94BA71D0782E6606BF763407799964D Maison Ikkoku (1987)(Micro Cabin)(JP) MSX JP
|
||||
68EE449DE249D7B2CF0E1900A6CD319C Maison Ikkoku (1987)(Micro Cabin)(JP)[a] MSX JP
|
||||
1811F67FAC1F6C98C83EF0281371C7FB Makaijima - Higemaru (1987)(Capcom)(JP) MSX JP
|
||||
97736DFEB637B0A0C13972DFF7720851 Metal Gear (1987)(Konami)(JP)[a][RC-750] MSX JP
|
||||
25CFD76D44305702D2E5B3E23FD2ABBC Metal Gear (1987)(Konami)(JP)[a2][RC-750] MSX JP
|
||||
12E302954FA9B23C11CE7C8F5770B82A Metal Gear (1987)(Konami)(JP)[a3][RC-750] MSX JP
|
||||
E8C260A29AA082E5330827364AA86BA8 Metal Gear (1987)(Konami)(JP)[a4][RC-750] MSX JP
|
||||
439EA985617135D70858F0E6F88BA0F9 Metal Gear (1987)(Konami)(JP)[RC-750] MSX JP
|
||||
BCAB28734D57B98120DE13E56A8BD419 Metal Gear (1987)(Konami)(JP)[save on disk][RC-750] MSX JP
|
||||
43D38F6D7F6C98710292C8F6368ABBD2 Metal Gear 2 - Solid Snake (1990)(Konami)(JP)(tr es)[SCC][RC-767] MSX tr es JP
|
||||
BA514B1A1D1A1D9327106B74A279592A Metal Gear 2 - Solid Snake (1990)(Konami)(JP)[a][RC-767] MSX JP
|
||||
668217F475619500C87F136949267B6D Metal Gear 2 - Solid Snake (1990)(Konami)(JP)[a2][RC-767] MSX JP
|
||||
52A23DB9A9F60F1286887B231F1C3774 Metal Gear 2 - Solid Snake (1990)(Konami)(JP)[a2][SCC][RC-767] MSX JP
|
||||
B38FA1E7AC9D63003DAD96992F7C7358 Metal Gear 2 - Solid Snake (1990)(Konami)(JP)[a3][RC-767] MSX JP
|
||||
9F50D92D35E19D5DE37D75A36A410588 Metal Gear 2 - Solid Snake (1990)(Konami)(JP)[RC-767] MSX JP
|
||||
C18AC5502C966DBD7E61C26433784B23 Metal Gear 2 - Solid Snake (1990)(Konami)(JP)[SCC][RC-767] MSX JP
|
||||
0B5FD35204AA279FB106E3761F90085E Metal Gear 2 - Solid Snake (demo) (1990)(Konami)(JP)[RC-767] MSX JP
|
||||
F15A35B66270858D4C1C5D1351E04D6E Mirai 2. Future 2 (1987)(Xain)(JP) MSX JP
|
||||
5564C666D127FA6765B756311A19F45D Missisippi Satsujin Jiken. Murder on the Mississippi (1987)(Jaleco)(JP) MSX JP
|
||||
50B6F805F48865D0A0021D604BE1C58E Moero! Netto Yakyu '88 (1988)(Jaleco)(JP) MSX JP
|
||||
924F7EB26BCDF28047EC4211EEC5F8B7 Mon Mon Monster (1989)(Hot-B)(JP) MSX JP
|
||||
28EAA95B72BCBF3E31202C3CC72E47C4 Nekketsu Judo (1989)(Pony Canyon)(JP) MSX JP
|
||||
0E2697ED7769D3AA3650B215808C5335 Nekketsu Judo (1989)(Pony Canyon)(JP)[a] MSX JP
|
||||
7AF4DFD91CD1E2E6BF0D2D7D2302F97F Nekketsu Judo (1989)(Pony Canyon)(JP)[a2] MSX JP
|
||||
7A3012784C5E42194C141EDBF0F7A94D Nekketsu Judo (1989)(Pony Canyon)(JP)[a3] MSX JP
|
||||
01D18E427D829E3F1AA3550FF15C107C Ninja Kun - Ashura no Sho (1987)(HAL Laboratory)(JP) MSX JP
|
||||
4FE04555CAED46046B80D5624D44151F Nobunaga no Yabou - Zenkoku Han (1987)(Koei)(JP) MSX JP
|
||||
C2CBCAD9411B575E9291C3739118785C Nobunaga no Yabou 2 - Sengoku Gunyuu Den (1989)(Koei)(JP) MSX JP
|
||||
65E30C8EF671B789FDC1C08780207E26 Nobunaga no Yabou 3 - Bushou Fuuun Roku (1991)(Koei)(JP) MSX JP
|
||||
A04139DA653FC41FDC576A5FFA273CF7 Ogre (1987)(System Soft)(JP) MSX JP
|
||||
CBEFB9797973EF12D44F83FA5AE1E065 Ogre (1987)(System Soft)(JP)[mouse] MSX JP
|
||||
82CD46D7908C42417FF7F40B4D277E45 Ogre (1987)(System Soft)(JP)[press LSHIFT at boot] MSX JP
|
||||
EFF230804098FFE4D342F389B5209EAC Out Run (1988)(Pony Canyon)(JP) MSX JP
|
||||
2BD6B2A2091A476853E80F6BE18C9C3F Out Run (1988)(Pony Canyon)(JP)[a] MSX JP
|
||||
AEE5BFDE07DA953EADA70D618A933D06 Pachipro Densetsu (1989)(HAL Laboratory)(JP) MSX JP
|
||||
45F9B96088F36697F779AF7DE373F8FE Pac-Mania (1989)(Namcot)(JP) MSX JP
|
||||
5C6A139FC5D97C8B7D40B704EF8E06A1 Penguin Kun Wars 2 (1988)(ASCII)(JP) MSX JP
|
||||
415A5337EB46846CAB8FC36390700E7D Penguin Kun Wars 2 (1988)(ASCII)(JP)[a] MSX JP
|
||||
3DB77573E81184156486FE743B828E58 Penguin Kun Wars 2 (1988)(ASCII)(JP)[a2] MSX JP
|
||||
3A3BEF37CB175A665E7ABBBC80B32E92 Predator (1988)(Pack In Video)(JP) MSX JP
|
||||
3CD4E9D0369842440AD5888A52CDCF9A Pro Baseball Fan (1988)(Telenet Japan)(JP) MSX JP
|
||||
4F9C53D6F5ED2AA2876BB78408B39084 Professional Mahjong Gokuh (1988)(Chatnoir)(JP) MSX JP
|
||||
9FFA0D56003931C45B232521724B2B8B Project A2 (1987)(Pony Canyon)(JP) MSX JP
|
||||
D24B39B0CCEA87BFC9546B240846376E Project A2 (1987)(Zemina)(KR) MSX KR
|
||||
B34B756E16F07E26C2052823BAB93592 Quarth (1990)(Konami)(JP)[RC-769] MSX JP
|
||||
F49482108DE2BA67E6C093E7853ADBD2 Quarth (1990)(Konami)(JP)[SCC][RC-769] MSX JP
|
||||
384527F9303A9A7A632B33C05D738F63 Quarth (1990)(Konami)(ko)[RC-769] MSX ko
|
||||
A95A4348DFBB8C0D9E3E0A9DA770031B Quarth (demo) (1990)(Konami)(JP)[RC-769] MSX JP
|
||||
BC946D90BD20E0805984F67BB4B93FC2 Quinpl (1988)(Bit2)(JP) MSX JP
|
||||
114264BBCD0FDFA7BD083A983606A200 Rastan (1988)(TAITO)(JP) MSX JP
|
||||
EF65109831AA59C765053F4C1B5D70B1 Rastan (1988)(Taito)[a] MSX
|
||||
DD3E2F7C437F00AC77EEB9E9975ED947 Relics (1986)(Bothtec)(JP) MSX JP
|
||||
405B64B6A05F572420E084CDEA63C3F9 Relics (1986)(Bothtec)(JP)[a] MSX JP
|
||||
F004BB334A040FCCB76724DEEEF28087 Relics (1986)(Bothtec)(JP)[a2] MSX JP
|
||||
5353BD7FB3C9A4D586001C543ECC6147 Relics (1986)(Bothtec)(JP)[a3] MSX JP
|
||||
7D4C77200788E78126B98A7D7BA53D3C Replicart (1987)(Sony) MSX
|
||||
795918EC755DBD76A8E1138F1C9ABB73 Return of Ishtar, The (1988)(Namcot)(JP) MSX JP
|
||||
B2F9773DDE6BDB36AE1EC845E98DD914 Return of Jelda (1987)(Carry Lab)(JP) MSX JP
|
||||
50312D8FAAEF4FFA55F49FEAB5669B0C Return of Jelda (1987)(Carry Lab)(JP)[a] MSX JP
|
||||
E5BCB26C0F7CC33C466B8A88E9509591 Rick & Mick's Adventure (1987)(Humming Bird Soft)(JP) MSX JP
|
||||
9DF54A16476239E572747CC9A83C5B32 Rick & Mick's Adventure (1987)(Humming Bird Soft)(JP)[a] MSX JP
|
||||
6A1571A643E6C34837535A3240F85EF2 Royal Blood. Gemfire (1991)(Koei)(JP) MSX JP
|
||||
34301E3F3F3AA4E0CBD657CAAB003237 Sangokushi 2. Romance of Three Kingdoms 2 (1990)(Koei)(JP) MSX JP
|
||||
AFE6A9160C79D579F18B2980F8874A6E Sangokushi. Romance of Three Kingdoms (1987)(Koei)(JP) MSX JP
|
||||
F65B39A6475911F935B3D8C00B8B52A0 Satujin Kurabu. Murder Club (1988)(Micro Cabin)(JP) MSX JP
|
||||
5951DC047C5A102E9CF9E1A59D2596D2 Scramble Formation (1987)(TAITO)(JP) MSX JP
|
||||
DA329EC7DA6E992536419B07B9909CBC Scramble Formation (1987)(Taito)(JP)[a] MSX JP
|
||||
E6398263C9183A48326F21BBE7FDE655 Scramble Formation (1987)(Taito)(JP)[b2] MSX JP
|
||||
76A2FD7F38D9FB6B5192115FC5182B7F Seigimatsu II Special Attack Devil (1987)(Sony)(JP) MSX JP
|
||||
42B81E1C71EC8AF3F37D90E4C020C697 Seigimatsu II Special Attack Devil (1987)(Sony)(JP)[a] MSX JP
|
||||
2ECF4DE0553BE3746B76F012E6F6CFA2 Seigimatsu II Special Attack Devil (1987)(Sony)(JP)[a2] MSX JP
|
||||
6429D308164CCB0AEA2888F5CFFA66AA Shanghai (1987)(System Soft)(JP) MSX JP
|
||||
89DB61D03A72AEDE925D79E02706F666 Shiryou Sensen. War of the Dead (1987)(Victor)(JP) MSX JP
|
||||
AE08CB529C454EE7477AC61662E02858 Shiryou Sensen. War of the Dead (1987)(Victor)(JP)[a] MSX JP
|
||||
41F4C112671B666220137F721E1460AA Shiryou Sensen. War of the Dead (1987)(Victor)(JP)[a2] MSX JP
|
||||
392673199BB16D1E96A081E5449A9748 Sony HBI-V1 Video Digitizer (1989)(Sony)(JP) MSX JP
|
||||
F78B9F4EA885CF072E5B41DCE9F15436 Space Manbow (1989)(Konami)(JP)[RC-768] MSX JP
|
||||
50D33427A8D7E409FF1EB718E69C94FE Space Manbow (1989)(Konami)(JP)[SCC][RC-768] MSX JP
|
||||
D2F51A8AC5B78D322D6BA404E962F07A Star Virgin (1988)(Pony Canyon)(JP) MSX JP
|
||||
21EABA844F408C094C2D190D68DF3842 Star Virgin (1988)(Pony Canyon)(JP)[a] MSX JP
|
||||
0F235700EECB79B0E5A517118D48112C Strategic Mars (1988)(dB-Soft)(JP) MSX JP
|
||||
62BE2CD42B3DB21E68DF4C6A529188ED Strategic Mars (1988)(dB-Soft)(JP)[a] MSX JP
|
||||
22F48218A0DB04EDD8F90BC4355E2DE9 Suikoden - Tenmei no Chikai. Bandit Kings of Ancient China (1989)(Koei)(JP) MSX JP
|
||||
4350A658720A2E8F7ECC46FB99C2209E Super Daisenryaku. Super Risk (1988)(Micro Cabin)(JP) MSX JP
|
||||
581FD0C7AB5D2E355C5BFFA3946BDBF6 Super Lode Runner (1987)(IREM)(JP) MSX JP
|
||||
1A504223FDC2476A57198F80E8410A2A Super Rambo Special (1985)(Pack In Video)(JP) MSX JP
|
||||
A5E9D141552DC8A30B0D0F273463B5FF Super Runner (1987)(Pony Canyon)(JP) MSX JP
|
||||
A5FC4E9B290EE0E2E8EBB7F8B49D1ACE Super Runner (1987)(Pony Canyon)(JP)[a] MSX JP
|
||||
3032194B7FBC4C7AF47B140739E7CE84 Super Tritorn (1986)(Xain)(JP) MSX JP
|
||||
3EA01C97FE0201AEDE87A3F772B1871A Taiyou no Shinden - Asteka II. Temple of the Sun (1988)(Tokyo Shoseki)(JP) MSX JP
|
||||
9C8BC23C7ACAD95BA2CBDA6CBF48339B Take the A Train (1989)(Pony Canyon)(JP) MSX JP
|
||||
5DEE9DB145D631A97BF4C645E76F3B20 Teitoku no Ketsudan. Pacific Theater of Operations (1991)(Koei)(JP) MSX JP
|
||||
88E940BB5C15D201BF1779821C10D923 Tengoku Yoitoko. Heaven (1987)(Taito)(JP) MSX JP
|
||||
C59CDE4B921BC9E9D38DCB50198086DF Tengoku Yoitoko. Heaven (1988)(Zemina)(KR)(ko) MSX ko KR
|
||||
853F56779AD94235C7089AB23F8D4EF2 Tengoku Yoitoko. Heaven (1988)(Zemina)(KR)(ko)[a] MSX ko KR
|
||||
3AE183EDB7F89666B23F041FD592DF3C Tetris (1988)(BPS)(JP) MSX JP
|
||||
02C96ACAD350F4BF392640470D3F9784 Title Memory (1989)(Konami)(JP)[a][SCC+] MSX JP
|
||||
1C99A800A96157EF48C1F1F7EB30677E Title Memory (1989)(Konami)(JP)[SCC] MSX JP
|
||||
5B851C7342FD42A96D126FEF14906D09 Title Memory (1989)(Konami)(JP)[SCC+] MSX JP
|
||||
5D451B24113E05C7F81BF2B806E843C8 Topple Zip (1987)(Bothtec)(JP) MSX JP
|
||||
D5EC6055DA9A7ACF301E3E7FD8EBEE27 Topple Zip (1987)(Bothtec)(JP)[a] MSX JP
|
||||
9AAB75984B06C21ED8E6214474D3A68E Treasure of Usas, The (1987)(Konami)(JP)[a][RC-753] MSX JP
|
||||
E182D403A3929FDD3F66F74C6A439F17 Treasure of Usas, The (1987)(Konami)(JP)[a2][RC-753] MSX JP
|
||||
750D755FA577E033754C95C6A850B878 Treasure of Usas, The (1987)(Konami)(JP)[RC-753] MSX JP
|
||||
8C6FAD6B48EBEEB663DCE40617A9576A Tsururin Kun. Rice Eating 2. Egg Stealing (1989)(Konami)(JP)[a][SCC+] MSX JP
|
||||
746E48F4B138CC0A75899715299ED778 Tsururin Kun. Rice Eating 2. Egg Stealing (1989)(Konami)(JP)[SCC] MSX JP
|
||||
974FA74F31484769EA18BC427A6A0812 Tsururin Kun. Rice Eating 2. Egg Stealing (1989)(Konami)(JP)[SCC+] MSX JP
|
||||
AC309104C4BCC0CBF56AC1D2295F1119 Turikichi Sampei Burumarine-Hen. Blue Marlin (1988)(Victor)(JP) MSX JP
|
||||
B94A21A6017844335F0AD989968F0786 Turikichi Sampei Turisennin-Hen. Fishing Freak (1989)(Victor)(JP) MSX JP
|
||||
DFD60916A37E37B3A5B36523F6349109 Ultima III - Exodus (1987)(Pony Canyon)(JP) MSX JP
|
||||
2B4F2B6EAC82422EDA32BADF60AEE213 Urusei Yatsura - Koi no Survival Birthday (1987)(Micro Cabin)(JP) MSX JP
|
||||
4F4D65A9E3F86349ABFCAB82E52CD207 Victorius Nine II (1988)(Nidecom)(JP) MSX JP
|
||||
7EF6C2579156F1828FDB6DE39EDA647E Victorius Nine II (1988)(Nidecom)(JP)[b2] MSX JP
|
||||
53975CFFF7A51F79E707E29E984D215A Wizardry - Proving Grounds of Mad Overload (1987)(ASCII)(JP) MSX JP
|
||||
24B443A15DA41134A366F145FC336FAB Woody Poco (1987)(dB-Soft)(JP) MSX JP
|
||||
3D8C2A836A4B16A739003B07D76C0459 Woody Poco (1987)(dB-Soft)(JP)[a] MSX JP
|
||||
261A860DEE771EA77C2D813B97366F9E Xevious - Fardraut Saga (1988)(Namcot)(JP) MSX JP
|
||||
72430889F4E5239A5ED9742A1B84C03A Xevious - Fardraut Saga (1988)(Namcot)(JP)[a] MSX JP
|
||||
C271C503C50BBBBA7EFC04F5F9AC6DEC Yaksa (1987)(Wolfteam)(JP) MSX JP
|
||||
FD325B9F4997D70397F59379E679E420 Yuurei Kun. Mr Ghost (1989)(System Sacom)(JP) MSX JP
|
||||
73DBE097AEC5ED7B1F79FD28D243CB18 Yuurei Kun. Mr Ghost (1989)(System Sacom)(JP)[a] MSX JP
|
||||
9BF8EE3FB42F475F6C6C1789F4B93C42 Zanac-Ex (1986)(Pony Canyon)(JP) MSX JP
|
||||
03D381A40BAED2BE60F09A91B52316CC Zanac-Ex (1986)(Pony Canyon)(JP)[a] MSX JP
|
||||
27AE0BD156BA5E0D5387821C18D7CFF3 Zanac-Ex (1986)(Pony Canyon)(JP)[a2] MSX JP
|
||||
3BA77F331A92ACF0D3E64847D4A2CA24 Zoids (1988)(Toshiba-EMI)(JP) MSX JP
|
||||
1E1C7E58F67F6D4DD96C3E818A057D9F Zombie Hunter (1988)(Hi-Score Software)(JP) MSX JP
|
||||
81A5853B8D046A8B3078283AC78BF2D1 Zombie Hunter (1988)(Hi-Score Software)(JP)[a] MSX JP
|
||||
532C46B3F3B28EA4E1DDB215BA7AB5B0 Zukkoke Yajikita Onmitsudoutyuu (1987)(HAL Laboratory)(JP) MSX JP
|
||||
BA2E644A68677CF42C116781579896D7 Zukkoke Yajikita Onmitsudoutyuu (1987)(HAL Laboratory)(JP)[a] MSX JP
|
|
@ -555,8 +555,8 @@ A5359E35839B40C414EAE498CA633B28176629AA G Olympic Hockey 98 (Japan) N64 Glide_
|
|||
7592F4C16B8E040539B5DCC201FAB2965A5E8C8D G Onegai Monsters (Japan) N64
|
||||
133F17162B2734286F9E94F64ACB1538B11506B2 G Operation WinBack (Europe) (En,Fr,De,Es,It) N64
|
||||
B8F29E8EFCF51EE9A6A16E2A1E60442B4F304950 G Pachinko 365 Nichi (Japan) N64
|
||||
2111D39265A317414D359E35A7D971C4DFA5F9E1 G Paper Mario (Europe) (En,Fr,De,Es) N64 Glide_enable_hacks_for_game=15;Glide_fb_hires_buf_clear=false;Glide_fb_optimize_texrect=false;Glide_swapmode=2;Glide_fb_smart=true;Glide_fb_read_alpha=true;Glide64mk2_enable_hacks_for_game=20;Glide64mk2_hires_buf_clear=false;Glide64mk2_optimize_texrect=false;Glide64mk2_filtering=1;Glide64mk2_swapmode=2;Glide64mk2_fb_smart=true;Glide64mk2_fb_read_alpha=true;Jabo_Clear_Frame=1;GLideN64_CopyColorToRDRAM=2
|
||||
3837F44CDA784B466C9A2D99DF70D77C322B97A0 G Paper Mario (USA) N64 RiceFrameBufferOption=3;RiceRenderToTextureOption=3;RiceScreenUpdateSettingHack=4;Glide_enable_hacks_for_game=15;Glide_fb_hires_buf_clear=false;Glide_fb_optimize_texrect=false;Glide_swapmode=2;Glide_fb_smart=true;Glide_fb_read_alpha=true;Glide64mk2_enable_hacks_for_game=20;Glide64mk2_hires_buf_clear=false;Glide64mk2_optimize_texrect=false;Glide64mk2_filtering=1;Glide64mk2_swapmode=2;Glide64mk2_fb_smart=true;Glide64mk2_fb_read_alpha=true;Jabo_Clear_Frame=1;GLideN64_CopyColorToRDRAM=2
|
||||
2111D39265A317414D359E35A7D971C4DFA5F9E1 G Paper Mario (Europe) (En,Fr,De,Es) N64 Glide_enable_hacks_for_game=15;Glide_fb_hires_buf_clear=false;Glide_fb_optimize_texrect=false;Glide_swapmode=2;Glide_fb_smart=true;Glide_fb_read_alpha=true;Glide64mk2_enable_hacks_for_game=20;Glide64mk2_hires_buf_clear=false;Glide64mk2_optimize_texrect=false;Glide64mk2_filtering=1;Glide64mk2_swapmode=2;Glide64mk2_fb_smart=true;Glide64mk2_fb_read_alpha=true;Jabo_Clear_Frame=1;GLideN64_CopyColorToRDRAM=1
|
||||
3837F44CDA784B466C9A2D99DF70D77C322B97A0 G Paper Mario (USA) N64 RiceFrameBufferOption=3;RiceRenderToTextureOption=3;RiceScreenUpdateSettingHack=4;Glide_enable_hacks_for_game=15;Glide_fb_hires_buf_clear=false;Glide_fb_optimize_texrect=false;Glide_swapmode=2;Glide_fb_smart=true;Glide_fb_read_alpha=true;Glide64mk2_enable_hacks_for_game=20;Glide64mk2_hires_buf_clear=false;Glide64mk2_optimize_texrect=false;Glide64mk2_filtering=1;Glide64mk2_swapmode=2;Glide64mk2_fb_smart=true;Glide64mk2_fb_read_alpha=true;Jabo_Clear_Frame=1;GLideN64_CopyColorToRDRAM=1
|
||||
7DB4808042B9651B47592E814AC4C125B51D4D2F G Paperboy (Europe) N64
|
||||
B043C47B9758FA6BB289CA7DBA2068BDA6CAFA3A G Paperboy (USA) N64
|
||||
9887A0E4BFE3C5E85E31638853574069F6C41CD3 G Parlor! Pro 64 - Pachinko Jikki Simulation Game (Japan) N64 Glide_force_microcheck=true;Glide64mk2_force_microcheck=true;Glide64mk2_filtering=1
|
||||
|
|
|
@ -305,7 +305,6 @@ sha1:17473C223453D2D80FCB9DCFA317947287DC5C52 Xing He Zhan Shi (China) (Unl) NE
|
|||
sha1:B1C74236FD17FAB4AB9AA6AB28E38864C66D6255 Pocahontus (UNL) NES board=MAPPER182;PRG=256;CHR=256;WRAM=8;PAD_H=1
|
||||
sha1:5FA23F88432006DCF6874EA36E9E7DA8934427BE Super Donkey Kong (Unl) NES board=MAPPER182;PRG=128;CHR=128;WRAM=8;PAD_H=1
|
||||
sha1:8A7DAB8B78DA1C5EA159BA9EEC00FF97742245F1 B Super Donkey Kong (Unl) [b1] NES board=MAPPER182;PRG=128;CHR=128;WRAM=8;PAD_H=1
|
||||
sha1:8A7DAB8B78DA1C5EA159BA9EEC00FF97742245F1 O Super Donkey Kong (Unl) [o1] NES board=MAPPER182;PRG=128;CHR=128;WRAM=8;PAD_H=1
|
||||
|
||||
;wrong vram info
|
||||
sha1:32D71DD6C5A8D78A918FE1B9D6D6C4A570D9652D Oeka Kids Anpanman no Hiragana Daisuki (J) NES board=MAPPER096;VRAM=32
|
||||
|
|
|
@ -321,7 +321,7 @@ E0E2FBD5834C04574795C923B0147F39 Pop Breaker (J) GG GGLink Japan
|
|||
197E31DCAFEA7023CC948FEA29C50230 Prince of Persia (UE) (SMSGG) (Beta) GG GG_in_SMS USA;Europe
|
||||
F9AE1762ED006C001E811FE6F072ABB7 The Pro Yakyuu '91 (J) GG Sports;Baseball GGLink Japan
|
||||
45D214CD027DEE5CE2ADFCD6458DEC2C Pro Yakyuu GG League '94 (J) GG Sports;Baseball SRAM=128;GGLink Japan
|
||||
527449BC2AAC2C8A16853FAC63E60AF6 Pro Yakyuu GG League (J) GG Sports;Baseball SRAM=128;GGLink Japan
|
||||
527449BC2AAC2C8A16853FAC63E60AF6 Pro Yakyuu GG League (J) GG Sports;Baseball SRAM=128;GGLink;EEPROM Japan
|
||||
52CFDDC12AF6A3A64030F62CCF6ACA83 Psychic World (UE) (Rev 1) GG USA;Europe
|
||||
A764B44555AADB48C519E7C85BDF7895 Psychic World (J) (En) GG Japan
|
||||
61C0B40329F89007AB44CC5EB29ADDFD Putt & Putter (UE) GG Sports;Golf GGLink USA;Europe
|
||||
|
@ -473,7 +473,7 @@ C017BAF7FA0DE71219DFAB91CAA59F8F Woody Pop (W) GG World
|
|||
A23E89266DDAD3C856E7401D04A49C6C Woody Pop (W) (Rev 1) GG World
|
||||
13F72ACFEA47587F9AA9F655BF98653C World Class Leader Board Golf (UE) GG Sports;Golf USA;Europe
|
||||
D95D381C6AFFB8345EE5457655E393D1 World Cup USA 94 (UE) (En,Fr,De,Es,It,Nl,Pt,Sv) GG Sports;Soccer USA;Europe
|
||||
D8939B64458FAF174CDC1241F777CB59 World Derby (J) GG GGLink Japan
|
||||
D8939B64458FAF174CDC1241F777CB59 World Derby (J) GG SRAM=8192;GGLink Japan
|
||||
E7EABBFC7A1F1339C4720249AEA92A32 World Series Baseball '95 (U) GG Sports;Baseball SRAM=128;GGLink;EEPROM USA
|
||||
59359FC38865CFF00C90D6EB148DDC2F World Series Baseball (U) GG Sports;Baseball SRAM=128;GGLink;EEPROM USA
|
||||
05CAC33029F0CAAC27774504C1AA8597 World Series Baseball (U) (Rev 1) GG Sports;Baseball SRAM=128;GGLink;EEPROM USA
|
||||
|
|
|
@ -2653,12 +2653,12 @@ C5E4B901CA41524C182E576BEDB13981 Madden NFL 97 (UE) [!] GEN
|
|||
31FDA133C077E6315232016CEDF3AABE Madden NFL 97 (UE) [b1] GEN
|
||||
40D39CE3B288D3E3AC59ACE17CF053B7 Madden NFL 97 (UE) [b2] GEN
|
||||
9277DB50DF385883749A74A87901B8C8 Madden NFL 97 (UE) [b3] GEN
|
||||
7A960CF918F5D014BC5E5C330EA6642E Madden NFL 98 (U) [b1] GEN
|
||||
E1A03EE2334ED425E71278D38A70E4E4 Madden NFL 98 (U) [b2] GEN
|
||||
E3044F5DE786CFA13F2D689E427F62E3 Madden NFL 98 (U) [c][!] GEN
|
||||
5B66890D9A48EE0EDF7FFAD7920BFCC8 Madden NFL 98 (U) [h1C] GEN
|
||||
D9B1C5D34D112051E838F720A26CC8CF Madden NFL 98 (U) [h2C] GEN
|
||||
22BBDE2293E404C5C91CD3CBE59CF4DD Madden NFL 98 (U) [h3C] GEN
|
||||
7A960CF918F5D014BC5E5C330EA6642E Madden NFL 98 (U) [b1] GEN sram=1
|
||||
E1A03EE2334ED425E71278D38A70E4E4 Madden NFL 98 (U) [b2] GEN sram=1
|
||||
E3044F5DE786CFA13F2D689E427F62E3 Madden NFL 98 (U) [c][!] GEN sram=1
|
||||
5B66890D9A48EE0EDF7FFAD7920BFCC8 Madden NFL 98 (U) [h1C] GEN sram=1
|
||||
D9B1C5D34D112051E838F720A26CC8CF Madden NFL 98 (U) [h2C] GEN sram=1
|
||||
22BBDE2293E404C5C91CD3CBE59CF4DD Madden NFL 98 (U) [h3C] GEN sram=1
|
||||
571F2908C01D5B4FEAFAC5663A85A897 Madonna Songs for 50HZ (PD) GEN
|
||||
41B8BA3569E3F4F98155DEA64318D223 Madou Monogatari I (J) [!] GEN
|
||||
D82529E8ABD9D82C4907867ACE6C581B Madou Monogatari I (J) [b1] GEN
|
||||
|
@ -3179,7 +3179,7 @@ ADD607E0DD5B9F294BB5A246D8946AED NHL 96 Elitserien (E) GEN
|
|||
0D48E7FC7BE607CAA4B18615A718E5B7 NHL 97 (UE) [b1] GEN
|
||||
31F2A66438932E5318A1BD46EC2CABB1 NHL 97 (UE) [b2] GEN
|
||||
24D07598509CFBF10C450DD8FD274C41 NHL 97 (UE) [b3] GEN
|
||||
A2C92C09D420CF7C2D2E55E8777F3A31 NHL 98 (U) [c][!] GEN
|
||||
A2C92C09D420CF7C2D2E55E8777F3A31 NHL 98 (U) [c][!] GEN sram=1
|
||||
32917C8A2D984FE32B342DBDAF78F50C NHL 98 (U) [h1C] GEN
|
||||
C80ACA6AE52106638CAEE05FDE2FD9B7 NHL 98 (U) [h2C] GEN
|
||||
03EB2646961C7B68E06A8CE5522538B9 NHL 98 (U) [h3C] GEN
|
||||
|
@ -8244,3 +8244,11 @@ D4F6BE2B9A4F9ADCA87C23045C85FED0CAC569FE Zombies Ate My Neighbors (U) [t1] GEN
|
|||
E9E97CA25221D1CFA8B7378C06D9AB9FD39683D3 Zool (U) [T+Fre_Terminus] GEN
|
||||
E155901D8710B1347204C9EBBC18A2F20565C478 D Zoom VDP Hardware Scaling by Fonzie (PD) GEN
|
||||
D4B54EABDE3372D9CAEE27C9F0D4E9AC23F242E7 B Zoop (U) [b2] GEN
|
||||
E35CE10A59DD8C0082212CA24368BA96D1EB2D24 Newman-Haas IndyCar Racing (W) [p1] GEN
|
||||
8D50867ABA721185560FC92BED75C92263A1DA39 Anima Land (J) GEN
|
||||
8D6114B71750E1153A8D0DE00CDF3A162668C25B H Dragon Ball Z - Buyuu Retsuden Input Added Edition (Hack) GEN
|
||||
C098B6D802B52215D52FF1FAA26CA37BD1260CF1 T Dragon Slayer II - The Legend of Heroes (J) [T+Chi] GEN
|
||||
058D2983C413A4B4AF180A5FA6534C24FC2C36E7 T Lord Monarch (J) [T+Chi] GEN
|
||||
CAAA233136DFC289D2FF4A1BA1B752AEA0D736F2 H Megaman - The Wily Wars - Power Control Mod by Segaman (Hack) GEN
|
||||
ACD3AFD1E945105939F906A748FF70E76B855B04 H Sonic - Omochao (S1 Hack) GEN
|
||||
AF35F3E5462455EB82D4FDC684214BC9166A2B8F H Sonic by Krizal Chen (Dsght) (S2 Hack) GEN
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
#include gamedb_vectrex_nointro.txt
|
||||
#include gamedb_vectrex_tosec.txt
|
||||
|
||||
;;;;----------------------------------------------
|
||||
;;;; Currently the above gamesdb files are generated automatically from NOINTRO and TOSEC files
|
||||
;;;; Each file is commented automatically and split up first into the various files that were imported, then by RomStatus
|
||||
;;;;
|
||||
;;;; NOTE TO DEVS:
|
||||
;;;; Any overrides should be placed below.
|
||||
;;;; Bizhawk (I believe) takes the last entry it sees when duplicates are present, so this should work.
|
||||
;;;;
|
||||
;;;;----------------------------------------------
|
||||
|
||||
;;;;----------------------------------------------
|
||||
;;;; Overrides (dont edit the included files above directly!)
|
||||
;;;;----------------------------------------------
|
||||
|
||||
;;; BAD
|
||||
|
||||
;;; Actually GOOD
|
||||
;SHA1:67F8513958C04E936B135740ED4EC6E6FA1763D5 Clean Sweep VEC
|
||||
;SHA1:38E38B5C60466146D4648F8929B5CE3A08DCBE0D Scramble VEC
|
||||
|
||||
;;; Actually TRANSLATED
|
||||
|
||||
;;; Games NOT present in TOSEC
|
|
@ -0,0 +1,68 @@
|
|||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Type: NO-INTRO
|
||||
;;; Source: GCE - Vectrex - 20170908-211236
|
||||
;;; FileGen: 2020-01-27 13:44:59 (UTC)
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Bad Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Hacks
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Over Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Translated
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Believed Good
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
00F768E79D6EBFE9BF920FFEC4C5C4F2 3D Crazy Coaster (USA) VEC USA
|
||||
1A81FEA8AC1C1D46DE7B633814130857 3D Mine Storm (USA) VEC USA
|
||||
F79C596A0205C5E7C427CDBBB1E16918 3D Narrow Escape (USA) VEC USA
|
||||
5E7A5DC59E32F2F63D85AE1F0201113A AnimAction - Advanced Animation (USA) VEC USA
|
||||
9657037A461EEE919462EB6A01879685 Armor..Attack (World) VEC World
|
||||
972972F871916A922F20779DEED8A708 Art Master (USA) VEC USA
|
||||
268E75778F282D853D77ACF42C6C8734 Bedlam (USA, Europe) VEC USA, Europe
|
||||
640AE7BD4538BAD11256999DB68DE5A0 Berzerk (World) VEC World
|
||||
94F144C31FD4563F9473ED0563463E54 Blitz! - Action Football (USA, Europe) (0F11CE0C) VEC USA, Europe
|
||||
5D74770BB175357812E61EE7CA731270 Blitz! - Action Football (USA, Europe) (881B27C5) VEC USA, Europe
|
||||
A376D5648E08F348E5965C058C631C6D Clean Sweep (World) VEC World
|
||||
9B61653ED9DAFD4CFB7F9D94404259AC Cosmic Chasm (World) VEC World
|
||||
DB9929B0AD53C97AFDA065596806BF86 Dark Tower (USA) (Proto) VEC USA
|
||||
896793A17A32932BCD64C52C77B00D55 Engine Analyzer (USA) (Proto) VEC USA
|
||||
E65B3262E9447A747D93E0CCB1DBB7DF Fortress of Narzod (USA, Europe) VEC USA, Europe
|
||||
501DD2845432F10E4B9531240F409B8C Heads-Up - Action Soccer (USA) VEC USA
|
||||
7580926EE22F06FD2CCDE4B65184715F HyperChase - Auto Race (World) VEC World
|
||||
E0DFC58763716C3B6A89E08F4869396E Mail Plane (USA) (Proto) (05838962) VEC USA
|
||||
E6C821917E168B1E6E27BF2B90AD6CFB Mail Plane (USA) (Proto) (DA1AC0DB) VEC USA
|
||||
80E72D7E1BB06FD5D5A24C93F1B61F14 Melody Master - Music Composition and Entertainment (USA) VEC USA
|
||||
EE19E350BE0AF2A509A202B057488DC8 Mine Storm (World) VEC World
|
||||
126FECBF4FB09FDB5A3C9AF92ABAED7C Mine Storm II (USA) (Rev 2) VEC USA
|
||||
1C95CF8FCD2C98DB747208ADE464A44F Mr. Boston Clean Sweep (Europe) VEC Europe
|
||||
E7BF7DE16B01419A819826CCE3DC25EE Pitcher's Duel (USA) (Proto) VEC USA
|
||||
5C1C413E51AA282015807DC60213FD3D Polar Rescue (USA) VEC USA
|
||||
F599DA79B5C324C2A11C117D256A64C0 Polar Rescue (USA) (Beta) VEC USA
|
||||
F94173910549038D4D8F329413A5AA54 Pole Position (USA) (A00ED3D6) VEC USA
|
||||
F85C521F445C82BF200B5B85B9B1CD60 Pole Position (USA) (C10F37D8) VEC USA
|
||||
4BB04A738C216E98CC07ED28F6CD4DB8 RA+A Spectrum I+ Stress Tester (USA) (Proto) VEC USA
|
||||
808E0501990BD01882C102DF00F20064 Rip Off (World) VEC World
|
||||
95370908561A782EDF138DF41CCB8F18 Scramble (USA, Europe) VEC USA, Europe
|
||||
CF6C01B0212E3B2191A97139CF1F427A Sledge 3D (USA) (Sample) VEC USA
|
||||
11A9BD419CF094DE8CAA8A44D76B69AB Solar Quest (World) VEC World
|
||||
2DECDF9F55DF7FB99761B2FE51425E40 Space Wars (World) VEC World
|
||||
5A90AB748F7B220EDAF8C1D67E0BFE89 Spike (USA, Europe) VEC USA, Europe
|
||||
ECC143F87A702AF7A1786B58A78ACE01 Spin ball (USA) VEC USA
|
||||
1224C9BEAE22EE7354E4220C46237696 Star Castle (USA) VEC USA
|
||||
47CEFE6F77DBAFB4475A64FE89DA02C0 Star Ship (Europe) VEC Europe
|
||||
0B67A6339E9C1D8385E8FDFC48F447BC Star Trek - The Motion Picture (USA) VEC USA
|
||||
ADD42C10019E88F47DD98791F8DE3148 StarHawk (World) VEC World
|
||||
8D66945EB9826D91CE27E07B2F8854F9 Test Cartridge (USA) (Rev 4) (Proto) VEC USA
|
||||
8CE9091361E0884BCD60409FC3301EDC Tour De France (USA) (Proto) VEC USA
|
||||
A3E0F44454D4100B18493F1BD2485D8B WebWarp (Europe) VEC Europe
|
||||
A398C18B4CE87929471B559B2BC7E79F WebWars (USA) VEC USA
|
|
@ -0,0 +1,505 @@
|
|||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Type: TOSEC
|
||||
;;; Source: GCE Vectrex - Applications (TOSEC-v2012-02-27)
|
||||
;;; FileGen: 2020-01-27 13:54:30 (UTC)
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Bad Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
ED697EFBECFC038BB7BA760D0C96071D B Animaction (1983)(GCE)[b][lightpen] VEC
|
||||
B594813775AA2870007AE0E3B418A8CF B Art Master (1983)(GCE)[b][lightpen] VEC
|
||||
F14891F89E0FE6AA4BE6B1FB3694AFA2 B Etch-a-Sketch (1985)(Woolsey, Jeff)(PD)[b][lightpen] VEC
|
||||
2D2DB95120D8236D6AEBB9F0785A928F B Melody Master (1983)(GCE)[b][lightpen] VEC
|
||||
17EEADAFB49D2D36358CE19F0FA5707D B Test Cartridge rev. 4 (1982)(-)(PD)[b] VEC
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Hacks
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Over Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Translated
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Home Brew
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
B716228FD8B3EBD44E81F5AC956D8E0D D Etch-a-Sketch (1985)(Woolsey, Jeff)(PD)[lightpen] VEC
|
||||
25CAB86484AE04CA9D3A5EFA661A40E0 D Exec Rom Dumper (2000)(Habot, Ronen)(PD) VEC
|
||||
F7CAA81033DD298C7EBF7DFFE2D96205 D Joystick Test (2000)(Parssinen, Manu)(PD) VEC
|
||||
2DDDC520F125FF487E4C2919E5CAE800 D Pythagorian Theorem (2003)(Mitchell, Rob)(PD) VEC
|
||||
AA12D8183B6302B56F453CE00BF0EA37 D Pythagorian Theorem (2003)(Mitchell, Rob)(PD)[a] VEC
|
||||
ACA19A23AAC100B15B90F22A3E6AE483 D Vectrex Bootstrap Loader (1985)(Woolsey, Jeff)(PD) VEC
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Believed Good
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
5E7A5DC59E32F2F63D85AE1F0201113A Animaction (1983)(GCE)[lightpen] VEC
|
||||
972972F871916A922F20779DEED8A708 Art Master (1983)(GCE)[lightpen] VEC
|
||||
896793A17A32932BCD64C52C77B00D55 Engine Analyzer (1983)(GCE)[lightpen] VEC
|
||||
80E72D7E1BB06FD5D5A24C93F1B61F14 Melody Master (1983)(GCE)[lightpen] VEC
|
||||
4BB04A738C216E98CC07ED28F6CD4DB8 Spectrum I+ (198x)(RA+A)(proto) VEC
|
||||
8D66945EB9826D91CE27E07B2F8854F9 Test rev4 (1982)(GCE)(proto) VEC
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Type: TOSEC
|
||||
;;; Source: GCE Vectrex - Compilations (TOSEC-v2012-02-27)
|
||||
;;; FileGen: 2020-01-27 13:54:30 (UTC)
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Bad Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Hacks
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Over Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Translated
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Home Brew
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
70E9DCA9114F08091E7EF5622332A67F D Battle Earth Terror Hazard & Vecsports Boxing (2000)(Parssinen, Manu)(PD) VEC
|
||||
26F8C50E32B7E819C0F4594E5379D9A3 D GCE Game Pack 1 v0.1 (200x)(-)(PD) VEC
|
||||
613B8BEB36116587AB2FA9A7D704E39B D GCE Game Pack 2 v0.1 (200x)(-)(PD) VEC
|
||||
9F6EC44B307075528EBF94CBEC023A10 D Vaboom! + Vectrace (2000-07)(Habot, Ronen)(PD) VEC
|
||||
340C6B08F06D3CCC16915E964CF40D87 D Vaboom! + Vectrace (2000-07)(Habot, Ronen)(PD)[a][vaboom!] VEC
|
||||
44CDF13CA9E9364A1123519067705649 D Vaboom! + Vectrace (2000-07)(Habot, Ronen)(PD)[a][vetrace] VEC
|
||||
F5809F3325A2901B68709EE137BDD80D D Vaboom! + Vectrace (2000-07)(Habot, Ronen)(PD)[vaboom!] VEC
|
||||
54E258D28CA8306B0E09DB75F926804E D Vaboom! + Vectrace (2000-07)(Habot, Ronen)(PD)[vetrace] VEC
|
||||
050256603B56D1385B8F8E252A0C2173 D Vecmania Part 1 (1999)(Dondzila, John)(PD) VEC
|
||||
499057386F23F4ECB30E01D27B958A56 D Vecmania Part 1 (1999)(Dondzila, John)(PD)[a] VEC
|
||||
E1F186888B1356EBB7E2C6A122C703DC D Vecmania Part 2 (1999)(Dondzila, John)(PD) VEC
|
||||
ACA19A23AAC100B15B90F22A3E6AE483 D Vectrex Bootstrap Loader (1985)(Woolsey, Jeff)(PD) VEC
|
||||
E69ADEF3088DFDC6E2EC22DBD57B9556 D Vexperience & Battle Earth Terror Hazard & Vecsports Boxing (2000)(Parssinen, Manu)(PD) VEC
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Believed Good
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Type: TOSEC
|
||||
;;; Source: GCE Vectrex - Demos - Music (TOSEC-v2012-02-27)
|
||||
;;; FileGen: 2020-01-27 13:54:30 (UTC)
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Bad Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Hacks
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Over Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Translated
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Home Brew
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
B94CEBCBD923AA28BEF56B45D09CA925 D Bach Prelude #1 (1985)(Woolsey, Jeff)(PD) VEC
|
||||
7E5C15422794D8C5F969A83608BF679C D Music Test (2001)(-)(PD) VEC
|
||||
5482E1B852B451E60C763EF59E309DC1 D My Bonnie Lies Over The Ocean (1985)(Woolsey, Jeff)(PD) VEC
|
||||
52301EE5DCEB04DC730D45ABC47F08AA D ROM Music (2000)(Parssinen, Manu)(PD) VEC
|
||||
36F466DB070B2FE1657129D1367EA9CD D Song E (19xx)(-)(PD) VEC
|
||||
7550E332E055091F88FDA71D4BBD1583 D Sound1 (19xx)(-)(PD) VEC
|
||||
789A7668CDCAE25F27122AA96E2753C7 D Star Spangles Banner (1985)(Woolsey, Jeff)(PD) VEC
|
||||
59C897CA8A0BB4BFA080E0D01370E9C2 D Vectrex YM-Sound - Arkanoid - Revenge of DOH (1998)(Salomon, Christopher)(PD) VEC
|
||||
705BAA1DB46F27E66913A933CBC8196E D Vectrex YM-Sound - Axel F - Beverly Hills Cop (1998)(Salomon, Christopher)(PD) VEC
|
||||
58859226CD3FBB291CD7981A114EBB4C D Vectrex YM-Sound - Axel F - Beverly Hills Cop (1998)(Salomon, Christopher)(PD)[a] VEC
|
||||
D8A67954770CF29F9EDAEC477F04E7BF D Vectrex YM-Sound - Bebop (1998)(Salomon, Christopher)(PD) VEC
|
||||
006AD8DFD685F87174E49FA0378959E6 D Vectrex YM-Sound - Bebop Best (1998)(Salomon, Christopher)(PD) VEC
|
||||
CC9792918915E31523F009FC0296854D D Vectrex YM-Sound - Bubble Bobble - Diamond Room (1998)(Salomon, Christopher)(PD) VEC
|
||||
3CDF2E274BF780F8F25C1202990196C8 D Vectrex YM-Sound - Bubble Bobble 0 (1998)(Salomon, Christopher)(PD) VEC
|
||||
F2133AF043282B9182B684F550762C01 D Vectrex YM-Sound - Bubble Bobble 1 (1998)(Salomon, Christopher)(PD) VEC
|
||||
DFD96E375C90EE8CA15C379637D7D645 D Vectrex YM-Sound - Bubble Bobble 2 (1998)(Salomon, Christopher)(PD) VEC
|
||||
81FEAEB2986BCB27F361ACE954E0A1F0 D Vectrex YM-Sound - Bubble Bobble 2best (1998)(Salomon, Christopher)(PD) VEC
|
||||
D95A085A6D1BA7DA9CEDBA6A7E92E01D D Vectrex YM-Sound - Bubble Bobble 3 (1998)(Salomon, Christopher)(PD) VEC
|
||||
9543A0D7DFD2DB931A680BD3C96DDDE3 D Vectrex YM-Sound - Commando - High Score (1998)(Salomon, Christopher)(PD) VEC
|
||||
95DA24DFEE450052A61192884AB85911 D Vectrex YM-Sound - Count05 (1998)(Salomon, Christopher)(PD) VEC
|
||||
F8DAD3F66234E87D2A189DD51FD2DFB7 D Vectrex YM-Sound - Dr Who theme (1998)(Salomon, Christopher)(PD) VEC
|
||||
0CB85F8C8C4C8CBFA7DBC023BA104F92 D Vectrex YM-Sound - Fast Food 1 (1998)(Salomon, Christopher)(PD) VEC
|
||||
0181563134A98FDEF33D73B264EC7736 D Vectrex YM-Sound - Fast Food 2 (1998)(Salomon, Christopher)(PD) VEC
|
||||
8AF3D7C32D890F86DE94BABFF0D3F9EF D Vectrex YM-Sound - Ghosts 'n' Goblins 7 (1998)(Salomon, Christopher)(PD) VEC
|
||||
4DAFE568EA93985607D191A6095BB6A8 D Vectrex YM-Sound - Ghosts 'n' Goblins 8 (1998)(Salomon, Christopher)(PD) VEC
|
||||
850D58BF8C984F06C8CE6189106AD186 D Vectrex YM-Sound - Ghosts 'n' Goblins 9 (1998)(Salomon, Christopher)(PD) VEC
|
||||
52EA6474D3887D0DC89C441E3FD518DF D Vectrex YM-Sound - Ghosts 'n' Goblins 9best (1998)(Salomon, Christopher)(PD) VEC
|
||||
DF96FA54F2845FE06A4FC9499B198A6C D Vectrex YM-Sound - Ghouls 'n' Ghosts (1998)(Salomon, Christopher)(PD) VEC
|
||||
442531AF912AECCA7501D4CB39CA637D D Vectrex YM-Sound - Great Giana Sisters - Bonus (1998)(Salomon, Christopher)(PD) VEC
|
||||
70EE930334566CA5DE7481AA89CAD2BD D Vectrex YM-Sound - Great Giana Sisters - Ingame (1998)(Salomon, Christopher)(PD) VEC
|
||||
775709FFF3ED12BA9183FEF4D407A8C2 D Vectrex YM-Sound - Great Giana Sisters - Title (1998)(Salomon, Christopher)(PD) VEC
|
||||
C62B573EFFCF3E15B0464C278FDD7995 D Vectrex YM-Sound - Hey, Music Lover (1998)(Salomon, Christopher)(PD) VEC
|
||||
EFA5D68DAB31DC3D25A91B2DCFAD6E4F D Vectrex YM-Sound - Horror Zombies From The Crypt (1998)(Salomon, Christopher)(PD) VEC
|
||||
05317670338681A226AD6AB54C59F8BD D Vectrex YM-Sound - Jaws theme (1998)(Salomon, Christopher)(PD) VEC
|
||||
2AE1F91BA656199F2C6C95D6C1462B38 D Vectrex YM-Sound - Klax Sound (1998)(Salomon, Christopher)(PD)[Level Begin] VEC
|
||||
CAEA604B0C170C5A800E5958089E8BD2 D Vectrex YM-Sound - Madonna's Get Into The Groove (1998)(Salomon, Christopher)(PD) VEC
|
||||
0C0C1739B9E1025B4A894428DA4E3E75 D Vectrex YM-Sound - Misfits 1 (1998)(Salomon, Christopher)(PD) VEC
|
||||
79B911D03F7823F89C55F88CE7EAB10F D Vectrex YM-Sound - Monty on the Run - HiScore Sound (1998)(Salomon, Christopher)(PD) VEC
|
||||
4FC4E342A142313D901BCE87C51C752F D Vectrex YM-Sound - Monty on the Run 1 (1998)(Salomon, Christopher)(PD) VEC
|
||||
3961A29D9F46B6311D4E0A5F643F3B07 D Vectrex YM-Sound - Monty on the Run 2 (1998)(Salomon, Christopher)(PD) VEC
|
||||
F3447B08E6BA463F1CD2CD1BD52BD938 D Vectrex YM-Sound - NO (1998)(Salomon, Christopher)(PD) VEC
|
||||
D9D3837624E93A3890CF11908260D465 D Vectrex YM-Sound - Pac-Mania 1 (1998)(Salomon, Christopher)(PD) VEC
|
||||
E99897FA4D03DC62E0472EE1E2D796A3 D Vectrex YM-Sound - Pac-Mania 2 (1998)(Salomon, Christopher)(PD) VEC
|
||||
1C1398259611E983ACD4E798CF33BFBF D Vectrex YM-Sound - Pac-Mania 4 (1998)(Salomon, Christopher)(PD) VEC
|
||||
3F4B38FA0C7DACD49F32ABEAADC0640D D Vectrex YM-Sound - Rainbow Islands (1998)(Salomon, Christopher)(PD) VEC
|
||||
60B51B386800EFD3D22F3A9C235843EF D Vectrex YM-Sound - Real Ghostbusters (1998)(Salomon, Christopher)(PD) VEC
|
||||
8D1DE01D950A05FF349E8B6A68D3EA22 D Vectrex YM-Sound - Robin Hood (1998)(Salomon, Christopher)(PD) VEC
|
||||
986B6699C1AE18F6C4508885B191B02C D Vectrex YM-Sound - Star Wars (1998)(Salomon, Christopher)(PD) VEC
|
||||
F70E2CB9A9803D10E362C7B83FF312FE D Vectrex YM-Sound - Star Wars Theme (1998)(Salomon, Christopher)(PD) VEC
|
||||
5084BEC0F39182706E083ED28A55F903 D Vectrex YM-Sound - Turrican 1 (1998)(Salomon, Christopher)(PD) VEC
|
||||
77EFFB3EB58CAE13A3E3C4CA047DA2BB D Vectrex YM-Sound - Turrican 2 (1998)(Salomon, Christopher)(PD) VEC
|
||||
9B34E37F7E78D56C0D2551ED5473557B D Vectrex YM-Sound - YM001 (1998)(Salomon, Christopher)(PD) VEC
|
||||
E69ADEF3088DFDC6E2EC22DBD57B9556 D Vexperience & Battle Earth Terror Hazard & Vecsports Boxing (2000)(Parssinen, Manu)(PD) VEC
|
||||
2B09481830F58449CA103611811F318A D We Wish You a Merry Christmas - (1985)(Woolsey, Jeff)(PD) VEC
|
||||
F3747EE47578C3BF53FFFEC343709F21 D We Wish You a Merry Christmas - (1985)(Woolsey, Jeff)(PD)[a] VEC
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Believed Good
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
19810DC98CFEF682F24856437A161E9A We Wish You a Merry Christmas - (1985)(Woolsey, Jeff)[newer] VEC
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Type: TOSEC
|
||||
;;; Source: GCE Vectrex - Demos - Slideshows (TOSEC-v2012-02-27)
|
||||
;;; FileGen: 2020-01-27 13:54:30 (UTC)
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Bad Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Hacks
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Over Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Translated
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Home Brew
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
8C57A4FD5D6A0C3F316BE279AD1782CF D 0ldsk00l (2002)(Parssinen, Manu)(PD) VEC
|
||||
CC8D22458EE86FCBB7D771A05A8B43D5 D All Your Base (2001)(Parssinen, Manu)(PD) VEC
|
||||
C9E254F442BA8B82B80C101888A286D9 D Animation (2002)(Parssinen, Manu)(PD) VEC
|
||||
8FE6D0CB5C8093D72456465B8AACE264 D Collision Test (2000)(Parssinen, Manu)(PD) VEC
|
||||
23246F5DC34A7BEF1CE03299AE5224BD D Da Vecdemo 2k2 (2002)(Parssinen, Manu)(PD) VEC
|
||||
774E9F9A1D7C26C04700429613D1D14F D Lines + Digitized Sounds (1998)(-)(PD) VEC
|
||||
03C7959C07709082055A735392D00F39 D Philly Classic 3 (2002)(-)(PD) VEC
|
||||
FDBD4E2E5EBEAB6A5C730F2B878C7BF8 D SAW Gallery 1 (1999)(Tumber, Christopher)(PD) VEC
|
||||
87B9263AB0EB5D1397E722D4EE138946 D SAW Gallery 2 (1999)(Tumber, Christopher)(PD) VEC
|
||||
655C737050D3785B23F378D30ADC5606 D SAW Gallery 3 (1999)(Tumber, Christopher)(PD) VEC
|
||||
4EF370FEDDCBE448226BC54AA4F81926 D Vimpula (2002)(Parssinen, Manu)(PD) VEC
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Believed Good
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
12B2AA353463C421DF178F744B742AC4 Climax Slideshow (2008-12-24)(Revival Studios) VEC
|
||||
C92380263A81A347D7CE649A318CAD64 Performance VX (2003)(Revival Studios) VEC
|
||||
19810DC98CFEF682F24856437A161E9A We Wish You a Merry Christmas - (1985)(Woolsey, Jeff)[newer] VEC
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Type: TOSEC
|
||||
;;; Source: GCE Vectrex - Demos - Various (TOSEC-v2012-02-27)
|
||||
;;; FileGen: 2020-01-27 13:54:30 (UTC)
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Bad Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
DBE429336C78A37C6B340540A2312D4D B Dual Vectrex Test #1 (1983)(-)(PD)[b] VEC
|
||||
54470F6BCAD3C74F2C80371BE952F72A B Dual Vectrex Test #2 (1983)(-)(PD)[b] VEC
|
||||
6108718DBB59278270B19F604BFFB737 B ZZZ-UNK-VecVoice (2002)(Hutchinson, Richard)[b] VEC
|
||||
1E7A6F429ED0F426BB73DD08E07E83CC B ZZZ-UNK-VecVox (19xx)(-)(PD)[b] VEC
|
||||
9190041255043AA6F7DA1D49F2ECEC5A B ZZZ-UNK-VecVox Driver (19xx)(Herbert, Alex)(PD)[b] VEC
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Hacks
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Over Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Translated
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Home Brew
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
4A45D8FC03E962FC34CFD827EF568204 D 3-D Demo (1998)(Salomon, Christopher)(PD) VEC
|
||||
6C6E0AFC2DEE4E20D9FDF77177C738DB D 3-D Demo (2000-03-06)(Salomon, Christopher)(PD) VEC
|
||||
4C3F98FFB5C9C29C881C1408F94E5A7E D 3-D Scrolling Demo (2001)(Tumber, Christopher)(PD) VEC
|
||||
3F18DE10259E172CA9EF4B580D33FCA2 D 4-D Rotating Cube (19xx)(-)(PD) VEC
|
||||
65BE26D550525934620B56DCDDE5AF5A D Alpha Test (2001)(-)(PD) VEC
|
||||
B48AD4590945B79FC55BF2A4D1924786 D Arsek (2000)(Marq)(PD) VEC
|
||||
BC246EAF3970C799D05A5C6E7F7C331E D Battlezone (2001)(Tumber, Christopher)(PD) VEC
|
||||
257A3DA9F1BA8A08CA2F3F8D26616CAD D Calibration Demo (19xx)(Tumber, Christopher)(PD) VEC
|
||||
BF16E6E50A076808968EB43768A4286C D CGM Example (2000)(Marq)(PD) VEC
|
||||
7091EBE96C2A8A5683670EFF6AF16C0A D Curved Lines (1998)(Salomon, Christopher)(PD) VEC
|
||||
F4F39388B719ACA17ED50E09B79EDC74 D Dual Vectrex Test #1 (1983)(-)(PD) VEC
|
||||
918359F5CDFD0A1E64092B31513DD70F D Dual Vectrex Test #2 (1983)(-)(PD) VEC
|
||||
BC2BAD32D1A000533A4BDEE46B3444F1 D Line Demo (2001)(-)(PD) VEC
|
||||
E14246A66660950471274FC34221C687 D Manu's Boxer - Animated training (200x)(Parssinen, Manu)(PD) VEC
|
||||
BDD1338CBDFD8A6C1CA3A31CF1D2577E D Pokemon Demo 1 (2000)(Parssinen, Manu)(PD) VEC
|
||||
8A49779DFA3EDEFD162F385968D3A1B6 D Pokemon Demo 2 (2000)(Parssinen, Manu)(PD) VEC
|
||||
510C656651C906B6E85396B5BABD90C3 D Pokemon Demo 3 (2000)(Parssinen, Manu - Marq)(PD) VEC
|
||||
1FA52E5F675CB1956F1C40601521FDDC D Pokemon Demo 4 - Psyduck's Eyes (2000)(Parssinen, Manu)(PD) VEC
|
||||
B3B3E498B1D3848E10E9E2E9C524E585 D Space Ship (2000)(Parssinen, Manu)(PD) VEC
|
||||
3031F19F0A45473BF9496205150D5DC4 D Tank Demo 1 (19xx)(-)(PD) VEC
|
||||
09F2EE6ACCD4BFE5C8F6EAB60F26351A D Tank Demo 2 (2001)(-)(PD) VEC
|
||||
3E2DD22273524B82B7A2404D0842D475 D Taulukko (2002)(Parssinen, Manu)(PD) VEC
|
||||
6570C68C72E82ABE07F5349517BA53AB D Text Demo (2001)(-)(PD) VEC
|
||||
A966600FF9C7CD54D068A6F7316E79EE D This is Just a Non-Playable Demo (1999)(Balazs, Martin)(PD) VEC
|
||||
845E95121FC58CB2CD6D0AC6BFC780A3 D Tono Demo (2000)(Marq - Antti)(PD) VEC
|
||||
F23F312F1100872EFC0DC385B142C286 D Vectrex Demo 1 (2000)(Parssinen, Manu)(PD) VEC
|
||||
00FFA6DB98E0C6A970F0295FD7BBA1F6 D Vectrex Demo 2 (2000)(Parssinen, Manu)(PD) VEC
|
||||
03487BF82ECCE9BCF9219C668B8148B2 D Vectrex Demo 3 (2000)(Parssinen, Manu)(PD) VEC
|
||||
4EF370FEDDCBE448226BC54AA4F81926 D Vimpula (2002)(Parssinen, Manu)(PD) VEC
|
||||
D8B096480485B4E726088B4239A4B855 D Zoom & Rotate (2000)(Parssinen, Manu)(PD) VEC
|
||||
9088FCB88FB6F2AA839C3BFA6363B09A D ZZAP - Scrolling Space Game (1989)(Krumlinde, Ville)(PD) VEC
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Believed Good
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
FD5B667D58C1A34F9D92B1EDE820923F Scorefont (2002-08-26)(Parssinen, Manu) VEC
|
||||
3DC500580B45F9166ED81EE0D2C8D1FF ZZZ-UNK-MP (demo) (19xx)(-) VEC
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Type: TOSEC
|
||||
;;; Source: GCE Vectrex - Firmware (TOSEC-v2012-02-27)
|
||||
;;; FileGen: 2020-01-27 13:54:30 (UTC)
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Bad Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
9190041255043AA6F7DA1D49F2ECEC5A B ZZZ-UNK-VecVox Driver (19xx)(Herbert, Alex)(PD)[b] VEC
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Hacks
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Over Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Translated
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Home Brew
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Believed Good
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
BA9260BB961D60E718378CC16A8051D7 Vectrex BIOS (1982)(GCE) VEC
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Type: TOSEC
|
||||
;;; Source: GCE Vectrex - Games (TOSEC-v2014-07-30)
|
||||
;;; FileGen: 2020-01-27 13:54:30 (UTC)
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Bad Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
F4B9DFC9B0DC29A037D6690B86EB2C23 B 3-D Crazy Coaster (1983)(GCE)[b] VEC
|
||||
385918CFE4ED64E7E19047E9754A7C77 B 3-D Mine Storm (1983)(GCE)[b] VEC
|
||||
F3A3D70C3D2C63E84BBF2D41D195566B B 3-D Narrow Escape (1983)(GCE)[b] VEC
|
||||
7B1935D9FEB665988DD9504B309B1A1B B Armor Attack (1982)(GCE)[b] VEC
|
||||
363CAADE88652D89BD4011B4CA18084E B Bedlam (1983)(GCE)[b] VEC
|
||||
94F144C31FD4563F9473ED0563463E54 B Blitz! - Action Football (1982)(MB)[b] VEC
|
||||
CF17690C433E37EED8FF1CA55F944087 B Clean Sweep (1982)(GCE)[b] VEC
|
||||
2AFF8668762CD1418EF146CE101B41F7 B Dark Tower (1983)(GCE)(proto)[b] VEC
|
||||
8595351841B168CF241861095FD04B8E B Dark Tower (1983)(GCE)(proto)[b][Req 32k] VEC
|
||||
3C3B2F836E60FB2D64480286815425F0 B Fortress of Narzod (1982)(GCE)[b] VEC
|
||||
49D7CD9F7F8616C775F6CDC0996873B9 B Heads Up - Action Soccer (1983)(GCE)[b] VEC
|
||||
161A46F714CBF23AC45DD19536FF2F66 B Hyperchase (1982)(GCE)[b] VEC
|
||||
E0DFC58763716C3B6A89E08F4869396E B Mail Plane (1983)(GCE)(proto)[b] VEC
|
||||
18C9F6478683476C825B0C094BCC0ABB B Mike's Molecules (demo) (1985)(Blackwell, Mike)(PD)[b] VEC
|
||||
EF4FA5E79026A5EDDE80BE3B030F3E86 B Mine Storm (1982)(GCE)[h RLB][b] VEC
|
||||
EC3B987EF11D1CA13F7BCCE5007D11DA B Mine Storm (1982)(GCE)[h RLB][o][b] VEC
|
||||
20A8B209386F8D98DE22C44F0378F0BE B Mine Storm (1982)(GCE)[h RLB][o2][b] VEC
|
||||
6574EE1A86796BD4A96C5DA2E0891DFC B Patriots (1996)(Dondzila, John)(PD)[b] VEC
|
||||
E6650274B81E2F946CE3E6381C370BC7 B Polar Rescue (1983)(GCE)[b] VEC
|
||||
3FCA9FF12820A2C76814DB5D1B0E1F8D B Pole Position (1983)(GCE)[b] VEC
|
||||
37318842F640D88EB30BB06CE8686A7A B Rip-Off (1982)(GCE)[b] VEC
|
||||
CF6C01B0212E3B2191A97139CF1F427A B Rocket Sledge (1983)(GCE)(proto)[b] VEC
|
||||
122E4E5A9DB240F81F18696902305476 B Scramble (1982)(GCE)[b] VEC
|
||||
9B4C1C3B2F5CAA27EA8B3EF2A5D0A32C B Solar Quest (1982)(GCE)[b] VEC
|
||||
DA0F7B312796210020507308B3E5C29F B Space Wars (1982)(GCE)[b] VEC
|
||||
58A68E8799B35C9B0D060DB4B71D5C6C B Spike Hoppin' (1998)(Dondzila, John)(PD)[b] VEC
|
||||
BA47F965CE261847D5E5DDA24B93535F B Spinball (1983)(GCE)[b] VEC
|
||||
B4B464C77681CF3C5BB9679C7273AD00 B Star Castle (1983)(GCE)[b] VEC
|
||||
109C46D79BC6728F541AEABA0C0E84F0 B Star Hawk (1982)(GCE)[b] VEC
|
||||
4EF727AB9221E40752A94C5C9488FA71 B Star Trek - The Motion Picture (1982)(GCE)[b] VEC
|
||||
ADC4B2AE0EBDCAB900257066BE1EEE41 B Vector Vaders (1996)(Dondzila, John)(PD)[b] VEC
|
||||
2705AD2A5DB7D2D07969DF8D1DD3E413 B Web Wars (1983)(GCE)[b] VEC
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Hacks
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
7BC7F97D3B3A732F4552035BCF7C90B3 H Armor Attack (1982)(GCE)[h][a][spinner controller] VEC
|
||||
1B00D5000F665DBB9454953050BB87F0 H Armor Attack (1982)(GCE)[h][spinner controller] VEC
|
||||
7CE4DCEEBC4A1DB29F4005A7991C3378 H Bedlam (1983)(GCE)[h][spinner controller] VEC
|
||||
4CF69D28B334FB972B4C97397E92693A H Berzerk (1982)(GCE)(proto)[f] VEC
|
||||
32C172BB0C767C9F33DAA1C73239E4EE H Berzerk (1982)(GCE)(proto)[f][o] VEC
|
||||
6AC9F45324A62A5EDEB9A7A94C45AC50 H Dark Tower (1983)(GCE)(proto)[h Fred Taft] VEC
|
||||
A970AED37CFFD29AB3740F8E79518858 H Mine Storm (1982)(GCE)[h Karrsoft] VEC
|
||||
E1D74EC863A50757E1A8F89BBD73E2F1 H Mine Storm (1982)(GCE)[h RLB] VEC
|
||||
FA69340348D01A2C9DF7990D6D3D27CD H Mine Storm (1982)(GCE)[h RLB][o] VEC
|
||||
EEC3D8F10273178D9DDA0C89867407F8 H Mine Storm (1982)(GCE)[h] VEC
|
||||
1419EB1920E8FAB7AF8D9D6FC6C3D09B H Mine Storm II (1983)(-)[h][spinner controller] VEC
|
||||
A183501B50935C970823145FC8C5F40B H Pole Position (1983)(GCE)[h][spinner controller] VEC
|
||||
0635E54D347DAAA0D1CEF6B1B395211D H Solar Quest (1982)(-)[h][spinner controller] VEC
|
||||
53A840BC55E7119BF63AA5E86E53AAF8 H Star Castle (1983)(-)[h][spinner controller] VEC
|
||||
AD98F3477C2AC3AABBEB3BEFF9CCD69F H Star Trek - The Motion Picture (1982)(GCE)[h][controller hack] VEC
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Over Dumps
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
EECFB30E843AD4F345BC35E3D76B19B8 O Polar Rescue (1983)(GCE)[o][a] VEC
|
||||
FB002E61CD4E79B94EBC0BFC7202C78B O Star Trek - The Motion Picture (1982)(GCE)[o] VEC
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Translated
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Home Brew
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
69D68DCD741BEA0E3535A4F990D43B76 D Abyss (1999)(-)(PD)(preview) VEC
|
||||
2EF764E31C36EED4006D8A35E96F22AD D All Good Things (1996)(Dondzila, John)(PD) VEC
|
||||
EF280647997253AF783B6AB001E1F80A D Battle Earth Terror Hazard v1 (2000)(Parssinen, Manu)(PD) VEC
|
||||
9566DFB2A7914A8EB1F67F93F23365EB D Battle Earth Terror Hazard v2 (2000)(Parssinen, Manu)(PD) VEC
|
||||
6199A3F4853EEA9D43636F5CAA279FAB D Battle Earth Terror Hazard v3 (2000)(Parssinen, Manu)(PD) VEC
|
||||
3BE0D397D128C9B78A8A2067CCE5063E D Battle Earth Terror Hazard v4 (2000)(Parssinen, Manu)(PD) VEC
|
||||
1C6C2D90AAC87E5E95F9A37A6F3A2B10 D BCOR-FTS (demo) (1997)(Cowgill, Clay)(PD) VEC
|
||||
FB18CAFA9EC728ED79EDF525FD971E08 D Birds of Prey (1999)(Dondzila, John)(PD) VEC
|
||||
91857F5262A46E17239340C35097C9BC D Disc Duel (demo) (1997)(-)(PD) VEC
|
||||
D5012DDEDD1A9FE2B9D14E82EDDAA55D D Gravitrex (2002)(Dondzila, John)(PD) VEC
|
||||
53C0356B8E64D037814CD424025D2CAA D Labyrinth Rev 1 (1998)(Salomon, Christopher)(PD) VEC
|
||||
26FED7DFAFE8A36263E48F6EC70F103D D Labyrinth Rev 2 (1998)(Salomon, Christopher)(PD) VEC
|
||||
4E420CCA87C54CC12EBC1866DADE7715 D Labyrinth Rev 3 (1998)(Salomon, Christopher)(PD) VEC
|
||||
D68CFD8FD043A8D1BCA1166E2B81FFA7 D Labyrinth Rev 4 - Vector Rouge (1998)(Salomon, Christopher)(PD) VEC
|
||||
F564B7902914938375BC3D4B19F21065 D Lunar Lander (demo) (19xx)(Landspurg, Thomas)(PD) VEC
|
||||
EA2F6F481BBF4E67EDADD411B6950C1D D Manu's Incomplete Games - Volume 1 - Nonagalf (2003)(Parssinen, Manu)(PD) VEC
|
||||
E7BC87A58672356CB9E145CB89284420 D Manu's Incomplete Games - Volume 2 - VecSports Kingpin (2002)(Parssinen, Manu)(PD) VEC
|
||||
784B14D2304F6FD39B205AB93A4B21B1 D Manu's Incomplete Games - Volume 3 - B.E.T.H. (200x)(Parssinen, Manu)(PD) VEC
|
||||
5E7B84B54BD005D1C9CA8BFEEA2322D1 D Manu's Incomplete Games - Volume 4 - Yoehl - Saga of Pathrk (200x)(Parssinen, Manu)(PD) VEC
|
||||
A77DC3AA71F52764FEA935E4A4FD4DB2 D Manu's Incomplete Games - Volume 5 - Ztagger (200x)(Parssinen, Manu)(PD) VEC
|
||||
D857A0FB7902C32CE514C675D890059B D Mike's Molecules (demo) (1985)(Blackwell, Mike)(PD) VEC
|
||||
6BC8E7B8D3D1AC553B9977F46CA612F0 D Mike's Molecules (demo) (1985)(Blackwell, Mike)(PD)[a] VEC
|
||||
0CDA10E5F1252ED6D44C6148A37601B6 D Mine Storm v2.00 (1998)(Salomon, Christopher)(PD) VEC
|
||||
7200AD3BDE2F3BB7C14F8ECCEAED6FA4 D Missile Lords (2001)(Tumber, Christopher)(PD) VEC
|
||||
5B6CF92C62342C55B9B35E82488E8DAE D Moon Lander (demo) (1997)(Clay Cowgill)(PD) VEC
|
||||
70A3572F519DA2ABDE6869AE3029F914 D Moon Lander (demo) (1997)(Clay Cowgill)(PD)[a] VEC
|
||||
EC1D898C06A152DDDF7F0B4BD8837AB9 D Nebula Commander (2005)(Aker, Craig)(PD) VEC
|
||||
58A5D1B022272DDFB23123FFCB6F6188 D Nonagalf (2003-03-10)(Parssinen, Manu)(PD) VEC
|
||||
3B4EB68DDCC1CBF1C0F8C38520D02CA8 D Omega Chase (1998)(Tumber, Christopher)(PD) VEC
|
||||
C33F47BD2837A50CCC6DC06F0390DD5E D Omega Chase (1998)(Tumber, Christopher)(PD)[final] VEC
|
||||
D33112C5A916BBAEB4AE69B7B033F68D D Paratroopers (2002)(Dondzila, John)(PD) VEC
|
||||
B35B0783011B55835AEEB9C9BEA56738 D Patriots (1996)(Dondzila, John)(PD) VEC
|
||||
8DD134559D5CC9373D8EDE1826A8085B D Patriots (1996)(Dondzila, John)(PD)[a] VEC
|
||||
BA08525993DAB47C52CE41920468A63E D Patriots III - BALListics Busters (1996)(Dondzila, John)(PD) VEC
|
||||
3B5DA23C7EFE411DD860A33D873C5FE2 D Patriots III - BALListics Busters (2002)(Dondzila, John)(PD) VEC
|
||||
B4B6051A7B91C9C54AA25AD12F553CAE D Patriots Remix (1996)(Dondzila, John)(PD) VEC
|
||||
165C4C56A918C4AC35D75D280A2098BF D Pop (demo) (19xx)(Tumber, Christopher)(PD) VEC
|
||||
D35FBB9030C7FF06B63CB1A1A4698B1E D Repulse (1999)(Dondzila, John)(PD) VEC
|
||||
A8BBEC9EDC4EB36F231B4B1FA122B36D D Revector (2004)(Aker, Craig)(PD) VEC
|
||||
625E537EBB7056E1C6F787C502443BD0 D Rockaroids Remix - 3rd Rock (1996)(Dondzila, John)(PD) VEC
|
||||
7C002B3622EDB3B467350A535855A35E D Rockaroids Remix - 3rd Rock (1996)(Dondzila, John)(PD)[a] VEC
|
||||
200EB913CA5BF60011E6690097EE758E D Spike Goes Skiing (1998)(-)(PD) VEC
|
||||
EB37C39B075B1301F0810E52B64BEE05 D Spike Goes Skiing v.03 (1998)(-)(PD) VEC
|
||||
386C706E2B105A05DD9F8DA7E57D5A48 D Spike Hoppin' (1998)(Dondzila, John)(PD) VEC
|
||||
1C67000FC6D48B0DB415571A7B14CD04 D Spike Hoppin' (1998)(Dondzila, John)(PD)[b2] VEC
|
||||
37F63A51BD4192517181748A159867F4 D Spike's Slam Pit (demo) (2001)(Gauze)(PD) VEC
|
||||
3B79DDADE2486F6D87402A4715F8FB44 D Spike's Water Balloons (19xx)(Dondzila, John)(PD)[analog version] VEC
|
||||
DD55837F734A7CBA1B1DA130725BE997 D Star Fire Spirits (1999)(Dondzila, John)(PD) VEC
|
||||
9379D17D67ACC6393184ED8051E4CAA5 D Star Fire Spirits (1999)(Dondzila, John)(PD)[a] VEC
|
||||
8235BDE24CEB057E5145DB73A022B016 D Star Wars Clone (19xx)(Dondzila, John)(PD) VEC
|
||||
03AE3871703F93BF9E8722E73541A44D D Thrust v1.01 (2004)(Krumlinde, Ville)(PD) VEC
|
||||
4E9D8AE167BCE23DEBD127659B4BB7C6 D Tsunami (2001)(Tumber, Christopher)(PD)[a] VEC
|
||||
99E7597D88FA386058D37902A16AAEF4 D Tsunami (2001)(Tumber, Christopher)(PD)[a2] VEC
|
||||
B419FC2DB9911870BBC01AB0A25E9E84 D Tsunami (2002)(Tumber, Christopher)(PD) VEC
|
||||
5D5C5D4CCA7F4789D97910A26E338A6D D VecFLASH - Memory v1.0 (19xx)(Herbert, Alex)(PD) VEC
|
||||
A8B8ADF002E1BFB605940A23D8940438 D Vecsports Boxing (demo) (2000)(Parssinen, Manu)(PD) VEC
|
||||
FD74BE3A06FD561C35A3CB2E7D76C884 D Vecsports Boxing (demo) (2000)(Parssinen, Manu)(PD)[a] VEC
|
||||
57A278EB16965C619067DC706017A33C D VecSports Kingpin Bowling (2002-08-19)(Parssinen, Manu)(PD) VEC
|
||||
D5F7093955B15650CCDEB914332311A0 D VecSports Kingpin Bowling v0.2 (2002)(Parssinen, Manu)(PD) VEC
|
||||
D0D46BBAADC45454CDF5D44562BF77E9 D VecSports Kingpin Bowling v0.3 (2002)(Parssinen, Manu)(PD) VEC
|
||||
7F8CA02A12902F4BF1573E23BBBDAC45 D VecSports Kingpin Bowling v0.4 (2002-08-26)(Parssinen, Manu)(PD) VEC
|
||||
E94AD834FA282A20EEF5C30B1F1ABF72 D Vectopia (2001)(Dondzila, John)(PD) VEC
|
||||
130EE6DB535F805307C3B55CA8B95BD0 D Vector Vaders (1996)(Dondzila, John)(PD) VEC
|
||||
751FBBA8581957FC150B163EA70F3DD2 D Vector Vaders (1996)(Dondzila, John)(PD)[a] VEC
|
||||
24480020A6CFF254863E65B942FD1E33 D Vector Vaders Remix (1999)(Dondzila, John)(PD) VEC
|
||||
C14BBD0463AAB50E98FE1548AB082A0C D Vectrace (2000)(Habot, Ronen)(PD) VEC
|
||||
53345A3091F45247A5B6C1AED69ABA74 D Vectrex Maze (1998)(Salomon, Christopher)(PD) VEC
|
||||
7BE0B5074C6B75C1D8778CABBF262369 D Vectrex Pong (1998)(Salomon, Christopher)(PD) VEC
|
||||
FD6A73340B2683C3DED2BF1A75B36118 D Vectrexians (1999)(Tuts, Kristof)(PD) VEC
|
||||
EBD8B6DFD3D8955209556B07B45243D0 D Verzerk (2002)(Herber, Axel)(PD)[Berzerk hack] VEC
|
||||
659D9DEA05528A9514725B8192EE94FF D V-Frogger (1998)(Salomon, Christopher)(PD) VEC
|
||||
353274EBA86D88382C579C6D9BB745F4 D V-Frogger (1998)(Salomon, Christopher)(PD)[a] VEC
|
||||
66E0DC0B82CB16D25E4DE117F4491686 D V-Frogger (2001)(Salomon, Christopher - Woloch, Kurt)(PD) VEC
|
||||
02862CB8663F2D07EDD6BE27441D56F6 D Vix (2002)(Tumber, Christopher)(PD) VEC
|
||||
E1C86DE28D82E80B23630D74A640BB21 D Vix (2002)(Tumber, Christopher)(PD)[a] VEC
|
||||
440906BD7110C492CB4B874E706CBACE D Vix (2002)(Tumber, Christopher)(PD)[a2] VEC
|
||||
CED45EE7B68A2449E352E07AC46E9B5F D Vix (demo) (2001)(Tumber, Christopher)(PD) VEC
|
||||
D40833D022B01D8A02ED80FDD08F8055 D Wormhole (2001)(Dondzila, John)(PD) VEC
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
;;; Believed Good
|
||||
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
|
||||
00F768E79D6EBFE9BF920FFEC4C5C4F2 3-D Crazy Coaster (1983)(GCE) VEC
|
||||
38B23299A97F26C092916FC66048BFA9 3-D Crazy Coaster (1983)(GCE)[b2] VEC
|
||||
1A81FEA8AC1C1D46DE7B633814130857 3-D Mine Storm (1983)(GCE) VEC
|
||||
F79C596A0205C5E7C427CDBBB1E16918 3-D Narrow Escape (1983)(GCE) VEC
|
||||
42C0106A425B757162AEB17D03999564 3-D Narrow Escape (1983)(GCE)[b2] VEC
|
||||
9131A480A34F6BF169F3B14B40AB206B 3-D Narrow Escape (1983)(GCE)[b3] VEC
|
||||
9657037A461EEE919462EB6A01879685 Armor Attack (1982)(GCE) VEC
|
||||
268E75778F282D853D77ACF42C6C8734 Bedlam (1983)(-) VEC
|
||||
FBA74D9B85AC2E1A8A0535EC19337FBF Bedlam (1983)(GCE)[b2] VEC
|
||||
AB5D85D3FA5B7FA84E9B1B17475D1986 Bedlam (1983)(GCE)[b3] VEC
|
||||
640AE7BD4538BAD11256999DB68DE5A0 Berzerk (1982)(GCE) VEC
|
||||
5D74770BB175357812E61EE7CA731270 Blitz! - Action Football (1982)(MB) VEC
|
||||
92AAB750FD48FAAE2E51BA9F857F6B59 Blitz! - Action Football (1982)(MB)[b2] VEC
|
||||
1C95CF8FCD2C98DB747208ADE464A44F Clean Sweep - Mr. Boston Version (1982)(-) VEC
|
||||
A376D5648E08F348E5965C058C631C6D Clean Sweep (1982)(GCE) VEC
|
||||
9B61653ED9DAFD4CFB7F9D94404259AC Cosmic Chasm (1982)(GCE) VEC
|
||||
DB9929B0AD53C97AFDA065596806BF86 Dark Tower (1983)(GCE)(proto) VEC
|
||||
17D79911050FED4649671B6EE9B4EEC4 Dark Tower (1983)(GCE)(proto)[64k] VEC
|
||||
E65B3262E9447A747D93E0CCB1DBB7DF Fortress of Narzod (1982)(GCE) VEC
|
||||
501DD2845432F10E4B9531240F409B8C Heads Up - Action Soccer (1983)(GCE) VEC
|
||||
7580926EE22F06FD2CCDE4B65184715F Hyperchase (1982)(GCE) VEC
|
||||
F85ECC92900639250BB973AA2672C342 Magic 8 Ball (2001)(Tumber, Christopher) VEC
|
||||
AB082FA8C8E632DD68589A8C7741388F Mine Storm (1982)(GCE) VEC
|
||||
126FECBF4FB09FDB5A3C9AF92ABAED7C Mine Storm II (1983)(GCE) VEC
|
||||
5C5D5EEB71F51A6FDD4FA6C36E4B2801 Narrow Escape 2-D (1983)(GCE) VEC
|
||||
E7BF7DE16B01419A819826CCE3DC25EE Pitcher's Duel (1983)(GCE)(proto) VEC
|
||||
5C1C413E51AA282015807DC60213FD3D Polar Rescue (1983)(GCE) VEC
|
||||
F599DA79B5C324C2A11C117D256A64C0 Polar Rescue (1983)(GCE)[a] VEC
|
||||
F85C521F445C82BF200B5B85B9B1CD60 Pole Position (1983)(GCE) VEC
|
||||
F94173910549038D4D8F329413A5AA54 Pole Position (1983)(GCE)[b2] VEC
|
||||
808E0501990BD01882C102DF00F20064 Rip-Off (1982)(GCE) VEC
|
||||
9C1F13A33415D2F384638F9672056F5E Rounders (demo) (2001-02-24)(Habot, Ronen) VEC
|
||||
95370908561A782EDF138DF41CCB8F18 Scramble (1982)(GCE) VEC
|
||||
11A9BD419CF094DE8CAA8A44D76B69AB Solar Quest (1982)(GCE) VEC
|
||||
05CC087B7C2B6FC544E66E162BF57B49 Space Frenzy (2006)(Dondzila, John) VEC
|
||||
ADF2EA050D510DC409CCD7518F839931 Space Frenzy v1.0 (200x)(Dondzila, John)(beta) VEC
|
||||
2DECDF9F55DF7FB99761B2FE51425E40 Space Wars (1982)(GCE) VEC
|
||||
5A90AB748F7B220EDAF8C1D67E0BFE89 Spike (1983)(GCE) VEC
|
||||
ECC143F87A702AF7A1786B58A78ACE01 Spinball (1983)(GCE) VEC
|
||||
93A9B3386E0B0A906994B6DC7A71B7F4 Spinball (1983)(GCE)[b2] VEC
|
||||
1224C9BEAE22EE7354E4220C46237696 Star Castle (1983)(GCE) VEC
|
||||
ADD42C10019E88F47DD98791F8DE3148 Star Hawk (1982)(GCE) VEC
|
||||
47CEFE6F77DBAFB4475A64FE89DA02C0 Star Ship (1982)(GCE) VEC
|
||||
0B67A6339E9C1D8385E8FDFC48F447BC Star Trek - The Motion Picture (1982)(GCE) VEC
|
||||
529804D1915F576461E04CE8A8598BBB Star Trek - The Motion Picture (1982)(GCE)[a] VEC
|
||||
8CE9091361E0884BCD60409FC3301EDC Tour De France (1983)(GCE)(proto) VEC
|
||||
5A340D9198E13F744DBDF8F8EBA1BBD5 Tsunami (demo) (2001)(Tumber, Christopher) VEC
|
||||
49ECB30E304F499F3A427ADB35DCFAEA Vecsports Boxing (2002)(Parssinen, Manu) VEC
|
||||
BA9260BB961D60E718378CC16A8051D7 Vectrex BIOS (1982)(GCE) VEC
|
||||
A8A04D7C49FBCE59D688917F3A93F7F3 War of the Robots - Bow to the Queen (2003)(Fury Unlimited)(FW) VEC
|
||||
2E1E6AA4270B1EC1C74BB7C00EEAAC1C War of the Robots (2003)(Fury Unlimited)(FW) VEC
|
||||
A3E0F44454D4100B18493F1BD2485D8B Web Warp (1983)(GCE) VEC
|
||||
A398C18B4CE87929471B559B2BC7E79F Web Wars (1983)(GCE) VEC
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,92 +0,0 @@
|
|||
using System;
|
||||
|
||||
namespace BizHawk.Client.ApiHawk
|
||||
{
|
||||
/// <summary>
|
||||
/// This class hold logic interraction for the ExternalToolAttribute
|
||||
/// This attribute helps BizHawk to handle ExternalTools
|
||||
/// </summary>
|
||||
[AttributeUsage(AttributeTargets.Assembly)]
|
||||
public sealed class BizHawkExternalToolAttribute : Attribute
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private string _Name;
|
||||
private string _Description;
|
||||
private string _IconResourceName;
|
||||
|
||||
#endregion
|
||||
|
||||
#region cTor(s)
|
||||
|
||||
/// <summary>
|
||||
/// Initialize a new instance of <see cref="BizHawkExternalToolAttribute"/>
|
||||
/// </summary>
|
||||
/// <param name="name">Tool's name</param>
|
||||
/// <param name="description">Small description about the tool itself</param>
|
||||
/// <param name="iconResourceName">Icon embedded resource name</param>
|
||||
public BizHawkExternalToolAttribute(string name, string description, string iconResourceName)
|
||||
{
|
||||
_Name = name;
|
||||
_Description = description;
|
||||
_IconResourceName = iconResourceName;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initialize a new instance of <see cref="BizHawkExternalToolAttribute"/>
|
||||
/// </summary>
|
||||
/// <param name="name">Tool's name</param>
|
||||
/// <param name="description">Small description about the tool itself</param>
|
||||
public BizHawkExternalToolAttribute(string name, string description)
|
||||
: this(name, description, "")
|
||||
{ }
|
||||
|
||||
/// <summary>
|
||||
/// Initialize a new instance of <see cref="BizHawkExternalToolAttribute"/>
|
||||
/// </summary>
|
||||
/// <param name="name">Tool's name</param>
|
||||
public BizHawkExternalToolAttribute(string name)
|
||||
:this(name, "", "")
|
||||
{}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
/// <summary>
|
||||
/// Gets tool's friendly name
|
||||
/// </summary>
|
||||
public string Name
|
||||
{
|
||||
get
|
||||
{
|
||||
return _Name;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets tool's descriptino
|
||||
/// </summary>
|
||||
public string Description
|
||||
{
|
||||
get
|
||||
{
|
||||
return _Description;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the name of the embedded resource icon
|
||||
/// </summary>
|
||||
/// <remarks>Don't forget to set compile => Embedded reource to the icon file in your project</remarks>
|
||||
public string IconResourceName
|
||||
{
|
||||
get
|
||||
{
|
||||
return _IconResourceName;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
|
@ -1,100 +0,0 @@
|
|||
using System;
|
||||
|
||||
namespace BizHawk.Client.ApiHawk
|
||||
{
|
||||
/// <summary>
|
||||
/// This class hold logic interraction for the BizHawkExternalToolUsageAttribute
|
||||
/// This attribute helps ApiHawk to know how a tool can be enabled or not
|
||||
/// </summary>
|
||||
[AttributeUsage(AttributeTargets.Assembly)]
|
||||
public sealed class BizHawkExternalToolUsageAttribute : Attribute
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private BizHawkExternalToolUsage _ToolUsage;
|
||||
private CoreSystem _System;
|
||||
private string _GameHash;
|
||||
|
||||
#endregion
|
||||
|
||||
#region cTor(s)
|
||||
|
||||
/// <summary>
|
||||
/// Initialize a new instance of <see cref="BizHawkExternalToolUsageAttribute"/>
|
||||
/// </summary>
|
||||
/// <param name="usage"><see cref="BizHawkExternalToolUsage"/> i.e. what your external tool is for</param>
|
||||
/// <param name="system"><see cref="CoreSystem"/> that your external tool is used for</param>
|
||||
/// <param name="gameHash">The game hash, unique game ID (see in the game database)</param>
|
||||
public BizHawkExternalToolUsageAttribute(BizHawkExternalToolUsage usage, CoreSystem system, string gameHash)
|
||||
{
|
||||
if (usage == BizHawkExternalToolUsage.EmulatorSpecific && system == CoreSystem.Null)
|
||||
{
|
||||
throw new InvalidOperationException("A system must be set");
|
||||
}
|
||||
if (usage == BizHawkExternalToolUsage.GameSpecific && gameHash.Trim() == "")
|
||||
{
|
||||
throw new InvalidOperationException("A game hash must be set");
|
||||
}
|
||||
|
||||
_ToolUsage = usage;
|
||||
_System = system;
|
||||
_GameHash = gameHash;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initialize a new instance of <see cref="BizHawkExternalToolUsageAttribute"/>
|
||||
/// </summary>
|
||||
/// <param name="usage"><see cref="BizHawkExternalToolUsage"/> i.e. what your external tool is for</param>
|
||||
/// <param name="system"><see cref="CoreSystem"/> that your external tool is used for</param>
|
||||
public BizHawkExternalToolUsageAttribute(BizHawkExternalToolUsage usage, CoreSystem system)
|
||||
:this(usage, system, "")
|
||||
{}
|
||||
|
||||
/// <summary>
|
||||
/// Initialize a new instance of <see cref="BizHawkExternalToolUsageAttribute"/>
|
||||
/// </summary>
|
||||
public BizHawkExternalToolUsageAttribute()
|
||||
:this(BizHawkExternalToolUsage.Global, CoreSystem.Null, "")
|
||||
{ }
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
/// <summary>
|
||||
/// Gets the specific system used by the exetrnal tool
|
||||
/// </summary>
|
||||
public CoreSystem System
|
||||
{
|
||||
get
|
||||
{
|
||||
return _System;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the specific game (hash) used by the exetrnal tool
|
||||
/// </summary>
|
||||
public string GameHash
|
||||
{
|
||||
get
|
||||
{
|
||||
return _GameHash;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the tool usage
|
||||
/// </summary>
|
||||
public BizHawkExternalToolUsage ToolUsage
|
||||
{
|
||||
get
|
||||
{
|
||||
return _ToolUsage;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
|
@ -1,133 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>..\output\dll\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<!--<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>-->
|
||||
<CodeAnalysisRuleSet Condition=" '$(OS)' == 'Windows_NT' ">MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
|
||||
<OutputPath>..\output\dll\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<DocumentationFile>..\output\dll\BizHawk.Client.ApiHawk.XML</DocumentationFile>
|
||||
<Optimize>true</Optimize>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<!--<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>-->
|
||||
<CodeAnalysisRuleSet Condition=" '$(OS)' == 'Windows_NT' ">MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{8E2F11F2-3955-4382-8C3A-CEBA1276CAEA}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>BizHawk.Client.ApiHawk</RootNamespace>
|
||||
<AssemblyName>BizHawk.Client.ApiHawk</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Data.SQLite, Version=1.0.105.2, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=AMD64">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\Users\uptho\Documents\BizHawk-2.3\dll\System.Data.SQLite.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Attributes\BizHawkExternalToolUsageAttribute.cs" />
|
||||
<Compile Include="Attributes\BizHawkExternalToolAttribute.cs" />
|
||||
<Compile Include="Classes\ApiInjector.cs" />
|
||||
<Compile Include="Classes\Api\EmuApi.cs" />
|
||||
<Compile Include="Classes\Api\GameInfoApi.cs" />
|
||||
<Compile Include="Classes\Api\MemApi.cs" />
|
||||
<Compile Include="Classes\Api\MemApiBase.cs" />
|
||||
<Compile Include="Classes\Api\PluginBase.cs" />
|
||||
<Compile Include="Classes\Api\JoypadApi.cs" />
|
||||
<Compile Include="Classes\Api\MemEventsApi.cs" />
|
||||
<Compile Include="Classes\Api\MemorySaveStateApi.cs" />
|
||||
<Compile Include="Classes\Api\MovieApi.cs" />
|
||||
<Compile Include="Classes\Api\SqlApi.cs" />
|
||||
<Compile Include="Classes\Api\UserDataApi.cs" />
|
||||
<Compile Include="Classes\BasicApiProvider.cs" />
|
||||
<Compile Include="Classes\BizHawkSystemIdToCoreSystemEnumConverter.cs" />
|
||||
<Compile Include="Classes\Events\EventArgs\BeforeQuickLoadEventArgs.cs" />
|
||||
<Compile Include="Classes\Events\EventArgs\BeforeQuickSaveEventArgs.cs" />
|
||||
<Compile Include="Classes\Events\EventArgs\StateSavedEventArgs.cs" />
|
||||
<Compile Include="Classes\Events\EventArgs\StateLoadedEventArgs.cs" />
|
||||
<Compile Include="Classes\Events\EventHandlers\BeforeQuickLoadEventhandler.cs" />
|
||||
<Compile Include="Classes\Events\EventHandlers\BeforeQuickSaveEventhandler.cs" />
|
||||
<Compile Include="Classes\Events\EventHandlers\StateLoadedEventHandler.cs" />
|
||||
<Compile Include="Classes\Events\EventHandlers\StateSavedEventHandler.cs" />
|
||||
<Compile Include="Classes\Joypad.cs" />
|
||||
<Compile Include="Classes\JoypadStringToEnumConverter.cs" />
|
||||
<Compile Include="Enums\BizHawkExternalToolUsage.cs" />
|
||||
<Compile Include="Classes\ClientApi.cs" />
|
||||
<Compile Include="Classes\ExternalToolManager.cs" />
|
||||
<Compile Include="Interfaces\Api\IComm.cs" />
|
||||
<Compile Include="Interfaces\Api\IInput.cs" />
|
||||
<Compile Include="Interfaces\Api\ITool.cs" />
|
||||
<Compile Include="Interfaces\Api\ISaveState.cs" />
|
||||
<Compile Include="Interfaces\Api\IUserData.cs" />
|
||||
<Compile Include="Interfaces\Api\ISql.cs" />
|
||||
<Compile Include="Interfaces\Api\IMovie.cs" />
|
||||
<Compile Include="Interfaces\Api\IMemorySavestate.cs" />
|
||||
<Compile Include="Interfaces\Api\IMemEvents.cs" />
|
||||
<Compile Include="Interfaces\Api\IEmu.cs" />
|
||||
<Compile Include="Interfaces\Api\IExternalApi.cs" />
|
||||
<Compile Include="Interfaces\Api\IJoypad.cs" />
|
||||
<Compile Include="Interfaces\IExternalApiProvider.cs" />
|
||||
<Compile Include="Interfaces\IExternalToolForm.cs" />
|
||||
<Compile Include="Interfaces\Api\IGameInfo.cs" />
|
||||
<Compile Include="Interfaces\Api\IGui.cs" />
|
||||
<Compile Include="Interfaces\Api\IMem.cs" />
|
||||
<Compile Include="Interfaces\IPlugin.cs" />
|
||||
<Compile Include="Interfaces\Api\IApiContainer.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\BizHawk.Client.Common\BizHawk.Client.Common.csproj">
|
||||
<Project>{24a0aa3c-b25f-4197-b23d-476d6462dba0}</Project>
|
||||
<Name>BizHawk.Client.Common</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\BizHawk.Common\BizHawk.Common.csproj">
|
||||
<Project>{866f8d13-0678-4ff9-80a4-a3993fd4d8a3}</Project>
|
||||
<Name>BizHawk.Common</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\BizHawk.Emulation.Common\BizHawk.Emulation.Common.csproj">
|
||||
<Project>{e1a23168-b571-411c-b360-2229e7225e0e}</Project>
|
||||
<Name>BizHawk.Emulation.Common</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\BizHawk.Emulation.Cores\BizHawk.Emulation.Cores.csproj">
|
||||
<Project>{197d4314-8a9f-49ba-977d-54acefaeb6ba}</Project>
|
||||
<Name>BizHawk.Emulation.Cores</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<ItemGroup>
|
||||
<None Include="Resources\ApiClassDiagram.cd" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,2 +0,0 @@
|
|||
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
||||
<s:String x:Key="/Default/CodeInspection/CSharpLanguageProject/LanguageLevel/@EntryValue">CSharp60</s:String></wpf:ResourceDictionary>
|
|
@ -1,459 +0,0 @@
|
|||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using BizHawk.Client.Common;
|
||||
using BizHawk.Emulation.Common;
|
||||
using BizHawk.Emulation.Common.IEmulatorExtensions;
|
||||
using BizHawk.Emulation.Cores.Nintendo.NES;
|
||||
using BizHawk.Emulation.Cores.Nintendo.SNES;
|
||||
using BizHawk.Emulation.Cores.PCEngine;
|
||||
using BizHawk.Emulation.Cores.Consoles.Sega.gpgx;
|
||||
using BizHawk.Emulation.Cores.Sega.MasterSystem;
|
||||
using BizHawk.Emulation.Cores.WonderSwan;
|
||||
using BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES;
|
||||
|
||||
namespace BizHawk.Client.ApiHawk
|
||||
{
|
||||
[Description("A library for interacting with the currently loaded emulator core")]
|
||||
public sealed class EmuApi : IEmu
|
||||
{
|
||||
private static class EmuStatic
|
||||
{
|
||||
public static void DisplayVsync(bool enabled)
|
||||
{
|
||||
Global.Config.VSync = enabled;
|
||||
}
|
||||
public static string GetSystemId()
|
||||
{
|
||||
return Global.Game.System;
|
||||
}
|
||||
public static void LimitFramerate(bool enabled)
|
||||
{
|
||||
Global.Config.ClockThrottle = enabled;
|
||||
}
|
||||
|
||||
public static void MinimizeFrameskip(bool enabled)
|
||||
{
|
||||
Global.Config.AutoMinimizeSkipping = enabled;
|
||||
}
|
||||
|
||||
}
|
||||
[RequiredService]
|
||||
private IEmulator Emulator { get; set; }
|
||||
|
||||
[OptionalService]
|
||||
private IDebuggable DebuggableCore { get; set; }
|
||||
|
||||
[OptionalService]
|
||||
private IDisassemblable DisassemblableCore { get; set; }
|
||||
|
||||
[OptionalService]
|
||||
private IMemoryDomains MemoryDomains { get; set; }
|
||||
|
||||
[OptionalService]
|
||||
private IInputPollable InputPollableCore { get; set; }
|
||||
|
||||
[OptionalService]
|
||||
private IRegionable RegionableCore { get; set; }
|
||||
|
||||
[OptionalService]
|
||||
private IBoardInfo BoardInfo { get; set; }
|
||||
|
||||
public Action FrameAdvanceCallback { get; set; }
|
||||
public Action YieldCallback { get; set; }
|
||||
|
||||
public EmuApi()
|
||||
{ }
|
||||
|
||||
public void DisplayVsync(bool enabled)
|
||||
{
|
||||
EmuStatic.DisplayVsync(enabled);
|
||||
}
|
||||
|
||||
public void FrameAdvance()
|
||||
{
|
||||
FrameAdvanceCallback();
|
||||
}
|
||||
|
||||
public int FrameCount()
|
||||
{
|
||||
return Emulator.Frame;
|
||||
}
|
||||
|
||||
public object Disassemble(uint pc, string name = "")
|
||||
{
|
||||
try
|
||||
{
|
||||
if (DisassemblableCore == null)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
MemoryDomain domain = MemoryDomains.SystemBus;
|
||||
|
||||
if (!string.IsNullOrEmpty(name))
|
||||
{
|
||||
domain = MemoryDomains[name];
|
||||
}
|
||||
|
||||
int l;
|
||||
var d = DisassemblableCore.Disassemble(domain, pc, out l);
|
||||
return new { disasm = d, length = l };
|
||||
}
|
||||
catch (NotImplementedException)
|
||||
{
|
||||
Console.WriteLine($"Error: {Emulator.Attributes().CoreName} does not yet implement disassemble()");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public ulong? GetRegister(string name)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (DebuggableCore == null)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
var registers = DebuggableCore.GetCpuFlagsAndRegisters();
|
||||
ulong? value = null;
|
||||
if (registers.ContainsKey(name)) value = registers[name].Value;
|
||||
return value;
|
||||
}
|
||||
catch (NotImplementedException)
|
||||
{
|
||||
Console.WriteLine($"Error: {Emulator.Attributes().CoreName} does not yet implement getregister()");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public Dictionary<string, ulong> GetRegisters()
|
||||
{
|
||||
var table = new Dictionary<string, ulong>();
|
||||
|
||||
try
|
||||
{
|
||||
if (DebuggableCore == null)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
foreach (var kvp in DebuggableCore.GetCpuFlagsAndRegisters())
|
||||
{
|
||||
table[kvp.Key] = kvp.Value.Value;
|
||||
}
|
||||
}
|
||||
catch (NotImplementedException)
|
||||
{
|
||||
Console.WriteLine($"Error: {Emulator.Attributes().CoreName} does not yet implement getregisters()");
|
||||
}
|
||||
|
||||
return table;
|
||||
}
|
||||
|
||||
public void SetRegister(string register, int value)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (DebuggableCore == null)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
DebuggableCore.SetCpuRegister(register, value);
|
||||
}
|
||||
catch (NotImplementedException)
|
||||
{
|
||||
Console.WriteLine($"Error: {Emulator.Attributes().CoreName} does not yet implement setregister()");
|
||||
}
|
||||
}
|
||||
|
||||
public long TotalExecutedycles()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (DebuggableCore == null)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
return DebuggableCore.TotalExecutedCycles;
|
||||
}
|
||||
catch (NotImplementedException)
|
||||
{
|
||||
Console.WriteLine($"Error: {Emulator.Attributes().CoreName} does not yet implement totalexecutedcycles()");
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public string GetSystemId()
|
||||
{
|
||||
return EmuStatic.GetSystemId();
|
||||
}
|
||||
|
||||
public bool IsLagged()
|
||||
{
|
||||
if (InputPollableCore != null)
|
||||
{
|
||||
return InputPollableCore.IsLagFrame;
|
||||
}
|
||||
|
||||
Console.WriteLine($"Can not get lag information, {Emulator.Attributes().CoreName} does not implement IInputPollable");
|
||||
return false;
|
||||
}
|
||||
|
||||
public void SetIsLagged(bool value = true)
|
||||
{
|
||||
if (InputPollableCore != null)
|
||||
{
|
||||
InputPollableCore.IsLagFrame = value;
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine($"Can not set lag information, {Emulator.Attributes().CoreName} does not implement IInputPollable");
|
||||
}
|
||||
}
|
||||
|
||||
public int LagCount()
|
||||
{
|
||||
if (InputPollableCore != null)
|
||||
{
|
||||
return InputPollableCore.LagCount;
|
||||
}
|
||||
|
||||
Console.WriteLine($"Can not get lag information, {Emulator.Attributes().CoreName} does not implement IInputPollable");
|
||||
return 0;
|
||||
}
|
||||
|
||||
public void SetLagCount(int count)
|
||||
{
|
||||
if (InputPollableCore != null)
|
||||
{
|
||||
InputPollableCore.LagCount = count;
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine($"Can not set lag information, {Emulator.Attributes().CoreName} does not implement IInputPollable");
|
||||
}
|
||||
}
|
||||
|
||||
public void LimitFramerate(bool enabled)
|
||||
{
|
||||
EmuStatic.LimitFramerate(enabled);
|
||||
}
|
||||
|
||||
public void MinimizeFrameskip(bool enabled)
|
||||
{
|
||||
EmuStatic.MinimizeFrameskip(enabled);
|
||||
}
|
||||
|
||||
public void Yield()
|
||||
{
|
||||
YieldCallback();
|
||||
}
|
||||
|
||||
public string GetDisplayType()
|
||||
{
|
||||
if (RegionableCore != null)
|
||||
{
|
||||
return RegionableCore.Region.ToString();
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
public string GetBoardName()
|
||||
{
|
||||
if (BoardInfo != null)
|
||||
{
|
||||
return BoardInfo.BoardName;
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
public object GetSettings()
|
||||
{
|
||||
if (Emulator is GPGX)
|
||||
{
|
||||
var gpgx = Emulator as GPGX;
|
||||
return gpgx.GetSettings();
|
||||
}
|
||||
else if (Emulator is LibsnesCore)
|
||||
{
|
||||
var snes = Emulator as LibsnesCore;
|
||||
return snes.GetSettings();
|
||||
}
|
||||
else if (Emulator is NES)
|
||||
{
|
||||
var nes = Emulator as NES;
|
||||
return nes.GetSettings();
|
||||
}
|
||||
else if (Emulator is QuickNES)
|
||||
{
|
||||
var quicknes = Emulator as QuickNES;
|
||||
return quicknes.GetSettings();
|
||||
}
|
||||
else if (Emulator is PCEngine)
|
||||
{
|
||||
var pce = Emulator as PCEngine;
|
||||
return pce.GetSettings();
|
||||
}
|
||||
else if (Emulator is SMS)
|
||||
{
|
||||
var sms = Emulator as SMS;
|
||||
return sms.GetSettings();
|
||||
}
|
||||
else if (Emulator is WonderSwan)
|
||||
{
|
||||
var ws = Emulator as WonderSwan;
|
||||
return ws.GetSettings();
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
public bool PutSettings(object settings)
|
||||
{
|
||||
if (Emulator is GPGX)
|
||||
{
|
||||
var gpgx = Emulator as GPGX;
|
||||
return gpgx.PutSettings(settings as GPGX.GPGXSettings);
|
||||
}
|
||||
else if (Emulator is LibsnesCore)
|
||||
{
|
||||
var snes = Emulator as LibsnesCore;
|
||||
return snes.PutSettings(settings as LibsnesCore.SnesSettings);
|
||||
}
|
||||
else if (Emulator is NES)
|
||||
{
|
||||
var nes = Emulator as NES;
|
||||
return nes.PutSettings(settings as NES.NESSettings);
|
||||
}
|
||||
else if (Emulator is QuickNES)
|
||||
{
|
||||
var quicknes = Emulator as QuickNES;
|
||||
return quicknes.PutSettings(settings as QuickNES.QuickNESSettings);
|
||||
}
|
||||
else if (Emulator is PCEngine)
|
||||
{
|
||||
var pce = Emulator as PCEngine;
|
||||
return pce.PutSettings(settings as PCEngine.PCESettings);
|
||||
}
|
||||
else if (Emulator is SMS)
|
||||
{
|
||||
var sms = Emulator as SMS;
|
||||
return sms.PutSettings(settings as SMS.SMSSettings);
|
||||
}
|
||||
else if (Emulator is WonderSwan)
|
||||
{
|
||||
var ws = Emulator as WonderSwan;
|
||||
return ws.PutSettings(settings as WonderSwan.Settings);
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
public void SetRenderPlanes(params bool[] luaParam)
|
||||
{
|
||||
if (Emulator is GPGX)
|
||||
{
|
||||
var gpgx = Emulator as GPGX;
|
||||
var s = gpgx.GetSettings();
|
||||
s.DrawBGA = luaParam[0];
|
||||
s.DrawBGB = luaParam[1];
|
||||
s.DrawBGW = luaParam[2];
|
||||
s.DrawObj = luaParam[3];
|
||||
gpgx.PutSettings(s);
|
||||
|
||||
}
|
||||
else if (Emulator is LibsnesCore)
|
||||
{
|
||||
var snes = Emulator as LibsnesCore;
|
||||
var s = snes.GetSettings();
|
||||
s.ShowBG1_0 = s.ShowBG1_1 = luaParam[0];
|
||||
s.ShowBG2_0 = s.ShowBG2_1 = luaParam[1];
|
||||
s.ShowBG3_0 = s.ShowBG3_1 = luaParam[2];
|
||||
s.ShowBG4_0 = s.ShowBG4_1 = luaParam[3];
|
||||
s.ShowOBJ_0 = luaParam[4];
|
||||
s.ShowOBJ_1 = luaParam[5];
|
||||
s.ShowOBJ_2 = luaParam[6];
|
||||
s.ShowOBJ_3 = luaParam[7];
|
||||
snes.PutSettings(s);
|
||||
}
|
||||
else if (Emulator is NES)
|
||||
{
|
||||
// in the future, we could do something more arbitrary here.
|
||||
// but this isn't any worse than the old system
|
||||
var nes = Emulator as NES;
|
||||
var s = nes.GetSettings();
|
||||
s.DispSprites = luaParam[0];
|
||||
s.DispBackground = luaParam[1];
|
||||
nes.PutSettings(s);
|
||||
}
|
||||
else if (Emulator is QuickNES)
|
||||
{
|
||||
var quicknes = Emulator as QuickNES;
|
||||
var s = quicknes.GetSettings();
|
||||
|
||||
// this core doesn't support disabling BG
|
||||
bool showsp = GetSetting(0, luaParam);
|
||||
if (showsp && s.NumSprites == 0)
|
||||
{
|
||||
s.NumSprites = 8;
|
||||
}
|
||||
else if (!showsp && s.NumSprites > 0)
|
||||
{
|
||||
s.NumSprites = 0;
|
||||
}
|
||||
|
||||
quicknes.PutSettings(s);
|
||||
}
|
||||
else if (Emulator is PCEngine)
|
||||
{
|
||||
var pce = Emulator as PCEngine;
|
||||
var s = pce.GetSettings();
|
||||
s.ShowOBJ1 = GetSetting(0, luaParam);
|
||||
s.ShowBG1 = GetSetting(1, luaParam);
|
||||
if (luaParam.Length > 2)
|
||||
{
|
||||
s.ShowOBJ2 = GetSetting(2, luaParam);
|
||||
s.ShowBG2 = GetSetting(3, luaParam);
|
||||
}
|
||||
|
||||
pce.PutSettings(s);
|
||||
}
|
||||
else if (Emulator is SMS)
|
||||
{
|
||||
var sms = Emulator as SMS;
|
||||
var s = sms.GetSettings();
|
||||
s.DispOBJ = GetSetting(0, luaParam);
|
||||
s.DispBG = GetSetting(1, luaParam);
|
||||
sms.PutSettings(s);
|
||||
}
|
||||
else if (Emulator is WonderSwan)
|
||||
{
|
||||
var ws = Emulator as WonderSwan;
|
||||
var s = ws.GetSettings();
|
||||
s.EnableSprites = GetSetting(0, luaParam);
|
||||
s.EnableFG = GetSetting(1, luaParam);
|
||||
s.EnableBG = GetSetting(2, luaParam);
|
||||
ws.PutSettings(s);
|
||||
}
|
||||
}
|
||||
|
||||
private static bool GetSetting(int index, bool[] settings)
|
||||
{
|
||||
if (index < settings.Length)
|
||||
{
|
||||
return settings[index];
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,86 +0,0 @@
|
|||
using System.Collections.Generic;
|
||||
|
||||
using BizHawk.Client.Common;
|
||||
using BizHawk.Emulation.Common;
|
||||
|
||||
namespace BizHawk.Client.ApiHawk
|
||||
{
|
||||
public sealed class GameInfoApi : IGameInfo
|
||||
{
|
||||
[OptionalService]
|
||||
private IBoardInfo BoardInfo { get; set; }
|
||||
|
||||
public GameInfoApi()
|
||||
{ }
|
||||
|
||||
public string GetRomName()
|
||||
{
|
||||
if (Global.Game != null)
|
||||
{
|
||||
return Global.Game.Name ?? "";
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
public string GetRomHash()
|
||||
{
|
||||
if (Global.Game != null)
|
||||
{
|
||||
return Global.Game.Hash ?? "";
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
public bool InDatabase()
|
||||
{
|
||||
if (Global.Game != null)
|
||||
{
|
||||
return !Global.Game.NotInDatabase;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public string GetStatus()
|
||||
{
|
||||
if (Global.Game != null)
|
||||
{
|
||||
return Global.Game.Status.ToString();
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
public bool IsStatusBad()
|
||||
{
|
||||
if (Global.Game != null)
|
||||
{
|
||||
return Global.Game.IsRomStatusBad();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public string GetBoardType()
|
||||
{
|
||||
return BoardInfo?.BoardName ?? "";
|
||||
}
|
||||
|
||||
public Dictionary<string, string> GetOptions()
|
||||
{
|
||||
var options = new Dictionary<string, string>();
|
||||
|
||||
if (Global.Game != null)
|
||||
{
|
||||
foreach (var option in Global.Game.GetOptionsDict())
|
||||
{
|
||||
options[option.Key] = option.Value;
|
||||
}
|
||||
}
|
||||
|
||||
return options;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,222 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using BizHawk.Client.Common;
|
||||
|
||||
namespace BizHawk.Client.ApiHawk
|
||||
{
|
||||
public sealed class JoypadApi : IJoypad
|
||||
{
|
||||
public JoypadApi()
|
||||
{ }
|
||||
|
||||
public Dictionary<string,dynamic> Get(int? controller = null)
|
||||
{
|
||||
var buttons = new Dictionary<string, dynamic>();
|
||||
var adaptor = Global.AutofireStickyXORAdapter;
|
||||
foreach (var button in adaptor.Source.Definition.BoolButtons)
|
||||
{
|
||||
if (!controller.HasValue)
|
||||
{
|
||||
buttons[button] = adaptor.IsPressed(button);
|
||||
}
|
||||
else if (button.Length >= 3 && button.Substring(0, 2) == "P" + controller)
|
||||
{
|
||||
buttons[button.Substring(3)] = adaptor.IsPressed("P" + controller + " " + button.Substring(3));
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var button in adaptor.Source.Definition.FloatControls)
|
||||
{
|
||||
if (controller == null)
|
||||
{
|
||||
buttons[button] = adaptor.GetFloat(button);
|
||||
}
|
||||
else if (button.Length >= 3 && button.Substring(0, 2) == "P" + controller)
|
||||
{
|
||||
buttons[button.Substring(3)] = adaptor.GetFloat("P" + controller + " " + button.Substring(3));
|
||||
}
|
||||
}
|
||||
|
||||
buttons["clear"] = null;
|
||||
buttons["getluafunctionslist"] = null;
|
||||
buttons["output"] = null;
|
||||
|
||||
return buttons;
|
||||
}
|
||||
|
||||
// TODO: what about float controls?
|
||||
public Dictionary<string, dynamic> GetImmediate()
|
||||
{
|
||||
var buttons = new Dictionary<string, dynamic>();
|
||||
var adaptor = Global.ActiveController;
|
||||
foreach (var button in adaptor.Definition.BoolButtons)
|
||||
{
|
||||
buttons[button] = adaptor.IsPressed(button);
|
||||
}
|
||||
foreach (var button in adaptor.Definition.FloatControls)
|
||||
{
|
||||
buttons[button] = adaptor.GetFloat(button);
|
||||
}
|
||||
|
||||
return buttons;
|
||||
}
|
||||
|
||||
public void SetFromMnemonicStr(string inputLogEntry)
|
||||
{
|
||||
try
|
||||
{
|
||||
var lg = Global.MovieSession.MovieControllerInstance();
|
||||
lg.SetControllersAsMnemonic(inputLogEntry);
|
||||
|
||||
foreach (var button in lg.Definition.BoolButtons)
|
||||
{
|
||||
Global.LuaAndAdaptor.SetButton(button, lg.IsPressed(button));
|
||||
}
|
||||
|
||||
foreach (var floatButton in lg.Definition.FloatControls)
|
||||
{
|
||||
Global.LuaAndAdaptor.SetFloat(floatButton, lg.GetFloat(floatButton));
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
Console.WriteLine("invalid mnemonic string: " + inputLogEntry);
|
||||
}
|
||||
}
|
||||
|
||||
public void Set(Dictionary<string,bool> buttons, int? controller = null)
|
||||
{
|
||||
try
|
||||
{
|
||||
foreach (var button in buttons.Keys)
|
||||
{
|
||||
var invert = false;
|
||||
bool? theValue;
|
||||
var theValueStr = buttons[button].ToString();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(theValueStr))
|
||||
{
|
||||
if (theValueStr.ToLower() == "false")
|
||||
{
|
||||
theValue = false;
|
||||
}
|
||||
else if (theValueStr.ToLower() == "true")
|
||||
{
|
||||
theValue = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
invert = true;
|
||||
theValue = null;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
theValue = null;
|
||||
}
|
||||
|
||||
var toPress = button.ToString();
|
||||
if (controller.HasValue)
|
||||
{
|
||||
toPress = "P" + controller + " " + button;
|
||||
}
|
||||
|
||||
if (!invert)
|
||||
{
|
||||
if (theValue.HasValue) // Force
|
||||
{
|
||||
Global.LuaAndAdaptor.SetButton(toPress, theValue.Value);
|
||||
Global.ActiveController.Overrides(Global.LuaAndAdaptor);
|
||||
}
|
||||
else // Unset
|
||||
{
|
||||
Global.LuaAndAdaptor.UnSet(toPress);
|
||||
Global.ActiveController.Overrides(Global.LuaAndAdaptor);
|
||||
}
|
||||
}
|
||||
else // Inverse
|
||||
{
|
||||
Global.LuaAndAdaptor.SetInverse(toPress);
|
||||
Global.ActiveController.Overrides(Global.LuaAndAdaptor);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
/*Eat it*/
|
||||
}
|
||||
}
|
||||
public void Set(string button, bool? state = null, int? controller = null)
|
||||
{
|
||||
try
|
||||
{
|
||||
var toPress = button;
|
||||
if (controller.HasValue)
|
||||
{
|
||||
toPress = "P" + controller + " " + button;
|
||||
}
|
||||
if (state.HasValue)
|
||||
Global.LuaAndAdaptor.SetButton(toPress, state.Value);
|
||||
else
|
||||
Global.LuaAndAdaptor.UnSet(toPress);
|
||||
Global.ActiveController.Overrides(Global.LuaAndAdaptor);
|
||||
}
|
||||
catch
|
||||
{
|
||||
/*Eat it*/
|
||||
}
|
||||
}
|
||||
public void SetAnalog(Dictionary<string,float> controls, object controller = null)
|
||||
{
|
||||
try
|
||||
{
|
||||
foreach (var name in controls.Keys)
|
||||
{
|
||||
var theValueStr = controls[name].ToString();
|
||||
float? theValue = null;
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(theValueStr))
|
||||
{
|
||||
float f;
|
||||
if (float.TryParse(theValueStr, out f))
|
||||
{
|
||||
theValue = f;
|
||||
}
|
||||
}
|
||||
|
||||
if (controller == null)
|
||||
{
|
||||
Global.StickyXORAdapter.SetFloat(name.ToString(), theValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
Global.StickyXORAdapter.SetFloat("P" + controller + " " + name, theValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
/*Eat it*/
|
||||
}
|
||||
}
|
||||
public void SetAnalog(string control, float? value = null, object controller = null)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (controller == null)
|
||||
{
|
||||
Global.StickyXORAdapter.SetFloat(control, value);
|
||||
}
|
||||
else
|
||||
{
|
||||
Global.StickyXORAdapter.SetFloat("P" + controller + " " + control, value);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
/*Eat it*/
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,288 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using BizHawk.Emulation.Common;
|
||||
using BizHawk.Emulation.Common.IEmulatorExtensions;
|
||||
using BizHawk.Common.BufferExtensions;
|
||||
|
||||
namespace BizHawk.Client.ApiHawk
|
||||
{
|
||||
public sealed class MemApi : MemApiBase, IMem
|
||||
{
|
||||
private MemoryDomain _currentMemoryDomain;
|
||||
private bool _isBigEndian = false;
|
||||
public MemApi()
|
||||
: base()
|
||||
{
|
||||
}
|
||||
|
||||
protected override MemoryDomain Domain
|
||||
{
|
||||
get
|
||||
{
|
||||
if (MemoryDomainCore != null)
|
||||
{
|
||||
if (_currentMemoryDomain == null)
|
||||
{
|
||||
_currentMemoryDomain = MemoryDomainCore.HasSystemBus
|
||||
? MemoryDomainCore.SystemBus
|
||||
: MemoryDomainCore.MainMemory;
|
||||
}
|
||||
|
||||
return _currentMemoryDomain;
|
||||
}
|
||||
|
||||
var error = $"Error: {Emulator.Attributes().CoreName} does not implement memory domains";
|
||||
Console.WriteLine(error);
|
||||
throw new NotImplementedException(error);
|
||||
}
|
||||
}
|
||||
|
||||
#region Unique Library Methods
|
||||
|
||||
public void SetBigEndian(bool enabled = true)
|
||||
{
|
||||
_isBigEndian = enabled;
|
||||
}
|
||||
|
||||
public List<string> GetMemoryDomainList()
|
||||
{
|
||||
var list = new List<string>();
|
||||
|
||||
foreach (var domain in DomainList)
|
||||
{
|
||||
list.Add(domain.Name);
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
public uint GetMemoryDomainSize(string name = "")
|
||||
{
|
||||
if (string.IsNullOrEmpty(name))
|
||||
{
|
||||
return (uint)Domain.Size;
|
||||
}
|
||||
|
||||
return (uint)DomainList[VerifyMemoryDomain(name)].Size;
|
||||
}
|
||||
|
||||
public string GetCurrentMemoryDomain()
|
||||
{
|
||||
return Domain.Name;
|
||||
}
|
||||
|
||||
public uint GetCurrentMemoryDomainSize()
|
||||
{
|
||||
return (uint)Domain.Size;
|
||||
}
|
||||
|
||||
public bool UseMemoryDomain(string domain)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (DomainList[domain] != null)
|
||||
{
|
||||
_currentMemoryDomain = DomainList[domain];
|
||||
return true;
|
||||
}
|
||||
|
||||
Console.WriteLine($"Unable to find domain: {domain}");
|
||||
return false;
|
||||
}
|
||||
catch // Just in case
|
||||
{
|
||||
Console.WriteLine($"Unable to find domain: {domain}");
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public string HashRegion(long addr, int count, string domain = null)
|
||||
{
|
||||
var d = string.IsNullOrEmpty(domain) ? Domain : DomainList[VerifyMemoryDomain(domain)];
|
||||
|
||||
// checks
|
||||
if (addr < 0 || addr >= d.Size)
|
||||
{
|
||||
string error = $"Address {addr} is outside the bounds of domain {d.Name}";
|
||||
Console.WriteLine(error);
|
||||
throw new ArgumentOutOfRangeException(error);
|
||||
}
|
||||
if (addr + count > d.Size)
|
||||
{
|
||||
string error = $"Address {addr} + count {count} is outside the bounds of domain {d.Name}";
|
||||
Console.WriteLine(error);
|
||||
throw new ArgumentOutOfRangeException(error);
|
||||
}
|
||||
|
||||
byte[] data = new byte[count];
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
data[i] = d.PeekByte(addr + i);
|
||||
}
|
||||
|
||||
using (var hasher = System.Security.Cryptography.SHA256.Create())
|
||||
{
|
||||
return hasher.ComputeHash(data).BytesToHexString();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Endian Handling
|
||||
|
||||
private int ReadSigned(long addr, int size, string domain = null)
|
||||
{
|
||||
if (_isBigEndian) return ReadSignedBig(addr, size, domain);
|
||||
else return ReadSignedLittle(addr, size, domain);
|
||||
}
|
||||
|
||||
private uint ReadUnsigned(long addr, int size, string domain = null)
|
||||
{
|
||||
if (_isBigEndian) return ReadUnsignedBig(addr, size, domain);
|
||||
else return ReadUnsignedLittle(addr, size, domain);
|
||||
}
|
||||
|
||||
private void WriteSigned(long addr, int value, int size, string domain = null)
|
||||
{
|
||||
if (_isBigEndian) WriteSignedBig(addr, value, size, domain);
|
||||
else WriteSignedLittle(addr, value, size, domain);
|
||||
}
|
||||
|
||||
private void WriteUnsigned(long addr, uint value, int size, string domain = null)
|
||||
{
|
||||
if (_isBigEndian) WriteUnsignedBig(addr, value, size, domain);
|
||||
else WriteUnsignedLittle(addr, value, size, domain);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Common Special and Legacy Methods
|
||||
|
||||
public uint ReadByte(long addr, string domain = null)
|
||||
{
|
||||
return ReadUnsignedByte(addr, domain);
|
||||
}
|
||||
|
||||
public void WriteByte(long addr, uint value, string domain = null)
|
||||
{
|
||||
WriteUnsignedByte(addr, value, domain);
|
||||
}
|
||||
|
||||
public new List<byte> ReadByteRange(long addr, int length, string domain = null)
|
||||
{
|
||||
return base.ReadByteRange(addr, length, domain);
|
||||
}
|
||||
|
||||
public new void WriteByteRange(long addr, List<byte> memoryblock, string domain = null)
|
||||
{
|
||||
base.WriteByteRange(addr, memoryblock, domain);
|
||||
}
|
||||
|
||||
public float ReadFloat(long addr, string domain = null)
|
||||
{
|
||||
return base.ReadFloat(addr, _isBigEndian, domain);
|
||||
}
|
||||
|
||||
public void WriteFloat(long addr, double value, string domain = null)
|
||||
{
|
||||
base.WriteFloat(addr, value, _isBigEndian, domain);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 1 Byte
|
||||
|
||||
public int ReadS8(long addr, string domain = null)
|
||||
{
|
||||
return (sbyte)ReadUnsignedByte(addr, domain);
|
||||
}
|
||||
|
||||
public uint ReadU8(long addr, string domain = null)
|
||||
{
|
||||
return (byte)ReadUnsignedByte(addr, domain);
|
||||
}
|
||||
|
||||
public void WriteS8(long addr, int value, string domain = null)
|
||||
{
|
||||
WriteSigned(addr, value, 1, domain);
|
||||
}
|
||||
|
||||
public void WriteU8(long addr, uint value, string domain = null)
|
||||
{
|
||||
WriteUnsignedByte(addr, value, domain);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 2 Byte
|
||||
public int ReadS16(long addr, string domain = null)
|
||||
{
|
||||
return (short)ReadSigned(addr, 2, domain);
|
||||
}
|
||||
|
||||
public void WriteS16(long addr, int value, string domain = null)
|
||||
{
|
||||
WriteSigned(addr, value, 2, domain);
|
||||
}
|
||||
|
||||
public uint ReadU16(long addr, string domain = null)
|
||||
{
|
||||
return (ushort)ReadUnsigned(addr, 2, domain);
|
||||
}
|
||||
|
||||
public void WriteU16(long addr, uint value, string domain = null)
|
||||
{
|
||||
WriteUnsigned(addr, value, 2, domain);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 3 Byte
|
||||
|
||||
public int ReadS24(long addr, string domain = null)
|
||||
{
|
||||
return ReadSigned(addr, 3, domain);
|
||||
}
|
||||
public void WriteS24(long addr, int value, string domain = null)
|
||||
{
|
||||
WriteSigned(addr, value, 3, domain);
|
||||
}
|
||||
|
||||
public uint ReadU24(long addr, string domain = null)
|
||||
{
|
||||
return ReadUnsigned(addr, 3, domain);
|
||||
}
|
||||
|
||||
public void WriteU24(long addr, uint value, string domain = null)
|
||||
{
|
||||
WriteUnsigned(addr, value, 3, domain);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 4 Byte
|
||||
|
||||
public int ReadS32(long addr, string domain = null)
|
||||
{
|
||||
return ReadSigned(addr, 4, domain);
|
||||
}
|
||||
|
||||
public void WriteS32(long addr, int value, string domain = null)
|
||||
{
|
||||
WriteSigned(addr, value, 4, domain);
|
||||
}
|
||||
|
||||
public uint ReadU32(long addr, string domain = null)
|
||||
{
|
||||
return ReadUnsigned(addr, 4, domain);
|
||||
}
|
||||
|
||||
public void WriteU32(long addr, uint value, string domain = null)
|
||||
{
|
||||
WriteUnsigned(addr, value, 4, domain);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
|
@ -1,240 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using BizHawk.Emulation.Common;
|
||||
using BizHawk.Emulation.Common.IEmulatorExtensions;
|
||||
|
||||
namespace BizHawk.Client.ApiHawk
|
||||
{
|
||||
/// <summary>
|
||||
/// Base class for the Memory and MainMemory plugin libraries
|
||||
/// </summary>
|
||||
public abstract class MemApiBase : IExternalApi
|
||||
{
|
||||
[RequiredService]
|
||||
protected IEmulator Emulator { get; set; }
|
||||
|
||||
[OptionalService]
|
||||
protected IMemoryDomains MemoryDomainCore { get; set; }
|
||||
|
||||
protected abstract MemoryDomain Domain { get; }
|
||||
|
||||
protected MemApiBase()
|
||||
{ }
|
||||
|
||||
protected IMemoryDomains DomainList
|
||||
{
|
||||
get
|
||||
{
|
||||
if (MemoryDomainCore != null)
|
||||
{
|
||||
return MemoryDomainCore;
|
||||
}
|
||||
|
||||
var error = $"Error: {Emulator.Attributes().CoreName} does not implement memory domains";
|
||||
Console.WriteLine(error);
|
||||
throw new NotImplementedException(error);
|
||||
}
|
||||
}
|
||||
|
||||
public string VerifyMemoryDomain(string domain)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (DomainList[domain] == null)
|
||||
{
|
||||
Console.WriteLine($"Unable to find domain: {domain}, falling back to current");
|
||||
return Domain.Name;
|
||||
}
|
||||
|
||||
return domain;
|
||||
}
|
||||
catch // Just in case
|
||||
{
|
||||
Console.WriteLine($"Unable to find domain: {domain}, falling back to current");
|
||||
}
|
||||
|
||||
return Domain.Name;
|
||||
}
|
||||
|
||||
protected uint ReadUnsignedByte(long addr, string domain = null)
|
||||
{
|
||||
var d = string.IsNullOrEmpty(domain) ? Domain : DomainList[VerifyMemoryDomain(domain)];
|
||||
if (addr < d.Size)
|
||||
{
|
||||
return d.PeekByte(addr);
|
||||
}
|
||||
|
||||
Console.WriteLine("Warning: attempted read of " + addr + " outside the memory size of " + d.Size);
|
||||
return 0;
|
||||
}
|
||||
|
||||
protected void WriteUnsignedByte(long addr, uint v, string domain = null)
|
||||
{
|
||||
var d = string.IsNullOrEmpty(domain) ? Domain : DomainList[VerifyMemoryDomain(domain)];
|
||||
if (d.CanPoke())
|
||||
{
|
||||
if (addr < d.Size)
|
||||
{
|
||||
d.PokeByte(addr, (byte)v);
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Warning: attempted write to " + addr + " outside the memory size of " + d.Size);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine($"Error: the domain {d.Name} is not writable");
|
||||
}
|
||||
}
|
||||
|
||||
protected static int U2S(uint u, int size)
|
||||
{
|
||||
var s = (int)u;
|
||||
s <<= 8 * (4 - size);
|
||||
s >>= 8 * (4 - size);
|
||||
return s;
|
||||
}
|
||||
|
||||
protected int ReadSignedLittle(long addr, int size, string domain = null)
|
||||
{
|
||||
return U2S(ReadUnsignedLittle(addr, size, domain), size);
|
||||
}
|
||||
|
||||
protected uint ReadUnsignedLittle(long addr, int size, string domain = null)
|
||||
{
|
||||
uint v = 0;
|
||||
for (var i = 0; i < size; ++i)
|
||||
{
|
||||
v |= ReadUnsignedByte(addr + i, domain) << (8 * i);
|
||||
}
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
protected int ReadSignedBig(long addr, int size, string domain = null)
|
||||
{
|
||||
return U2S(ReadUnsignedBig(addr, size, domain), size);
|
||||
}
|
||||
|
||||
protected uint ReadUnsignedBig(long addr, int size, string domain = null)
|
||||
{
|
||||
uint v = 0;
|
||||
for (var i = 0; i < size; ++i)
|
||||
{
|
||||
v |= ReadUnsignedByte(addr + i, domain) << (8 * (size - 1 - i));
|
||||
}
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
protected void WriteSignedLittle(long addr, int v, int size, string domain = null)
|
||||
{
|
||||
WriteUnsignedLittle(addr, (uint)v, size, domain);
|
||||
}
|
||||
|
||||
protected void WriteUnsignedLittle(long addr, uint v, int size, string domain = null)
|
||||
{
|
||||
for (var i = 0; i < size; ++i)
|
||||
{
|
||||
WriteUnsignedByte(addr + i, (v >> (8 * i)) & 0xFF, domain);
|
||||
}
|
||||
}
|
||||
|
||||
protected void WriteSignedBig(long addr, int v, int size, string domain = null)
|
||||
{
|
||||
WriteUnsignedBig(addr, (uint)v, size, domain);
|
||||
}
|
||||
|
||||
protected void WriteUnsignedBig(long addr, uint v, int size, string domain = null)
|
||||
{
|
||||
for (var i = 0; i < size; ++i)
|
||||
{
|
||||
WriteUnsignedByte(addr + i, (v >> (8 * (size - 1 - i))) & 0xFF, domain);
|
||||
}
|
||||
}
|
||||
|
||||
#region public Library implementations
|
||||
|
||||
protected List<byte> ReadByteRange(long addr, int length, string domain = null)
|
||||
{
|
||||
var d = string.IsNullOrEmpty(domain) ? Domain : DomainList[VerifyMemoryDomain(domain)];
|
||||
var lastAddr = length + addr;
|
||||
var list = new List<byte>();
|
||||
for (; addr <= lastAddr; addr++)
|
||||
{
|
||||
if (addr < d.Size)
|
||||
list.Add(d.PeekByte(addr));
|
||||
else {
|
||||
Console.WriteLine("Warning: Attempted read " + addr + " outside memory domain size of " + d.Size + " in readbyterange()");
|
||||
list.Add(0);
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
protected void WriteByteRange(long addr, List<byte> memoryblock, string domain = null)
|
||||
{
|
||||
var d = string.IsNullOrEmpty(domain) ? Domain : DomainList[VerifyMemoryDomain(domain)];
|
||||
if (d.CanPoke())
|
||||
{
|
||||
for (var i = 0; i < memoryblock.Count; i++)
|
||||
{
|
||||
if (addr < d.Size)
|
||||
{
|
||||
d.PokeByte(addr++, memoryblock[i]);
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Warning: Attempted write " + addr + " outside memory domain size of " + d.Size + " in writebyterange()");
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine($"Error: the domain {d.Name} is not writable");
|
||||
}
|
||||
}
|
||||
|
||||
protected float ReadFloat(long addr, bool bigendian, string domain = null)
|
||||
{
|
||||
var d = string.IsNullOrEmpty(domain) ? Domain : DomainList[VerifyMemoryDomain(domain)];
|
||||
if (addr < d.Size)
|
||||
{
|
||||
var val = d.PeekUint(addr, bigendian);
|
||||
var bytes = BitConverter.GetBytes(val);
|
||||
return BitConverter.ToSingle(bytes, 0);
|
||||
}
|
||||
|
||||
Console.WriteLine("Warning: Attempted read " + addr + " outside memory size of " + d.Size);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
protected void WriteFloat(long addr, double value, bool bigendian, string domain = null)
|
||||
{
|
||||
var d = string.IsNullOrEmpty(domain) ? Domain : DomainList[VerifyMemoryDomain(domain)];
|
||||
if (d.CanPoke())
|
||||
{
|
||||
if (addr < d.Size)
|
||||
{
|
||||
var dv = (float)value;
|
||||
var bytes = BitConverter.GetBytes(dv);
|
||||
var v = BitConverter.ToUInt32(bytes, 0);
|
||||
d.PokeUint(addr, v, bigendian);
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Warning: Attempted write " + addr + " outside memory size of " + d.Size);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine($"Error: the domain {Domain.Name} is not writable");
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
|
@ -1,45 +0,0 @@
|
|||
using System;
|
||||
|
||||
using BizHawk.Emulation.Common;
|
||||
using BizHawk.Emulation.Common.IEmulatorExtensions;
|
||||
|
||||
namespace BizHawk.Client.ApiHawk
|
||||
{
|
||||
public sealed class MemEventsApi : IMemEvents
|
||||
{
|
||||
[RequiredService]
|
||||
private IDebuggable DebuggableCore { get; set; }
|
||||
|
||||
public MemEventsApi () : base()
|
||||
{ }
|
||||
|
||||
public void AddReadCallback(Action cb, uint address, string domain)
|
||||
{
|
||||
if (DebuggableCore.MemoryCallbacksAvailable())
|
||||
{
|
||||
DebuggableCore.MemoryCallbacks.Add(new MemoryCallback(domain, MemoryCallbackType.Read, "Plugin Hook", cb, address, null));
|
||||
}
|
||||
}
|
||||
public void AddWriteCallback(Action cb, uint address, string domain)
|
||||
{
|
||||
if (DebuggableCore.MemoryCallbacksAvailable())
|
||||
{
|
||||
DebuggableCore.MemoryCallbacks.Add(new MemoryCallback(domain, MemoryCallbackType.Write, "Plugin Hook", cb, address, null));
|
||||
}
|
||||
}
|
||||
public void AddExecCallback(Action cb, uint address, string domain)
|
||||
{
|
||||
if (DebuggableCore.MemoryCallbacksAvailable() && DebuggableCore.MemoryCallbacks.ExecuteCallbacksAvailable)
|
||||
{
|
||||
DebuggableCore.MemoryCallbacks.Add(new MemoryCallback(domain, MemoryCallbackType.Execute, "Plugin Hook", cb, address, null));
|
||||
}
|
||||
}
|
||||
public void RemoveMemoryCallback(Action cb)
|
||||
{
|
||||
if (DebuggableCore.MemoryCallbacksAvailable())
|
||||
{
|
||||
DebuggableCore.MemoryCallbacks.Remove(cb);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,60 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
using BizHawk.Emulation.Common;
|
||||
|
||||
namespace BizHawk.Client.ApiHawk
|
||||
{
|
||||
public sealed class MemorySaveStateApi : IMemorySaveState
|
||||
{
|
||||
public MemorySaveStateApi()
|
||||
{ }
|
||||
|
||||
[RequiredService]
|
||||
private IStatable StatableCore { get; set; }
|
||||
|
||||
private readonly Dictionary<Guid, byte[]> _memorySavestates = new Dictionary<Guid, byte[]>();
|
||||
|
||||
public string SaveCoreStateToMemory()
|
||||
{
|
||||
var guid = Guid.NewGuid();
|
||||
var bytes = (byte[])StatableCore.SaveStateBinary().Clone();
|
||||
|
||||
_memorySavestates.Add(guid, bytes);
|
||||
|
||||
return guid.ToString();
|
||||
}
|
||||
|
||||
public void LoadCoreStateFromMemory(string identifier)
|
||||
{
|
||||
var guid = new Guid(identifier);
|
||||
|
||||
try
|
||||
{
|
||||
var state = _memorySavestates[guid];
|
||||
|
||||
using (var ms = new MemoryStream(state))
|
||||
using (var br = new BinaryReader(ms))
|
||||
{
|
||||
StatableCore.LoadStateBinary(br);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
Console.WriteLine("Unable to find the given savestate in memory");
|
||||
}
|
||||
}
|
||||
|
||||
public void DeleteState(string identifier)
|
||||
{
|
||||
var guid = new Guid(identifier);
|
||||
_memorySavestates.Remove(guid);
|
||||
}
|
||||
|
||||
public void ClearInMemoryStates()
|
||||
{
|
||||
_memorySavestates.Clear();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,288 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
using BizHawk.Client.Common;
|
||||
|
||||
namespace BizHawk.Client.ApiHawk
|
||||
{
|
||||
public sealed class MovieApi : IMovie
|
||||
{
|
||||
private static class MoviePluginStatic
|
||||
{
|
||||
public static string Filename()
|
||||
{
|
||||
return Global.MovieSession.Movie.Filename;
|
||||
}
|
||||
|
||||
public static bool GetReadOnly()
|
||||
{
|
||||
return Global.MovieSession.ReadOnly;
|
||||
}
|
||||
|
||||
public static ulong GetRerecordCount()
|
||||
{
|
||||
return Global.MovieSession.Movie.Rerecords;
|
||||
}
|
||||
|
||||
public static bool GetRerecordCounting()
|
||||
{
|
||||
return Global.MovieSession.Movie.IsCountingRerecords;
|
||||
}
|
||||
|
||||
public static bool IsLoaded()
|
||||
{
|
||||
return Global.MovieSession.Movie.IsActive;
|
||||
}
|
||||
|
||||
public static double Length()
|
||||
{
|
||||
return Global.MovieSession.Movie.FrameCount;
|
||||
}
|
||||
|
||||
public static string Mode()
|
||||
{
|
||||
if (Global.MovieSession.Movie.IsFinished)
|
||||
{
|
||||
return "FINISHED";
|
||||
}
|
||||
|
||||
if (Global.MovieSession.Movie.IsPlaying)
|
||||
{
|
||||
return "PLAY";
|
||||
}
|
||||
|
||||
if (Global.MovieSession.Movie.IsRecording)
|
||||
{
|
||||
return "RECORD";
|
||||
}
|
||||
|
||||
return "INACTIVE";
|
||||
}
|
||||
|
||||
public static void SetReadOnly(bool readOnly)
|
||||
{
|
||||
Global.MovieSession.ReadOnly = readOnly;
|
||||
}
|
||||
|
||||
public static void SetRerecordCount(double count)
|
||||
{
|
||||
// Lua numbers are always double, integer precision holds up
|
||||
// to 53 bits, so throw an error if it's bigger than that.
|
||||
const double PrecisionLimit = 9007199254740992d;
|
||||
|
||||
if (count > PrecisionLimit)
|
||||
{
|
||||
throw new Exception("Rerecord count exceeds Lua integer precision.");
|
||||
}
|
||||
|
||||
Global.MovieSession.Movie.Rerecords = (ulong)count;
|
||||
}
|
||||
|
||||
public static void SetRerecordCounting(bool counting)
|
||||
{
|
||||
Global.MovieSession.Movie.IsCountingRerecords = counting;
|
||||
}
|
||||
|
||||
public static void Stop()
|
||||
{
|
||||
Global.MovieSession.Movie.Stop();
|
||||
}
|
||||
|
||||
public static double GetFps()
|
||||
{
|
||||
if (Global.MovieSession.Movie.IsActive)
|
||||
{
|
||||
var movie = Global.MovieSession.Movie;
|
||||
var system = movie.HeaderEntries[HeaderKeys.PLATFORM];
|
||||
var pal = movie.HeaderEntries.ContainsKey(HeaderKeys.PAL) &&
|
||||
movie.HeaderEntries[HeaderKeys.PAL] == "1";
|
||||
|
||||
return new PlatformFrameRates()[system, pal];
|
||||
}
|
||||
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
}
|
||||
public MovieApi()
|
||||
{ }
|
||||
|
||||
public bool StartsFromSavestate()
|
||||
{
|
||||
return Global.MovieSession.Movie.IsActive && Global.MovieSession.Movie.StartsFromSavestate;
|
||||
}
|
||||
|
||||
public bool StartsFromSaveram()
|
||||
{
|
||||
return Global.MovieSession.Movie.IsActive && Global.MovieSession.Movie.StartsFromSaveRam;
|
||||
}
|
||||
|
||||
public Dictionary<string, dynamic> GetInput(int frame)
|
||||
{
|
||||
if (!Global.MovieSession.Movie.IsActive)
|
||||
{
|
||||
Console.WriteLine("No movie loaded");
|
||||
return null;
|
||||
}
|
||||
|
||||
var input = new Dictionary<string, dynamic>();
|
||||
var adapter = Global.MovieSession.Movie.GetInputState(frame);
|
||||
|
||||
if (adapter == null)
|
||||
{
|
||||
Console.WriteLine("Can't get input of the last frame of the movie. Use the previous frame");
|
||||
return null;
|
||||
}
|
||||
|
||||
foreach (var button in adapter.Definition.BoolButtons)
|
||||
{
|
||||
input[button] = adapter.IsPressed(button);
|
||||
}
|
||||
|
||||
foreach (var button in adapter.Definition.FloatControls)
|
||||
{
|
||||
input[button] = adapter.GetFloat(button);
|
||||
}
|
||||
|
||||
return input;
|
||||
}
|
||||
|
||||
public string GetInputAsMnemonic(int frame)
|
||||
{
|
||||
if (Global.MovieSession.Movie.IsActive && frame < Global.MovieSession.Movie.InputLogLength)
|
||||
{
|
||||
var lg = Global.MovieSession.LogGeneratorInstance();
|
||||
lg.SetSource(Global.MovieSession.Movie.GetInputState(frame));
|
||||
return lg.GenerateLogEntry();
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
public void Save(string filename = "")
|
||||
{
|
||||
if (!Global.MovieSession.Movie.IsActive)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(filename))
|
||||
{
|
||||
filename += "." + Global.MovieSession.Movie.PreferredExtension;
|
||||
var test = new FileInfo(filename);
|
||||
if (test.Exists)
|
||||
{
|
||||
Console.WriteLine($"File {filename} already exists, will not overwrite");
|
||||
return;
|
||||
}
|
||||
|
||||
Global.MovieSession.Movie.Filename = filename;
|
||||
}
|
||||
|
||||
Global.MovieSession.Movie.Save();
|
||||
}
|
||||
|
||||
public Dictionary<string,string> GetHeader()
|
||||
{
|
||||
var table = new Dictionary<string,string>();
|
||||
if (Global.MovieSession.Movie.IsActive)
|
||||
{
|
||||
foreach (var kvp in Global.MovieSession.Movie.HeaderEntries)
|
||||
{
|
||||
table[kvp.Key] = kvp.Value;
|
||||
}
|
||||
}
|
||||
|
||||
return table;
|
||||
}
|
||||
|
||||
public List<string> GetComments()
|
||||
{
|
||||
var list = new List<string>(Global.MovieSession.Movie.Comments.Count);
|
||||
if (Global.MovieSession.Movie.IsActive)
|
||||
{
|
||||
for (int i = 0; i < Global.MovieSession.Movie.Comments.Count; i++)
|
||||
{
|
||||
list[i] = Global.MovieSession.Movie.Comments[i];
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
public List<string> GetSubtitles()
|
||||
{
|
||||
var list = new List<string>(Global.MovieSession.Movie.Subtitles.Count);
|
||||
if (Global.MovieSession.Movie.IsActive)
|
||||
{
|
||||
for (int i = 0; i < Global.MovieSession.Movie.Subtitles.Count; i++)
|
||||
{
|
||||
list[i] = Global.MovieSession.Movie.Subtitles[i].ToString();
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
public string Filename()
|
||||
{
|
||||
return MoviePluginStatic.Filename();
|
||||
}
|
||||
|
||||
public bool GetReadOnly()
|
||||
{
|
||||
return MoviePluginStatic.GetReadOnly();
|
||||
}
|
||||
|
||||
public ulong GetRerecordCount()
|
||||
{
|
||||
return MoviePluginStatic.GetRerecordCount();
|
||||
}
|
||||
|
||||
public bool GetRerecordCounting()
|
||||
{
|
||||
return MoviePluginStatic.GetRerecordCounting();
|
||||
}
|
||||
|
||||
public bool IsLoaded()
|
||||
{
|
||||
return MoviePluginStatic.IsLoaded();
|
||||
}
|
||||
|
||||
public double Length()
|
||||
{
|
||||
return MoviePluginStatic.Length();
|
||||
}
|
||||
|
||||
public string Mode()
|
||||
{
|
||||
return MoviePluginStatic.Mode();
|
||||
}
|
||||
|
||||
public void SetReadOnly(bool readOnly)
|
||||
{
|
||||
MoviePluginStatic.SetReadOnly(readOnly);
|
||||
}
|
||||
|
||||
public void SetRerecordCount(double count)
|
||||
{
|
||||
MoviePluginStatic.SetRerecordCount(count);
|
||||
}
|
||||
|
||||
public void SetRerecordCounting(bool counting)
|
||||
{
|
||||
MoviePluginStatic.SetRerecordCounting(counting);
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
MoviePluginStatic.Stop();
|
||||
}
|
||||
|
||||
public double GetFps()
|
||||
{
|
||||
return MoviePluginStatic.GetFps();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,50 +0,0 @@
|
|||
using BizHawk.Emulation.Common;
|
||||
|
||||
namespace BizHawk.Client.ApiHawk
|
||||
{
|
||||
public abstract class PluginBase : IPlugin
|
||||
{
|
||||
/// <summary>
|
||||
/// The base class from which all
|
||||
/// plugins will be derived
|
||||
///
|
||||
/// Actual plugins should implement
|
||||
/// one of the below callback methods
|
||||
/// or register memory callbacks in
|
||||
/// their Init function.
|
||||
/// </summary>
|
||||
protected IApiContainer _api;
|
||||
|
||||
public PluginBase() { }
|
||||
|
||||
public abstract string Name { get; }
|
||||
public abstract string Description { get; }
|
||||
|
||||
public bool Enabled => Running;
|
||||
public bool Paused => !Running;
|
||||
|
||||
public bool Running { get; set; }
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
Running = false;
|
||||
}
|
||||
|
||||
public void Toggle()
|
||||
{
|
||||
Running = !Running;
|
||||
}
|
||||
|
||||
public virtual void PreFrameCallback() { }
|
||||
public virtual void PostFrameCallback() { }
|
||||
public virtual void SaveStateCallback(string name) { }
|
||||
public virtual void LoadStateCallback(string name) { }
|
||||
public virtual void InputPollCallback() { }
|
||||
public virtual void ExitCallback() { }
|
||||
public virtual void Init (IApiContainer api)
|
||||
{
|
||||
_api = api;
|
||||
Running = true;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,129 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data.SQLite;
|
||||
|
||||
namespace BizHawk.Client.ApiHawk
|
||||
{
|
||||
public sealed class SqlApi : ISql
|
||||
{
|
||||
public SqlApi() : base()
|
||||
{ }
|
||||
|
||||
SQLiteConnection m_dbConnection;
|
||||
string connectionString;
|
||||
|
||||
public string CreateDatabase(string name)
|
||||
{
|
||||
try
|
||||
{
|
||||
SQLiteConnection.CreateFile(name);
|
||||
return "Database Created Successfully";
|
||||
}
|
||||
catch (SQLiteException sqlEX)
|
||||
{
|
||||
return sqlEX.Message;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public string OpenDatabase(string name)
|
||||
{
|
||||
try
|
||||
{
|
||||
SQLiteConnectionStringBuilder connBuilder = new SQLiteConnectionStringBuilder();
|
||||
connBuilder.DataSource = name;
|
||||
connBuilder.Version = 3; //SQLite version
|
||||
connBuilder.JournalMode = SQLiteJournalModeEnum.Wal; //Allows for reads and writes to happen at the same time
|
||||
connBuilder.DefaultIsolationLevel = System.Data.IsolationLevel.ReadCommitted; //This only helps make the database lock left. May be pointless now
|
||||
connBuilder.SyncMode = SynchronizationModes.Off; //This shortens the delay for do synchronous calls.
|
||||
m_dbConnection = new SQLiteConnection(connBuilder.ToString());
|
||||
connectionString = connBuilder.ToString();
|
||||
m_dbConnection.Open();
|
||||
m_dbConnection.Close();
|
||||
return "Database Opened Successfully";
|
||||
}
|
||||
catch (SQLiteException sqlEX)
|
||||
{
|
||||
return sqlEX.Message;
|
||||
}
|
||||
}
|
||||
|
||||
public string WriteCommand(string query = "")
|
||||
{
|
||||
if (query == "")
|
||||
{
|
||||
return "query is empty";
|
||||
}
|
||||
try
|
||||
{
|
||||
m_dbConnection.Open();
|
||||
string sql = query;
|
||||
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
|
||||
command.ExecuteNonQuery();
|
||||
m_dbConnection.Close();
|
||||
|
||||
return "Command ran successfully";
|
||||
|
||||
}
|
||||
catch (NullReferenceException nullEX)
|
||||
{
|
||||
return "Database not open.";
|
||||
}
|
||||
catch (SQLiteException sqlEX)
|
||||
{
|
||||
m_dbConnection.Close();
|
||||
return sqlEX.Message;
|
||||
}
|
||||
}
|
||||
|
||||
public dynamic ReadCommand(string query = "")
|
||||
{
|
||||
if (query == "")
|
||||
{
|
||||
return "query is empty";
|
||||
}
|
||||
try
|
||||
{
|
||||
var table = new Dictionary<string, object>();
|
||||
m_dbConnection.Open();
|
||||
string sql = "PRAGMA read_uncommitted =1;" + query;
|
||||
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
|
||||
SQLiteDataReader reader = command.ExecuteReader();
|
||||
bool rows = reader.HasRows;
|
||||
long rowCount = 0;
|
||||
var columns = new List<string>();
|
||||
for (int i = 0; i < reader.FieldCount; ++i) //Add all column names into list
|
||||
{
|
||||
columns.Add(reader.GetName(i));
|
||||
}
|
||||
while (reader.Read())
|
||||
{
|
||||
for (int i = 0; i < reader.FieldCount; ++i)
|
||||
{
|
||||
table[columns[i] + " " + rowCount.ToString()] = reader.GetValue(i);
|
||||
}
|
||||
rowCount += 1;
|
||||
}
|
||||
reader.Close();
|
||||
m_dbConnection.Close();
|
||||
if (rows == false)
|
||||
{
|
||||
return "No rows found";
|
||||
}
|
||||
|
||||
return table;
|
||||
|
||||
}
|
||||
catch (NullReferenceException)
|
||||
{
|
||||
return "Database not opened.";
|
||||
}
|
||||
catch (SQLiteException sqlEX)
|
||||
{
|
||||
m_dbConnection.Close();
|
||||
return sqlEX.Message;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,52 +0,0 @@
|
|||
using System;
|
||||
using System.ComponentModel;
|
||||
|
||||
using BizHawk.Client.Common;
|
||||
|
||||
namespace BizHawk.Client.ApiHawk
|
||||
{
|
||||
public sealed class UserDataApi : IUserData
|
||||
{
|
||||
public UserDataApi() : base()
|
||||
{ }
|
||||
|
||||
public void Set(string name, object value)
|
||||
{
|
||||
if (value != null)
|
||||
{
|
||||
var t = value.GetType();
|
||||
if (!t.IsPrimitive && t != typeof(string))
|
||||
{
|
||||
throw new InvalidOperationException("Invalid type for userdata");
|
||||
}
|
||||
}
|
||||
|
||||
Global.UserBag[name] = value;
|
||||
}
|
||||
|
||||
public object Get(string key)
|
||||
{
|
||||
if (Global.UserBag.ContainsKey(key))
|
||||
{
|
||||
return Global.UserBag[key];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public void Clear()
|
||||
{
|
||||
Global.UserBag.Clear();
|
||||
}
|
||||
|
||||
public bool Remove(string key)
|
||||
{
|
||||
return Global.UserBag.Remove(key);
|
||||
}
|
||||
|
||||
public bool ContainsKey(string key)
|
||||
{
|
||||
return Global.UserBag.ContainsKey(key);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,83 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace BizHawk.Client.ApiHawk
|
||||
{
|
||||
/// <summary>
|
||||
/// A generic implementation of IExternalApi provider that provides
|
||||
/// this functionality to any core.
|
||||
/// The provider will scan an IExternal and register all IExternalApis
|
||||
/// that the core object itself implements. In addition it provides
|
||||
/// a Register() method to allow the core to pass in any additional Apis
|
||||
/// </summary>
|
||||
/// <seealso cref="IExternalApiProvider"/>
|
||||
public class BasicApiProvider : IExternalApiProvider
|
||||
{
|
||||
private readonly Dictionary<Type, IExternalApi> _Apis = new Dictionary<Type, IExternalApi>();
|
||||
|
||||
public BasicApiProvider(IApiContainer container)
|
||||
{
|
||||
// simplified logic here doesn't scan for possible Apis; just adds what it knows is implemented by the PluginApi
|
||||
// this removes the possibility of automagically picking up a Api in a nested class, (find the type, then
|
||||
// find the field), but we're going to keep such logic out of the basic provider. Anything the passed
|
||||
// container doesn't implement directly needs to be added with Register()
|
||||
// this also fully allows apis that are not IExternalApi
|
||||
var libs = container.Libraries;
|
||||
|
||||
_Apis = libs;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// the client can call this to register an additional Api
|
||||
/// </summary>
|
||||
/// <typeparam name="T">The <seealso cref="IExternalApi"/> to register</typeparam>
|
||||
public void Register<T>(T api)
|
||||
where T : IExternalApi
|
||||
{
|
||||
if (api == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(api));
|
||||
}
|
||||
|
||||
_Apis[typeof(T)] = api;
|
||||
}
|
||||
|
||||
public T GetApi<T>()
|
||||
where T : IExternalApi
|
||||
{
|
||||
return (T)GetApi(typeof(T));
|
||||
}
|
||||
|
||||
public object GetApi(Type t)
|
||||
{
|
||||
IExternalApi Api;
|
||||
KeyValuePair<Type, IExternalApi>[] k = _Apis.Where(kvp => t.IsAssignableFrom(kvp.Key)).ToArray();
|
||||
if (k.Length > 0)
|
||||
{
|
||||
return k[0].Value;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public bool HasApi<T>()
|
||||
where T : IExternalApi
|
||||
{
|
||||
return HasApi(typeof(T));
|
||||
}
|
||||
|
||||
public bool HasApi(Type t)
|
||||
{
|
||||
return _Apis.ContainsKey(t);
|
||||
}
|
||||
|
||||
public IEnumerable<Type> AvailableApis
|
||||
{
|
||||
get
|
||||
{
|
||||
return _Apis.Select(d => d.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,237 +0,0 @@
|
|||
using System;
|
||||
using System.Globalization;
|
||||
|
||||
namespace BizHawk.Client.ApiHawk
|
||||
{
|
||||
/// <summary>
|
||||
/// This class holds a converter for BizHawk SystemId (which is a simple <see cref="string"/>
|
||||
/// It allows you to convert it to a <see cref="CoreSystem"/> value and vice versa
|
||||
/// </summary>
|
||||
/// <remarks>I made it this way just in case one day we need it for WPF (DependencyProperty binding). Just uncomment :IValueConverter implementation
|
||||
/// I didn't implemented it because of mono compatibility
|
||||
/// </remarks>
|
||||
public sealed class BizHawkSystemIdToEnumConverter //:IValueConverter
|
||||
{
|
||||
/// <summary>
|
||||
/// Convert BizHawk SystemId <see cref="string"/> to <see cref="CoreSystem"/> value
|
||||
/// </summary>
|
||||
/// <param name="value"><see cref="string"/> you want to convert</param>
|
||||
/// <param name="targetType">The type of the binding target property</param>
|
||||
/// <param name="parameter">The converter parameter to use; null in our case</param>
|
||||
/// <param name="cultureInfo">The culture to use in the converter</param>
|
||||
/// <returns>A <see cref="CoreSystem"/> that is equivalent to BizHawk SystemId <see cref="string"/></returns>
|
||||
/// <exception cref="IndexOutOfRangeException">Thrown when SystemId hasn't been found</exception>
|
||||
public object Convert(object value, Type targetType, object parameter, CultureInfo cultureInfo)
|
||||
{
|
||||
switch ((string)value)
|
||||
{
|
||||
case "AppleII":
|
||||
return CoreSystem.AppleII;
|
||||
|
||||
case "A26":
|
||||
return CoreSystem.Atari2600;
|
||||
|
||||
case "A78":
|
||||
return CoreSystem.Atari7800;
|
||||
|
||||
case "Coleco":
|
||||
return CoreSystem.ColecoVision;
|
||||
|
||||
case "C64":
|
||||
return CoreSystem.Commodore64;
|
||||
|
||||
case "DGB":
|
||||
return CoreSystem.DualGameBoy;
|
||||
|
||||
case "GB":
|
||||
return CoreSystem.GameBoy;
|
||||
|
||||
case "GBA":
|
||||
return CoreSystem.GameBoyAdvance;
|
||||
|
||||
case "GEN":
|
||||
return CoreSystem.Genesis;
|
||||
|
||||
case "INTV":
|
||||
return CoreSystem.Intellivision;
|
||||
|
||||
case "Libretro":
|
||||
return CoreSystem.Libretro;
|
||||
|
||||
case "Lynx":
|
||||
return CoreSystem.Lynx;
|
||||
|
||||
case "SMS":
|
||||
return CoreSystem.MasterSystem;
|
||||
|
||||
case "NES":
|
||||
return CoreSystem.NES;
|
||||
|
||||
case "N64":
|
||||
return CoreSystem.Nintendo64;
|
||||
|
||||
case "NULL":
|
||||
return CoreSystem.Null;
|
||||
|
||||
case "PCE":
|
||||
case "PCECD":
|
||||
case "SGX":
|
||||
return CoreSystem.PCEngine;
|
||||
|
||||
case "PSX":
|
||||
return CoreSystem.Playstation;
|
||||
|
||||
case "PSP":
|
||||
return CoreSystem.PSP;
|
||||
|
||||
case "SAT":
|
||||
return CoreSystem.Saturn;
|
||||
|
||||
case "SNES":
|
||||
return CoreSystem.SNES;
|
||||
|
||||
case "TI83":
|
||||
return CoreSystem.TI83;
|
||||
|
||||
case "WSWAN":
|
||||
return CoreSystem.WonderSwan;
|
||||
|
||||
case "ZXSpectrum":
|
||||
return CoreSystem.ZXSpectrum;
|
||||
|
||||
case "AmstradCPC":
|
||||
return CoreSystem.AmstradCPC;
|
||||
|
||||
case "VB":
|
||||
case "NGP":
|
||||
case "DNGP":
|
||||
case "O2":
|
||||
case "SGB":
|
||||
case "UZE":
|
||||
case "PCFX":
|
||||
return 0; // like I give a shit
|
||||
|
||||
default:
|
||||
throw new IndexOutOfRangeException(string.Format("{0} is missing in convert list", value));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Convert BizHawk SystemId <see cref="string"/> to <see cref="CoreSystem"/> value
|
||||
/// </summary>
|
||||
/// <param name="value"><see cref="string"/> you want to convert</param>
|
||||
/// <returns>A <see cref="CoreSystem"/> that is equivalent to BizHawk SystemId <see cref="string"/></returns>
|
||||
/// <exception cref="IndexOutOfRangeException">Thrown when SystemId hasn't been found</exception>
|
||||
public CoreSystem Convert(string value)
|
||||
{
|
||||
return (CoreSystem)Convert(value, null, null, CultureInfo.CurrentCulture);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Convert a <see cref="CoreSystem"/> value to BizHawk SystemId <see cref="string"/>
|
||||
/// </summary>
|
||||
/// <param name="value"><see cref="CoreSystem"/> you want to convert</param>
|
||||
/// <param name="targetType">The type of the binding target property</param>
|
||||
/// <param name="parameter">The converter parameter to use; null in our case</param>
|
||||
/// <param name="cultureInfo">The culture to use in the converter</param>
|
||||
/// <returns>A <see cref="string"/> that is used by BizHawk SystemId</returns>
|
||||
/// <exception cref="IndexOutOfRangeException">Thrown when <see cref="CoreSystem"/> hasn't been found</exception>
|
||||
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo cultureInfo)
|
||||
{
|
||||
switch ((CoreSystem)value)
|
||||
{
|
||||
case CoreSystem.AppleII:
|
||||
return "AppleII";
|
||||
|
||||
case CoreSystem.Atari2600:
|
||||
return "A26";
|
||||
|
||||
case CoreSystem.Atari7800:
|
||||
return "A78";
|
||||
|
||||
case CoreSystem.ColecoVision:
|
||||
return "Coleco";
|
||||
|
||||
case CoreSystem.Commodore64:
|
||||
return "C64";
|
||||
|
||||
case CoreSystem.DualGameBoy:
|
||||
return "DGB";
|
||||
|
||||
case CoreSystem.GameBoy:
|
||||
return "GB";
|
||||
|
||||
case CoreSystem.GameBoyAdvance:
|
||||
return "GBA";
|
||||
|
||||
case CoreSystem.Genesis:
|
||||
return "GEN";
|
||||
|
||||
case CoreSystem.Intellivision:
|
||||
return "INTV";
|
||||
|
||||
case CoreSystem.Libretro:
|
||||
return "Libretro";
|
||||
|
||||
case CoreSystem.Lynx:
|
||||
return "Lynx";
|
||||
|
||||
case CoreSystem.MasterSystem:
|
||||
return "SMS";
|
||||
|
||||
case CoreSystem.NES:
|
||||
return "NES";
|
||||
|
||||
case CoreSystem.Nintendo64:
|
||||
return "N64";
|
||||
|
||||
case CoreSystem.Null:
|
||||
return "NULL";
|
||||
|
||||
case CoreSystem.PCEngine:
|
||||
return "PCE";
|
||||
|
||||
case CoreSystem.Playstation:
|
||||
return "PSX";
|
||||
|
||||
case CoreSystem.PSP:
|
||||
return "PSP";
|
||||
|
||||
case CoreSystem.Saturn:
|
||||
return "SAT";
|
||||
|
||||
case CoreSystem.SNES:
|
||||
return "SNES";
|
||||
|
||||
case CoreSystem.TI83:
|
||||
return "TI83";
|
||||
|
||||
case CoreSystem.WonderSwan:
|
||||
return "WSWAN";
|
||||
|
||||
case CoreSystem.ZXSpectrum:
|
||||
return "ZXSpectrum";
|
||||
|
||||
case CoreSystem.AmstradCPC:
|
||||
return "AmstradCPC";
|
||||
|
||||
default:
|
||||
throw new IndexOutOfRangeException(string.Format("{0} is missing in convert list", value.ToString()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Convert a <see cref="CoreSystem"/> value to BizHawk SystemId <see cref="string"/>
|
||||
/// </summary>
|
||||
/// <param name="value"><see cref="CoreSystem"/> you want to convert</param>
|
||||
/// <returns>A <see cref="string"/> that is used by BizHawk SystemId</returns>
|
||||
/// <exception cref="IndexOutOfRangeException">Thrown when <see cref="CoreSystem"/> hasn't been found</exception>
|
||||
public string ConvertBack(CoreSystem value)
|
||||
{
|
||||
return (string)ConvertBack(value, null, null, CultureInfo.CurrentCulture);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,787 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using BizHawk.Client.Common;
|
||||
using BizHawk.Emulation.Common;
|
||||
using BizHawk.Emulation.Cores.Nintendo.Gameboy;
|
||||
using BizHawk.Emulation.Cores.PCEngine;
|
||||
using BizHawk.Emulation.Cores.Sega.MasterSystem;
|
||||
using BizHawk.Client.ApiHawk.Classes.Events;
|
||||
using System.IO;
|
||||
|
||||
namespace BizHawk.Client.ApiHawk
|
||||
{
|
||||
/// <summary>
|
||||
/// This class contains some methods that
|
||||
/// interract with BizHawk client
|
||||
/// </summary>
|
||||
public static class ClientApi
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private static IEmulator Emulator;
|
||||
private static IVideoProvider VideoProvider;
|
||||
|
||||
private static readonly Assembly clientAssembly;
|
||||
private static readonly object clientMainFormInstance;
|
||||
private static readonly Type mainFormClass;
|
||||
private static readonly Array joypadButtonsArray = Enum.GetValues(typeof(JoypadButton));
|
||||
|
||||
internal static readonly BizHawkSystemIdToEnumConverter SystemIdConverter = new BizHawkSystemIdToEnumConverter();
|
||||
internal static readonly JoypadStringToEnumConverter JoypadConverter = new JoypadStringToEnumConverter();
|
||||
|
||||
private static List<Joypad> allJoypads;
|
||||
|
||||
/// <summary>
|
||||
/// Occurs before a quickload is done (just after user has pressed the shortcut button
|
||||
/// or has click on the item menu)
|
||||
/// </summary>
|
||||
public static event BeforeQuickLoadEventHandler BeforeQuickLoad;
|
||||
/// <summary>
|
||||
/// Occurs before a quicksave is done (just after user has pressed the shortcut button
|
||||
/// or has click on the item menu)
|
||||
/// </summary>
|
||||
public static event BeforeQuickSaveEventHandler BeforeQuickSave;
|
||||
/// <summary>
|
||||
/// Occurs when a ROM is succesfully loaded
|
||||
/// </summary>
|
||||
public static event EventHandler RomLoaded;
|
||||
/// <summary>
|
||||
/// Occurs when a savestate is sucessfully loaded
|
||||
/// </summary>
|
||||
public static event StateLoadedEventHandler StateLoaded;
|
||||
/// <summary>
|
||||
/// Occurs when a savestate is successfully saved
|
||||
/// </summary>
|
||||
public static event StateSavedEventHandler StateSaved;
|
||||
|
||||
#endregion
|
||||
|
||||
#region cTor(s)
|
||||
|
||||
/// <summary>
|
||||
/// Static stuff initilization
|
||||
/// </summary>
|
||||
static ClientApi()
|
||||
{
|
||||
clientAssembly = Assembly.GetEntryAssembly();
|
||||
clientMainFormInstance = clientAssembly.GetType("BizHawk.Client.EmuHawk.GlobalWin").GetField("MainForm").GetValue(null);
|
||||
mainFormClass = clientAssembly.GetType("BizHawk.Client.EmuHawk.MainForm");
|
||||
}
|
||||
|
||||
public static void UpdateEmulatorAndVP(IEmulator emu = null)
|
||||
{
|
||||
Emulator = emu;
|
||||
VideoProvider = Emulation.Common.IEmulatorExtensions.Extensions.AsVideoProviderOrDefault(emu);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
#region Helpers
|
||||
|
||||
private static void InvokeMainFormMethod(string name, dynamic[] paramList = null)
|
||||
{
|
||||
List<Type> typeList = new List<Type>();
|
||||
MethodInfo method;
|
||||
if (paramList != null)
|
||||
{
|
||||
foreach (var obj in paramList)
|
||||
{
|
||||
typeList.Add(obj.GetType());
|
||||
}
|
||||
method = mainFormClass.GetMethod(name, typeList.ToArray());
|
||||
}
|
||||
else method = mainFormClass.GetMethod(name);
|
||||
method.Invoke(clientMainFormInstance, paramList);
|
||||
}
|
||||
|
||||
private static object GetMainFormField(string name)
|
||||
{
|
||||
return mainFormClass.GetField(name);
|
||||
}
|
||||
|
||||
private static void SetMainFormField(string name, object value)
|
||||
{
|
||||
mainFormClass.GetField(name).SetValue(clientMainFormInstance, value);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Public
|
||||
/// <summary>
|
||||
/// THE FrameAdvance stuff
|
||||
/// </summary>
|
||||
public static void DoFrameAdvance()
|
||||
{
|
||||
InvokeMainFormMethod("FrameAdvance", null);
|
||||
|
||||
InvokeMainFormMethod("StepRunLoop_Throttle", null);
|
||||
|
||||
InvokeMainFormMethod("Render", null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// THE FrameAdvance stuff
|
||||
/// Auto unpause emulation
|
||||
/// </summary>
|
||||
public static void DoFrameAdvanceAndUnpause()
|
||||
{
|
||||
DoFrameAdvance();
|
||||
UnpauseEmulation();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a <see cref="Joypad"/> for specified player
|
||||
/// </summary>
|
||||
/// <param name="player">Player (one based) you want current inputs</param>
|
||||
/// <returns>A <see cref="Joypad"/> populated with current inputs</returns>
|
||||
/// <exception cref="IndexOutOfRangeException">Raised when you specify a player less than 1 or greater than maximum allows (see SystemInfo class to get this information)</exception>
|
||||
public static Joypad GetInput(int player)
|
||||
{
|
||||
if (player < 1 || player > RunningSystem.MaxControllers)
|
||||
{
|
||||
throw new IndexOutOfRangeException(string.Format("{0} does not support {1} controller(s)", RunningSystem.DisplayName, player));
|
||||
}
|
||||
else
|
||||
{
|
||||
GetAllInputs();
|
||||
return allJoypads[player - 1];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Load a savestate specified by its name
|
||||
/// </summary>
|
||||
/// <param name="name">Savetate friendly name</param>
|
||||
public static void LoadState(string name)
|
||||
{
|
||||
InvokeMainFormMethod("LoadState", new object[] { Path.Combine(PathManager.GetSaveStatePath(Global.Game), string.Format("{0}.{1}", name, "State")), name, false, false });
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Raised before a quickload is done (just after pressing shortcut button)
|
||||
/// </summary>
|
||||
/// <param name="sender">Object who raised the event</param>
|
||||
/// <param name="quickSaveSlotName">Slot used for quickload</param>
|
||||
/// <param name="eventHandled">A boolean that can be set if users want to handle save themselves; if so, BizHawk won't do anything</param>
|
||||
public static void OnBeforeQuickLoad(object sender, string quickSaveSlotName, out bool eventHandled)
|
||||
{
|
||||
eventHandled = false;
|
||||
if (BeforeQuickLoad != null)
|
||||
{
|
||||
BeforeQuickLoadEventArgs e = new BeforeQuickLoadEventArgs(quickSaveSlotName);
|
||||
BeforeQuickLoad(sender, e);
|
||||
eventHandled = e.Handled;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Raised before a quicksave is done (just after pressing shortcut button)
|
||||
/// </summary>
|
||||
/// <param name="sender">Object who raised the event</param>
|
||||
/// <param name="quickSaveSlotName">Slot used for quicksave</param>
|
||||
/// <param name="eventHandled">A boolean that can be set if users want to handle save themselves; if so, BizHawk won't do anything</param>
|
||||
public static void OnBeforeQuickSave(object sender, string quickSaveSlotName, out bool eventHandled)
|
||||
{
|
||||
eventHandled = false;
|
||||
if (BeforeQuickSave != null)
|
||||
{
|
||||
BeforeQuickSaveEventArgs e = new BeforeQuickSaveEventArgs(quickSaveSlotName);
|
||||
BeforeQuickSave(sender, e);
|
||||
eventHandled = e.Handled;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Raise when a state is loaded
|
||||
/// </summary>
|
||||
/// <param name="sender">Object who raised the event</param>
|
||||
/// <param name="stateName">User friendly name for saved state</param>
|
||||
public static void OnStateLoaded(object sender, string stateName)
|
||||
{
|
||||
if (StateLoaded != null)
|
||||
{
|
||||
StateLoaded(sender, new StateLoadedEventArgs(stateName));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Raise when a state is saved
|
||||
/// </summary>
|
||||
/// <param name="sender">Object who raised the event</param>
|
||||
/// <param name="stateName">User friendly name for saved state</param>
|
||||
public static void OnStateSaved(object sender, string stateName)
|
||||
{
|
||||
if (StateSaved != null)
|
||||
{
|
||||
StateSaved(sender, new StateSavedEventArgs(stateName));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Raise when a rom is successfully Loaded
|
||||
/// </summary>
|
||||
public static void OnRomLoaded(IEmulator emu)
|
||||
{
|
||||
Emulator = emu;
|
||||
VideoProvider = Emulation.Common.IEmulatorExtensions.Extensions.AsVideoProviderOrDefault(emu);
|
||||
RomLoaded?.Invoke(null, EventArgs.Empty);
|
||||
|
||||
allJoypads = new List<Joypad>(RunningSystem.MaxControllers);
|
||||
for (int i = 1; i <= RunningSystem.MaxControllers; i++)
|
||||
{
|
||||
allJoypads.Add(new Joypad(RunningSystem, i));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Save a state with specified name
|
||||
/// </summary>
|
||||
/// <param name="name">Savetate friendly name</param>
|
||||
public static void SaveState(string name)
|
||||
{
|
||||
InvokeMainFormMethod("SaveState", new object[] { Path.Combine(PathManager.GetSaveStatePath(Global.Game), string.Format("{0}.{1}", name, "State")), name, false });
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the extra padding added to the 'native' surface so that you can draw HUD elements in predictable placements
|
||||
/// </summary>
|
||||
/// <param name="left">Left padding</param>
|
||||
/// <param name="top">Top padding</param>
|
||||
/// <param name="right">Right padding</param>
|
||||
/// <param name="bottom">Bottom padding</param>
|
||||
public static void SetGameExtraPadding(int left, int top, int right, int bottom)
|
||||
{
|
||||
FieldInfo f = clientAssembly.GetType("BizHawk.Client.EmuHawk.GlobalWin").GetField("DisplayManager");
|
||||
object displayManager = f.GetValue(null);
|
||||
f = f.FieldType.GetField("GameExtraPadding");
|
||||
f.SetValue(displayManager, new Padding(left, top, right, bottom));
|
||||
|
||||
InvokeMainFormMethod("FrameBufferResized");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the extra padding added to the 'native' surface so that you can draw HUD elements in predictable placements
|
||||
/// </summary>
|
||||
/// <param name="left">Left padding</param>
|
||||
public static void SetGameExtraPadding(int left)
|
||||
{
|
||||
SetGameExtraPadding(left, 0, 0, 0);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the extra padding added to the 'native' surface so that you can draw HUD elements in predictable placements
|
||||
/// </summary>
|
||||
/// <param name="left">Left padding</param>
|
||||
/// <param name="top">Top padding</param>
|
||||
public static void SetGameExtraPadding(int left, int top)
|
||||
{
|
||||
SetGameExtraPadding(left, top, 0, 0);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the extra padding added to the 'native' surface so that you can draw HUD elements in predictable placements
|
||||
/// </summary>
|
||||
/// <param name="left">Left padding</param>
|
||||
/// <param name="top">Top padding</param>
|
||||
/// <param name="right">Right padding</param>
|
||||
public static void SetGameExtraPadding(int left, int top, int right)
|
||||
{
|
||||
SetGameExtraPadding(left, top, right, 0);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the extra padding added to the 'native' surface so that you can draw HUD elements in predictable placements
|
||||
/// </summary>
|
||||
/// <param name="left">Left padding</param>
|
||||
/// <param name="top">Top padding</param>
|
||||
/// <param name="right">Right padding</param>
|
||||
/// <param name="bottom">Bottom padding</param>
|
||||
public static void SetExtraPadding(int left, int top, int right, int bottom)
|
||||
{
|
||||
FieldInfo f = clientAssembly.GetType("BizHawk.Client.EmuHawk.GlobalWin").GetField("DisplayManager");
|
||||
object displayManager = f.GetValue(null);
|
||||
f = f.FieldType.GetField("ClientExtraPadding");
|
||||
f.SetValue(displayManager, new Padding(left, top, right, bottom));
|
||||
|
||||
InvokeMainFormMethod("FrameBufferResized");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the extra padding added to the 'native' surface so that you can draw HUD elements in predictable placements
|
||||
/// </summary>
|
||||
/// <param name="left">Left padding</param>
|
||||
public static void SetExtraPadding(int left)
|
||||
{
|
||||
SetExtraPadding(left, 0, 0, 0);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the extra padding added to the 'native' surface so that you can draw HUD elements in predictable placements
|
||||
/// </summary>
|
||||
/// <param name="left">Left padding</param>
|
||||
/// <param name="top">Top padding</param>
|
||||
public static void SetExtraPadding(int left, int top)
|
||||
{
|
||||
SetExtraPadding(left, top, 0, 0);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the extra padding added to the 'native' surface so that you can draw HUD elements in predictable placements
|
||||
/// </summary>
|
||||
/// <param name="left">Left padding</param>
|
||||
/// <param name="top">Top padding</param>
|
||||
/// <param name="right">Right padding</param>
|
||||
public static void SetExtraPadding(int left, int top, int right)
|
||||
{
|
||||
SetExtraPadding(left, top, right, 0);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set inputs in specified <see cref="Joypad"/> to specified player
|
||||
/// </summary>
|
||||
/// <param name="player">Player (one based) whom inputs must be set</param>
|
||||
/// <param name="joypad"><see cref="Joypad"/> with inputs</param>
|
||||
/// <exception cref="IndexOutOfRangeException">Raised when you specify a player less than 1 or greater than maximum allows (see SystemInfo class to get this information)</exception>
|
||||
/// <remarks>Still have some strange behaviour with multiple inputs; so this feature is still in beta</remarks>
|
||||
public static void SetInput(int player, Joypad joypad)
|
||||
{
|
||||
if (player < 1 || player > RunningSystem.MaxControllers)
|
||||
{
|
||||
throw new IndexOutOfRangeException(string.Format("{0} does not support {1} controller(s)", RunningSystem.DisplayName, player));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (joypad.Inputs == 0)
|
||||
{
|
||||
AutoFireStickyXorAdapter joypadAdaptor = Global.AutofireStickyXORAdapter;
|
||||
joypadAdaptor.ClearStickies();
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (JoypadButton button in joypadButtonsArray)
|
||||
{
|
||||
if (joypad.Inputs.HasFlag(button))
|
||||
{
|
||||
AutoFireStickyXorAdapter joypadAdaptor = Global.AutofireStickyXORAdapter;
|
||||
if (RunningSystem == SystemInfo.GB)
|
||||
{
|
||||
joypadAdaptor.SetSticky(string.Format("{0}", JoypadConverter.ConvertBack(button, RunningSystem)), true);
|
||||
}
|
||||
else
|
||||
{
|
||||
joypadAdaptor.SetSticky(string.Format("P{0} {1}", player, JoypadConverter.ConvertBack(button, RunningSystem)), true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Using this break joypad usage (even in UI); have to figure out why
|
||||
/*if ((RunningSystem.AvailableButtons & JoypadButton.AnalogStick) == JoypadButton.AnalogStick)
|
||||
{
|
||||
AutoFireStickyXorAdapter joypadAdaptor = Global.AutofireStickyXORAdapter;
|
||||
for (int i = 1; i <= RunningSystem.MaxControllers; i++)
|
||||
{
|
||||
joypadAdaptor.SetFloat(string.Format("P{0} X Axis", i), allJoypads[i - 1].AnalogX);
|
||||
joypadAdaptor.SetFloat(string.Format("P{0} Y Axis", i), allJoypads[i - 1].AnalogY);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Resume the emulation
|
||||
/// </summary>
|
||||
public static void UnpauseEmulation()
|
||||
{
|
||||
InvokeMainFormMethod("UnpauseEmulator", null);
|
||||
}
|
||||
#endregion Public
|
||||
|
||||
/// <summary>
|
||||
/// Gets all current inputs for each joypad and store
|
||||
/// them in <see cref="Joypad"/> class collection
|
||||
/// </summary>
|
||||
private static void GetAllInputs()
|
||||
{
|
||||
AutoFireStickyXorAdapter joypadAdaptor = Global.AutofireStickyXORAdapter;
|
||||
|
||||
IEnumerable<string> pressedButtons = from button in joypadAdaptor.Definition.BoolButtons
|
||||
where joypadAdaptor.IsPressed(button)
|
||||
select button;
|
||||
|
||||
foreach (Joypad j in allJoypads)
|
||||
{
|
||||
j.ClearInputs();
|
||||
}
|
||||
|
||||
Parallel.ForEach<string>(pressedButtons, button =>
|
||||
{
|
||||
int player;
|
||||
if (RunningSystem == SystemInfo.GB)
|
||||
{
|
||||
allJoypads[0].AddInput(JoypadConverter.Convert(button));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (int.TryParse(button.Substring(1, 2), out player))
|
||||
{
|
||||
allJoypads[player - 1].AddInput(JoypadConverter.Convert(button.Substring(3)));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if ((RunningSystem.AvailableButtons & JoypadButton.AnalogStick) == JoypadButton.AnalogStick)
|
||||
{
|
||||
for (int i = 1; i <= RunningSystem.MaxControllers; i++)
|
||||
{
|
||||
allJoypads[i - 1].AnalogX = joypadAdaptor.GetFloat(string.Format("P{0} X Axis", i));
|
||||
allJoypads[i - 1].AnalogY = joypadAdaptor.GetFloat(string.Format("P{0} Y Axis", i));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void CloseEmulator()
|
||||
{
|
||||
InvokeMainFormMethod("CloseEmulator");
|
||||
}
|
||||
|
||||
public static void CloseEmulatorWithCode(int exitCode)
|
||||
{
|
||||
InvokeMainFormMethod("CloseEmulator", new object[] {exitCode});
|
||||
}
|
||||
|
||||
public static int BorderHeight()
|
||||
{
|
||||
var point = new System.Drawing.Point(0, 0);
|
||||
Type t = clientAssembly.GetType("BizHawk.Client.EmuHawk.GlobalWin");
|
||||
FieldInfo f = t.GetField("DisplayManager");
|
||||
object displayManager = f.GetValue(null);
|
||||
MethodInfo m = t.GetMethod("TransFormPoint");
|
||||
point = (System.Drawing.Point) m.Invoke(displayManager, new object[] { point });
|
||||
return point.Y;
|
||||
}
|
||||
|
||||
public static int BorderWidth()
|
||||
{
|
||||
var point = new System.Drawing.Point(0, 0);
|
||||
Type t = clientAssembly.GetType("BizHawk.Client.EmuHawk.GlobalWin");
|
||||
FieldInfo f = t.GetField("DisplayManager");
|
||||
object displayManager = f.GetValue(null);
|
||||
MethodInfo m = t.GetMethod("TransFormPoint");
|
||||
point = (System.Drawing.Point)m.Invoke(displayManager, new object[] { point });
|
||||
return point.X;
|
||||
}
|
||||
|
||||
public static int BufferHeight()
|
||||
{
|
||||
return VideoProvider.BufferHeight;
|
||||
}
|
||||
|
||||
public static int BufferWidth()
|
||||
{
|
||||
return VideoProvider.BufferWidth;
|
||||
}
|
||||
|
||||
public static void ClearAutohold()
|
||||
{
|
||||
InvokeMainFormMethod("ClearHolds");
|
||||
}
|
||||
|
||||
public static void CloseRom()
|
||||
{
|
||||
InvokeMainFormMethod("CloseRom");
|
||||
}
|
||||
|
||||
public static void DisplayMessages(bool value)
|
||||
{
|
||||
Global.Config.DisplayMessages = value;
|
||||
}
|
||||
|
||||
public static void EnableRewind(bool enabled)
|
||||
{
|
||||
InvokeMainFormMethod("EnableRewind", new object[] {enabled});
|
||||
}
|
||||
|
||||
public static void FrameSkip(int numFrames)
|
||||
{
|
||||
if (numFrames > 0)
|
||||
{
|
||||
Global.Config.FrameSkip = numFrames;
|
||||
InvokeMainFormMethod("FrameSkipMessage");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Invalid frame skip value");
|
||||
}
|
||||
}
|
||||
|
||||
public static int GetTargetScanlineIntensity()
|
||||
{
|
||||
return Global.Config.TargetScanlineFilterIntensity;
|
||||
}
|
||||
|
||||
public static int GetWindowSize()
|
||||
{
|
||||
return Global.Config.TargetZoomFactors[Emulator.SystemId];
|
||||
}
|
||||
|
||||
public static void SetSoundOn(bool enable)
|
||||
{
|
||||
Global.Config.SoundEnabled = enable;
|
||||
}
|
||||
|
||||
public static bool GetSoundOn()
|
||||
{
|
||||
return Global.Config.SoundEnabled;
|
||||
}
|
||||
|
||||
public static bool IsPaused()
|
||||
{
|
||||
return (bool) GetMainFormField("EmulatorPaused");
|
||||
}
|
||||
|
||||
public static bool IsTurbo()
|
||||
{
|
||||
return (bool)GetMainFormField("IsTurboing");
|
||||
}
|
||||
|
||||
public static bool IsSeeking()
|
||||
{
|
||||
return (bool)GetMainFormField("IsSeeking");
|
||||
}
|
||||
|
||||
public static void OpenRom(string path)
|
||||
{
|
||||
var ioa = OpenAdvancedSerializer.ParseWithLegacy(path);
|
||||
Type t = clientAssembly.GetType("BizHawk.Client.EmuHawk.GlobalWin.MainForm.LoadRomArgs");
|
||||
object o = Activator.CreateInstance(t);
|
||||
t.GetField("OpenAdvanced").SetValue(o, ioa);
|
||||
|
||||
InvokeMainFormMethod("LoadRom", new object[] {path, o});
|
||||
}
|
||||
|
||||
public static void Pause()
|
||||
{
|
||||
InvokeMainFormMethod("PauseEmulator");
|
||||
}
|
||||
|
||||
public static void PauseAv()
|
||||
{
|
||||
SetMainFormField("PauseAvi", true);
|
||||
}
|
||||
|
||||
public static void RebootCore()
|
||||
{
|
||||
InvokeMainFormMethod("RebootCore");
|
||||
}
|
||||
|
||||
public static void SaveRam()
|
||||
{
|
||||
InvokeMainFormMethod("FlushSaveRAM");
|
||||
}
|
||||
|
||||
public static int ScreenHeight()
|
||||
{
|
||||
Type t = GetMainFormField("PresentationPanel").GetType();
|
||||
object o = GetMainFormField("PresentationPanel");
|
||||
o = t.GetField("NativeSize").GetValue(o);
|
||||
t = t.GetField("NativeSize").GetType();
|
||||
|
||||
return (int) t.GetField("Height").GetValue(o);
|
||||
}
|
||||
|
||||
public static void Screenshot(string path = null)
|
||||
{
|
||||
if (path == null)
|
||||
{
|
||||
InvokeMainFormMethod("TakeScreenshot");
|
||||
}
|
||||
else
|
||||
{
|
||||
InvokeMainFormMethod("TakeScreenshot", new object[] {path});
|
||||
}
|
||||
}
|
||||
|
||||
public static void ScreenshotToClipboard()
|
||||
{
|
||||
InvokeMainFormMethod("TakeScreenshotToClipboard");
|
||||
}
|
||||
|
||||
public static void SetTargetScanlineIntensity(int val)
|
||||
{
|
||||
Global.Config.TargetScanlineFilterIntensity = val;
|
||||
}
|
||||
|
||||
public static void SetScreenshotOSD(bool value)
|
||||
{
|
||||
Global.Config.Screenshot_CaptureOSD = value;
|
||||
}
|
||||
|
||||
public static int ScreenWidth()
|
||||
{
|
||||
Type t = GetMainFormField("PresentationPanel").GetType();
|
||||
object o = GetMainFormField("PresentationPanel");
|
||||
o = t.GetField("NativeSize").GetValue(o);
|
||||
t = t.GetField("NativeSize").GetType();
|
||||
|
||||
return (int) t.GetField("Width").GetValue(o);
|
||||
}
|
||||
|
||||
public static void SetWindowSize(int size)
|
||||
{
|
||||
if (size == 1 || size == 2 || size == 3 || size == 4 || size == 5 || size == 10)
|
||||
{
|
||||
Global.Config.TargetZoomFactors[Emulator.SystemId] = size;
|
||||
InvokeMainFormMethod("FrameBufferResized");
|
||||
Type t = clientAssembly.GetType("BizHawk.Client.EmuHawk.GlobalWin");
|
||||
FieldInfo f = t.GetField("OSD");
|
||||
object osd = f.GetValue(null);
|
||||
t = f.GetType();
|
||||
MethodInfo m = t.GetMethod("AddMessage");
|
||||
m.Invoke(osd, new Object[] { "Window size set to " + size + "x" });
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Invalid window size");
|
||||
}
|
||||
}
|
||||
|
||||
public static void SpeedMode(int percent)
|
||||
{
|
||||
if (percent > 0 && percent < 6400)
|
||||
{
|
||||
InvokeMainFormMethod("ClickSpeedItem", new object[] {percent});
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Invalid speed value");
|
||||
}
|
||||
}
|
||||
|
||||
public static void TogglePause()
|
||||
{
|
||||
InvokeMainFormMethod("TogglePause");
|
||||
}
|
||||
|
||||
public static int TransformPointX(int x)
|
||||
{
|
||||
var point = new System.Drawing.Point(x, 0);
|
||||
Type t = clientAssembly.GetType("BizHawk.Client.EmuHawk.GlobalWin");
|
||||
FieldInfo f = t.GetField("DisplayManager");
|
||||
object displayManager = f.GetValue(null);
|
||||
MethodInfo m = t.GetMethod("TransFormPoint");
|
||||
point = (System.Drawing.Point)m.Invoke(displayManager, new object[] { point });
|
||||
return point.X;
|
||||
}
|
||||
|
||||
public static int TransformPointY(int y)
|
||||
{
|
||||
var point = new System.Drawing.Point(0, y);
|
||||
Type t = clientAssembly.GetType("BizHawk.Client.EmuHawk.GlobalWin");
|
||||
FieldInfo f = t.GetField("DisplayManager");
|
||||
object displayManager = f.GetValue(null);
|
||||
MethodInfo m = t.GetMethod("TransFormPoint");
|
||||
point = (System.Drawing.Point)m.Invoke(displayManager, new object[] { point });
|
||||
return point.Y;
|
||||
}
|
||||
|
||||
public static void Unpause()
|
||||
{
|
||||
InvokeMainFormMethod("UnpauseEmulator");
|
||||
}
|
||||
|
||||
public static void UnpauseAv()
|
||||
{
|
||||
SetMainFormField("PauseAvi", false);
|
||||
}
|
||||
|
||||
public static int Xpos()
|
||||
{
|
||||
object o = GetMainFormField("DesktopLocation");
|
||||
Type t = mainFormClass.GetField("DesktopLocation").GetType();
|
||||
return (int)t.GetField("X").GetValue(o);
|
||||
}
|
||||
|
||||
public static int Ypos()
|
||||
{
|
||||
object o = GetMainFormField("DesktopLocation");
|
||||
Type t = mainFormClass.GetField("DesktopLocation").GetType();
|
||||
return (int)t.GetField("Y").GetValue(o);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
/// <summary>
|
||||
/// Gets current emulated system
|
||||
/// </summary>
|
||||
public static SystemInfo RunningSystem
|
||||
{
|
||||
get
|
||||
{
|
||||
switch (Global.Emulator.SystemId)
|
||||
{
|
||||
case "PCE":
|
||||
if (((PCEngine)Global.Emulator).Type == NecSystemType.TurboGrafx)
|
||||
{
|
||||
return SystemInfo.PCE;
|
||||
}
|
||||
else if (((PCEngine)Global.Emulator).Type == NecSystemType.SuperGrafx)
|
||||
{
|
||||
return SystemInfo.SGX;
|
||||
}
|
||||
else
|
||||
{
|
||||
return SystemInfo.PCECD;
|
||||
}
|
||||
|
||||
case "SMS":
|
||||
if (((SMS)Global.Emulator).IsSG1000)
|
||||
{
|
||||
return SystemInfo.SG;
|
||||
}
|
||||
else if (((SMS)Global.Emulator).IsGameGear)
|
||||
{
|
||||
return SystemInfo.GG;
|
||||
}
|
||||
else
|
||||
{
|
||||
return SystemInfo.SMS;
|
||||
}
|
||||
|
||||
case "GB":
|
||||
if (Global.Emulator is Gameboy)
|
||||
{
|
||||
return SystemInfo.GB;
|
||||
}
|
||||
else if (Global.Emulator is GBColors)
|
||||
{
|
||||
return SystemInfo.GBC;
|
||||
}
|
||||
else
|
||||
{
|
||||
return SystemInfo.DualGB;
|
||||
}
|
||||
|
||||
default:
|
||||
return SystemInfo.FindByCoreSystem(SystemIdConverter.Convert(Global.Emulator.SystemId));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
|
@ -1,68 +0,0 @@
|
|||
using System;
|
||||
|
||||
namespace BizHawk.Client.ApiHawk.Classes.Events
|
||||
{
|
||||
/// <summary>
|
||||
/// This class holds event data for BeforeQuickLoad event
|
||||
/// </summary>
|
||||
public sealed class BeforeQuickLoadEventArgs : EventArgs
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private bool _Handled = false;
|
||||
private string _QuickSaveSlotName;
|
||||
|
||||
#endregion
|
||||
|
||||
#region cTor(s)
|
||||
|
||||
internal BeforeQuickLoadEventArgs(string name)
|
||||
{
|
||||
_QuickSaveSlotName = name;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets value that defined if saved has been handled or not
|
||||
/// </summary>
|
||||
public bool Handled
|
||||
{
|
||||
get
|
||||
{
|
||||
return _Handled;
|
||||
}
|
||||
set
|
||||
{
|
||||
_Handled = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets quicksave name
|
||||
/// </summary>
|
||||
public string Name
|
||||
{
|
||||
get
|
||||
{
|
||||
return _QuickSaveSlotName;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Gets slot used for quicksave
|
||||
/// </summary>
|
||||
public int Slot
|
||||
{
|
||||
get
|
||||
{
|
||||
return int.Parse(_QuickSaveSlotName.Substring(_QuickSaveSlotName.Length - 1));
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
|
@ -1,69 +0,0 @@
|
|||
using System;
|
||||
|
||||
namespace BizHawk.Client.ApiHawk.Classes.Events
|
||||
{
|
||||
/// <summary>
|
||||
/// This class holds event data for BeforeQuickSave event
|
||||
/// </summary>
|
||||
public sealed class BeforeQuickSaveEventArgs : EventArgs
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private bool _Handled = false;
|
||||
private string _QuickSaveSlotName;
|
||||
|
||||
#endregion
|
||||
|
||||
#region cTor(s)
|
||||
|
||||
internal BeforeQuickSaveEventArgs(string name)
|
||||
{
|
||||
_QuickSaveSlotName = name;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets value that defined if saved has been handled or not
|
||||
/// </summary>
|
||||
public bool Handled
|
||||
{
|
||||
get
|
||||
{
|
||||
return _Handled;
|
||||
}
|
||||
set
|
||||
{
|
||||
_Handled = value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Gets quicksave name
|
||||
/// </summary>
|
||||
public string Name
|
||||
{
|
||||
get
|
||||
{
|
||||
return _QuickSaveSlotName;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Gets slot used for quicksave
|
||||
/// </summary>
|
||||
public int Slot
|
||||
{
|
||||
get
|
||||
{
|
||||
return int.Parse(_QuickSaveSlotName.Substring(_QuickSaveSlotName.Length - 1));
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
|
@ -1,44 +0,0 @@
|
|||
using System;
|
||||
|
||||
namespace BizHawk.Client.ApiHawk.Classes.Events
|
||||
{
|
||||
/// <summary>
|
||||
/// This class holds event data for StateLoaded event
|
||||
/// </summary>
|
||||
public sealed class StateLoadedEventArgs: EventArgs
|
||||
{
|
||||
#region Fields
|
||||
|
||||
string _Name;
|
||||
|
||||
#endregion
|
||||
|
||||
#region cTor(s)
|
||||
|
||||
/// <summary>
|
||||
/// Initialize a new instance of <see cref="StateLoadedEventArgs"/>
|
||||
/// </summary>
|
||||
/// <param name="stateName">User friendly name of loaded state</param>
|
||||
internal StateLoadedEventArgs(string stateName)
|
||||
{
|
||||
_Name = stateName;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
/// <summary>
|
||||
/// Gets user friendly name of the loaded savestate
|
||||
/// </summary>
|
||||
public string Name
|
||||
{
|
||||
get
|
||||
{
|
||||
return _Name;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
|
@ -1,44 +0,0 @@
|
|||
using System;
|
||||
|
||||
namespace BizHawk.Client.ApiHawk.Classes.Events
|
||||
{
|
||||
/// <summary>
|
||||
/// This class holds event data for StateSaved event
|
||||
/// </summary>
|
||||
public sealed class StateSavedEventArgs : EventArgs
|
||||
{
|
||||
#region Fields
|
||||
|
||||
string _Name;
|
||||
|
||||
#endregion
|
||||
|
||||
#region cTor(s)
|
||||
|
||||
/// <summary>
|
||||
/// Initialize a new instance of <see cref="StateSavedEventArgs"/>
|
||||
/// </summary>
|
||||
/// <param name="stateName">User friendly name of loaded state</param>
|
||||
internal StateSavedEventArgs(string stateName)
|
||||
{
|
||||
_Name = stateName;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
/// <summary>
|
||||
/// Gets user friendly name of the loaded savestate
|
||||
/// </summary>
|
||||
public string Name
|
||||
{
|
||||
get
|
||||
{
|
||||
return _Name;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
namespace BizHawk.Client.ApiHawk.Classes.Events
|
||||
{
|
||||
/// <summary>
|
||||
/// Represent a method that will handle the event raised before a quickload is done
|
||||
/// </summary>
|
||||
/// <param name="sender">Object that raised the event</param>
|
||||
/// <param name="e">Event arguments</param>
|
||||
public delegate void BeforeQuickLoadEventHandler(object sender, BeforeQuickLoadEventArgs e);
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
namespace BizHawk.Client.ApiHawk.Classes.Events
|
||||
{
|
||||
/// <summary>
|
||||
/// Represent a method that will handle the event raised before a quicksave is done
|
||||
/// </summary>
|
||||
/// <param name="sender">Object that raised the event</param>
|
||||
/// <param name="e">Event arguments</param>
|
||||
public delegate void BeforeQuickSaveEventHandler(object sender, BeforeQuickSaveEventArgs e);
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
namespace BizHawk.Client.ApiHawk.Classes.Events
|
||||
{
|
||||
/// <summary>
|
||||
/// Represent a method that will handle the event raised when a savestate is loaded
|
||||
/// </summary>
|
||||
/// <param name="sender">Object that raised the event</param>
|
||||
/// <param name="e">Event arguments</param>
|
||||
public delegate void StateLoadedEventHandler(object sender, StateLoadedEventArgs e);
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
namespace BizHawk.Client.ApiHawk.Classes.Events
|
||||
{
|
||||
/// <summary>
|
||||
/// Represent a method that will handle the event raised when a savestate is saved
|
||||
/// </summary>
|
||||
/// <param name="sender">Object that raised the event</param>
|
||||
/// <param name="e">Event arguments</param>
|
||||
public delegate void StateSavedEventHandler(object sender, StateSavedEventArgs e);
|
||||
}
|
|
@ -1,198 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
|
||||
using System.Windows.Forms;
|
||||
using BizHawk.Client.Common;
|
||||
|
||||
namespace BizHawk.Client.ApiHawk
|
||||
{
|
||||
/// <summary>
|
||||
/// This static class handle all ExternalTools
|
||||
/// </summary>
|
||||
public static class ExternalToolManager
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private static FileSystemWatcher directoryMonitor;
|
||||
private static List<ToolStripMenuItem> menuItems = new List<ToolStripMenuItem>();
|
||||
|
||||
#endregion
|
||||
|
||||
#region cTor(s)
|
||||
|
||||
/// <summary>
|
||||
/// Initilization
|
||||
/// </summary>
|
||||
static ExternalToolManager()
|
||||
{
|
||||
if(!Directory.Exists(Global.Config.PathEntries["Global", "External Tools"].Path))
|
||||
{
|
||||
Directory.CreateDirectory(Global.Config.PathEntries["Global", "External Tools"].Path);
|
||||
}
|
||||
directoryMonitor = new FileSystemWatcher(Global.Config.PathEntries["Global", "External Tools"].Path, "*.dll");
|
||||
directoryMonitor.IncludeSubdirectories = false;
|
||||
directoryMonitor.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName;
|
||||
directoryMonitor.Filter = "*.dll";
|
||||
directoryMonitor.Created += new FileSystemEventHandler(DirectoryMonitor_Created);
|
||||
directoryMonitor.EnableRaisingEvents = true;
|
||||
|
||||
ClientApi.RomLoaded += delegate { BuildToolStrip(); };
|
||||
|
||||
BuildToolStrip();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
/// <summary>
|
||||
/// Build the toolstrip menu
|
||||
/// </summary>
|
||||
private static void BuildToolStrip()
|
||||
{
|
||||
menuItems.Clear();
|
||||
if (Directory.Exists(directoryMonitor.Path))
|
||||
{
|
||||
DirectoryInfo dInfo = new DirectoryInfo(directoryMonitor.Path);
|
||||
|
||||
foreach (FileInfo fi in dInfo.GetFiles("*.dll"))
|
||||
{
|
||||
menuItems.Add(GenerateToolTipFromFileName(fi.FullName));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generate a <see cref="ToolStripMenuItem"/> from an
|
||||
/// external tool dll.
|
||||
/// The assembly must have <see cref="BizHawkExternalToolAttribute"/> in its
|
||||
/// assembly attributes
|
||||
/// </summary>
|
||||
/// <param name="fileName">File that will be reflected</param>
|
||||
/// <returns>A new <see cref="ToolStripMenuItem"/>; assembly path can be found in the Tag property</returns>
|
||||
/// <remarks>For the moment, you could only load a dll that have a form (which implements <see cref="BizHawk.Client.EmuHawk.IExternalToolForm"/>)</remarks>
|
||||
private static ToolStripMenuItem GenerateToolTipFromFileName(string fileName)
|
||||
{
|
||||
Type customFormType;
|
||||
Assembly externalToolFile;
|
||||
ToolStripMenuItem item = null;
|
||||
|
||||
try
|
||||
{
|
||||
BizHawk.Common.Win32Hacks.RemoveMOTW(fileName);
|
||||
externalToolFile = Assembly.LoadFrom(fileName);
|
||||
object[] attributes = externalToolFile.GetCustomAttributes(typeof(BizHawkExternalToolAttribute), false);
|
||||
if (attributes != null && attributes.Count() == 1)
|
||||
{
|
||||
BizHawkExternalToolAttribute attribute = (BizHawkExternalToolAttribute)attributes[0];
|
||||
item = new ToolStripMenuItem(attribute.Name);
|
||||
item.ToolTipText = attribute.Description;
|
||||
if (attribute.IconResourceName != "")
|
||||
{
|
||||
Stream s = externalToolFile.GetManifestResourceStream(string.Format("{0}.{1}", externalToolFile.GetName().Name, attribute.IconResourceName));
|
||||
if (s != null)
|
||||
{
|
||||
item.Image = new Bitmap(s);
|
||||
}
|
||||
}
|
||||
|
||||
customFormType = externalToolFile.GetTypes().FirstOrDefault<Type>(t => t != null && t.FullName == "BizHawk.Client.EmuHawk.CustomMainForm");
|
||||
if (customFormType == null)
|
||||
{
|
||||
item.ToolTipText = "Does not have a CustomMainForm";
|
||||
item.Enabled = false;
|
||||
}
|
||||
item.Tag = fileName;
|
||||
|
||||
attributes = externalToolFile.GetCustomAttributes(typeof(BizHawkExternalToolUsageAttribute), false);
|
||||
if (attributes != null && attributes.Count() == 1)
|
||||
{
|
||||
BizHawkExternalToolUsageAttribute attribute2 = (BizHawkExternalToolUsageAttribute)attributes[0];
|
||||
if(Global.Emulator.SystemId == "NULL" && attribute2.ToolUsage != BizHawkExternalToolUsage.Global)
|
||||
{
|
||||
item.ToolTipText = "This tool doesn't work if nothing is loaded";
|
||||
item.Enabled = false;
|
||||
}
|
||||
else if(attribute2.ToolUsage == BizHawkExternalToolUsage.EmulatorSpecific && Global.Emulator.SystemId != ClientApi.SystemIdConverter.ConvertBack(attribute2.System))
|
||||
{
|
||||
item.ToolTipText = "This tool doesn't work for current system";
|
||||
item.Enabled = false;
|
||||
}
|
||||
else if (attribute2.ToolUsage == BizHawkExternalToolUsage.GameSpecific && Global.Game.Hash != attribute2.GameHash)
|
||||
{
|
||||
item.ToolTipText = "This tool doesn't work for current game";
|
||||
item.Enabled = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
item = new ToolStripMenuItem(externalToolFile.GetName().Name);
|
||||
item.ToolTipText = "BizHawkExternalTool attribute hasn't been found";
|
||||
item.Enabled = false;
|
||||
}
|
||||
}
|
||||
catch (BadImageFormatException)
|
||||
{
|
||||
item = new ToolStripMenuItem(fileName);
|
||||
item.ToolTipText = "This is not an assembly";
|
||||
item.Enabled = false;
|
||||
}
|
||||
|
||||
#if DEBUG //I added special debug stuff to get additionnal informations. Don(t think it can be usefull for released versions
|
||||
catch (ReflectionTypeLoadException ex)
|
||||
{
|
||||
foreach (Exception e in ex.LoaderExceptions)
|
||||
{
|
||||
Debug.WriteLine(e.Message);
|
||||
}
|
||||
item.ToolTipText = "Something goes wrong while trying to load";
|
||||
item.Enabled = false;
|
||||
}
|
||||
#else
|
||||
catch (ReflectionTypeLoadException)
|
||||
{
|
||||
item.ToolTipText = "Something goes wrong while trying to load";
|
||||
item.Enabled = false;
|
||||
}
|
||||
#endif
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This event is raised when we add a dll file into
|
||||
/// the external tools path.
|
||||
/// It will automatically load the assembly and add it into the list
|
||||
/// </summary>
|
||||
/// <param name="sender">Object that raised the event</param>
|
||||
/// <param name="e">Event arguments</param>
|
||||
private static void DirectoryMonitor_Created(object sender, FileSystemEventArgs e)
|
||||
{
|
||||
menuItems.Add(GenerateToolTipFromFileName(e.FullPath));
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
/// <summary>
|
||||
/// Gets a prebuild <see cref="ToolStripMenuItem"/>
|
||||
/// This list auto-updated by the <see cref="ExternalToolManager"/> itself
|
||||
/// </summary>
|
||||
public static IEnumerable<ToolStripMenuItem> ToolStripMenu
|
||||
{
|
||||
get
|
||||
{
|
||||
return menuItems;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
|
@ -1,140 +0,0 @@
|
|||
using System;
|
||||
using BizHawk.Client.Common;
|
||||
|
||||
namespace BizHawk.Client.ApiHawk
|
||||
{
|
||||
/// <summary>
|
||||
/// This class holds a joypad for any type of console
|
||||
/// </summary>
|
||||
public sealed class Joypad
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private SystemInfo _System;
|
||||
private JoypadButton _PressedButtons;
|
||||
private float _AnalogX;
|
||||
private float _AnalogY;
|
||||
private int _Player;
|
||||
|
||||
#endregion
|
||||
|
||||
#region cTor(s)
|
||||
|
||||
/// <summary>
|
||||
/// Initialize a new instance of <see cref="Joypad"/>
|
||||
/// </summary>
|
||||
/// <param name="system">What <see cref="SystemInfo"/> this <see cref="Joypad"/> is used for</param>
|
||||
/// <param name="player">Which player this controller is assigned to</param>
|
||||
internal Joypad(SystemInfo system, int player)
|
||||
{
|
||||
if (player < 1 || player > system.MaxControllers)
|
||||
{
|
||||
throw new InvalidOperationException(string.Format("{0} is invalid for {1}", player, system.DisplayName));
|
||||
}
|
||||
|
||||
_System = system;
|
||||
_Player = player;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
/// <summary>
|
||||
/// Add specified input to current ones
|
||||
/// </summary>
|
||||
/// <param name="input">Input to add</param>
|
||||
public void AddInput(JoypadButton input)
|
||||
{
|
||||
input &= _System.AvailableButtons;
|
||||
_PressedButtons |= input;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Clear inputs
|
||||
/// </summary>
|
||||
public void ClearInputs()
|
||||
{
|
||||
_PressedButtons = 0;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Remove specified input to current ones
|
||||
/// </summary>
|
||||
/// <param name="input">Input to remove</param>
|
||||
public void RemoveInput(JoypadButton input)
|
||||
{
|
||||
_PressedButtons ^= input;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Properties
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets X value for Analog stick
|
||||
/// </summary>
|
||||
/// <remarks>The value you get will aways be rounded to 0 decimal</remarks>
|
||||
public float AnalogX
|
||||
{
|
||||
get
|
||||
{
|
||||
return (float)Math.Round(_AnalogX, 0);
|
||||
}
|
||||
set
|
||||
{
|
||||
_AnalogX = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets Y value for Analog stick
|
||||
/// </summary>
|
||||
/// <remarks>The value you get will aways be rounded to 0 decimal</remarks>
|
||||
public float AnalogY
|
||||
{
|
||||
get
|
||||
{
|
||||
return (float)Math.Round(_AnalogY, 0);
|
||||
}
|
||||
set
|
||||
{
|
||||
_AnalogY = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets inputs
|
||||
/// If you pass inputs unavailable for current system, they'll be removed
|
||||
/// </summary>
|
||||
/// <remarks>It overrides all existing inputs</remarks>
|
||||
public JoypadButton Inputs
|
||||
{
|
||||
get
|
||||
{
|
||||
return _PressedButtons;
|
||||
}
|
||||
set
|
||||
{
|
||||
value &= _System.AvailableButtons;
|
||||
_PressedButtons = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets <see cref="SystemInfo"/> for current <see cref="Joypad"/>
|
||||
/// </summary>
|
||||
public SystemInfo System
|
||||
{
|
||||
get
|
||||
{
|
||||
return _System;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
|
@ -1,10 +0,0 @@
|
|||
namespace BizHawk.Client.ApiHawk
|
||||
{
|
||||
/// <summary>
|
||||
/// This interface specifies that a client exposes a given interface, such as <seealso cref="IDebuggable"/>,
|
||||
/// for use by external tools.
|
||||
/// </summary>
|
||||
public interface IExternalApi
|
||||
{
|
||||
}
|
||||
}
|
|
@ -1,10 +0,0 @@
|
|||
using System.Collections.Generic;
|
||||
|
||||
namespace BizHawk.Client.ApiHawk
|
||||
{
|
||||
public interface IInput : IExternalApi
|
||||
{
|
||||
Dictionary<string, bool> Get();
|
||||
Dictionary<string, dynamic> GetMouse();
|
||||
}
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
using System.Collections.Generic;
|
||||
|
||||
namespace BizHawk.Client.ApiHawk
|
||||
{
|
||||
public interface IJoypad : IExternalApi
|
||||
{
|
||||
Dictionary<string, dynamic> Get(int? controller = null);
|
||||
|
||||
// TODO: what about float controls?
|
||||
Dictionary<string, dynamic> GetImmediate();
|
||||
void SetFromMnemonicStr(string inputLogEntry);
|
||||
void Set(Dictionary<string, bool> buttons, int? controller = null);
|
||||
void Set(string button, bool? state = null, int? controller = null);
|
||||
void SetAnalog(Dictionary<string, float> controls, object controller = null);
|
||||
void SetAnalog(string control, float? value = null, object controller = null);
|
||||
|
||||
}
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
using System;
|
||||
|
||||
namespace BizHawk.Client.ApiHawk
|
||||
{
|
||||
public interface IMemEvents : IExternalApi
|
||||
{
|
||||
void AddReadCallback(Action cb, uint address, string domain);
|
||||
void AddWriteCallback(Action cb, uint address, string domain);
|
||||
void AddExecCallback(Action cb, uint address, string domain);
|
||||
void RemoveMemoryCallback(Action cb);
|
||||
}
|
||||
}
|
|
@ -1,27 +0,0 @@
|
|||
using System.Collections.Generic;
|
||||
namespace BizHawk.Client.ApiHawk
|
||||
{
|
||||
public interface IMovie : IExternalApi
|
||||
{
|
||||
bool StartsFromSavestate();
|
||||
bool StartsFromSaveram();
|
||||
string Filename();
|
||||
Dictionary<string, dynamic> GetInput(int frame);
|
||||
string GetInputAsMnemonic(int frame);
|
||||
bool GetReadOnly();
|
||||
ulong GetRerecordCount();
|
||||
bool GetRerecordCounting();
|
||||
bool IsLoaded();
|
||||
double Length();
|
||||
string Mode();
|
||||
void Save(string filename = "");
|
||||
void SetReadOnly(bool readOnly);
|
||||
void SetRerecordCount(double count);
|
||||
void SetRerecordCounting(bool counting);
|
||||
void Stop();
|
||||
double GetFps();
|
||||
Dictionary<string, string> GetHeader();
|
||||
List<string> GetComments();
|
||||
List<string> GetSubtitles();
|
||||
}
|
||||
}
|
|
@ -1,10 +0,0 @@
|
|||
namespace BizHawk.Client.ApiHawk
|
||||
{
|
||||
public interface ISaveState : IExternalApi
|
||||
{
|
||||
void Load(string path);
|
||||
void LoadSlot(int slotNum);
|
||||
void Save(string path);
|
||||
void SaveSlot(int slotNum);
|
||||
}
|
||||
}
|
|
@ -1,10 +0,0 @@
|
|||
namespace BizHawk.Client.ApiHawk
|
||||
{
|
||||
public interface ISql : IExternalApi
|
||||
{
|
||||
string CreateDatabase(string name);
|
||||
string OpenDatabase(string name);
|
||||
string WriteCommand(string query = "");
|
||||
dynamic ReadCommand(string query = "");
|
||||
}
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
namespace BizHawk.Client.ApiHawk
|
||||
{
|
||||
interface IPlugin
|
||||
{
|
||||
void PreFrameCallback();
|
||||
void PostFrameCallback();
|
||||
void SaveStateCallback(string name);
|
||||
void LoadStateCallback(string name);
|
||||
void InputPollCallback();
|
||||
void Init(IApiContainer api);
|
||||
}
|
||||
}
|
|
@ -1,36 +0,0 @@
|
|||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("BizHawk.Client.ApiHawk")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("BizHawk.Client.ApiHawk")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2015")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("8e2f11f2-3955-4382-8c3a-ceba1276caea")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.1.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.1.0.0")]
|
|
@ -1,191 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ClassDiagram MajorVersion="1" MinorVersion="1" MembersFormat="FullSignature">
|
||||
<Class Name="BizHawk.Client.Common.Watch">
|
||||
<Position X="17" Y="0.75" Width="10" />
|
||||
<Compartments>
|
||||
<Compartment Name="Nested Types" Collapsed="false" />
|
||||
</Compartments>
|
||||
<TypeIdentifier />
|
||||
<Lollipop Orientation="Left" Position="0.1" />
|
||||
</Class>
|
||||
<Class Name="BizHawk.Client.Common.SeparatorWatch">
|
||||
<Position X="9.25" Y="19.25" Width="3.25" />
|
||||
<TypeIdentifier />
|
||||
</Class>
|
||||
<Class Name="BizHawk.Client.Common.ByteWatch">
|
||||
<Position X="28.5" Y="19" Width="3.25" />
|
||||
<TypeIdentifier />
|
||||
</Class>
|
||||
<Class Name="BizHawk.Client.Common.WordWatch">
|
||||
<Position X="13.5" Y="19" Width="3.25" />
|
||||
<TypeIdentifier />
|
||||
</Class>
|
||||
<Class Name="BizHawk.Client.Common.DWordWatch">
|
||||
<Position X="19" Y="19" Width="3.25" />
|
||||
<TypeIdentifier />
|
||||
</Class>
|
||||
<Class Name="BizHawk.Client.Common.WatchList">
|
||||
<Position X="30.75" Y="1" Width="5" />
|
||||
<Compartments>
|
||||
<Compartment Name="Nested Types" Collapsed="false" />
|
||||
</Compartments>
|
||||
<TypeIdentifier />
|
||||
<Lollipop Orientation="Right" Position="0.1" />
|
||||
</Class>
|
||||
<Class Name="BizHawk.Client.EmuHawk.ConfigPersistAttribute">
|
||||
<Position X="11.5" Y="0.75" Width="2" />
|
||||
<TypeIdentifier />
|
||||
</Class>
|
||||
<Class Name="BizHawk.Client.ApiHawk.ExternalToolManager">
|
||||
<Position X="4.75" Y="6.75" Width="4.75" />
|
||||
<TypeIdentifier>
|
||||
<HashCode>AAAAAQAAAAAAAAAAAAAQAAAAAAgBAAAAAAACAAAAAAI=</HashCode>
|
||||
<FileName>Classes\ExternalToolManager.cs</FileName>
|
||||
</TypeIdentifier>
|
||||
</Class>
|
||||
<Class Name="BizHawk.Client.ApiHawk.BizHawkExternalToolAttribute">
|
||||
<Position X="11" Y="2.25" Width="5.75" />
|
||||
<TypeIdentifier>
|
||||
<HashCode>AAAAAAAAAAAgAAAAIAAAIAQAAAAAACAEAAAAAAAAAAA=</HashCode>
|
||||
<FileName>Attributes\BizHawkExternalToolAttribute.cs</FileName>
|
||||
</TypeIdentifier>
|
||||
</Class>
|
||||
<Class Name="BizHawk.Client.ApiHawk.ClientApi">
|
||||
<Position X="4.75" Y="10" Width="4" />
|
||||
<TypeIdentifier>
|
||||
<HashCode>CwEAAAAAgAMAQEAAAAAJQAoAAAEAgWAACCACAAAQAiA=</HashCode>
|
||||
<FileName>Classes\ClientApi.cs</FileName>
|
||||
</TypeIdentifier>
|
||||
</Class>
|
||||
<Class Name="BizHawk.Client.ApiHawk.BizHawkExternalToolUsageAttribute">
|
||||
<Position X="11" Y="5.75" Width="5.75" />
|
||||
<TypeIdentifier>
|
||||
<HashCode>AIAAAAAAEIAAAQAAAAAABABAAAAAAAAAAAAAAAAAAAA=</HashCode>
|
||||
<FileName>Attributes\BizHawkExternalToolUsageAttribute.cs</FileName>
|
||||
</TypeIdentifier>
|
||||
</Class>
|
||||
<Class Name="BizHawk.Client.ApiHawk.BizHawkSystemIdToEnumConverter">
|
||||
<Position X="10.75" Y="9.75" Width="6" />
|
||||
<TypeIdentifier>
|
||||
<HashCode>AAAAAAAAAAAAAAAAAIAAAAAAAAgAAAAAAAAAAAAAAAA=</HashCode>
|
||||
<FileName>Classes\BizHawkSystemIdToCoreSystemEnumConverter.cs</FileName>
|
||||
</TypeIdentifier>
|
||||
</Class>
|
||||
<Class Name="BizHawk.Client.ApiHawk.JoypadStringToEnumConverter">
|
||||
<Position X="10.75" Y="11.75" Width="6" />
|
||||
<TypeIdentifier>
|
||||
<HashCode>AAAAAAAAAAAAAAAAAIAAAAAAAAgAAAAAAAAAAAAAAAA=</HashCode>
|
||||
<FileName>Classes\JoypadStringToEnumConverter.cs</FileName>
|
||||
</TypeIdentifier>
|
||||
</Class>
|
||||
<Class Name="BizHawk.Client.ApiHawk.Joypad">
|
||||
<Position X="0.75" Y="6.75" Width="3" />
|
||||
<TypeIdentifier>
|
||||
<HashCode>AQAACAAAAIAAAACBAAgAAABAEAAAAAAAAAACGAAAAAA=</HashCode>
|
||||
<FileName>Classes\Joypad.cs</FileName>
|
||||
</TypeIdentifier>
|
||||
</Class>
|
||||
<Class Name="BizHawk.Client.Common.SystemInfo">
|
||||
<Position X="0.5" Y="11" Width="4" />
|
||||
<TypeIdentifier />
|
||||
</Class>
|
||||
<Class Name="BizHawk.Client.ApiHawk.Classes.Events.StateLoadedEventArgs">
|
||||
<Position X="41.75" Y="2.25" Width="3" />
|
||||
<TypeIdentifier>
|
||||
<HashCode>AAAAAAAAAAAAAAAAAAAAIAQAAAAAAAAAAAAAAAAAAAA=</HashCode>
|
||||
<FileName>Classes\Events\EventArgs\StateLoadedEventArgs.cs</FileName>
|
||||
</TypeIdentifier>
|
||||
</Class>
|
||||
<Class Name="BizHawk.Client.ApiHawk.Classes.Events.StateSavedEventArgs">
|
||||
<Position X="38.25" Y="2.25" Width="3" />
|
||||
<TypeIdentifier>
|
||||
<HashCode>AAAAAAAAAAAAAAAAAAAAIAQAAAAAAAAAAAAAAAAAAAA=</HashCode>
|
||||
<FileName>Classes\Events\EventArgs\StateSavedEventArgs.cs</FileName>
|
||||
</TypeIdentifier>
|
||||
</Class>
|
||||
<Class Name="BizHawk.Client.ApiHawk.Classes.Events.BeforeQuickSaveEventArgs">
|
||||
<Position X="38.25" Y="6.75" Width="3" />
|
||||
<TypeIdentifier>
|
||||
<HashCode>AAAAAAAAIAAAQAAAAACAAAAAAAAAAAAAAAAAAAAAAgA=</HashCode>
|
||||
<FileName>Classes\Events\EventArgs\BeforeQuickSaveEventArgs.cs</FileName>
|
||||
</TypeIdentifier>
|
||||
</Class>
|
||||
<Class Name="BizHawk.Client.ApiHawk.Classes.Events.BeforeQuickLoadEventArgs">
|
||||
<Position X="41.75" Y="6.75" Width="3" />
|
||||
<TypeIdentifier>
|
||||
<HashCode>AAAAAAAAIAAAQAAAAACAAAAAAAAAAAAAAAAAAAAAAgA=</HashCode>
|
||||
<FileName>Classes\Events\EventArgs\BeforeQuickLoadEventArgs.cs</FileName>
|
||||
</TypeIdentifier>
|
||||
</Class>
|
||||
<Interface Name="BizHawk.Client.EmuHawk.IExternalToolForm">
|
||||
<Position X="4.5" Y="4.5" Width="2.75" />
|
||||
<TypeIdentifier>
|
||||
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
|
||||
<FileName>Interfaces\IExternalToolForm.cs</FileName>
|
||||
</TypeIdentifier>
|
||||
</Interface>
|
||||
<Interface Name="BizHawk.Client.EmuHawk.IToolForm">
|
||||
<Position X="6" Y="0.75" Width="2.25" />
|
||||
<TypeIdentifier />
|
||||
</Interface>
|
||||
<Interface Name="BizHawk.Client.EmuHawk.IToolFormAutoConfig">
|
||||
<Position X="8" Y="4.5" Width="1.75" />
|
||||
<TypeIdentifier />
|
||||
</Interface>
|
||||
<Enum Name="BizHawk.Client.Common.WatchSize">
|
||||
<Position X="28.5" Y="5.5" Width="1.5" />
|
||||
<TypeIdentifier />
|
||||
</Enum>
|
||||
<Enum Name="BizHawk.Client.Common.DisplayType">
|
||||
<Position X="28.5" Y="2.75" Width="1.5" />
|
||||
<TypeIdentifier />
|
||||
</Enum>
|
||||
<Enum Name="BizHawk.Client.Common.PreviousType">
|
||||
<Position X="28.5" Y="1" Width="1.5" />
|
||||
<TypeIdentifier />
|
||||
</Enum>
|
||||
<Enum Name="BizHawk.Client.ApiHawk.BizHawkExternalToolUsage">
|
||||
<Position X="28.25" Y="7.25" Width="2.25" />
|
||||
<TypeIdentifier>
|
||||
<HashCode>AAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAgAAAABAAA=</HashCode>
|
||||
<FileName>Enums\BizHawkExternalToolUsage.cs</FileName>
|
||||
</TypeIdentifier>
|
||||
</Enum>
|
||||
<Enum Name="BizHawk.Client.ApiHawk.JoypadButton">
|
||||
<Position X="30.25" Y="9.75" Width="1.5" />
|
||||
<TypeIdentifier />
|
||||
</Enum>
|
||||
<Enum Name="BizHawk.Client.ApiHawk.CoreSystem">
|
||||
<Position X="28.25" Y="9.75" Width="1.5" />
|
||||
<TypeIdentifier />
|
||||
</Enum>
|
||||
<Delegate Name="BizHawk.Client.ApiHawk.Classes.Events.StateLoadedEventHandler">
|
||||
<Position X="41.75" Y="1" Width="2" />
|
||||
<TypeIdentifier>
|
||||
<HashCode>AAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAA=</HashCode>
|
||||
<FileName>Classes\Events\EventHandlers\StateLoadedEventHandler.cs</FileName>
|
||||
</TypeIdentifier>
|
||||
</Delegate>
|
||||
<Delegate Name="BizHawk.Client.ApiHawk.Classes.Events.StateSavedEventHandler">
|
||||
<Position X="38.25" Y="1" Width="2" />
|
||||
<TypeIdentifier>
|
||||
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAgA=</HashCode>
|
||||
<FileName>Classes\Events\EventHandlers\StateSavedEventHandler.cs</FileName>
|
||||
</TypeIdentifier>
|
||||
</Delegate>
|
||||
<Delegate Name="BizHawk.Client.ApiHawk.Classes.Events.BeforeQuickSaveEventHandler">
|
||||
<Position X="38.25" Y="5.5" Width="2.25" />
|
||||
<TypeIdentifier>
|
||||
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAEA=</HashCode>
|
||||
<FileName>Classes\Events\EventHandlers\BeforeQuickSaveEventhandler.cs</FileName>
|
||||
</TypeIdentifier>
|
||||
</Delegate>
|
||||
<Delegate Name="BizHawk.Client.ApiHawk.Classes.Events.BeforeQuickLoadEventHandler">
|
||||
<Position X="41.75" Y="5.5" Width="2.25" />
|
||||
<TypeIdentifier>
|
||||
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAACAAAAA=</HashCode>
|
||||
<FileName>Classes\Events\EventHandlers\BeforeQuickLoadEventhandler.cs</FileName>
|
||||
</TypeIdentifier>
|
||||
</Delegate>
|
||||
<Font Name="Segoe UI" Size="9" />
|
||||
</ClassDiagram>
|
|
@ -1,101 +0,0 @@
|
|||
using System.IO;
|
||||
using System;
|
||||
|
||||
namespace SevenZip
|
||||
{
|
||||
/// <summary>
|
||||
/// The Stream extension class to emulate the archive part of a stream.
|
||||
/// </summary>
|
||||
internal class ArchiveEmulationStreamProxy : Stream, IDisposable
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the file offset.
|
||||
/// </summary>
|
||||
public int Offset { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// The source wrapped stream.
|
||||
/// </summary>
|
||||
public Stream Source { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the ArchiveEmulationStream class.
|
||||
/// </summary>
|
||||
/// <param name="stream">The stream to wrap.</param>
|
||||
/// <param name="offset">The stream offset.</param>
|
||||
public ArchiveEmulationStreamProxy(Stream stream, int offset)
|
||||
{
|
||||
Source = stream;
|
||||
Offset = offset;
|
||||
Source.Position = offset;
|
||||
}
|
||||
|
||||
public override bool CanRead
|
||||
{
|
||||
get { return Source.CanRead; }
|
||||
}
|
||||
|
||||
public override bool CanSeek
|
||||
{
|
||||
get { return Source.CanSeek; }
|
||||
}
|
||||
|
||||
public override bool CanWrite
|
||||
{
|
||||
get { return Source.CanWrite; }
|
||||
}
|
||||
|
||||
public override void Flush()
|
||||
{
|
||||
Source.Flush();
|
||||
}
|
||||
|
||||
public override long Length
|
||||
{
|
||||
get { return Source.Length - Offset; }
|
||||
}
|
||||
|
||||
public override long Position
|
||||
{
|
||||
get
|
||||
{
|
||||
return Source.Position - Offset;
|
||||
}
|
||||
set
|
||||
{
|
||||
Source.Position = value;
|
||||
}
|
||||
}
|
||||
|
||||
public override int Read(byte[] buffer, int offset, int count)
|
||||
{
|
||||
return Source.Read(buffer, offset, count);
|
||||
}
|
||||
|
||||
public override long Seek(long offset, SeekOrigin origin)
|
||||
{
|
||||
return Source.Seek(origin == SeekOrigin.Begin ? offset + Offset : offset,
|
||||
origin) - Offset;
|
||||
}
|
||||
|
||||
public override void SetLength(long value)
|
||||
{
|
||||
Source.SetLength(value);
|
||||
}
|
||||
|
||||
public override void Write(byte[] buffer, int offset, int count)
|
||||
{
|
||||
Source.Write(buffer, offset, count);
|
||||
}
|
||||
|
||||
public new void Dispose()
|
||||
{
|
||||
Source.Dispose();
|
||||
}
|
||||
|
||||
public override void Close()
|
||||
{
|
||||
Source.Close();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,602 +0,0 @@
|
|||
/* This file is part of SevenZipSharp.
|
||||
|
||||
SevenZipSharp is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
SevenZipSharp is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with SevenZipSharp. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
#if MONO
|
||||
using SevenZip.Mono.COM;
|
||||
using System.Runtime.InteropServices;
|
||||
#endif
|
||||
|
||||
namespace SevenZip
|
||||
{
|
||||
#if UNMANAGED
|
||||
/// <summary>
|
||||
/// Archive extraction callback to handle the process of unpacking files
|
||||
/// </summary>
|
||||
internal sealed class ArchiveExtractCallback : CallbackBase, IArchiveExtractCallback, ICryptoGetTextPassword,
|
||||
IDisposable
|
||||
{
|
||||
private List<uint> _actualIndexes;
|
||||
private IInArchive _archive;
|
||||
|
||||
/// <summary>
|
||||
/// For Compressing event.
|
||||
/// </summary>
|
||||
private long _bytesCount;
|
||||
|
||||
private long _bytesWritten;
|
||||
private long _bytesWrittenOld;
|
||||
private string _directory;
|
||||
|
||||
/// <summary>
|
||||
/// Rate of the done work from [0, 1].
|
||||
/// </summary>
|
||||
private float _doneRate;
|
||||
|
||||
private SevenZipExtractor _extractor;
|
||||
private FakeOutStreamWrapper _fakeStream;
|
||||
private uint? _fileIndex;
|
||||
private int _filesCount;
|
||||
private OutStreamWrapper _fileStream;
|
||||
private bool _directoryStructure;
|
||||
private int _currentIndex;
|
||||
#if !WINCE
|
||||
const int MEMORY_PRESSURE = 64 * 1024 * 1024; //64mb seems to be the maximum value
|
||||
#endif
|
||||
#region Constructors
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the ArchiveExtractCallback class
|
||||
/// </summary>
|
||||
/// <param name="archive">IInArchive interface for the archive</param>
|
||||
/// <param name="directory">Directory where files are to be unpacked to</param>
|
||||
/// <param name="filesCount">The archive files count</param>'
|
||||
/// <param name="extractor">The owner of the callback</param>
|
||||
/// <param name="actualIndexes">The list of actual indexes (solid archives support)</param>
|
||||
/// <param name="directoryStructure">The value indicating whether to preserve directory structure of extracted files.</param>
|
||||
public ArchiveExtractCallback(IInArchive archive, string directory, int filesCount, bool directoryStructure,
|
||||
List<uint> actualIndexes, SevenZipExtractor extractor)
|
||||
{
|
||||
Init(archive, directory, filesCount, directoryStructure, actualIndexes, extractor);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the ArchiveExtractCallback class
|
||||
/// </summary>
|
||||
/// <param name="archive">IInArchive interface for the archive</param>
|
||||
/// <param name="directory">Directory where files are to be unpacked to</param>
|
||||
/// <param name="filesCount">The archive files count</param>
|
||||
/// <param name="password">Password for the archive</param>
|
||||
/// <param name="extractor">The owner of the callback</param>
|
||||
/// <param name="actualIndexes">The list of actual indexes (solid archives support)</param>
|
||||
/// <param name="directoryStructure">The value indicating whether to preserve directory structure of extracted files.</param>
|
||||
public ArchiveExtractCallback(IInArchive archive, string directory, int filesCount, bool directoryStructure,
|
||||
List<uint> actualIndexes, string password, SevenZipExtractor extractor)
|
||||
: base(password)
|
||||
{
|
||||
Init(archive, directory, filesCount, directoryStructure, actualIndexes, extractor);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the ArchiveExtractCallback class
|
||||
/// </summary>
|
||||
/// <param name="archive">IInArchive interface for the archive</param>
|
||||
/// <param name="stream">The stream where files are to be unpacked to</param>
|
||||
/// <param name="filesCount">The archive files count</param>
|
||||
/// <param name="fileIndex">The file index for the stream</param>
|
||||
/// <param name="extractor">The owner of the callback</param>
|
||||
public ArchiveExtractCallback(IInArchive archive, Stream stream, int filesCount, uint fileIndex,
|
||||
SevenZipExtractor extractor)
|
||||
{
|
||||
Init(archive, stream, filesCount, fileIndex, extractor);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the ArchiveExtractCallback class
|
||||
/// </summary>
|
||||
/// <param name="archive">IInArchive interface for the archive</param>
|
||||
/// <param name="stream">The stream where files are to be unpacked to</param>
|
||||
/// <param name="filesCount">The archive files count</param>
|
||||
/// <param name="fileIndex">The file index for the stream</param>
|
||||
/// <param name="password">Password for the archive</param>
|
||||
/// <param name="extractor">The owner of the callback</param>
|
||||
public ArchiveExtractCallback(IInArchive archive, Stream stream, int filesCount, uint fileIndex, string password,
|
||||
SevenZipExtractor extractor)
|
||||
: base(password)
|
||||
{
|
||||
Init(archive, stream, filesCount, fileIndex, extractor);
|
||||
}
|
||||
|
||||
private void Init(IInArchive archive, string directory, int filesCount, bool directoryStructure,
|
||||
List<uint> actualIndexes, SevenZipExtractor extractor)
|
||||
{
|
||||
CommonInit(archive, filesCount, extractor);
|
||||
_directory = directory;
|
||||
_actualIndexes = actualIndexes;
|
||||
_directoryStructure = directoryStructure;
|
||||
if (!directory.EndsWith("" + Path.DirectorySeparatorChar, StringComparison.CurrentCulture))
|
||||
{
|
||||
_directory += Path.DirectorySeparatorChar;
|
||||
}
|
||||
}
|
||||
|
||||
private void Init(IInArchive archive, Stream stream, int filesCount, uint fileIndex, SevenZipExtractor extractor)
|
||||
{
|
||||
CommonInit(archive, filesCount, extractor);
|
||||
_fileStream = new OutStreamWrapper(stream, false);
|
||||
_fileStream.BytesWritten += IntEventArgsHandler;
|
||||
_fileIndex = fileIndex;
|
||||
}
|
||||
|
||||
private void CommonInit(IInArchive archive, int filesCount, SevenZipExtractor extractor)
|
||||
{
|
||||
_archive = archive;
|
||||
_filesCount = filesCount;
|
||||
_fakeStream = new FakeOutStreamWrapper();
|
||||
_fakeStream.BytesWritten += IntEventArgsHandler;
|
||||
_extractor = extractor;
|
||||
#if !WINCE
|
||||
GC.AddMemoryPressure(MEMORY_PRESSURE);
|
||||
#endif
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Events
|
||||
|
||||
/// <summary>
|
||||
/// Occurs when a new file is going to be unpacked
|
||||
/// </summary>
|
||||
/// <remarks>Occurs when 7-zip engine requests for an output stream for a new file to unpack in</remarks>
|
||||
public event EventHandler<FileInfoEventArgs> FileExtractionStarted;
|
||||
|
||||
/// <summary>
|
||||
/// Occurs when a file has been successfully unpacked
|
||||
/// </summary>
|
||||
public event EventHandler<FileInfoEventArgs> FileExtractionFinished;
|
||||
|
||||
/// <summary>
|
||||
/// Occurs when the archive is opened and 7-zip sends the size of unpacked data
|
||||
/// </summary>
|
||||
public event EventHandler<OpenEventArgs> Open;
|
||||
|
||||
/// <summary>
|
||||
/// Occurs when the extraction is performed
|
||||
/// </summary>
|
||||
public event EventHandler<ProgressEventArgs> Extracting;
|
||||
|
||||
/// <summary>
|
||||
/// Occurs during the extraction when a file already exists
|
||||
/// </summary>
|
||||
public event EventHandler<FileOverwriteEventArgs> FileExists;
|
||||
|
||||
private void OnFileExists(FileOverwriteEventArgs e)
|
||||
{
|
||||
if (FileExists != null)
|
||||
{
|
||||
FileExists(this, e);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnOpen(OpenEventArgs e)
|
||||
{
|
||||
if (Open != null)
|
||||
{
|
||||
Open(this, e);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnFileExtractionStarted(FileInfoEventArgs e)
|
||||
{
|
||||
if (FileExtractionStarted != null)
|
||||
{
|
||||
FileExtractionStarted(this, e);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnFileExtractionFinished(FileInfoEventArgs e)
|
||||
{
|
||||
if (FileExtractionFinished != null)
|
||||
{
|
||||
FileExtractionFinished(this, e);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnExtracting(ProgressEventArgs e)
|
||||
{
|
||||
if (Extracting != null)
|
||||
{
|
||||
Extracting(this, e);
|
||||
}
|
||||
}
|
||||
|
||||
private void IntEventArgsHandler(object sender, IntEventArgs e)
|
||||
{
|
||||
var pold = (int)((_bytesWrittenOld * 100) / _bytesCount);
|
||||
_bytesWritten += e.Value;
|
||||
var pnow = (int)((_bytesWritten * 100) / _bytesCount);
|
||||
if (pnow > pold)
|
||||
{
|
||||
if (pnow > 100)
|
||||
{
|
||||
pold = pnow = 0;
|
||||
}
|
||||
_bytesWrittenOld = _bytesWritten;
|
||||
OnExtracting(new ProgressEventArgs((byte)pnow, (byte)(pnow - pold)));
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IArchiveExtractCallback Members
|
||||
|
||||
/// <summary>
|
||||
/// Gives the size of the unpacked archive files
|
||||
/// </summary>
|
||||
/// <param name="total">Size of the unpacked archive files (in bytes)</param>
|
||||
public void SetTotal(ulong total)
|
||||
{
|
||||
_bytesCount = (long)total;
|
||||
OnOpen(new OpenEventArgs(total));
|
||||
}
|
||||
|
||||
public void SetCompleted(ref ulong completeValue) { }
|
||||
|
||||
/// <summary>
|
||||
/// Sets output stream for writing unpacked data
|
||||
/// </summary>
|
||||
/// <param name="index">Current file index</param>
|
||||
/// <param name="outStream">Output stream pointer</param>
|
||||
/// <param name="askExtractMode">Extraction mode</param>
|
||||
/// <returns>0 if OK</returns>
|
||||
public int GetStream(uint index, out
|
||||
#if !MONO
|
||||
ISequentialOutStream
|
||||
#else
|
||||
HandleRef
|
||||
#endif
|
||||
outStream, AskMode askExtractMode)
|
||||
{
|
||||
#if !MONO
|
||||
outStream = null;
|
||||
#else
|
||||
outStream = new System.Runtime.InteropServices.HandleRef(null, IntPtr.Zero);
|
||||
#endif
|
||||
if (Canceled)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
_currentIndex = (int)index;
|
||||
if (askExtractMode == AskMode.Extract)
|
||||
{
|
||||
var fileName = _directory;
|
||||
if (!_fileIndex.HasValue)
|
||||
{
|
||||
#region Extraction to a file
|
||||
|
||||
if (_actualIndexes == null || _actualIndexes.Contains(index))
|
||||
{
|
||||
var data = new PropVariant();
|
||||
_archive.GetProperty(index, ItemPropId.Path, ref data);
|
||||
string entryName = NativeMethods.SafeCast(data, "");
|
||||
|
||||
#region Get entryName
|
||||
|
||||
if (String.IsNullOrEmpty(entryName))
|
||||
{
|
||||
if (_filesCount == 1)
|
||||
{
|
||||
var archName = Path.GetFileName(_extractor.FileName);
|
||||
archName = archName.Substring(0, archName.LastIndexOf('.'));
|
||||
if (!archName.EndsWith(".tar", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
archName += ".tar";
|
||||
}
|
||||
entryName = archName;
|
||||
}
|
||||
else
|
||||
{
|
||||
entryName = "[no name] " + index.ToString(CultureInfo.InvariantCulture);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
fileName = Path.Combine(_directory, _directoryStructure? entryName : Path.GetFileName(entryName));
|
||||
_archive.GetProperty(index, ItemPropId.IsDirectory, ref data);
|
||||
try
|
||||
{
|
||||
fileName = ValidateFileName(fileName);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
AddException(e);
|
||||
goto FileExtractionStartedLabel;
|
||||
}
|
||||
if (!NativeMethods.SafeCast(data, false))
|
||||
{
|
||||
#region Branch
|
||||
|
||||
_archive.GetProperty(index, ItemPropId.LastWriteTime, ref data);
|
||||
var time = NativeMethods.SafeCast(data, DateTime.MinValue);
|
||||
if (File.Exists(fileName))
|
||||
{
|
||||
var fnea = new FileOverwriteEventArgs(fileName);
|
||||
OnFileExists(fnea);
|
||||
if (fnea.Cancel)
|
||||
{
|
||||
Canceled = true;
|
||||
return -1;
|
||||
}
|
||||
if (String.IsNullOrEmpty(fnea.FileName))
|
||||
{
|
||||
#if !MONO
|
||||
outStream = _fakeStream;
|
||||
#else
|
||||
outStream = _fakeStream.Handle;
|
||||
#endif
|
||||
goto FileExtractionStartedLabel;
|
||||
}
|
||||
fileName = fnea.FileName;
|
||||
}
|
||||
try
|
||||
{
|
||||
_fileStream = new OutStreamWrapper(File.Create(fileName), fileName, time, true);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
if (e is FileNotFoundException)
|
||||
{
|
||||
AddException(
|
||||
new IOException("The file \"" + fileName +
|
||||
"\" was not extracted due to the File.Create fail."));
|
||||
}
|
||||
else
|
||||
{
|
||||
AddException(e);
|
||||
}
|
||||
outStream = _fakeStream;
|
||||
goto FileExtractionStartedLabel;
|
||||
}
|
||||
_fileStream.BytesWritten += IntEventArgsHandler;
|
||||
outStream = _fileStream;
|
||||
|
||||
#endregion
|
||||
}
|
||||
else
|
||||
{
|
||||
#region Branch
|
||||
|
||||
if (!Directory.Exists(fileName))
|
||||
{
|
||||
try
|
||||
{
|
||||
Directory.CreateDirectory(fileName);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
AddException(e);
|
||||
}
|
||||
outStream = _fakeStream;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
outStream = _fakeStream;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
else
|
||||
{
|
||||
#region Extraction to a stream
|
||||
|
||||
if (index == _fileIndex)
|
||||
{
|
||||
outStream = _fileStream;
|
||||
_fileIndex = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
outStream = _fakeStream;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
FileExtractionStartedLabel:
|
||||
_doneRate += 1.0f / _filesCount;
|
||||
var iea = new FileInfoEventArgs(
|
||||
_extractor.ArchiveFileData[(int)index], PercentDoneEventArgs.ProducePercentDone(_doneRate));
|
||||
OnFileExtractionStarted(iea);
|
||||
if (iea.Cancel)
|
||||
{
|
||||
if (!String.IsNullOrEmpty(fileName))
|
||||
{
|
||||
_fileStream.Dispose();
|
||||
if (File.Exists(fileName))
|
||||
{
|
||||
try
|
||||
{
|
||||
File.Delete(fileName);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
AddException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
Canceled = true;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public void PrepareOperation(AskMode askExtractMode) { }
|
||||
|
||||
/// <summary>
|
||||
/// Called when the archive was extracted
|
||||
/// </summary>
|
||||
/// <param name="operationResult"></param>
|
||||
public void SetOperationResult(OperationResult operationResult)
|
||||
{
|
||||
if (operationResult != OperationResult.Ok && ReportErrors)
|
||||
{
|
||||
switch (operationResult)
|
||||
{
|
||||
case OperationResult.CrcError:
|
||||
AddException(new ExtractionFailedException("File is corrupted. Crc check has failed."));
|
||||
break;
|
||||
case OperationResult.DataError:
|
||||
AddException(new ExtractionFailedException("File is corrupted. Data error has occured."));
|
||||
break;
|
||||
case OperationResult.UnsupportedMethod:
|
||||
AddException(new ExtractionFailedException("Unsupported method error has occured."));
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_fileStream != null && !_fileIndex.HasValue)
|
||||
{
|
||||
try
|
||||
{
|
||||
_fileStream.BytesWritten -= IntEventArgsHandler;
|
||||
_fileStream.Dispose();
|
||||
}
|
||||
catch (ObjectDisposedException) { }
|
||||
_fileStream = null;
|
||||
GC.Collect();
|
||||
GC.WaitForPendingFinalizers();
|
||||
}
|
||||
var iea = new FileInfoEventArgs(
|
||||
_extractor.ArchiveFileData[_currentIndex], PercentDoneEventArgs.ProducePercentDone(_doneRate));
|
||||
OnFileExtractionFinished(iea);
|
||||
if (iea.Cancel)
|
||||
{
|
||||
Canceled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ICryptoGetTextPassword Members
|
||||
|
||||
/// <summary>
|
||||
/// Sets password for the archive
|
||||
/// </summary>
|
||||
/// <param name="password">Password for the archive</param>
|
||||
/// <returns>Zero if everything is OK</returns>
|
||||
public int CryptoGetTextPassword(out string password)
|
||||
{
|
||||
password = Password;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IDisposable Members
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
#if !WINCE
|
||||
GC.RemoveMemoryPressure(MEMORY_PRESSURE);
|
||||
#endif
|
||||
if (_fileStream != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
_fileStream.Dispose();
|
||||
}
|
||||
catch (ObjectDisposedException) { }
|
||||
_fileStream = null;
|
||||
}
|
||||
if (_fakeStream != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
_fakeStream.Dispose();
|
||||
}
|
||||
catch (ObjectDisposedException) { }
|
||||
_fakeStream = null;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// Validates the file name and ensures that the directory to the file name is valid and creates intermediate directories if necessary
|
||||
/// </summary>
|
||||
/// <param name="fileName">File name</param>
|
||||
/// <returns>The valid file name</returns>
|
||||
private static string ValidateFileName(string fileName)
|
||||
{
|
||||
if (String.IsNullOrEmpty(fileName))
|
||||
{
|
||||
throw new SevenZipArchiveException("some archive name is null or empty.");
|
||||
}
|
||||
var splittedFileName = new List<string>(fileName.Split(Path.DirectorySeparatorChar));
|
||||
#if !WINCE
|
||||
foreach (char chr in Path.GetInvalidFileNameChars())
|
||||
{
|
||||
for (int i = 0; i < splittedFileName.Count; i++)
|
||||
{
|
||||
if (chr == ':' && i == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (String.IsNullOrEmpty(splittedFileName[i]))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
while (splittedFileName[i].IndexOf(chr) > -1)
|
||||
{
|
||||
splittedFileName[i] = splittedFileName[i].Replace(chr, '_');
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (fileName.StartsWith(new string(Path.DirectorySeparatorChar, 2),
|
||||
StringComparison.CurrentCultureIgnoreCase))
|
||||
{
|
||||
splittedFileName.RemoveAt(0);
|
||||
splittedFileName.RemoveAt(0);
|
||||
splittedFileName[0] = new string(Path.DirectorySeparatorChar, 2) + splittedFileName[0];
|
||||
}
|
||||
if (splittedFileName.Count > 2)
|
||||
{
|
||||
string tfn = splittedFileName[0];
|
||||
for (int i = 1; i < splittedFileName.Count - 1; i++)
|
||||
{
|
||||
tfn += Path.DirectorySeparatorChar + splittedFileName[i];
|
||||
if (!Directory.Exists(tfn))
|
||||
{
|
||||
Directory.CreateDirectory(tfn);
|
||||
}
|
||||
}
|
||||
}
|
||||
return String.Join(new string(Path.DirectorySeparatorChar, 1), splittedFileName.ToArray());
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
|
@ -1,217 +0,0 @@
|
|||
/* This file is part of SevenZipSharp.
|
||||
|
||||
SevenZipSharp is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
SevenZipSharp is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with SevenZipSharp. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
#if MONO
|
||||
using SevenZip.Mono;
|
||||
using SevenZip.Mono.COM;
|
||||
#endif
|
||||
|
||||
namespace SevenZip
|
||||
{
|
||||
#if UNMANAGED
|
||||
/// <summary>
|
||||
/// Callback to handle the archive opening
|
||||
/// </summary>
|
||||
internal sealed class ArchiveOpenCallback : CallbackBase, IArchiveOpenCallback, IArchiveOpenVolumeCallback,
|
||||
ICryptoGetTextPassword, IDisposable
|
||||
{
|
||||
private FileInfo _fileInfo;
|
||||
private Dictionary<string, InStreamWrapper> _wrappers =
|
||||
new Dictionary<string, InStreamWrapper>();
|
||||
private readonly List<string> _volumeFileNames = new List<string>();
|
||||
|
||||
/// <summary>
|
||||
/// Gets the list of volume file names.
|
||||
/// </summary>
|
||||
public IList<string> VolumeFileNames
|
||||
{
|
||||
get
|
||||
{
|
||||
return _volumeFileNames;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Performs the common initialization.
|
||||
/// </summary>
|
||||
/// <param name="fileName">Volume file name.</param>
|
||||
private void Init(string fileName)
|
||||
{
|
||||
if (!String.IsNullOrEmpty(fileName))
|
||||
{
|
||||
_fileInfo = new FileInfo(fileName);
|
||||
_volumeFileNames.Add(fileName);
|
||||
if (fileName.EndsWith("001"))
|
||||
{
|
||||
int index = 2;
|
||||
var baseName = fileName.Substring(0, fileName.Length - 3);
|
||||
var volName = baseName + (index > 99 ? index.ToString() :
|
||||
index > 9 ? "0" + index : "00" + index);
|
||||
while (File.Exists(volName))
|
||||
{
|
||||
_volumeFileNames.Add(volName);
|
||||
index++;
|
||||
volName = baseName + (index > 99 ? index.ToString() :
|
||||
index > 9 ? "0" + index : "00" + index);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the ArchiveOpenCallback class.
|
||||
/// </summary>
|
||||
/// <param name="fileName">The archive file name.</param>
|
||||
public ArchiveOpenCallback(string fileName)
|
||||
{
|
||||
Init(fileName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the ArchiveOpenCallback class.
|
||||
/// </summary>
|
||||
/// <param name="fileName">The archive file name.</param>
|
||||
/// <param name="password">Password for the archive.</param>
|
||||
public ArchiveOpenCallback(string fileName, string password) : base(password)
|
||||
{
|
||||
Init(fileName);
|
||||
}
|
||||
|
||||
#region IArchiveOpenCallback Members
|
||||
|
||||
public void SetTotal(IntPtr files, IntPtr bytes) {}
|
||||
|
||||
public void SetCompleted(IntPtr files, IntPtr bytes) {}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IArchiveOpenVolumeCallback Members
|
||||
|
||||
public int GetProperty(ItemPropId propId, ref PropVariant value)
|
||||
{
|
||||
switch (propId)
|
||||
{
|
||||
case ItemPropId.Name:
|
||||
value.VarType = VarEnum.VT_BSTR;
|
||||
value.Value = Marshal.StringToBSTR(_fileInfo.FullName);
|
||||
break;
|
||||
case ItemPropId.IsDirectory:
|
||||
value.VarType = VarEnum.VT_BOOL;
|
||||
value.UInt64Value = (byte) (_fileInfo.Attributes & FileAttributes.Directory);
|
||||
break;
|
||||
case ItemPropId.Size:
|
||||
value.VarType = VarEnum.VT_UI8;
|
||||
value.UInt64Value = (UInt64) _fileInfo.Length;
|
||||
break;
|
||||
case ItemPropId.Attributes:
|
||||
value.VarType = VarEnum.VT_UI4;
|
||||
value.UInt32Value = (uint) _fileInfo.Attributes;
|
||||
break;
|
||||
case ItemPropId.CreationTime:
|
||||
value.VarType = VarEnum.VT_FILETIME;
|
||||
value.Int64Value = _fileInfo.CreationTime.ToFileTime();
|
||||
break;
|
||||
case ItemPropId.LastAccessTime:
|
||||
value.VarType = VarEnum.VT_FILETIME;
|
||||
value.Int64Value = _fileInfo.LastAccessTime.ToFileTime();
|
||||
break;
|
||||
case ItemPropId.LastWriteTime:
|
||||
value.VarType = VarEnum.VT_FILETIME;
|
||||
value.Int64Value = _fileInfo.LastWriteTime.ToFileTime();
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public int GetStream(string name, out IInStream inStream)
|
||||
{
|
||||
if (!File.Exists(name))
|
||||
{
|
||||
name = Path.Combine(Path.GetDirectoryName(_fileInfo.FullName), name);
|
||||
if (!File.Exists(name))
|
||||
{
|
||||
inStream = null;
|
||||
AddException(new FileNotFoundException("The volume \"" + name + "\" was not found. Extraction can be impossible."));
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
_volumeFileNames.Add(name);
|
||||
if (_wrappers.ContainsKey(name))
|
||||
{
|
||||
inStream = _wrappers[name];
|
||||
}
|
||||
else
|
||||
{
|
||||
try
|
||||
{
|
||||
var wrapper = new InStreamWrapper(
|
||||
new FileStream(name, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), true);
|
||||
_wrappers.Add(name, wrapper);
|
||||
inStream = wrapper;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
AddException(new FileNotFoundException("Failed to open the volume \"" + name + "\". Extraction is impossible."));
|
||||
inStream = null;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ICryptoGetTextPassword Members
|
||||
|
||||
/// <summary>
|
||||
/// Sets password for the archive
|
||||
/// </summary>
|
||||
/// <param name="password">Password for the archive</param>
|
||||
/// <returns>Zero if everything is OK</returns>
|
||||
public int CryptoGetTextPassword(out string password)
|
||||
{
|
||||
password = Password;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IDisposable Members
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (_wrappers != null)
|
||||
{
|
||||
foreach (InStreamWrapper wrap in _wrappers.Values)
|
||||
{
|
||||
wrap.Dispose();
|
||||
}
|
||||
_wrappers = null;
|
||||
}
|
||||
#if MONO
|
||||
libp7zInvokerRaw.FreeObject(Handle);
|
||||
#endif
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
#endif
|
||||
}
|
|
@ -1,817 +0,0 @@
|
|||
/* This file is part of SevenZipSharp.
|
||||
|
||||
SevenZipSharp is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
SevenZipSharp is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with SevenZipSharp. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
#pragma warning disable
|
||||
|
||||
#if MONO
|
||||
using SevenZip.Mono.COM;
|
||||
#endif
|
||||
|
||||
namespace SevenZip
|
||||
{
|
||||
#if UNMANAGED
|
||||
#if COMPRESS
|
||||
/// <summary>
|
||||
/// Archive update callback to handle the process of packing files
|
||||
/// </summary>
|
||||
internal sealed class ArchiveUpdateCallback : CallbackBase, IArchiveUpdateCallback, ICryptoGetTextPassword2,
|
||||
IDisposable
|
||||
{
|
||||
#region Fields
|
||||
/// <summary>
|
||||
/// _files.Count if do not count directories
|
||||
/// </summary>
|
||||
private int _actualFilesCount;
|
||||
|
||||
/// <summary>
|
||||
/// For Compressing event.
|
||||
/// </summary>
|
||||
private long _bytesCount;
|
||||
|
||||
private long _bytesWritten;
|
||||
private long _bytesWrittenOld;
|
||||
private SevenZipCompressor _compressor;
|
||||
|
||||
/// <summary>
|
||||
/// No directories.
|
||||
/// </summary>
|
||||
private bool _directoryStructure;
|
||||
|
||||
/// <summary>
|
||||
/// Rate of the done work from [0, 1]
|
||||
/// </summary>
|
||||
private float _doneRate;
|
||||
|
||||
/// <summary>
|
||||
/// The names of the archive entries
|
||||
/// </summary>
|
||||
private string[] _entries;
|
||||
|
||||
/// <summary>
|
||||
/// Array of files to pack
|
||||
/// </summary>
|
||||
private FileInfo[] _files;
|
||||
|
||||
private InStreamWrapper _fileStream;
|
||||
|
||||
private uint _indexInArchive;
|
||||
private uint _indexOffset;
|
||||
|
||||
/// <summary>
|
||||
/// Common root of file names length.
|
||||
/// </summary>
|
||||
private int _rootLength;
|
||||
|
||||
/// <summary>
|
||||
/// Input streams to be compressed.
|
||||
/// </summary>
|
||||
private Stream[] _streams;
|
||||
|
||||
private UpdateData _updateData;
|
||||
private List<InStreamWrapper> _wrappersToDispose;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the default item name used in MemoryStream compression.
|
||||
/// </summary>
|
||||
public string DefaultItemName { private get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the value indicating whether to compress as fast as possible, without calling events.
|
||||
/// </summary>
|
||||
public bool FastCompression { private get; set; }
|
||||
#if !WINCE
|
||||
private int _memoryPressure;
|
||||
#endif
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the ArchiveUpdateCallback class
|
||||
/// </summary>
|
||||
/// <param name="files">Array of files to pack</param>
|
||||
/// <param name="rootLength">Common file names root length</param>
|
||||
/// <param name="compressor">The owner of the callback</param>
|
||||
/// <param name="updateData">The compression parameters.</param>
|
||||
/// <param name="directoryStructure">Preserve directory structure.</param>
|
||||
public ArchiveUpdateCallback(
|
||||
FileInfo[] files, int rootLength,
|
||||
SevenZipCompressor compressor, UpdateData updateData, bool directoryStructure)
|
||||
{
|
||||
Init(files, rootLength, compressor, updateData, directoryStructure);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the ArchiveUpdateCallback class
|
||||
/// </summary>
|
||||
/// <param name="files">Array of files to pack</param>
|
||||
/// <param name="rootLength">Common file names root length</param>
|
||||
/// <param name="password">The archive password</param>
|
||||
/// <param name="compressor">The owner of the callback</param>
|
||||
/// <param name="updateData">The compression parameters.</param>
|
||||
/// <param name="directoryStructure">Preserve directory structure.</param>
|
||||
public ArchiveUpdateCallback(
|
||||
FileInfo[] files, int rootLength, string password,
|
||||
SevenZipCompressor compressor, UpdateData updateData, bool directoryStructure)
|
||||
: base(password)
|
||||
{
|
||||
Init(files, rootLength, compressor, updateData, directoryStructure);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the ArchiveUpdateCallback class
|
||||
/// </summary>
|
||||
/// <param name="stream">The input stream</param>
|
||||
/// <param name="compressor">The owner of the callback</param>
|
||||
/// <param name="updateData">The compression parameters.</param>
|
||||
/// <param name="directoryStructure">Preserve directory structure.</param>
|
||||
public ArchiveUpdateCallback(
|
||||
Stream stream, SevenZipCompressor compressor, UpdateData updateData, bool directoryStructure)
|
||||
{
|
||||
Init(stream, compressor, updateData, directoryStructure);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the ArchiveUpdateCallback class
|
||||
/// </summary>
|
||||
/// <param name="stream">The input stream</param>
|
||||
/// <param name="password">The archive password</param>
|
||||
/// <param name="compressor">The owner of the callback</param>
|
||||
/// <param name="updateData">The compression parameters.</param>
|
||||
/// <param name="directoryStructure">Preserve directory structure.</param>
|
||||
public ArchiveUpdateCallback(
|
||||
Stream stream, string password, SevenZipCompressor compressor, UpdateData updateData,
|
||||
bool directoryStructure)
|
||||
: base(password)
|
||||
{
|
||||
Init(stream, compressor, updateData, directoryStructure);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the ArchiveUpdateCallback class
|
||||
/// </summary>
|
||||
/// <param name="streamDict">Dictionary<file stream, name of the archive entry></param>
|
||||
/// <param name="compressor">The owner of the callback</param>
|
||||
/// <param name="updateData">The compression parameters.</param>
|
||||
/// <param name="directoryStructure">Preserve directory structure.</param>
|
||||
public ArchiveUpdateCallback(
|
||||
Dictionary<string, Stream> streamDict,
|
||||
SevenZipCompressor compressor, UpdateData updateData, bool directoryStructure)
|
||||
{
|
||||
Init(streamDict, compressor, updateData, directoryStructure);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the ArchiveUpdateCallback class
|
||||
/// </summary>
|
||||
/// <param name="streamDict">Dictionary<file stream, name of the archive entry></param>
|
||||
/// <param name="password">The archive password</param>
|
||||
/// <param name="compressor">The owner of the callback</param>
|
||||
/// <param name="updateData">The compression parameters.</param>
|
||||
/// <param name="directoryStructure">Preserve directory structure.</param>
|
||||
public ArchiveUpdateCallback(
|
||||
Dictionary<string, Stream> streamDict, string password,
|
||||
SevenZipCompressor compressor, UpdateData updateData, bool directoryStructure)
|
||||
: base(password)
|
||||
{
|
||||
Init(streamDict, compressor, updateData, directoryStructure);
|
||||
}
|
||||
|
||||
private void CommonInit(SevenZipCompressor compressor, UpdateData updateData, bool directoryStructure)
|
||||
{
|
||||
_compressor = compressor;
|
||||
_indexInArchive = updateData.FilesCount;
|
||||
_indexOffset = updateData.Mode != InternalCompressionMode.Append ? 0 : _indexInArchive;
|
||||
if (_compressor.ArchiveFormat == OutArchiveFormat.Zip)
|
||||
{
|
||||
_wrappersToDispose = new List<InStreamWrapper>();
|
||||
}
|
||||
_updateData = updateData;
|
||||
_directoryStructure = directoryStructure;
|
||||
DefaultItemName = "default";
|
||||
}
|
||||
|
||||
private void Init(
|
||||
FileInfo[] files, int rootLength, SevenZipCompressor compressor,
|
||||
UpdateData updateData, bool directoryStructure)
|
||||
{
|
||||
_files = files;
|
||||
_rootLength = rootLength;
|
||||
if (files != null)
|
||||
{
|
||||
foreach (var fi in files)
|
||||
{
|
||||
if (fi.Exists)
|
||||
{
|
||||
_bytesCount += fi.Length;
|
||||
if ((fi.Attributes & FileAttributes.Directory) == 0)
|
||||
{
|
||||
_actualFilesCount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
CommonInit(compressor, updateData, directoryStructure);
|
||||
}
|
||||
|
||||
private void Init(
|
||||
Stream stream, SevenZipCompressor compressor, UpdateData updateData, bool directoryStructure)
|
||||
{
|
||||
_fileStream = new InStreamWrapper(stream, false);
|
||||
_fileStream.BytesRead += IntEventArgsHandler;
|
||||
_actualFilesCount = 1;
|
||||
try
|
||||
{
|
||||
_bytesCount = stream.Length;
|
||||
}
|
||||
catch (NotSupportedException)
|
||||
{
|
||||
_bytesCount = -1;
|
||||
}
|
||||
try
|
||||
{
|
||||
stream.Seek(0, SeekOrigin.Begin);
|
||||
}
|
||||
catch (NotSupportedException)
|
||||
{
|
||||
_bytesCount = -1;
|
||||
}
|
||||
CommonInit(compressor, updateData, directoryStructure);
|
||||
}
|
||||
|
||||
private void Init(
|
||||
Dictionary<string, Stream> streamDict,
|
||||
SevenZipCompressor compressor, UpdateData updateData, bool directoryStructure)
|
||||
{
|
||||
_streams = new Stream[streamDict.Count];
|
||||
streamDict.Values.CopyTo(_streams, 0);
|
||||
_entries = new string[streamDict.Count];
|
||||
streamDict.Keys.CopyTo(_entries, 0);
|
||||
_actualFilesCount = streamDict.Count;
|
||||
//zero 11-oct-2014 - we want sequential streams only. length is unknown.
|
||||
//foreach (Stream str in _streams)
|
||||
//{
|
||||
// if (str != null)
|
||||
// {
|
||||
// _bytesCount += str.Length;
|
||||
// }
|
||||
//}
|
||||
CommonInit(compressor, updateData, directoryStructure);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the dictionary size.
|
||||
/// </summary>
|
||||
public float DictionarySize
|
||||
{
|
||||
set
|
||||
{
|
||||
#if !WINCE
|
||||
_memoryPressure = (int)(value * 1024 * 1024);
|
||||
GC.AddMemoryPressure(_memoryPressure);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Raises events for the GetStream method.
|
||||
/// </summary>
|
||||
/// <param name="index">The current item index.</param>
|
||||
/// <returns>True if not cancelled; otherwise, false.</returns>
|
||||
private bool EventsForGetStream(uint index)
|
||||
{
|
||||
if (!FastCompression)
|
||||
{
|
||||
if (_fileStream != null)
|
||||
{
|
||||
_fileStream.BytesRead += IntEventArgsHandler;
|
||||
}
|
||||
_doneRate += 1.0f / _actualFilesCount;
|
||||
var fiea = new FileNameEventArgs(_files != null? _files[index].Name : _entries[index],
|
||||
PercentDoneEventArgs.ProducePercentDone(_doneRate));
|
||||
OnFileCompression(fiea);
|
||||
if (fiea.Cancel)
|
||||
{
|
||||
Canceled = true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
#region Events
|
||||
|
||||
/// <summary>
|
||||
/// Occurs when the next file is going to be packed.
|
||||
/// </summary>
|
||||
/// <remarks>Occurs when 7-zip engine requests for an input stream for the next file to pack it</remarks>
|
||||
public event EventHandler<FileNameEventArgs> FileCompressionStarted;
|
||||
|
||||
/// <summary>
|
||||
/// Occurs when data are being compressed.
|
||||
/// </summary>
|
||||
public event EventHandler<ProgressEventArgs> Compressing;
|
||||
|
||||
/// <summary>
|
||||
/// Occurs when the current file was compressed.
|
||||
/// </summary>
|
||||
public event EventHandler FileCompressionFinished;
|
||||
|
||||
private void OnFileCompression(FileNameEventArgs e)
|
||||
{
|
||||
if (FileCompressionStarted != null)
|
||||
{
|
||||
FileCompressionStarted(this, e);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnCompressing(ProgressEventArgs e)
|
||||
{
|
||||
if (Compressing != null)
|
||||
{
|
||||
Compressing(this, e);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnFileCompressionFinished(EventArgs e)
|
||||
{
|
||||
if (FileCompressionFinished != null)
|
||||
{
|
||||
FileCompressionFinished(this, e);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IArchiveUpdateCallback Members
|
||||
|
||||
public void SetTotal(ulong total) {}
|
||||
|
||||
public void SetCompleted(ref ulong completeValue) {}
|
||||
|
||||
public int GetUpdateItemInfo(uint index, ref int newData, ref int newProperties, ref uint indexInArchive)
|
||||
{
|
||||
switch (_updateData.Mode)
|
||||
{
|
||||
case InternalCompressionMode.Create:
|
||||
newData = 1;
|
||||
newProperties = 1;
|
||||
indexInArchive = UInt32.MaxValue;
|
||||
break;
|
||||
case InternalCompressionMode.Append:
|
||||
if (index < _indexInArchive)
|
||||
{
|
||||
newData = 0;
|
||||
newProperties = 0;
|
||||
indexInArchive = index;
|
||||
}
|
||||
else
|
||||
{
|
||||
newData = 1;
|
||||
newProperties = 1;
|
||||
indexInArchive = UInt32.MaxValue;
|
||||
}
|
||||
break;
|
||||
case InternalCompressionMode.Modify:
|
||||
newData = 0;
|
||||
newProperties = Convert.ToInt32(_updateData.FileNamesToModify.ContainsKey((int)index)
|
||||
&& _updateData.FileNamesToModify[(int)index] != null);
|
||||
if (_updateData.FileNamesToModify.ContainsKey((int)index)
|
||||
&& _updateData.FileNamesToModify[(int)index] == null)
|
||||
{
|
||||
indexInArchive = (UInt32)_updateData.ArchiveFileData.Count;
|
||||
foreach (KeyValuePair<Int32, string> pairModification in _updateData.FileNamesToModify)
|
||||
if ((pairModification.Key <= index) && (pairModification.Value == null))
|
||||
{
|
||||
do
|
||||
{
|
||||
indexInArchive--;
|
||||
}
|
||||
while ((indexInArchive > 0) && _updateData.FileNamesToModify.ContainsKey((Int32)indexInArchive)
|
||||
&& (_updateData.FileNamesToModify[(Int32)indexInArchive] == null));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
indexInArchive = index;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public int GetProperty(uint index, ItemPropId propID, ref PropVariant value)
|
||||
{
|
||||
index -= _indexOffset;
|
||||
try
|
||||
{
|
||||
switch (propID)
|
||||
{
|
||||
case ItemPropId.IsAnti:
|
||||
value.VarType = VarEnum.VT_BOOL;
|
||||
value.UInt64Value = 0;
|
||||
break;
|
||||
case ItemPropId.Path:
|
||||
#region Path
|
||||
|
||||
value.VarType = VarEnum.VT_BSTR;
|
||||
string val = DefaultItemName;
|
||||
if (_updateData.Mode != InternalCompressionMode.Modify)
|
||||
{
|
||||
if (_files == null)
|
||||
{
|
||||
if (_entries != null)
|
||||
{
|
||||
val = _entries[index];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_directoryStructure)
|
||||
{
|
||||
if (_rootLength > 0)
|
||||
{
|
||||
val = _files[index].FullName.Substring(_rootLength);
|
||||
}
|
||||
else
|
||||
{
|
||||
val = _files[index].FullName[0] + _files[index].FullName.Substring(2);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
val = _files[index].Name;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
val = _updateData.FileNamesToModify[(int) index];
|
||||
}
|
||||
value.Value = Marshal.StringToBSTR(val);
|
||||
#endregion
|
||||
break;
|
||||
case ItemPropId.IsDirectory:
|
||||
value.VarType = VarEnum.VT_BOOL;
|
||||
if (_updateData.Mode != InternalCompressionMode.Modify)
|
||||
{
|
||||
if (_files == null)
|
||||
{
|
||||
if (_streams == null)
|
||||
{
|
||||
value.UInt64Value = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
value.UInt64Value = (ulong)(_streams[index] == null ? 1 : 0);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
value.UInt64Value = (byte)(_files[index].Attributes & FileAttributes.Directory);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
value.UInt64Value = Convert.ToUInt64(_updateData.ArchiveFileData[(int) index].IsDirectory);
|
||||
}
|
||||
break;
|
||||
case ItemPropId.Size:
|
||||
#region Size
|
||||
|
||||
//zero 11-oct-2014 - this doesnt matter, we think it's only used for updating the progress indicator
|
||||
value.VarType = VarEnum.VT_UI8;
|
||||
//value.UInt64Value = unchecked((ulong)-1);
|
||||
break;
|
||||
|
||||
value.VarType = VarEnum.VT_UI8;
|
||||
UInt64 size;
|
||||
if (_updateData.Mode != InternalCompressionMode.Modify)
|
||||
{
|
||||
if (_files == null)
|
||||
{
|
||||
if (_streams == null)
|
||||
{
|
||||
size = _bytesCount > 0 ? (ulong) _bytesCount : 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
size = (ulong) (_streams[index] == null? 0 : _streams[index].Length);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
size = (_files[index].Attributes & FileAttributes.Directory) == 0
|
||||
? (ulong) _files[index].Length
|
||||
: 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
size = _updateData.ArchiveFileData[(int) index].Size;
|
||||
}
|
||||
value.UInt64Value = size;
|
||||
|
||||
#endregion
|
||||
break;
|
||||
case ItemPropId.Attributes:
|
||||
value.VarType = VarEnum.VT_UI4;
|
||||
if (_updateData.Mode != InternalCompressionMode.Modify)
|
||||
{
|
||||
if (_files == null)
|
||||
{
|
||||
if (_streams == null)
|
||||
{
|
||||
value.UInt32Value = (uint)FileAttributes.Normal;
|
||||
}
|
||||
else
|
||||
{
|
||||
value.UInt32Value = (uint)(_streams[index] == null ? FileAttributes.Directory : FileAttributes.Normal);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
value.UInt32Value = (uint) _files[index].Attributes;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
value.UInt32Value = _updateData.ArchiveFileData[(int) index].Attributes;
|
||||
}
|
||||
break;
|
||||
#region Times
|
||||
case ItemPropId.CreationTime:
|
||||
value.VarType = VarEnum.VT_FILETIME;
|
||||
if (_updateData.Mode != InternalCompressionMode.Modify)
|
||||
{
|
||||
value.Int64Value = _files == null
|
||||
? DateTime.Now.ToFileTime()
|
||||
: _files[index].CreationTime.ToFileTime();
|
||||
}
|
||||
else
|
||||
{
|
||||
value.Int64Value = _updateData.ArchiveFileData[(int) index].CreationTime.ToFileTime();
|
||||
}
|
||||
break;
|
||||
case ItemPropId.LastAccessTime:
|
||||
value.VarType = VarEnum.VT_FILETIME;
|
||||
if (_updateData.Mode != InternalCompressionMode.Modify)
|
||||
{
|
||||
value.Int64Value = _files == null
|
||||
? DateTime.Now.ToFileTime()
|
||||
: _files[index].LastAccessTime.ToFileTime();
|
||||
}
|
||||
else
|
||||
{
|
||||
value.Int64Value = _updateData.ArchiveFileData[(int) index].LastAccessTime.ToFileTime();
|
||||
}
|
||||
break;
|
||||
case ItemPropId.LastWriteTime:
|
||||
value.VarType = VarEnum.VT_FILETIME;
|
||||
if (_updateData.Mode != InternalCompressionMode.Modify)
|
||||
{
|
||||
value.Int64Value = _files == null
|
||||
? DateTime.Now.ToFileTime()
|
||||
: _files[index].LastWriteTime.ToFileTime();
|
||||
}
|
||||
else
|
||||
{
|
||||
value.Int64Value = _updateData.ArchiveFileData[(int) index].LastWriteTime.ToFileTime();
|
||||
}
|
||||
break;
|
||||
#endregion
|
||||
case ItemPropId.Extension:
|
||||
#region Extension
|
||||
|
||||
value.VarType = VarEnum.VT_BSTR;
|
||||
if (_updateData.Mode != InternalCompressionMode.Modify)
|
||||
{
|
||||
try
|
||||
{
|
||||
val = _files != null
|
||||
? _files[index].Extension.Substring(1)
|
||||
: _entries == null
|
||||
? ""
|
||||
: Path.GetExtension(_entries[index]);
|
||||
value.Value = Marshal.StringToBSTR(val);
|
||||
}
|
||||
catch (ArgumentException)
|
||||
{
|
||||
value.Value = Marshal.StringToBSTR("");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
val = Path.GetExtension(_updateData.ArchiveFileData[(int) index].FileName);
|
||||
value.Value = Marshal.StringToBSTR(val);
|
||||
}
|
||||
|
||||
#endregion
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
AddException(e);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the stream for 7-zip library.
|
||||
/// </summary>
|
||||
/// <param name="index">File index</param>
|
||||
/// <param name="inStream">Input file stream</param>
|
||||
/// <returns>Zero if Ok</returns>
|
||||
public int GetStream(uint index, out
|
||||
#if !MONO
|
||||
ISequentialInStream
|
||||
#else
|
||||
HandleRef
|
||||
#endif
|
||||
inStream)
|
||||
{
|
||||
index -= _indexOffset;
|
||||
if (_files != null)
|
||||
{
|
||||
_fileStream = null;
|
||||
try
|
||||
{
|
||||
if (File.Exists(_files[index].FullName))
|
||||
{
|
||||
_fileStream = new InStreamWrapper(
|
||||
new FileStream(_files[index].FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite),
|
||||
true);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
AddException(e);
|
||||
inStream = null;
|
||||
return -1;
|
||||
}
|
||||
inStream = _fileStream;
|
||||
if (!EventsForGetStream(index))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_streams == null)
|
||||
{
|
||||
inStream = _fileStream;
|
||||
}
|
||||
else
|
||||
{
|
||||
_fileStream = new InStreamWrapper(_streams[index], true);
|
||||
inStream = _fileStream;
|
||||
if (!EventsForGetStream(index))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public long EnumProperties(IntPtr enumerator)
|
||||
{
|
||||
//Not implemented HRESULT
|
||||
return 0x80004001L;
|
||||
}
|
||||
|
||||
public void SetOperationResult(OperationResult operationResult)
|
||||
{
|
||||
if (operationResult != OperationResult.Ok && ReportErrors)
|
||||
{
|
||||
switch (operationResult)
|
||||
{
|
||||
case OperationResult.CrcError:
|
||||
AddException(new ExtractionFailedException("File is corrupted. Crc check has failed."));
|
||||
break;
|
||||
case OperationResult.DataError:
|
||||
AddException(new ExtractionFailedException("File is corrupted. Data error has occured."));
|
||||
break;
|
||||
case OperationResult.UnsupportedMethod:
|
||||
AddException(new ExtractionFailedException("Unsupported method error has occured."));
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (_fileStream != null)
|
||||
{
|
||||
|
||||
_fileStream.BytesRead -= IntEventArgsHandler;
|
||||
//Specific Zip implementation - can not Dispose files for Zip.
|
||||
if (_compressor.ArchiveFormat != OutArchiveFormat.Zip)
|
||||
{
|
||||
try
|
||||
{
|
||||
_fileStream.Dispose();
|
||||
}
|
||||
catch (ObjectDisposedException) {}
|
||||
}
|
||||
else
|
||||
{
|
||||
_wrappersToDispose.Add(_fileStream);
|
||||
}
|
||||
_fileStream = null;
|
||||
GC.Collect();
|
||||
// Issue #6987
|
||||
//GC.WaitForPendingFinalizers();
|
||||
}
|
||||
OnFileCompressionFinished(EventArgs.Empty);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ICryptoGetTextPassword2 Members
|
||||
|
||||
public int CryptoGetTextPassword2(ref int passwordIsDefined, out string password)
|
||||
{
|
||||
passwordIsDefined = String.IsNullOrEmpty(Password) ? 0 : 1;
|
||||
password = Password;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IDisposable Members
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
#if !WINCE
|
||||
GC.RemoveMemoryPressure(_memoryPressure);
|
||||
#endif
|
||||
if (_fileStream != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
_fileStream.Dispose();
|
||||
}
|
||||
catch (ObjectDisposedException) {}
|
||||
}
|
||||
if (_wrappersToDispose != null)
|
||||
{
|
||||
foreach (var wrapper in _wrappersToDispose)
|
||||
{
|
||||
try
|
||||
{
|
||||
wrapper.Dispose();
|
||||
}
|
||||
catch (ObjectDisposedException) {}
|
||||
}
|
||||
}
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private void IntEventArgsHandler(object sender, IntEventArgs e)
|
||||
{
|
||||
//zero 11-oct-2014 - first of all, its possible for _files to be null (if we're compressing streams)
|
||||
//second of all, if we're compressing streams, we cant possibly have _bytesCount anyway. so.. goodbye
|
||||
//lock (_files)
|
||||
//{
|
||||
// var pold = (byte) ((_bytesWrittenOld*100)/_bytesCount);
|
||||
// _bytesWritten += e.Value;
|
||||
// byte pnow;
|
||||
// if (_bytesCount < _bytesWritten) //Holy shit, this check for ZIP is golden
|
||||
// {
|
||||
// pnow = 100;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// pnow = (byte)((_bytesWritten * 100) / _bytesCount);
|
||||
// }
|
||||
// if (pnow > pold)
|
||||
// {
|
||||
// _bytesWrittenOld = _bytesWritten;
|
||||
// OnCompressing(new ProgressEventArgs(pnow, (byte) (pnow - pold)));
|
||||
// }
|
||||
//}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -1,842 +0,0 @@
|
|||
/* This file is part of SevenZipSharp.
|
||||
|
||||
SevenZipSharp is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
SevenZipSharp is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with SevenZipSharp. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Globalization;
|
||||
#if !WINCE
|
||||
using System.Runtime.Remoting.Messaging;
|
||||
#endif
|
||||
#if DOTNET20
|
||||
using System.Threading;
|
||||
#else
|
||||
using System.Windows.Threading;
|
||||
#endif
|
||||
#if MONO
|
||||
using SevenZip.Mono.COM;
|
||||
#endif
|
||||
|
||||
namespace SevenZip
|
||||
{
|
||||
#if UNMANAGED
|
||||
|
||||
/// <summary>
|
||||
/// The way of the event synchronization.
|
||||
/// </summary>
|
||||
public enum EventSynchronizationStrategy
|
||||
{
|
||||
/// <summary>
|
||||
/// Events are called synchronously if user can do some action; that is, cancel the execution process for example.
|
||||
/// </summary>
|
||||
Default,
|
||||
/// <summary>
|
||||
/// Always call events asynchronously.
|
||||
/// </summary>
|
||||
AlwaysAsynchronous,
|
||||
/// <summary>
|
||||
/// Always call events synchronously.
|
||||
/// </summary>
|
||||
AlwaysSynchronous
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// SevenZip Extractor/Compressor base class. Implements Password string, ReportErrors flag.
|
||||
/// </summary>
|
||||
public abstract class SevenZipBase : MarshalByRefObject
|
||||
{
|
||||
private readonly string _password;
|
||||
private readonly bool _reportErrors;
|
||||
private readonly int _uniqueID;
|
||||
private static readonly List<int> Identificators = new List<int>();
|
||||
#if !WINCE
|
||||
internal static readonly AsyncCallback AsyncCallbackImplementation = AsyncCallbackMethod;
|
||||
|
||||
/// <summary>
|
||||
/// True if the instance of the class needs to be recreated in new thread context; otherwise, false.
|
||||
/// </summary>
|
||||
protected internal bool NeedsToBeRecreated;
|
||||
|
||||
/// <summary>
|
||||
/// AsyncCallback implementation used in asynchronous invocations.
|
||||
/// </summary>
|
||||
/// <param name="ar">IAsyncResult instance.</param>
|
||||
internal static void AsyncCallbackMethod(IAsyncResult ar)
|
||||
{
|
||||
var result = (AsyncResult)ar;
|
||||
result.AsyncDelegate.GetType().GetMethod("EndInvoke").Invoke(result.AsyncDelegate, new[] { ar });
|
||||
((SevenZipBase)ar.AsyncState).ReleaseContext();
|
||||
}
|
||||
|
||||
virtual internal void SaveContext(
|
||||
#if !DOTNET20
|
||||
DispatcherPriority priority = DispatcherPriority.Normal
|
||||
#endif
|
||||
)
|
||||
{
|
||||
#if !DOTNET20
|
||||
Dispatcher = Dispatcher.CurrentDispatcher;
|
||||
Priority = priority;
|
||||
#else
|
||||
Context = SynchronizationContext.Current;
|
||||
#endif
|
||||
NeedsToBeRecreated = true;
|
||||
}
|
||||
|
||||
virtual internal void ReleaseContext()
|
||||
{
|
||||
#if !DOTNET20
|
||||
Dispatcher = null;
|
||||
#else
|
||||
Context = null;
|
||||
#endif
|
||||
NeedsToBeRecreated = true;
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
private delegate void EventHandlerDelegate<T>(EventHandler<T> handler, T e) where T : EventArgs;
|
||||
|
||||
internal void OnEvent<T>(EventHandler<T> handler, T e, bool synchronous) where T : EventArgs
|
||||
{
|
||||
try
|
||||
{
|
||||
if (handler != null)
|
||||
{
|
||||
switch (EventSynchronization)
|
||||
{
|
||||
case EventSynchronizationStrategy.AlwaysAsynchronous:
|
||||
synchronous = false;
|
||||
break;
|
||||
case EventSynchronizationStrategy.AlwaysSynchronous:
|
||||
synchronous = true;
|
||||
break;
|
||||
}
|
||||
if (
|
||||
#if !DOTNET20
|
||||
Dispatcher == null
|
||||
#else
|
||||
Context == null
|
||||
#endif
|
||||
)
|
||||
{
|
||||
// Usual synchronous call
|
||||
handler(this, e);
|
||||
}
|
||||
else
|
||||
{
|
||||
#if !DOTNET20
|
||||
var eventHandlerDelegate = new EventHandlerDelegate<T>((h, ee) => h(this, ee));
|
||||
if (synchronous)
|
||||
{
|
||||
// Could be just handler(this, e);
|
||||
Dispatcher.Invoke(eventHandlerDelegate, Priority, handler, e);
|
||||
}
|
||||
else
|
||||
{
|
||||
Dispatcher.BeginInvoke(eventHandlerDelegate, Priority, handler, e);
|
||||
}
|
||||
#else
|
||||
var callback = new SendOrPostCallback((obj) =>
|
||||
{
|
||||
var array = (object[])obj;
|
||||
((EventHandler<T>)array[0])(array[1], (T)array[2]);
|
||||
});
|
||||
if (synchronous)
|
||||
{
|
||||
// Could be just handler(this, e);
|
||||
this.Context.Send(callback, new object[] { handler, this, e });
|
||||
}
|
||||
else
|
||||
{
|
||||
this.Context.Post(callback, new object[] { handler, this, e });
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
AddException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
#if !DOTNET20
|
||||
/// <summary>
|
||||
/// Gets or sets the Dispatcher object for this instance.
|
||||
/// It will be used to fire events in the user context.
|
||||
/// </summary>
|
||||
internal Dispatcher Dispatcher { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the Dispatcher priority of calling user events.
|
||||
/// </summary>
|
||||
internal DispatcherPriority Priority { get; set; }
|
||||
#else
|
||||
internal SynchronizationContext Context { get; set; }
|
||||
#endif
|
||||
/// <summary>
|
||||
/// Gets or sets the event synchronization strategy.
|
||||
/// </summary>
|
||||
public EventSynchronizationStrategy EventSynchronization { get; set; }
|
||||
#else // WINCE
|
||||
internal void OnEvent<T>(EventHandler<T> handler, T e, bool synchronous) where T : System.EventArgs
|
||||
{
|
||||
try
|
||||
{
|
||||
handler(this, e);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
AddException(ex);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
/// <summary>
|
||||
/// Gets the unique identificator of this SevenZipBase instance.
|
||||
/// </summary>
|
||||
public int UniqueID
|
||||
{
|
||||
get
|
||||
{
|
||||
return _uniqueID;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// User exceptions thrown during the requested operations, for example, in events.
|
||||
/// </summary>
|
||||
private readonly List<Exception> _exceptions = new List<Exception>();
|
||||
|
||||
private static int GetUniqueID()
|
||||
{
|
||||
lock(Identificators)
|
||||
{
|
||||
|
||||
int id;
|
||||
var rnd = new Random(DateTime.Now.Millisecond);
|
||||
do
|
||||
{
|
||||
id = rnd.Next(Int32.MaxValue);
|
||||
}
|
||||
while (Identificators.Contains(id));
|
||||
Identificators.Add(id);
|
||||
return id;
|
||||
}
|
||||
}
|
||||
|
||||
#region Constructors
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipBase class.
|
||||
/// </summary>
|
||||
protected SevenZipBase()
|
||||
{
|
||||
_password = "";
|
||||
_reportErrors = true;
|
||||
_uniqueID = GetUniqueID();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipBase class
|
||||
/// </summary>
|
||||
/// <param name="password">The archive password.</param>
|
||||
protected SevenZipBase(string password)
|
||||
{
|
||||
if (String.IsNullOrEmpty(password))
|
||||
{
|
||||
throw new SevenZipException("Empty password was specified.");
|
||||
}
|
||||
_password = password;
|
||||
_reportErrors = true;
|
||||
_uniqueID = GetUniqueID();
|
||||
}
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// Removes the UniqueID from the list.
|
||||
/// </summary>
|
||||
~SevenZipBase()
|
||||
{
|
||||
// This lock probably isn't necessary but just in case...
|
||||
lock (Identificators)
|
||||
{
|
||||
Identificators.Remove(_uniqueID);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the archive password
|
||||
/// </summary>
|
||||
public string Password
|
||||
{
|
||||
get
|
||||
{
|
||||
return _password;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets throw exceptions on archive errors flag
|
||||
/// </summary>
|
||||
internal bool ReportErrors
|
||||
{
|
||||
get
|
||||
{
|
||||
return _reportErrors;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the user exceptions thrown during the requested operations, for example, in events.
|
||||
/// </summary>
|
||||
internal ReadOnlyCollection<Exception> Exceptions
|
||||
{
|
||||
get
|
||||
{
|
||||
return new ReadOnlyCollection<Exception>(_exceptions);
|
||||
}
|
||||
}
|
||||
|
||||
internal void AddException(Exception e)
|
||||
{
|
||||
_exceptions.Add(e);
|
||||
}
|
||||
|
||||
internal void ClearExceptions()
|
||||
{
|
||||
_exceptions.Clear();
|
||||
}
|
||||
|
||||
internal bool HasExceptions
|
||||
{
|
||||
get
|
||||
{
|
||||
return _exceptions.Count > 0;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Throws the specified exception when is able to.
|
||||
/// </summary>
|
||||
/// <param name="e">The exception to throw.</param>
|
||||
/// <param name="handler">The handler responsible for the exception.</param>
|
||||
internal bool ThrowException(CallbackBase handler, params Exception[] e)
|
||||
{
|
||||
if (_reportErrors && (handler == null || !handler.Canceled))
|
||||
{
|
||||
throw e[0];
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
internal void ThrowUserException()
|
||||
{
|
||||
if (HasExceptions)
|
||||
{
|
||||
throw new SevenZipException(SevenZipException.USER_EXCEPTION_MESSAGE);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Throws exception if HRESULT != 0.
|
||||
/// </summary>
|
||||
/// <param name="hresult">Result code to check.</param>
|
||||
/// <param name="message">Exception message.</param>
|
||||
/// <param name="handler">The class responsible for the callback.</param>
|
||||
internal void CheckedExecute(int hresult, string message, CallbackBase handler)
|
||||
{
|
||||
if (hresult != (int)OperationResult.Ok || handler.HasExceptions)
|
||||
{
|
||||
if (!handler.HasExceptions)
|
||||
{
|
||||
if (hresult < -2000000000)
|
||||
{
|
||||
ThrowException(handler,
|
||||
new SevenZipException(
|
||||
"The execution has failed due to the bug in the SevenZipSharp.\n" +
|
||||
"Please report about it to http://sevenzipsharp.codeplex.com/WorkItem/List.aspx, post the release number and attach the archive."));
|
||||
}
|
||||
else
|
||||
{
|
||||
ThrowException(handler,
|
||||
new SevenZipException(message + hresult.ToString(CultureInfo.InvariantCulture) +
|
||||
'.'));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ThrowException(handler, handler.Exceptions[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if !WINCE && !MONO
|
||||
/// <summary>
|
||||
/// Changes the path to the 7-zip native library.
|
||||
/// </summary>
|
||||
/// <param name="libraryPath">The path to the 7-zip native library.</param>
|
||||
public static void SetLibraryPath(string libraryPath)
|
||||
{
|
||||
SevenZipLibraryManager.SetLibraryPath(libraryPath);
|
||||
}
|
||||
#endif
|
||||
/// <summary>
|
||||
/// Gets the current library features.
|
||||
/// </summary>
|
||||
public static LibraryFeature CurrentLibraryFeatures
|
||||
{
|
||||
get
|
||||
{
|
||||
return SevenZipLibraryManager.CurrentLibraryFeatures;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determines whether the specified System.Object is equal to the current SevenZipBase.
|
||||
/// </summary>
|
||||
/// <param name="obj">The System.Object to compare with the current SevenZipBase.</param>
|
||||
/// <returns>true if the specified System.Object is equal to the current SevenZipBase; otherwise, false.</returns>
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
var inst = obj as SevenZipBase;
|
||||
if (inst == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return _uniqueID == inst._uniqueID;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Serves as a hash function for a particular type.
|
||||
/// </summary>
|
||||
/// <returns> A hash code for the current SevenZipBase.</returns>
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return _uniqueID;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a System.String that represents the current SevenZipBase.
|
||||
/// </summary>
|
||||
/// <returns>A System.String that represents the current SevenZipBase.</returns>
|
||||
public override string ToString()
|
||||
{
|
||||
var type = "SevenZipBase";
|
||||
if (this is SevenZipExtractor)
|
||||
{
|
||||
type = "SevenZipExtractor";
|
||||
}
|
||||
if (this is SevenZipCompressor)
|
||||
{
|
||||
type = "SevenZipCompressor";
|
||||
}
|
||||
return string.Format("{0} [{1}]", type, _uniqueID);
|
||||
}
|
||||
}
|
||||
|
||||
internal class CallbackBase : MarshalByRefObject
|
||||
{
|
||||
private readonly string _password;
|
||||
private readonly bool _reportErrors;
|
||||
/// <summary>
|
||||
/// User exceptions thrown during the requested operations, for example, in events.
|
||||
/// </summary>
|
||||
private readonly List<Exception> _exceptions = new List<Exception>();
|
||||
|
||||
#region Constructors
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the CallbackBase class.
|
||||
/// </summary>
|
||||
protected CallbackBase()
|
||||
{
|
||||
_password = "";
|
||||
_reportErrors = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the CallbackBase class.
|
||||
/// </summary>
|
||||
/// <param name="password">The archive password.</param>
|
||||
protected CallbackBase(string password)
|
||||
{
|
||||
if (String.IsNullOrEmpty(password))
|
||||
{
|
||||
throw new SevenZipException("Empty password was specified.");
|
||||
}
|
||||
_password = password;
|
||||
_reportErrors = true;
|
||||
}
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the archive password
|
||||
/// </summary>
|
||||
public string Password
|
||||
{
|
||||
get
|
||||
{
|
||||
return _password;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the value indicating whether the current procedure was cancelled.
|
||||
/// </summary>
|
||||
public bool Canceled { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets throw exceptions on archive errors flag
|
||||
/// </summary>
|
||||
public bool ReportErrors
|
||||
{
|
||||
get
|
||||
{
|
||||
return _reportErrors;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the user exceptions thrown during the requested operations, for example, in events.
|
||||
/// </summary>
|
||||
public ReadOnlyCollection<Exception> Exceptions
|
||||
{
|
||||
get
|
||||
{
|
||||
return new ReadOnlyCollection<Exception>(_exceptions);
|
||||
}
|
||||
}
|
||||
|
||||
public void AddException(Exception e)
|
||||
{
|
||||
_exceptions.Add(e);
|
||||
}
|
||||
|
||||
public void ClearExceptions()
|
||||
{
|
||||
_exceptions.Clear();
|
||||
}
|
||||
|
||||
public bool HasExceptions
|
||||
{
|
||||
get
|
||||
{
|
||||
return _exceptions.Count > 0;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Throws the specified exception when is able to.
|
||||
/// </summary>
|
||||
/// <param name="e">The exception to throw.</param>
|
||||
/// <param name="handler">The handler responsible for the exception.</param>
|
||||
public bool ThrowException(CallbackBase handler, params Exception[] e)
|
||||
{
|
||||
if (_reportErrors && (handler == null || !handler.Canceled))
|
||||
{
|
||||
throw e[0];
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Throws the first exception in the list if any exists.
|
||||
/// </summary>
|
||||
/// <returns>True means no exceptions.</returns>
|
||||
public bool ThrowException()
|
||||
{
|
||||
if (HasExceptions && _reportErrors)
|
||||
{
|
||||
throw _exceptions[0];
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public void ThrowUserException()
|
||||
{
|
||||
if (HasExceptions)
|
||||
{
|
||||
throw new SevenZipException(SevenZipException.USER_EXCEPTION_MESSAGE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Struct for storing information about files in the 7-zip archive.
|
||||
/// </summary>
|
||||
public struct ArchiveFileInfo
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets index of the file in the archive file table.
|
||||
/// </summary>
|
||||
public int Index { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets file name
|
||||
/// </summary>
|
||||
public string FileName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the file last write time.
|
||||
/// </summary>
|
||||
public DateTime LastWriteTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the file creation time.
|
||||
/// </summary>
|
||||
public DateTime CreationTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the file creation time.
|
||||
/// </summary>
|
||||
public DateTime LastAccessTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets size of the file (unpacked).
|
||||
/// </summary>
|
||||
public ulong Size { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets CRC checksum of the file.
|
||||
/// </summary>
|
||||
public uint Crc { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets file attributes.
|
||||
/// </summary>
|
||||
public uint Attributes { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets being a directory.
|
||||
/// </summary>
|
||||
public bool IsDirectory { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets being encrypted.
|
||||
/// </summary>
|
||||
public bool Encrypted { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets comment for the file.
|
||||
/// </summary>
|
||||
public string Comment { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Determines whether the specified System.Object is equal to the current ArchiveFileInfo.
|
||||
/// </summary>
|
||||
/// <param name="obj">The System.Object to compare with the current ArchiveFileInfo.</param>
|
||||
/// <returns>true if the specified System.Object is equal to the current ArchiveFileInfo; otherwise, false.</returns>
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
return (obj is ArchiveFileInfo) ? Equals((ArchiveFileInfo)obj) : false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determines whether the specified ArchiveFileInfo is equal to the current ArchiveFileInfo.
|
||||
/// </summary>
|
||||
/// <param name="afi">The ArchiveFileInfo to compare with the current ArchiveFileInfo.</param>
|
||||
/// <returns>true if the specified ArchiveFileInfo is equal to the current ArchiveFileInfo; otherwise, false.</returns>
|
||||
public bool Equals(ArchiveFileInfo afi)
|
||||
{
|
||||
return afi.Index == Index && afi.FileName == FileName;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Serves as a hash function for a particular type.
|
||||
/// </summary>
|
||||
/// <returns> A hash code for the current ArchiveFileInfo.</returns>
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return FileName.GetHashCode() ^ Index;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a System.String that represents the current ArchiveFileInfo.
|
||||
/// </summary>
|
||||
/// <returns>A System.String that represents the current ArchiveFileInfo.</returns>
|
||||
public override string ToString()
|
||||
{
|
||||
return "[" + Index.ToString(CultureInfo.CurrentCulture) + "] " + FileName;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determines whether the specified ArchiveFileInfo instances are considered equal.
|
||||
/// </summary>
|
||||
/// <param name="afi1">The first ArchiveFileInfo to compare.</param>
|
||||
/// <param name="afi2">The second ArchiveFileInfo to compare.</param>
|
||||
/// <returns>true if the specified ArchiveFileInfo instances are considered equal; otherwise, false.</returns>
|
||||
public static bool operator ==(ArchiveFileInfo afi1, ArchiveFileInfo afi2)
|
||||
{
|
||||
return afi1.Equals(afi2);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determines whether the specified ArchiveFileInfo instances are not considered equal.
|
||||
/// </summary>
|
||||
/// <param name="afi1">The first ArchiveFileInfo to compare.</param>
|
||||
/// <param name="afi2">The second ArchiveFileInfo to compare.</param>
|
||||
/// <returns>true if the specified ArchiveFileInfo instances are not considered equal; otherwise, false.</returns>
|
||||
public static bool operator !=(ArchiveFileInfo afi1, ArchiveFileInfo afi2)
|
||||
{
|
||||
return !afi1.Equals(afi2);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Archive property struct.
|
||||
/// </summary>
|
||||
public struct ArchiveProperty
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the name of the archive property.
|
||||
/// </summary>
|
||||
public string Name { get; internal set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the value of the archive property.
|
||||
/// </summary>
|
||||
public object Value { get; internal set; }
|
||||
|
||||
/// <summary>
|
||||
/// Determines whether the specified System.Object is equal to the current ArchiveProperty.
|
||||
/// </summary>
|
||||
/// <param name="obj">The System.Object to compare with the current ArchiveProperty.</param>
|
||||
/// <returns>true if the specified System.Object is equal to the current ArchiveProperty; otherwise, false.</returns>
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
return (obj is ArchiveProperty) ? Equals((ArchiveProperty)obj) : false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determines whether the specified ArchiveProperty is equal to the current ArchiveProperty.
|
||||
/// </summary>
|
||||
/// <param name="afi">The ArchiveProperty to compare with the current ArchiveProperty.</param>
|
||||
/// <returns>true if the specified ArchiveProperty is equal to the current ArchiveProperty; otherwise, false.</returns>
|
||||
public bool Equals(ArchiveProperty afi)
|
||||
{
|
||||
return afi.Name == Name && afi.Value == Value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Serves as a hash function for a particular type.
|
||||
/// </summary>
|
||||
/// <returns> A hash code for the current ArchiveProperty.</returns>
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return Name.GetHashCode() ^ Value.GetHashCode();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a System.String that represents the current ArchiveProperty.
|
||||
/// </summary>
|
||||
/// <returns>A System.String that represents the current ArchiveProperty.</returns>
|
||||
public override string ToString()
|
||||
{
|
||||
return Name + " = " + Value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determines whether the specified ArchiveProperty instances are considered equal.
|
||||
/// </summary>
|
||||
/// <param name="afi1">The first ArchiveProperty to compare.</param>
|
||||
/// <param name="afi2">The second ArchiveProperty to compare.</param>
|
||||
/// <returns>true if the specified ArchiveProperty instances are considered equal; otherwise, false.</returns>
|
||||
public static bool operator ==(ArchiveProperty afi1, ArchiveProperty afi2)
|
||||
{
|
||||
return afi1.Equals(afi2);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determines whether the specified ArchiveProperty instances are not considered equal.
|
||||
/// </summary>
|
||||
/// <param name="afi1">The first ArchiveProperty to compare.</param>
|
||||
/// <param name="afi2">The second ArchiveProperty to compare.</param>
|
||||
/// <returns>true if the specified ArchiveProperty instances are not considered equal; otherwise, false.</returns>
|
||||
public static bool operator !=(ArchiveProperty afi1, ArchiveProperty afi2)
|
||||
{
|
||||
return !afi1.Equals(afi2);
|
||||
}
|
||||
}
|
||||
|
||||
#if COMPRESS
|
||||
|
||||
/// <summary>
|
||||
/// Archive compression mode.
|
||||
/// </summary>
|
||||
public enum CompressionMode
|
||||
{
|
||||
/// <summary>
|
||||
/// Create a new archive; overwrite the existing one.
|
||||
/// </summary>
|
||||
Create,
|
||||
/// <summary>
|
||||
/// Add data to the archive.
|
||||
/// </summary>
|
||||
Append,
|
||||
}
|
||||
|
||||
internal enum InternalCompressionMode
|
||||
{
|
||||
/// <summary>
|
||||
/// Create a new archive; overwrite the existing one.
|
||||
/// </summary>
|
||||
Create,
|
||||
/// <summary>
|
||||
/// Add data to the archive.
|
||||
/// </summary>
|
||||
Append,
|
||||
/// <summary>
|
||||
/// Modify archive data.
|
||||
/// </summary>
|
||||
Modify
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Zip encryption method enum.
|
||||
/// </summary>
|
||||
public enum ZipEncryptionMethod
|
||||
{
|
||||
/// <summary>
|
||||
/// ZipCrypto encryption method.
|
||||
/// </summary>
|
||||
ZipCrypto,
|
||||
/// <summary>
|
||||
/// AES 128 bit encryption method.
|
||||
/// </summary>
|
||||
Aes128,
|
||||
/// <summary>
|
||||
/// AES 192 bit encryption method.
|
||||
/// </summary>
|
||||
Aes192,
|
||||
/// <summary>
|
||||
/// AES 256 bit encryption method.
|
||||
/// </summary>
|
||||
Aes256
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Archive update data for UpdateCallback.
|
||||
/// </summary>
|
||||
internal struct UpdateData
|
||||
{
|
||||
public uint FilesCount;
|
||||
public InternalCompressionMode Mode;
|
||||
|
||||
public Dictionary<int, string> FileNamesToModify { get; set; }
|
||||
|
||||
public List<ArchiveFileInfo> ArchiveFileData { get; set; }
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
}
|
|
@ -1,399 +0,0 @@
|
|||
/* This file is part of SevenZipSharp.
|
||||
|
||||
SevenZipSharp is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
SevenZipSharp is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with SevenZipSharp. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace SevenZip
|
||||
{
|
||||
/// <summary>
|
||||
/// The definition of the interface which supports the cancellation of a process.
|
||||
/// </summary>
|
||||
public interface ICancellable
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets whether to stop the current archive operation.
|
||||
/// </summary>
|
||||
bool Cancel { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// EventArgs for storing PercentDone property.
|
||||
/// </summary>
|
||||
public class PercentDoneEventArgs : EventArgs
|
||||
{
|
||||
private readonly byte _percentDone;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the PercentDoneEventArgs class.
|
||||
/// </summary>
|
||||
/// <param name="percentDone">The percent of finished work.</param>
|
||||
/// <exception cref="System.ArgumentOutOfRangeException"/>
|
||||
public PercentDoneEventArgs(byte percentDone)
|
||||
{
|
||||
if (percentDone > 100 || percentDone < 0)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException("percentDone",
|
||||
"The percent of finished work must be between 0 and 100.");
|
||||
}
|
||||
_percentDone = percentDone;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the percent of finished work.
|
||||
/// </summary>
|
||||
public byte PercentDone
|
||||
{
|
||||
get
|
||||
{
|
||||
return _percentDone;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Converts a [0, 1] rate to its percent equivalent.
|
||||
/// </summary>
|
||||
/// <param name="doneRate">The rate of the done work.</param>
|
||||
/// <returns>Percent integer equivalent.</returns>
|
||||
/// <exception cref="System.ArgumentException"/>
|
||||
internal static byte ProducePercentDone(float doneRate)
|
||||
{
|
||||
#if !WINCE
|
||||
return (byte) Math.Round(Math.Min(100*doneRate, 100), MidpointRounding.AwayFromZero);
|
||||
#else
|
||||
return (byte) Math.Round(Math.Min(100*doneRate, 100));
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The EventArgs class for accurate progress handling.
|
||||
/// </summary>
|
||||
public sealed class ProgressEventArgs : PercentDoneEventArgs
|
||||
{
|
||||
private readonly byte _delta;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the ProgressEventArgs class.
|
||||
/// </summary>
|
||||
/// <param name="percentDone">The percent of finished work.</param>
|
||||
/// <param name="percentDelta">The percent of work done after the previous event.</param>
|
||||
public ProgressEventArgs(byte percentDone, byte percentDelta)
|
||||
: base(percentDone)
|
||||
{
|
||||
_delta = percentDelta;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the change in done work percentage.
|
||||
/// </summary>
|
||||
public byte PercentDelta
|
||||
{
|
||||
get
|
||||
{
|
||||
return _delta;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if UNMANAGED
|
||||
/// <summary>
|
||||
/// EventArgs used to report the file information which is going to be packed.
|
||||
/// </summary>
|
||||
public sealed class FileInfoEventArgs : PercentDoneEventArgs, ICancellable
|
||||
{
|
||||
private readonly ArchiveFileInfo _fileInfo;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the FileInfoEventArgs class.
|
||||
/// </summary>
|
||||
/// <param name="fileInfo">The current ArchiveFileInfo.</param>
|
||||
/// <param name="percentDone">The percent of finished work.</param>
|
||||
public FileInfoEventArgs(ArchiveFileInfo fileInfo, byte percentDone)
|
||||
: base(percentDone)
|
||||
{
|
||||
_fileInfo = fileInfo;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets whether to stop the current archive operation.
|
||||
/// </summary>
|
||||
public bool Cancel { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the corresponding FileInfo to the event.
|
||||
/// </summary>
|
||||
public ArchiveFileInfo FileInfo
|
||||
{
|
||||
get
|
||||
{
|
||||
return _fileInfo;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// EventArgs used to report the size of unpacked archive data
|
||||
/// </summary>
|
||||
public sealed class OpenEventArgs : EventArgs
|
||||
{
|
||||
private readonly ulong _totalSize;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the OpenEventArgs class
|
||||
/// </summary>
|
||||
/// <param name="totalSize">Size of unpacked archive data</param>
|
||||
public OpenEventArgs(ulong totalSize)
|
||||
{
|
||||
_totalSize = totalSize;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the size of unpacked archive data
|
||||
/// </summary>
|
||||
public ulong TotalSize
|
||||
{
|
||||
get
|
||||
{
|
||||
return _totalSize;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Stores an int number
|
||||
/// </summary>
|
||||
public sealed class IntEventArgs : EventArgs
|
||||
{
|
||||
private readonly int _value;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the IntEventArgs class
|
||||
/// </summary>
|
||||
/// <param name="value">Useful data carried by the IntEventArgs class</param>
|
||||
public IntEventArgs(int value)
|
||||
{
|
||||
_value = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the value of the IntEventArgs class
|
||||
/// </summary>
|
||||
public int Value
|
||||
{
|
||||
get
|
||||
{
|
||||
return _value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// EventArgs class which stores the file name.
|
||||
/// </summary>
|
||||
public sealed class FileNameEventArgs : PercentDoneEventArgs, ICancellable
|
||||
{
|
||||
private readonly string _fileName;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the FileNameEventArgs class.
|
||||
/// </summary>
|
||||
/// <param name="fileName">The file name.</param>
|
||||
/// <param name="percentDone">The percent of finished work</param>
|
||||
public FileNameEventArgs(string fileName, byte percentDone) :
|
||||
base(percentDone)
|
||||
{
|
||||
_fileName = fileName;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets whether to stop the current archive operation.
|
||||
/// </summary>
|
||||
public bool Cancel { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the file name.
|
||||
/// </summary>
|
||||
public string FileName
|
||||
{
|
||||
get
|
||||
{
|
||||
return _fileName;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// EventArgs for FileExists event, stores the file name and asks whether to overwrite it in case it already exists.
|
||||
/// </summary>
|
||||
public sealed class FileOverwriteEventArgs : EventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the FileOverwriteEventArgs class
|
||||
/// </summary>
|
||||
/// <param name="fileName">The file name.</param>
|
||||
public FileOverwriteEventArgs(string fileName)
|
||||
{
|
||||
FileName = fileName;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the value indicating whether to cancel the extraction.
|
||||
/// </summary>
|
||||
public bool Cancel { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the file name to extract to. Null means skip.
|
||||
/// </summary>
|
||||
public string FileName { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The reason for calling <see cref="ExtractFileCallback"/>.
|
||||
/// </summary>
|
||||
public enum ExtractFileCallbackReason
|
||||
{
|
||||
/// <summary>
|
||||
/// <see cref="ExtractFileCallback"/> is called the first time for a file.
|
||||
/// </summary>
|
||||
Start,
|
||||
|
||||
/// <summary>
|
||||
/// All data has been written to the target without any exceptions.
|
||||
/// </summary>
|
||||
Done,
|
||||
|
||||
/// <summary>
|
||||
/// An exception occured during extraction of the file.
|
||||
/// </summary>
|
||||
Failure
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The arguments passed to <see cref="ExtractFileCallback"/>.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// For each file, <see cref="ExtractFileCallback"/> is first called with <see cref="Reason"/>
|
||||
/// set to <see cref="ExtractFileCallbackReason.Start"/>. If the callback chooses to extract the
|
||||
/// file data by setting <see cref="ExtractToFile"/> or <see cref="ExtractToStream"/>, the callback
|
||||
/// will be called a second time with <see cref="Reason"/> set to
|
||||
/// <see cref="ExtractFileCallbackReason.Done"/> or <see cref="ExtractFileCallbackReason.Failure"/>
|
||||
/// to allow for any cleanup task like closing the stream.
|
||||
/// </remarks>
|
||||
public class ExtractFileCallbackArgs : EventArgs
|
||||
{
|
||||
private readonly ArchiveFileInfo _archiveFileInfo;
|
||||
private Stream _extractToStream;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ExtractFileCallbackArgs"/> class.
|
||||
/// </summary>
|
||||
/// <param name="archiveFileInfo">The information about file in the archive.</param>
|
||||
public ExtractFileCallbackArgs(ArchiveFileInfo archiveFileInfo)
|
||||
{
|
||||
Reason = ExtractFileCallbackReason.Start;
|
||||
_archiveFileInfo = archiveFileInfo;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Information about file in the archive.
|
||||
/// </summary>
|
||||
/// <value>Information about file in the archive.</value>
|
||||
public ArchiveFileInfo ArchiveFileInfo
|
||||
{
|
||||
get
|
||||
{
|
||||
return _archiveFileInfo;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The reason for calling <see cref="ExtractFileCallback"/>.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// If neither <see cref="ExtractToFile"/> nor <see cref="ExtractToStream"/> is set,
|
||||
/// <see cref="ExtractFileCallback"/> will not be called after <see cref="ExtractFileCallbackReason.Start"/>.
|
||||
/// </remarks>
|
||||
/// <value>The reason.</value>
|
||||
public ExtractFileCallbackReason Reason { get; internal set; }
|
||||
|
||||
/// <summary>
|
||||
/// The exception that occurred during extraction.
|
||||
/// </summary>
|
||||
/// <value>The _Exception.</value>
|
||||
/// <remarks>
|
||||
/// If the callback is called with <see cref="Reason"/> set to <see cref="ExtractFileCallbackReason.Failure"/>,
|
||||
/// this member contains the _Exception that occurred.
|
||||
/// The default behavior is to rethrow the _Exception after return of the callback.
|
||||
/// However the callback can set <see cref="Exception"/> to <c>null</c> to swallow the _Exception
|
||||
/// and continue extraction with the next file.
|
||||
/// </remarks>
|
||||
public Exception Exception { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether to cancel the extraction.
|
||||
/// </summary>
|
||||
/// <value><c>true</c> to cancel the extraction; <c>false</c> to continue. The default is <c>false</c>.</value>
|
||||
public bool CancelExtraction { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets whether and where to extract the file.
|
||||
/// </summary>
|
||||
/// <value>The path where to extract the file to.</value>
|
||||
/// <remarks>
|
||||
/// If <see cref="ExtractToStream"/> is set, this mmember will be ignored.
|
||||
/// </remarks>
|
||||
public string ExtractToFile { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets whether and where to extract the file.
|
||||
/// </summary>
|
||||
/// <value>The the extracted data is written to.</value>
|
||||
/// <remarks>
|
||||
/// If both this member and <see cref="ExtractToFile"/> are <c>null</c> (the defualt), the file
|
||||
/// will not be extracted and the callback will be be executed a second time with the <see cref="Reason"/>
|
||||
/// set to <see cref="ExtractFileCallbackReason.Done"/> or <see cref="ExtractFileCallbackReason.Failure"/>.
|
||||
/// </remarks>
|
||||
public Stream ExtractToStream
|
||||
{
|
||||
get
|
||||
{
|
||||
return _extractToStream;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (_extractToStream != null && !_extractToStream.CanWrite)
|
||||
{
|
||||
throw new ExtractionFailedException("The specified stream is not writable!");
|
||||
}
|
||||
_extractToStream = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets any data that will be preserved between the <see cref="ExtractFileCallbackReason.Start"/> callback call
|
||||
/// and the <see cref="ExtractFileCallbackReason.Done"/> or <see cref="ExtractFileCallbackReason.Failure"/> calls.
|
||||
/// </summary>
|
||||
/// <value>The data.</value>
|
||||
public object ObjectData { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Callback delegate for <see cref="SevenZipExtractor.ExtractFiles(SevenZip.ExtractFileCallback)"/>.
|
||||
/// </summary>
|
||||
public delegate void ExtractFileCallback(ExtractFileCallbackArgs extractFileCallbackArgs);
|
||||
#endif
|
||||
}
|
|
@ -1,464 +0,0 @@
|
|||
/* This file is part of SevenZipSharp.
|
||||
|
||||
SevenZipSharp is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
SevenZipSharp is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with SevenZipSharp. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using System;
|
||||
#if !WINCE
|
||||
using System.Runtime.Serialization;
|
||||
#endif
|
||||
|
||||
namespace SevenZip
|
||||
{
|
||||
/// <summary>
|
||||
/// Base SevenZip exception class.
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public class SevenZipException : Exception
|
||||
{
|
||||
/// <summary>
|
||||
/// The message for thrown user exceptions.
|
||||
/// </summary>
|
||||
internal const string USER_EXCEPTION_MESSAGE = "The extraction was successful but" +
|
||||
"some exceptions were thrown in your events. Check UserExceptions for details.";
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipException class
|
||||
/// </summary>
|
||||
public SevenZipException() : base("SevenZip unknown exception.") {}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipException class
|
||||
/// </summary>
|
||||
/// <param name="defaultMessage">Default exception message</param>
|
||||
public SevenZipException(string defaultMessage)
|
||||
: base(defaultMessage) {}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipException class
|
||||
/// </summary>
|
||||
/// <param name="defaultMessage">Default exception message</param>
|
||||
/// <param name="message">Additional detailed message</param>
|
||||
public SevenZipException(string defaultMessage, string message)
|
||||
: base(defaultMessage + " Message: " + message) {}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipException class
|
||||
/// </summary>
|
||||
/// <param name="defaultMessage">Default exception message</param>
|
||||
/// <param name="message">Additional detailed message</param>
|
||||
/// <param name="inner">Inner exception occured</param>
|
||||
public SevenZipException(string defaultMessage, string message, Exception inner)
|
||||
: base(
|
||||
defaultMessage + (defaultMessage.EndsWith(" ", StringComparison.CurrentCulture) ? "" : " Message: ") +
|
||||
message, inner) {}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipException class
|
||||
/// </summary>
|
||||
/// <param name="defaultMessage">Default exception message</param>
|
||||
/// <param name="inner">Inner exception occured</param>
|
||||
public SevenZipException(string defaultMessage, Exception inner)
|
||||
: base(defaultMessage, inner) {}
|
||||
#if !WINCE
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipException class
|
||||
/// </summary>
|
||||
/// <param name="info">All data needed for serialization or deserialization</param>
|
||||
/// <param name="context">Serialized stream descriptor</param>
|
||||
protected SevenZipException(
|
||||
SerializationInfo info, StreamingContext context)
|
||||
: base(info, context) {}
|
||||
#endif
|
||||
}
|
||||
|
||||
#if UNMANAGED
|
||||
|
||||
/// <summary>
|
||||
/// Exception class for ArchiveExtractCallback.
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public class ExtractionFailedException : SevenZipException
|
||||
{
|
||||
/// <summary>
|
||||
/// Exception dafault message which is displayed if no extra information is specified
|
||||
/// </summary>
|
||||
public const string DEFAULT_MESSAGE = "Could not extract files!";
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the ExtractionFailedException class
|
||||
/// </summary>
|
||||
public ExtractionFailedException() : base(DEFAULT_MESSAGE) {}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the ExtractionFailedException class
|
||||
/// </summary>
|
||||
/// <param name="message">Additional detailed message</param>
|
||||
public ExtractionFailedException(string message) : base(DEFAULT_MESSAGE, message) {}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the ExtractionFailedException class
|
||||
/// </summary>
|
||||
/// <param name="message">Additional detailed message</param>
|
||||
/// <param name="inner">Inner exception occured</param>
|
||||
public ExtractionFailedException(string message, Exception inner) : base(DEFAULT_MESSAGE, message, inner) {}
|
||||
#if !WINCE
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the ExtractionFailedException class
|
||||
/// </summary>
|
||||
/// <param name="info">All data needed for serialization or deserialization</param>
|
||||
/// <param name="context">Serialized stream descriptor</param>
|
||||
protected ExtractionFailedException(
|
||||
SerializationInfo info, StreamingContext context)
|
||||
: base(info, context) {}
|
||||
#endif
|
||||
}
|
||||
|
||||
#if COMPRESS
|
||||
|
||||
/// <summary>
|
||||
/// Exception class for ArchiveUpdateCallback.
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public class CompressionFailedException : SevenZipException
|
||||
{
|
||||
/// <summary>
|
||||
/// Exception dafault message which is displayed if no extra information is specified
|
||||
/// </summary>
|
||||
public const string DEFAULT_MESSAGE = "Could not pack files!";
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the CompressionFailedException class
|
||||
/// </summary>
|
||||
public CompressionFailedException() : base(DEFAULT_MESSAGE) {}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the CompressionFailedException class
|
||||
/// </summary>
|
||||
/// <param name="message">Additional detailed message</param>
|
||||
public CompressionFailedException(string message) : base(DEFAULT_MESSAGE, message) {}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the CompressionFailedException class
|
||||
/// </summary>
|
||||
/// <param name="message">Additional detailed message</param>
|
||||
/// <param name="inner">Inner exception occured</param>
|
||||
public CompressionFailedException(string message, Exception inner) : base(DEFAULT_MESSAGE, message, inner) {}
|
||||
#if !WINCE
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the CompressionFailedException class
|
||||
/// </summary>
|
||||
/// <param name="info">All data needed for serialization or deserialization</param>
|
||||
/// <param name="context">Serialized stream descriptor</param>
|
||||
protected CompressionFailedException(
|
||||
SerializationInfo info, StreamingContext context)
|
||||
: base(info, context) {}
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Exception class for LZMA operations.
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public class LzmaException : SevenZipException
|
||||
{
|
||||
/// <summary>
|
||||
/// Exception dafault message which is displayed if no extra information is specified
|
||||
/// </summary>
|
||||
public const string DEFAULT_MESSAGE = "Specified stream is not a valid LZMA compressed stream!";
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the LzmaException class
|
||||
/// </summary>
|
||||
public LzmaException() : base(DEFAULT_MESSAGE) {}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the LzmaException class
|
||||
/// </summary>
|
||||
/// <param name="message">Additional detailed message</param>
|
||||
public LzmaException(string message) : base(DEFAULT_MESSAGE, message) {}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the LzmaException class
|
||||
/// </summary>
|
||||
/// <param name="message">Additional detailed message</param>
|
||||
/// <param name="inner">Inner exception occured</param>
|
||||
public LzmaException(string message, Exception inner) : base(DEFAULT_MESSAGE, message, inner) {}
|
||||
#if !WINCE
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the LzmaException class
|
||||
/// </summary>
|
||||
/// <param name="info">All data needed for serialization or deserialization</param>
|
||||
/// <param name="context">Serialized stream descriptor</param>
|
||||
protected LzmaException(
|
||||
SerializationInfo info, StreamingContext context)
|
||||
: base(info, context) {}
|
||||
#endif
|
||||
}
|
||||
|
||||
#if UNMANAGED
|
||||
|
||||
/// <summary>
|
||||
/// Exception class for 7-zip archive open or read operations.
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public class SevenZipArchiveException : SevenZipException
|
||||
{
|
||||
/// <summary>
|
||||
/// Exception dafault message which is displayed if no extra information is specified
|
||||
/// </summary>
|
||||
public const string DEFAULT_MESSAGE =
|
||||
"Invalid archive: open/read error! Is it encrypted and a wrong password was provided?\n" +
|
||||
"If your archive is an exotic one, it is possible that SevenZipSharp has no signature for "+
|
||||
"its format and thus decided it is TAR by mistake.";
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipArchiveException class
|
||||
/// </summary>
|
||||
public SevenZipArchiveException() : base(DEFAULT_MESSAGE) {}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipArchiveException class
|
||||
/// </summary>
|
||||
/// <param name="message">Additional detailed message</param>
|
||||
public SevenZipArchiveException(string message) : base(DEFAULT_MESSAGE, message) {}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipArchiveException class
|
||||
/// </summary>
|
||||
/// <param name="message">Additional detailed message</param>
|
||||
/// <param name="inner">Inner exception occured</param>
|
||||
public SevenZipArchiveException(string message, Exception inner) : base(DEFAULT_MESSAGE, message, inner) {}
|
||||
#if !WINCE
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipArchiveException class
|
||||
/// </summary>
|
||||
/// <param name="info">All data needed for serialization or deserialization</param>
|
||||
/// <param name="context">Serialized stream descriptor</param>
|
||||
protected SevenZipArchiveException(
|
||||
SerializationInfo info, StreamingContext context)
|
||||
: base(info, context) {}
|
||||
#endif
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Exception class for empty common root if file name array in SevenZipCompressor.
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public class SevenZipInvalidFileNamesException : SevenZipException
|
||||
{
|
||||
/// <summary>
|
||||
/// Exception dafault message which is displayed if no extra information is specified
|
||||
/// </summary>
|
||||
public const string DEFAULT_MESSAGE = "Invalid file names have been specified: ";
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipInvalidFileNamesException class
|
||||
/// </summary>
|
||||
public SevenZipInvalidFileNamesException() : base(DEFAULT_MESSAGE) {}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipInvalidFileNamesException class
|
||||
/// </summary>
|
||||
/// <param name="message">Additional detailed message</param>
|
||||
public SevenZipInvalidFileNamesException(string message) : base(DEFAULT_MESSAGE, message) {}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipInvalidFileNamesException class
|
||||
/// </summary>
|
||||
/// <param name="message">Additional detailed message</param>
|
||||
/// <param name="inner">Inner exception occured</param>
|
||||
public SevenZipInvalidFileNamesException(string message, Exception inner) : base(DEFAULT_MESSAGE, message, inner) {}
|
||||
#if !WINCE
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipInvalidFileNamesException class
|
||||
/// </summary>
|
||||
/// <param name="info">All data needed for serialization or deserialization</param>
|
||||
/// <param name="context">Serialized stream descriptor</param>
|
||||
protected SevenZipInvalidFileNamesException(
|
||||
SerializationInfo info, StreamingContext context)
|
||||
: base(info, context) {}
|
||||
#endif
|
||||
}
|
||||
|
||||
#if COMPRESS
|
||||
|
||||
/// <summary>
|
||||
/// Exception class for fail to create an archive in SevenZipCompressor.
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public class SevenZipCompressionFailedException : SevenZipException
|
||||
{
|
||||
/// <summary>
|
||||
/// Exception dafault message which is displayed if no extra information is specified
|
||||
/// </summary>
|
||||
public const string DEFAULT_MESSAGE = "The compression has failed for an unknown reason with code ";
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipCompressionFailedException class
|
||||
/// </summary>
|
||||
public SevenZipCompressionFailedException() : base(DEFAULT_MESSAGE) {}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipCompressionFailedException class
|
||||
/// </summary>
|
||||
/// <param name="message">Additional detailed message</param>
|
||||
public SevenZipCompressionFailedException(string message) : base(DEFAULT_MESSAGE, message) {}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipCompressionFailedException class
|
||||
/// </summary>
|
||||
/// <param name="message">Additional detailed message</param>
|
||||
/// <param name="inner">Inner exception occured</param>
|
||||
public SevenZipCompressionFailedException(string message, Exception inner)
|
||||
: base(DEFAULT_MESSAGE, message, inner) {}
|
||||
#if !WINCE
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipCompressionFailedException class
|
||||
/// </summary>
|
||||
/// <param name="info">All data needed for serialization or deserialization</param>
|
||||
/// <param name="context">Serialized stream descriptor</param>
|
||||
protected SevenZipCompressionFailedException(
|
||||
SerializationInfo info, StreamingContext context)
|
||||
: base(info, context) {}
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Exception class for fail to extract an archive in SevenZipExtractor.
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public class SevenZipExtractionFailedException : SevenZipException
|
||||
{
|
||||
/// <summary>
|
||||
/// Exception dafault message which is displayed if no extra information is specified
|
||||
/// </summary>
|
||||
public const string DEFAULT_MESSAGE = "The extraction has failed for an unknown reason with code ";
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipExtractionFailedException class
|
||||
/// </summary>
|
||||
public SevenZipExtractionFailedException() : base(DEFAULT_MESSAGE) {}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipExtractionFailedException class
|
||||
/// </summary>
|
||||
/// <param name="message">Additional detailed message</param>
|
||||
public SevenZipExtractionFailedException(string message) : base(DEFAULT_MESSAGE, message) {}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipExtractionFailedException class
|
||||
/// </summary>
|
||||
/// <param name="message">Additional detailed message</param>
|
||||
/// <param name="inner">Inner exception occured</param>
|
||||
public SevenZipExtractionFailedException(string message, Exception inner) : base(DEFAULT_MESSAGE, message, inner) {}
|
||||
#if !WINCE
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipExtractionFailedException class
|
||||
/// </summary>
|
||||
/// <param name="info">All data needed for serialization or deserialization</param>
|
||||
/// <param name="context">Serialized stream descriptor</param>
|
||||
protected SevenZipExtractionFailedException(
|
||||
SerializationInfo info, StreamingContext context)
|
||||
: base(info, context) {}
|
||||
#endif
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Exception class for 7-zip library operations.
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public class SevenZipLibraryException : SevenZipException
|
||||
{
|
||||
/// <summary>
|
||||
/// Exception dafault message which is displayed if no extra information is specified
|
||||
/// </summary>
|
||||
public const string DEFAULT_MESSAGE = "Can not load 7-zip library or internal COM error!";
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipLibraryException class
|
||||
/// </summary>
|
||||
public SevenZipLibraryException() : base(DEFAULT_MESSAGE) {}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipLibraryException class
|
||||
/// </summary>
|
||||
/// <param name="message">Additional detailed message</param>
|
||||
public SevenZipLibraryException(string message) : base(DEFAULT_MESSAGE, message) {}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipLibraryException class
|
||||
/// </summary>
|
||||
/// <param name="message">Additional detailed message</param>
|
||||
/// <param name="inner">Inner exception occured</param>
|
||||
public SevenZipLibraryException(string message, Exception inner) : base(DEFAULT_MESSAGE, message, inner) {}
|
||||
#if !WINCE
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipLibraryException class
|
||||
/// </summary>
|
||||
/// <param name="info">All data needed for serialization or deserialization</param>
|
||||
/// <param name="context">Serialized stream descriptor</param>
|
||||
protected SevenZipLibraryException(
|
||||
SerializationInfo info, StreamingContext context)
|
||||
: base(info, context) {}
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
#if SFX
|
||||
|
||||
/// <summary>
|
||||
/// Exception class for 7-zip sfx settings validation.
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public class SevenZipSfxValidationException : SevenZipException
|
||||
{
|
||||
/// <summary>
|
||||
/// Exception dafault message which is displayed if no extra information is specified
|
||||
/// </summary>
|
||||
public static readonly string DefaultMessage = "Sfx settings validation failed.";
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipSfxValidationException class
|
||||
/// </summary>
|
||||
public SevenZipSfxValidationException() : base(DefaultMessage) {}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipSfxValidationException class
|
||||
/// </summary>
|
||||
/// <param name="message">Additional detailed message</param>
|
||||
public SevenZipSfxValidationException(string message) : base(DefaultMessage, message) {}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipSfxValidationException class
|
||||
/// </summary>
|
||||
/// <param name="message">Additional detailed message</param>
|
||||
/// <param name="inner">Inner exception occured</param>
|
||||
public SevenZipSfxValidationException(string message, Exception inner) : base(DefaultMessage, message, inner) {}
|
||||
#if !WINCE
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipSfxValidationException class
|
||||
/// </summary>
|
||||
/// <param name="info">All data needed for serialization or deserialization</param>
|
||||
/// <param name="context">Serialized stream descriptor</param>
|
||||
protected SevenZipSfxValidationException(
|
||||
SerializationInfo info, StreamingContext context)
|
||||
: base(info, context) {}
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
}
|
|
@ -1,252 +0,0 @@
|
|||
/* This file is part of SevenZipSharp.
|
||||
|
||||
SevenZipSharp is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
SevenZipSharp is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with SevenZipSharp. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace SevenZip
|
||||
{
|
||||
#if UNMANAGED
|
||||
/// <summary>
|
||||
/// The signature checker class. Original code by Siddharth Uppal, adapted by Markhor.
|
||||
/// </summary>
|
||||
/// <remarks>Based on the code at http://blog.somecreativity.com/2008/04/08/how-to-check-if-a-file-is-compressed-in-c/#</remarks>
|
||||
public static class FileChecker
|
||||
{
|
||||
public static bool ThrowExceptions = true;
|
||||
|
||||
private const int SIGNATURE_SIZE = 16;
|
||||
private const int SFX_SCAN_LENGTH = 256 * 1024;
|
||||
|
||||
private static bool SpecialDetect(Stream stream, int offset, InArchiveFormat expectedFormat)
|
||||
{
|
||||
if (stream.Length > offset + SIGNATURE_SIZE)
|
||||
{
|
||||
var signature = new byte[SIGNATURE_SIZE];
|
||||
int bytesRequired = SIGNATURE_SIZE;
|
||||
int index = 0;
|
||||
stream.Seek(offset, SeekOrigin.Begin);
|
||||
while (bytesRequired > 0)
|
||||
{
|
||||
int bytesRead = stream.Read(signature, index, bytesRequired);
|
||||
bytesRequired -= bytesRead;
|
||||
index += bytesRead;
|
||||
}
|
||||
string actualSignature = BitConverter.ToString(signature);
|
||||
foreach (string expectedSignature in Formats.InSignatureFormats.Keys)
|
||||
{
|
||||
if (Formats.InSignatureFormats[expectedSignature] != expectedFormat)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (actualSignature.StartsWith(expectedSignature, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the InArchiveFormat for a specific extension.
|
||||
/// </summary>
|
||||
/// <param name="stream">The stream to identify.</param>
|
||||
/// <param name="offset">The archive beginning offset.</param>
|
||||
/// <param name="isExecutable">True if the original format of the stream is PE; otherwise, false.</param>
|
||||
/// <returns>Corresponding InArchiveFormat.</returns>
|
||||
public static InArchiveFormat CheckSignature(Stream stream, out int offset, out bool isExecutable)
|
||||
{
|
||||
offset = 0;
|
||||
isExecutable = false;
|
||||
|
||||
if (!stream.CanRead)
|
||||
{
|
||||
if (ThrowExceptions)
|
||||
throw new ArgumentException("The stream must be readable.");
|
||||
else return InArchiveFormat.None;
|
||||
}
|
||||
if (stream.Length < SIGNATURE_SIZE)
|
||||
{
|
||||
if (ThrowExceptions)
|
||||
throw new ArgumentException("The stream is invalid.");
|
||||
else return InArchiveFormat.None;
|
||||
}
|
||||
|
||||
#region Get file signature
|
||||
|
||||
var signature = new byte[SIGNATURE_SIZE];
|
||||
int bytesRequired = SIGNATURE_SIZE;
|
||||
int index = 0;
|
||||
stream.Seek(0, SeekOrigin.Begin);
|
||||
while (bytesRequired > 0)
|
||||
{
|
||||
int bytesRead = stream.Read(signature, index, bytesRequired);
|
||||
bytesRequired -= bytesRead;
|
||||
index += bytesRead;
|
||||
}
|
||||
string actualSignature = BitConverter.ToString(signature);
|
||||
|
||||
#endregion
|
||||
|
||||
InArchiveFormat suspectedFormat = InArchiveFormat.XZ; // any except PE and Cab
|
||||
isExecutable = false;
|
||||
|
||||
foreach (string expectedSignature in Formats.InSignatureFormats.Keys)
|
||||
{
|
||||
if (actualSignature.StartsWith(expectedSignature, StringComparison.OrdinalIgnoreCase) ||
|
||||
actualSignature.Substring(6).StartsWith(expectedSignature, StringComparison.OrdinalIgnoreCase) &&
|
||||
Formats.InSignatureFormats[expectedSignature] == InArchiveFormat.Lzh)
|
||||
{
|
||||
if (Formats.InSignatureFormats[expectedSignature] == InArchiveFormat.PE)
|
||||
{
|
||||
suspectedFormat = InArchiveFormat.PE;
|
||||
isExecutable = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return Formats.InSignatureFormats[expectedSignature];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Many Microsoft formats
|
||||
if (actualSignature.StartsWith("D0-CF-11-E0-A1-B1-1A-E1", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
suspectedFormat = InArchiveFormat.Cab; // != InArchiveFormat.XZ
|
||||
}
|
||||
|
||||
#region SpecialDetect
|
||||
try
|
||||
{
|
||||
SpecialDetect(stream, 257, InArchiveFormat.Tar);
|
||||
}
|
||||
catch (ArgumentException) {}
|
||||
if (SpecialDetect(stream, 0x8001, InArchiveFormat.Iso))
|
||||
{
|
||||
return InArchiveFormat.Iso;
|
||||
}
|
||||
if (SpecialDetect(stream, 0x8801, InArchiveFormat.Iso))
|
||||
{
|
||||
return InArchiveFormat.Iso;
|
||||
}
|
||||
if (SpecialDetect(stream, 0x9001, InArchiveFormat.Iso))
|
||||
{
|
||||
return InArchiveFormat.Iso;
|
||||
}
|
||||
if (SpecialDetect(stream, 0x9001, InArchiveFormat.Iso))
|
||||
{
|
||||
return InArchiveFormat.Iso;
|
||||
}
|
||||
if (SpecialDetect(stream, 0x400, InArchiveFormat.Hfs))
|
||||
{
|
||||
return InArchiveFormat.Hfs;
|
||||
}
|
||||
#region Last resort for tar - can mistake
|
||||
if (stream.Length >= 1024)
|
||||
{
|
||||
stream.Seek(-1024, SeekOrigin.End);
|
||||
byte[] buf = new byte[1024];
|
||||
stream.Read(buf, 0, 1024);
|
||||
bool istar = true;
|
||||
for (int i = 0; i < 1024; i++)
|
||||
{
|
||||
istar = istar && buf[i] == 0;
|
||||
}
|
||||
if (istar)
|
||||
{
|
||||
return InArchiveFormat.Tar;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
#endregion
|
||||
|
||||
#region Check if it is an SFX archive or a file with an embedded archive.
|
||||
if (suspectedFormat != InArchiveFormat.XZ)
|
||||
{
|
||||
#region Get first Min(stream.Length, SFX_SCAN_LENGTH) bytes
|
||||
var scanLength = Math.Min(stream.Length, SFX_SCAN_LENGTH);
|
||||
signature = new byte[scanLength];
|
||||
bytesRequired = (int)scanLength;
|
||||
index = 0;
|
||||
stream.Seek(0, SeekOrigin.Begin);
|
||||
while (bytesRequired > 0)
|
||||
{
|
||||
int bytesRead = stream.Read(signature, index, bytesRequired);
|
||||
bytesRequired -= bytesRead;
|
||||
index += bytesRead;
|
||||
}
|
||||
actualSignature = BitConverter.ToString(signature);
|
||||
#endregion
|
||||
|
||||
foreach (var format in new InArchiveFormat[]
|
||||
{
|
||||
InArchiveFormat.Zip,
|
||||
InArchiveFormat.SevenZip,
|
||||
InArchiveFormat.Rar,
|
||||
InArchiveFormat.Cab,
|
||||
InArchiveFormat.Arj
|
||||
})
|
||||
{
|
||||
int pos = actualSignature.IndexOf(Formats.InSignatureFormatsReversed[format]);
|
||||
if (pos > -1)
|
||||
{
|
||||
offset = pos / 3;
|
||||
return format;
|
||||
}
|
||||
}
|
||||
// Nothing
|
||||
if (suspectedFormat == InArchiveFormat.PE)
|
||||
{
|
||||
return InArchiveFormat.PE;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
if (ThrowExceptions)
|
||||
throw new ArgumentException("The stream is invalid or no corresponding signature was found.");
|
||||
else return InArchiveFormat.None;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the InArchiveFormat for a specific file name.
|
||||
/// </summary>
|
||||
/// <param name="fileName">The archive file name.</param>
|
||||
/// <param name="offset">The archive beginning offset.</param>
|
||||
/// <param name="isExecutable">True if the original format of the file is PE; otherwise, false.</param>
|
||||
/// <returns>Corresponding InArchiveFormat.</returns>
|
||||
/// <exception cref="System.ArgumentException"/>
|
||||
public static InArchiveFormat CheckSignature(string fileName, out int offset, out bool isExecutable)
|
||||
{
|
||||
using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
|
||||
{
|
||||
try
|
||||
{
|
||||
InArchiveFormat format = CheckSignature(fs, out offset, out isExecutable);
|
||||
if (format != InArchiveFormat.None) return format;
|
||||
}
|
||||
catch (ArgumentException)
|
||||
{
|
||||
}
|
||||
|
||||
offset = 0;
|
||||
isExecutable = false;
|
||||
return Formats.FormatByFileName(fileName, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
|
@ -1,540 +0,0 @@
|
|||
/* This file is part of SevenZipSharp.
|
||||
|
||||
SevenZipSharp is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
SevenZipSharp is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with SevenZipSharp. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
namespace SevenZip
|
||||
{
|
||||
#if UNMANAGED
|
||||
/// <summary>
|
||||
/// Readable archive format enumeration.
|
||||
/// </summary>
|
||||
public enum InArchiveFormat
|
||||
{
|
||||
/// <summary>
|
||||
/// Open 7-zip archive format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/7-zip">Wikipedia information</a></remarks>
|
||||
SevenZip,
|
||||
/// <summary>
|
||||
/// Proprietary Arj archive format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/ARJ">Wikipedia information</a></remarks>
|
||||
Arj,
|
||||
/// <summary>
|
||||
/// Open Bzip2 archive format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/Bzip2">Wikipedia information</a></remarks>
|
||||
BZip2,
|
||||
/// <summary>
|
||||
/// Microsoft cabinet archive format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/Cabinet_(file_format)">Wikipedia information</a></remarks>
|
||||
Cab,
|
||||
/// <summary>
|
||||
/// Microsoft Compiled HTML Help file format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/Microsoft_Compiled_HTML_Help">Wikipedia information</a></remarks>
|
||||
Chm,
|
||||
/// <summary>
|
||||
/// Microsoft Compound file format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/Compound_File_Binary_Format">Wikipedia information</a></remarks>
|
||||
Compound,
|
||||
/// <summary>
|
||||
/// Open Cpio archive format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/Cpio">Wikipedia information</a></remarks>
|
||||
Cpio,
|
||||
/// <summary>
|
||||
/// Open Debian software package format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/Deb_(file_format)">Wikipedia information</a></remarks>
|
||||
Deb,
|
||||
/// <summary>
|
||||
/// Open Gzip archive format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/Gzip">Wikipedia information</a></remarks>
|
||||
GZip,
|
||||
/// <summary>
|
||||
/// Open ISO disk image format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/ISO_image">Wikipedia information</a></remarks>
|
||||
Iso,
|
||||
/// <summary>
|
||||
/// Open Lzh archive format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/Lzh">Wikipedia information</a></remarks>
|
||||
Lzh,
|
||||
/// <summary>
|
||||
/// Open core 7-zip Lzma raw archive format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/Lzma">Wikipedia information</a></remarks>
|
||||
Lzma,
|
||||
/// <summary>
|
||||
/// Nullsoft installation package format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/NSIS">Wikipedia information</a></remarks>
|
||||
Nsis,
|
||||
/// <summary>
|
||||
/// RarLab Rar archive format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/Rar">Wikipedia information</a></remarks>
|
||||
Rar,
|
||||
/// <summary>
|
||||
/// Open Rpm software package format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/RPM_Package_Manager">Wikipedia information</a></remarks>
|
||||
Rpm,
|
||||
/// <summary>
|
||||
/// Open split file format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="?">Wikipedia information</a></remarks>
|
||||
Split,
|
||||
/// <summary>
|
||||
/// Open Tar archive format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/Tar_(file_format)">Wikipedia information</a></remarks>
|
||||
Tar,
|
||||
/// <summary>
|
||||
/// Microsoft Windows Imaging disk image format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/Windows_Imaging_Format">Wikipedia information</a></remarks>
|
||||
Wim,
|
||||
/// <summary>
|
||||
/// Open LZW archive format; implemented in "compress" program; also known as "Z" archive format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/Compress">Wikipedia information</a></remarks>
|
||||
Lzw,
|
||||
/// <summary>
|
||||
/// Open Zip archive format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/ZIP_(file_format)">Wikipedia information</a></remarks>
|
||||
Zip,
|
||||
/// <summary>
|
||||
/// Open Udf disk image format.
|
||||
/// </summary>
|
||||
Udf,
|
||||
/// <summary>
|
||||
/// Xar open source archive format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/Xar_(archiver)">Wikipedia information</a></remarks>
|
||||
Xar,
|
||||
/// <summary>
|
||||
/// Mub
|
||||
/// </summary>
|
||||
Mub,
|
||||
/// <summary>
|
||||
/// Macintosh Disk Image on CD.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/HFS_Plus">Wikipedia information</a></remarks>
|
||||
Hfs,
|
||||
/// <summary>
|
||||
/// Apple Mac OS X Disk Copy Disk Image format.
|
||||
/// </summary>
|
||||
Dmg,
|
||||
/// <summary>
|
||||
/// Open Xz archive format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/Xz">Wikipedia information</a></remarks>
|
||||
XZ,
|
||||
/// <summary>
|
||||
/// MSLZ archive format.
|
||||
/// </summary>
|
||||
Mslz,
|
||||
/// <summary>
|
||||
/// Flash video format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/Flv">Wikipedia information</a></remarks>
|
||||
Flv,
|
||||
/// <summary>
|
||||
/// Shockwave Flash format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/Swf">Wikipedia information</a></remarks>
|
||||
Swf,
|
||||
/// <summary>
|
||||
/// Windows PE executable format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/Portable_Executable">Wikipedia information</a></remarks>
|
||||
PE,
|
||||
/// <summary>
|
||||
/// Linux executable Elf format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/Executable_and_Linkable_Format">Wikipedia information</a></remarks>
|
||||
Elf,
|
||||
/// <summary>
|
||||
/// Windows Installer Database.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/Windows_Installer">Wikipedia information</a></remarks>
|
||||
Msi,
|
||||
/// <summary>
|
||||
/// Microsoft virtual hard disk file format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/VHD_%28file_format%29">Wikipedia information</a></remarks>
|
||||
Vhd,
|
||||
/// <summary>
|
||||
/// Not an archive
|
||||
/// </summary>
|
||||
None
|
||||
}
|
||||
|
||||
#if COMPRESS
|
||||
/// <summary>
|
||||
/// Writable archive format enumeration.
|
||||
/// </summary>
|
||||
public enum OutArchiveFormat
|
||||
{
|
||||
/// <summary>
|
||||
/// Open 7-zip archive format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/7-zip">Wikipedia information</a></remarks>
|
||||
SevenZip,
|
||||
/// <summary>
|
||||
/// Open Zip archive format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/ZIP_(file_format)">Wikipedia information</a></remarks>
|
||||
Zip,
|
||||
/// <summary>
|
||||
/// Open Gzip archive format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/Gzip">Wikipedia information</a></remarks>
|
||||
GZip,
|
||||
/// <summary>
|
||||
/// Open Bzip2 archive format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/Bzip2">Wikipedia information</a></remarks>
|
||||
BZip2,
|
||||
/// <summary>
|
||||
/// Open Tar archive format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/Tar_(file_format)">Wikipedia information</a></remarks>
|
||||
Tar,
|
||||
/// <summary>
|
||||
/// Open Xz archive format.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/Xz">Wikipedia information</a></remarks>
|
||||
XZ
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Compression level enumeration
|
||||
/// </summary>
|
||||
public enum CompressionLevel
|
||||
{
|
||||
/// <summary>
|
||||
/// No compression
|
||||
/// </summary>
|
||||
None,
|
||||
/// <summary>
|
||||
/// Very low compression level
|
||||
/// </summary>
|
||||
Fast,
|
||||
/// <summary>
|
||||
/// Low compression level
|
||||
/// </summary>
|
||||
Low,
|
||||
/// <summary>
|
||||
/// Normal compression level (default)
|
||||
/// </summary>
|
||||
Normal,
|
||||
/// <summary>
|
||||
/// High compression level
|
||||
/// </summary>
|
||||
High,
|
||||
/// <summary>
|
||||
/// The best compression level (slow)
|
||||
/// </summary>
|
||||
Ultra
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Compression method enumeration.
|
||||
/// </summary>
|
||||
/// <remarks>Some methods are applicable only to Zip format, some - only to 7-zip.</remarks>
|
||||
public enum CompressionMethod
|
||||
{
|
||||
/// <summary>
|
||||
/// Zip or 7-zip|no compression method.
|
||||
/// </summary>
|
||||
Copy,
|
||||
/// <summary>
|
||||
/// Zip|Deflate method.
|
||||
/// </summary>
|
||||
Deflate,
|
||||
/// <summary>
|
||||
/// Zip|Deflate64 method.
|
||||
/// </summary>
|
||||
Deflate64,
|
||||
/// <summary>
|
||||
/// Zip or 7-zip|Bzip2 method.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/Cabinet_(file_format)">Wikipedia information</a></remarks>
|
||||
BZip2,
|
||||
/// <summary>
|
||||
/// Zip or 7-zip|LZMA method based on Lempel-Ziv algorithm, it is default for 7-zip.
|
||||
/// </summary>
|
||||
Lzma,
|
||||
/// <summary>
|
||||
/// 7-zip|LZMA version 2, LZMA with improved multithreading and usually slight archive size decrease.
|
||||
/// </summary>
|
||||
Lzma2,
|
||||
/// <summary>
|
||||
/// Zip or 7-zip|PPMd method based on Dmitry Shkarin's PPMdH source code, very efficient for compressing texts.
|
||||
/// </summary>
|
||||
/// <remarks><a href="http://en.wikipedia.org/wiki/Prediction_by_Partial_Matching">Wikipedia information</a></remarks>
|
||||
Ppmd,
|
||||
/// <summary>
|
||||
/// No method change.
|
||||
/// </summary>
|
||||
Default
|
||||
}
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Archive format routines
|
||||
/// </summary>
|
||||
public static class Formats
|
||||
{
|
||||
/*/// <summary>
|
||||
/// Gets the max value of the specified enum type.
|
||||
/// </summary>
|
||||
/// <param name="type">Type of the enum</param>
|
||||
/// <returns>Max value</returns>
|
||||
internal static int GetMaxValue(Type type)
|
||||
{
|
||||
List<int> enumList = new List<int>((IEnumerable<int>)Enum.GetValues(type));
|
||||
enumList.Sort();
|
||||
return enumList[enumList.Count - 1];
|
||||
}*/
|
||||
|
||||
/// <summary>
|
||||
/// List of readable archive format interface guids for 7-zip COM interop.
|
||||
/// </summary>
|
||||
internal static readonly Dictionary<InArchiveFormat, Guid> InFormatGuids =
|
||||
new Dictionary<InArchiveFormat, Guid>(20)
|
||||
#region InFormatGuids initialization
|
||||
|
||||
{
|
||||
{InArchiveFormat.SevenZip, new Guid("23170f69-40c1-278a-1000-000110070000")},
|
||||
{InArchiveFormat.Arj, new Guid("23170f69-40c1-278a-1000-000110040000")},
|
||||
{InArchiveFormat.BZip2, new Guid("23170f69-40c1-278a-1000-000110020000")},
|
||||
{InArchiveFormat.Cab, new Guid("23170f69-40c1-278a-1000-000110080000")},
|
||||
{InArchiveFormat.Chm, new Guid("23170f69-40c1-278a-1000-000110e90000")},
|
||||
{InArchiveFormat.Compound, new Guid("23170f69-40c1-278a-1000-000110e50000")},
|
||||
{InArchiveFormat.Cpio, new Guid("23170f69-40c1-278a-1000-000110ed0000")},
|
||||
{InArchiveFormat.Deb, new Guid("23170f69-40c1-278a-1000-000110ec0000")},
|
||||
{InArchiveFormat.GZip, new Guid("23170f69-40c1-278a-1000-000110ef0000")},
|
||||
{InArchiveFormat.Iso, new Guid("23170f69-40c1-278a-1000-000110e70000")},
|
||||
{InArchiveFormat.Lzh, new Guid("23170f69-40c1-278a-1000-000110060000")},
|
||||
{InArchiveFormat.Lzma, new Guid("23170f69-40c1-278a-1000-0001100a0000")},
|
||||
{InArchiveFormat.Nsis, new Guid("23170f69-40c1-278a-1000-000110090000")},
|
||||
{InArchiveFormat.Rar, new Guid("23170f69-40c1-278a-1000-000110030000")},
|
||||
{InArchiveFormat.Rpm, new Guid("23170f69-40c1-278a-1000-000110eb0000")},
|
||||
{InArchiveFormat.Split, new Guid("23170f69-40c1-278a-1000-000110ea0000")},
|
||||
{InArchiveFormat.Tar, new Guid("23170f69-40c1-278a-1000-000110ee0000")},
|
||||
{InArchiveFormat.Wim, new Guid("23170f69-40c1-278a-1000-000110e60000")},
|
||||
{InArchiveFormat.Lzw, new Guid("23170f69-40c1-278a-1000-000110050000")},
|
||||
{InArchiveFormat.Zip, new Guid("23170f69-40c1-278a-1000-000110010000")},
|
||||
{InArchiveFormat.Udf, new Guid("23170f69-40c1-278a-1000-000110E00000")},
|
||||
{InArchiveFormat.Xar, new Guid("23170f69-40c1-278a-1000-000110E10000")},
|
||||
{InArchiveFormat.Mub, new Guid("23170f69-40c1-278a-1000-000110E20000")},
|
||||
{InArchiveFormat.Hfs, new Guid("23170f69-40c1-278a-1000-000110E30000")},
|
||||
{InArchiveFormat.Dmg, new Guid("23170f69-40c1-278a-1000-000110E40000")},
|
||||
{InArchiveFormat.XZ, new Guid("23170f69-40c1-278a-1000-0001100C0000")},
|
||||
{InArchiveFormat.Mslz, new Guid("23170f69-40c1-278a-1000-000110D50000")},
|
||||
{InArchiveFormat.PE, new Guid("23170f69-40c1-278a-1000-000110DD0000")},
|
||||
{InArchiveFormat.Elf, new Guid("23170f69-40c1-278a-1000-000110DE0000")},
|
||||
{InArchiveFormat.Swf, new Guid("23170f69-40c1-278a-1000-000110D70000")},
|
||||
{InArchiveFormat.Vhd, new Guid("23170f69-40c1-278a-1000-000110DC0000")}
|
||||
};
|
||||
|
||||
#endregion
|
||||
|
||||
#if COMPRESS
|
||||
/// <summary>
|
||||
/// List of writable archive format interface guids for 7-zip COM interop.
|
||||
/// </summary>
|
||||
internal static readonly Dictionary<OutArchiveFormat, Guid> OutFormatGuids =
|
||||
new Dictionary<OutArchiveFormat, Guid>(2)
|
||||
#region OutFormatGuids initialization
|
||||
|
||||
{
|
||||
{OutArchiveFormat.SevenZip, new Guid("23170f69-40c1-278a-1000-000110070000")},
|
||||
{OutArchiveFormat.Zip, new Guid("23170f69-40c1-278a-1000-000110010000")},
|
||||
{OutArchiveFormat.BZip2, new Guid("23170f69-40c1-278a-1000-000110020000")},
|
||||
{OutArchiveFormat.GZip, new Guid("23170f69-40c1-278a-1000-000110ef0000")},
|
||||
{OutArchiveFormat.Tar, new Guid("23170f69-40c1-278a-1000-000110ee0000")},
|
||||
{OutArchiveFormat.XZ, new Guid("23170f69-40c1-278a-1000-0001100C0000")},
|
||||
};
|
||||
|
||||
#endregion
|
||||
|
||||
internal static readonly Dictionary<CompressionMethod, string> MethodNames =
|
||||
new Dictionary<CompressionMethod, string>(6)
|
||||
#region MethodNames initialization
|
||||
|
||||
{
|
||||
{CompressionMethod.Copy, "Copy"},
|
||||
{CompressionMethod.Deflate, "Deflate"},
|
||||
{CompressionMethod.Deflate64, "Deflate64"},
|
||||
{CompressionMethod.Lzma, "LZMA"},
|
||||
{CompressionMethod.Lzma2, "LZMA2"},
|
||||
{CompressionMethod.Ppmd, "PPMd"},
|
||||
{CompressionMethod.BZip2, "BZip2"}
|
||||
};
|
||||
|
||||
#endregion
|
||||
|
||||
internal static readonly Dictionary<OutArchiveFormat, InArchiveFormat> InForOutFormats =
|
||||
new Dictionary<OutArchiveFormat, InArchiveFormat>(6)
|
||||
#region InForOutFormats initialization
|
||||
|
||||
{
|
||||
{OutArchiveFormat.SevenZip, InArchiveFormat.SevenZip},
|
||||
{OutArchiveFormat.GZip, InArchiveFormat.GZip},
|
||||
{OutArchiveFormat.BZip2, InArchiveFormat.BZip2},
|
||||
{OutArchiveFormat.Tar, InArchiveFormat.Tar},
|
||||
{OutArchiveFormat.XZ, InArchiveFormat.XZ},
|
||||
{OutArchiveFormat.Zip, InArchiveFormat.Zip}
|
||||
};
|
||||
|
||||
#endregion
|
||||
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// List of archive formats corresponding to specific extensions
|
||||
/// </summary>
|
||||
private static readonly Dictionary<string, InArchiveFormat> InExtensionFormats =
|
||||
new Dictionary<string, InArchiveFormat>
|
||||
#region InExtensionFormats initialization
|
||||
|
||||
{{"7z", InArchiveFormat.SevenZip},
|
||||
{"gz", InArchiveFormat.GZip},
|
||||
{"tar", InArchiveFormat.Tar},
|
||||
{"rar", InArchiveFormat.Rar},
|
||||
{"zip", InArchiveFormat.Zip},
|
||||
{"lzma", InArchiveFormat.Lzma},
|
||||
{"lzh", InArchiveFormat.Lzh},
|
||||
{"arj", InArchiveFormat.Arj},
|
||||
{"bz2", InArchiveFormat.BZip2},
|
||||
{"cab", InArchiveFormat.Cab},
|
||||
{"chm", InArchiveFormat.Chm},
|
||||
{"deb", InArchiveFormat.Deb},
|
||||
{"iso", InArchiveFormat.Iso},
|
||||
{"rpm", InArchiveFormat.Rpm},
|
||||
{"wim", InArchiveFormat.Wim},
|
||||
{"udf", InArchiveFormat.Udf},
|
||||
{"mub", InArchiveFormat.Mub},
|
||||
{"xar", InArchiveFormat.Xar},
|
||||
{"hfs", InArchiveFormat.Hfs},
|
||||
{"dmg", InArchiveFormat.Dmg},
|
||||
{"Z", InArchiveFormat.Lzw},
|
||||
{"xz", InArchiveFormat.XZ},
|
||||
{"flv", InArchiveFormat.Flv},
|
||||
{"swf", InArchiveFormat.Swf},
|
||||
{"exe", InArchiveFormat.PE},
|
||||
{"dll", InArchiveFormat.PE},
|
||||
{"vhd", InArchiveFormat.Vhd}
|
||||
};
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// List of archive formats corresponding to specific signatures
|
||||
/// </summary>
|
||||
/// <remarks>Based on the information at <a href="http://www.garykessler.net/library/file_sigs.html">this site.</a></remarks>
|
||||
internal static readonly Dictionary<string, InArchiveFormat> InSignatureFormats =
|
||||
new Dictionary<string, InArchiveFormat>
|
||||
#region InSignatureFormats initialization
|
||||
|
||||
{{"37-7A-BC-AF-27-1C", InArchiveFormat.SevenZip},
|
||||
{"1F-8B-08", InArchiveFormat.GZip},
|
||||
{"75-73-74-61-72", InArchiveFormat.Tar},
|
||||
//257 byte offset
|
||||
{"52-61-72-21-1A-07-00", InArchiveFormat.Rar},
|
||||
{"50-4B-03-04", InArchiveFormat.Zip},
|
||||
{"5D-00-00-40-00", InArchiveFormat.Lzma},
|
||||
{"2D-6C-68", InArchiveFormat.Lzh},
|
||||
//^ 2 byte offset
|
||||
{"1F-9D-90", InArchiveFormat.Lzw},
|
||||
{"60-EA", InArchiveFormat.Arj},
|
||||
{"42-5A-68", InArchiveFormat.BZip2},
|
||||
//{"4D-53-43-46", InArchiveFormat.Cab},
|
||||
//{"49-54-53-46", InArchiveFormat.Chm},
|
||||
//{"21-3C-61-72-63-68-3E-0A-64-65-62-69-61-6E-2D-62-69-6E-61-72-79", InArchiveFormat.Deb},
|
||||
//{"43-44-30-30-31", InArchiveFormat.Iso},
|
||||
//^ 0x8001, 0x8801 or 0x9001 byte offset
|
||||
//{"ED-AB-EE-DB", InArchiveFormat.Rpm},
|
||||
//{"4D-53-57-49-4D-00-00-00", InArchiveFormat.Wim},
|
||||
//{"udf", InArchiveFormat.Udf},
|
||||
//{"mub", InArchiveFormat.Mub},
|
||||
//{"78-61-72-21", InArchiveFormat.Xar},
|
||||
//0x400 byte offset
|
||||
//{"48-2B", InArchiveFormat.Hfs},
|
||||
{"FD-37-7A-58-5A", InArchiveFormat.XZ},
|
||||
//{"46-4C-56", InArchiveFormat.Flv},
|
||||
//{"46-57-53", InArchiveFormat.Swf},
|
||||
//{"4D-5A", InArchiveFormat.PE},
|
||||
//{"7F-45-4C-46", InArchiveFormat.Elf},
|
||||
//{"78", InArchiveFormat.Dmg},
|
||||
//{"63-6F-6E-65-63-74-69-78", InArchiveFormat.Vhd},
|
||||
{"4E-45-53", InArchiveFormat.None}
|
||||
};
|
||||
|
||||
#endregion
|
||||
|
||||
internal static Dictionary<InArchiveFormat, string> InSignatureFormatsReversed;
|
||||
|
||||
static Formats()
|
||||
{
|
||||
InSignatureFormatsReversed = new Dictionary<InArchiveFormat, string>(InSignatureFormats.Count);
|
||||
foreach (var pair in InSignatureFormats)
|
||||
{
|
||||
InSignatureFormatsReversed.Add(pair.Value, pair.Key);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets InArchiveFormat for specified archive file name
|
||||
/// </summary>
|
||||
/// <param name="fileName">Archive file name</param>
|
||||
/// <param name="reportErrors">Indicates whether to throw exceptions</param>
|
||||
/// <returns>InArchiveFormat recognized by the file name extension</returns>
|
||||
/// <exception cref="System.ArgumentException"/>
|
||||
public static InArchiveFormat FormatByFileName(string fileName, bool reportErrors)
|
||||
{
|
||||
if (String.IsNullOrEmpty(fileName) && reportErrors)
|
||||
{
|
||||
throw new ArgumentException("File name is null or empty string!");
|
||||
}
|
||||
string extension = Path.GetExtension(fileName);
|
||||
if (extension.StartsWith("."))
|
||||
extension = extension.Substring(1);
|
||||
if (!InExtensionFormats.ContainsKey(extension) && reportErrors)
|
||||
{
|
||||
if (FileChecker.ThrowExceptions)
|
||||
throw new ArgumentException("Extension \"" + extension + "\" is not a supported archive file name extension.");
|
||||
else return InArchiveFormat.None;
|
||||
|
||||
}
|
||||
return InExtensionFormats[extension];
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
|
@ -1,112 +0,0 @@
|
|||
/* This file is part of SevenZipSharp.
|
||||
|
||||
SevenZipSharp is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
SevenZipSharp is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with SevenZipSharp. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using System;
|
||||
|
||||
namespace SevenZip
|
||||
{
|
||||
/// <summary>
|
||||
/// The set of features supported by the library.
|
||||
/// </summary>
|
||||
[Flags]
|
||||
public enum LibraryFeature : uint
|
||||
{
|
||||
/// <summary>
|
||||
/// Default feature.
|
||||
/// </summary>
|
||||
None = 0,
|
||||
/// <summary>
|
||||
/// The library can extract 7zip archives compressed with LZMA method.
|
||||
/// </summary>
|
||||
Extract7z = 0x1,
|
||||
/// <summary>
|
||||
/// The library can extract 7zip archives compressed with LZMA2 method.
|
||||
/// </summary>
|
||||
Extract7zLZMA2 = 0x2,
|
||||
/// <summary>
|
||||
/// The library can extract 7z archives compressed with all known methods.
|
||||
/// </summary>
|
||||
Extract7zAll = Extract7z|Extract7zLZMA2|0x4,
|
||||
/// <summary>
|
||||
/// The library can extract zip archives.
|
||||
/// </summary>
|
||||
ExtractZip = 0x8,
|
||||
/// <summary>
|
||||
/// The library can extract rar archives.
|
||||
/// </summary>
|
||||
ExtractRar = 0x10,
|
||||
/// <summary>
|
||||
/// The library can extract gzip archives.
|
||||
/// </summary>
|
||||
ExtractGzip = 0x20,
|
||||
/// <summary>
|
||||
/// The library can extract bzip2 archives.
|
||||
/// </summary>
|
||||
ExtractBzip2 = 0x40,
|
||||
/// <summary>
|
||||
/// The library can extract tar archives.
|
||||
/// </summary>
|
||||
ExtractTar = 0x80,
|
||||
/// <summary>
|
||||
/// The library can extract xz archives.
|
||||
/// </summary>
|
||||
ExtractXz = 0x100,
|
||||
/// <summary>
|
||||
/// The library can extract all types of archives supported.
|
||||
/// </summary>
|
||||
ExtractAll = Extract7zAll|ExtractZip|ExtractRar|ExtractGzip|ExtractBzip2|ExtractTar|ExtractXz,
|
||||
/// <summary>
|
||||
/// The library can compress data to 7zip archives with LZMA method.
|
||||
/// </summary>
|
||||
Compress7z = 0x200,
|
||||
/// <summary>
|
||||
/// The library can compress data to 7zip archives with LZMA2 method.
|
||||
/// </summary>
|
||||
Compress7zLZMA2 = 0x400,
|
||||
/// <summary>
|
||||
/// The library can compress data to 7zip archives with all methods known.
|
||||
/// </summary>
|
||||
Compress7zAll = Compress7z|Compress7zLZMA2|0x800,
|
||||
/// <summary>
|
||||
/// The library can compress data to tar archives.
|
||||
/// </summary>
|
||||
CompressTar = 0x1000,
|
||||
/// <summary>
|
||||
/// The library can compress data to gzip archives.
|
||||
/// </summary>
|
||||
CompressGzip = 0x2000,
|
||||
/// <summary>
|
||||
/// The library can compress data to bzip2 archives.
|
||||
/// </summary>
|
||||
CompressBzip2 = 0x4000,
|
||||
/// <summary>
|
||||
/// The library can compress data to xz archives.
|
||||
/// </summary>
|
||||
CompressXz = 0x8000,
|
||||
/// <summary>
|
||||
/// The library can compress data to zip archives.
|
||||
/// </summary>
|
||||
CompressZip = 0x10000,
|
||||
/// <summary>
|
||||
/// The library can compress data to all types of archives supported.
|
||||
/// </summary>
|
||||
CompressAll = Compress7zAll|CompressTar|CompressGzip|CompressBzip2|CompressXz|CompressZip,
|
||||
/// <summary>
|
||||
/// The library can modify archives.
|
||||
/// </summary>
|
||||
Modify = 0x20000
|
||||
}
|
||||
}
|
|
@ -1,591 +0,0 @@
|
|||
/* This file is part of SevenZipSharp.
|
||||
|
||||
SevenZipSharp is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
SevenZipSharp is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with SevenZipSharp. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using BizHawk.Common;
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
#if !WINCE && !MONO
|
||||
using System.Configuration;
|
||||
using System.Diagnostics;
|
||||
using System.Security.Permissions;
|
||||
#endif
|
||||
#if WINCE
|
||||
using OpenNETCF.Diagnostics;
|
||||
#endif
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
#if MONO
|
||||
using SevenZip.Mono.COM;
|
||||
#endif
|
||||
|
||||
namespace SevenZip
|
||||
{
|
||||
#if UNMANAGED
|
||||
/// <summary>
|
||||
/// 7-zip library low-level wrapper.
|
||||
/// </summary>
|
||||
internal static class SevenZipLibraryManager
|
||||
{
|
||||
/// <summary>
|
||||
/// Synchronization root for all locking.
|
||||
/// </summary>
|
||||
private static readonly object _syncRoot = new object();
|
||||
|
||||
#if !WINCE && !MONO
|
||||
|
||||
//zero 07-jul-2014 - no sense for this industrial strength enterprise bullshit. lets just hack it to our needs.
|
||||
//NOTE - I think we hacked this originally.. it was this way from the initial commit, perhaps it had already been modified for our use
|
||||
|
||||
/// <summary>
|
||||
/// Path to the 7-zip dll.
|
||||
/// </summary>
|
||||
/// <remarks>7zxa.dll supports only decoding from .7z archives.
|
||||
/// Features of 7za.dll:
|
||||
/// - Supporting 7z format;
|
||||
/// - Built encoders: LZMA, PPMD, BCJ, BCJ2, COPY, AES-256 Encryption.
|
||||
/// - Built decoders: LZMA, PPMD, BCJ, BCJ2, COPY, AES-256 Encryption, BZip2, Deflate.
|
||||
/// 7z.dll (from the 7-zip distribution) supports every InArchiveFormat for encoding and decoding.
|
||||
/// </remarks>
|
||||
//private static string _libraryFileName = ConfigurationManager.AppSettings["7zLocation"] ?? Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "7z.dll");
|
||||
private static string _libraryFileName = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "dll\\7z.dll");
|
||||
|
||||
#endif
|
||||
#if WINCE
|
||||
private static string _libraryFileName =
|
||||
Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase), "7z.dll");
|
||||
#endif
|
||||
/// <summary>
|
||||
/// 7-zip library handle.
|
||||
/// </summary>
|
||||
private static IntPtr _modulePtr;
|
||||
|
||||
/// <summary>
|
||||
/// 7-zip library features.
|
||||
/// </summary>
|
||||
private static LibraryFeature? _features;
|
||||
|
||||
private static Dictionary<object, Dictionary<InArchiveFormat, IInArchive>> _inArchives;
|
||||
#if COMPRESS
|
||||
private static Dictionary<object, Dictionary<OutArchiveFormat, IOutArchive>> _outArchives;
|
||||
#endif
|
||||
private static int _totalUsers;
|
||||
|
||||
// private static string _LibraryVersion;
|
||||
private static bool? _modifyCapabale;
|
||||
|
||||
private static readonly PlatformLinkedLibSingleton.PlatformLinkedLibManager libLoader = PlatformLinkedLibSingleton.LinkedLibManager;
|
||||
|
||||
private static void InitUserInFormat(object user, InArchiveFormat format)
|
||||
{
|
||||
if (!_inArchives.ContainsKey(user))
|
||||
{
|
||||
_inArchives.Add(user, new Dictionary<InArchiveFormat, IInArchive>());
|
||||
}
|
||||
if (!_inArchives[user].ContainsKey(format))
|
||||
{
|
||||
_inArchives[user].Add(format, null);
|
||||
_totalUsers++;
|
||||
}
|
||||
}
|
||||
|
||||
#if COMPRESS
|
||||
private static void InitUserOutFormat(object user, OutArchiveFormat format)
|
||||
{
|
||||
if (!_outArchives.ContainsKey(user))
|
||||
{
|
||||
_outArchives.Add(user, new Dictionary<OutArchiveFormat, IOutArchive>());
|
||||
}
|
||||
if (!_outArchives[user].ContainsKey(format))
|
||||
{
|
||||
_outArchives[user].Add(format, null);
|
||||
_totalUsers++;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
private static void Init()
|
||||
{
|
||||
_inArchives = new Dictionary<object, Dictionary<InArchiveFormat, IInArchive>>();
|
||||
#if COMPRESS
|
||||
_outArchives = new Dictionary<object, Dictionary<OutArchiveFormat, IOutArchive>>();
|
||||
#endif
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Loads the 7-zip library if necessary and adds user to the reference list
|
||||
/// </summary>
|
||||
/// <param name="user">Caller of the function</param>
|
||||
/// <param name="format">Archive format</param>
|
||||
public static void LoadLibrary(object user, Enum format)
|
||||
{
|
||||
lock (_syncRoot)
|
||||
{
|
||||
if (_inArchives == null
|
||||
#if COMPRESS
|
||||
|| _outArchives == null
|
||||
#endif
|
||||
)
|
||||
{
|
||||
Init();
|
||||
}
|
||||
#if !WINCE && !MONO
|
||||
if (_modulePtr == IntPtr.Zero)
|
||||
{
|
||||
//zero 29-oct-2012 - this check isnt useful since LoadLibrary can pretty much check for the same thing. and it wrecks our dll relocation scheme
|
||||
//if (!File.Exists(_libraryFileName))
|
||||
//{
|
||||
// throw new SevenZipLibraryException("DLL file does not exist.");
|
||||
//}
|
||||
if ((_modulePtr = libLoader.LoadPlatformSpecific(_libraryFileName)) == IntPtr.Zero)
|
||||
{
|
||||
//try a different directory
|
||||
string alternateFilename = Path.Combine(Path.Combine(Path.GetDirectoryName(_libraryFileName),"dll"),"7z.dll");
|
||||
if ((_modulePtr = libLoader.LoadPlatformSpecific(alternateFilename)) == IntPtr.Zero)
|
||||
throw new SevenZipLibraryException("failed to load library.");
|
||||
}
|
||||
if (libLoader.GetProcAddr(_modulePtr, "GetHandlerProperty") == IntPtr.Zero)
|
||||
{
|
||||
libLoader.FreePlatformSpecific(_modulePtr);
|
||||
throw new SevenZipLibraryException("library is invalid.");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (format is InArchiveFormat)
|
||||
{
|
||||
InitUserInFormat(user, (InArchiveFormat) format);
|
||||
return;
|
||||
}
|
||||
#if COMPRESS
|
||||
if (format is OutArchiveFormat)
|
||||
{
|
||||
InitUserOutFormat(user, (OutArchiveFormat) format);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
throw new ArgumentException(
|
||||
"Enum " + format + " is not a valid archive format attribute!");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*/// <summary>
|
||||
/// Gets the native 7zip library version string.
|
||||
/// </summary>
|
||||
public static string LibraryVersion
|
||||
{
|
||||
get
|
||||
{
|
||||
if (String.IsNullOrEmpty(_LibraryVersion))
|
||||
{
|
||||
FileVersionInfo dllVersionInfo = FileVersionInfo.GetVersionInfo(_libraryFileName);
|
||||
_LibraryVersion = String.Format(
|
||||
System.Globalization.CultureInfo.CurrentCulture,
|
||||
"{0}.{1}",
|
||||
dllVersionInfo.FileMajorPart, dllVersionInfo.FileMinorPart);
|
||||
}
|
||||
return _LibraryVersion;
|
||||
}
|
||||
}*/
|
||||
|
||||
/// <summary>
|
||||
/// Gets the value indicating whether the library supports modifying archives.
|
||||
/// </summary>
|
||||
public static bool ModifyCapable
|
||||
{
|
||||
get
|
||||
{
|
||||
lock (_syncRoot)
|
||||
{
|
||||
if (!_modifyCapabale.HasValue)
|
||||
{
|
||||
#if !WINCE && !MONO
|
||||
FileVersionInfo dllVersionInfo = FileVersionInfo.GetVersionInfo(_libraryFileName);
|
||||
_modifyCapabale = dllVersionInfo.FileMajorPart >= 9;
|
||||
#else
|
||||
_modifyCapabale = true;
|
||||
#endif
|
||||
}
|
||||
return _modifyCapabale.Value;
|
||||
}
|
||||
}
|
||||
}
|
||||
//static readonly string Namespace = Assembly.GetExecutingAssembly().GetManifestResourceNames()[0].Split('.')[0];
|
||||
static readonly string Namespace = "BizHawk"; //Remove dirty hack above
|
||||
|
||||
private static string GetResourceString(string str)
|
||||
{
|
||||
return Namespace + ".arch." + str;
|
||||
}
|
||||
|
||||
private static bool ExtractionBenchmark(string archiveFileName, Stream outStream,
|
||||
ref LibraryFeature? features, LibraryFeature testedFeature)
|
||||
{
|
||||
var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(
|
||||
GetResourceString(archiveFileName));
|
||||
try
|
||||
{
|
||||
using (var extr = new SevenZipExtractor(stream))
|
||||
{
|
||||
extr.ExtractFile(0, outStream);
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
features |= testedFeature;
|
||||
return true;
|
||||
}
|
||||
|
||||
private static bool CompressionBenchmark(Stream inStream, Stream outStream,
|
||||
OutArchiveFormat format, CompressionMethod method,
|
||||
ref LibraryFeature? features, LibraryFeature testedFeature)
|
||||
{
|
||||
try
|
||||
{
|
||||
var compr = new SevenZipCompressor { ArchiveFormat = format, CompressionMethod = method };
|
||||
compr.CompressStream(inStream, outStream);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
features |= testedFeature;
|
||||
return true;
|
||||
}
|
||||
|
||||
public static LibraryFeature CurrentLibraryFeatures
|
||||
{
|
||||
get
|
||||
{
|
||||
lock (_syncRoot)
|
||||
{
|
||||
if (_features != null && _features.HasValue)
|
||||
{
|
||||
return _features.Value;
|
||||
}
|
||||
_features = LibraryFeature.None;
|
||||
#region Benchmark
|
||||
#region Extraction features
|
||||
using (var outStream = new MemoryStream())
|
||||
{
|
||||
ExtractionBenchmark("Test.lzma.7z", outStream, ref _features, LibraryFeature.Extract7z);
|
||||
ExtractionBenchmark("Test.lzma2.7z", outStream, ref _features, LibraryFeature.Extract7zLZMA2);
|
||||
int i = 0;
|
||||
if (ExtractionBenchmark("Test.bzip2.7z", outStream, ref _features, _features.Value))
|
||||
{
|
||||
i++;
|
||||
}
|
||||
if (ExtractionBenchmark("Test.ppmd.7z", outStream, ref _features, _features.Value))
|
||||
{
|
||||
i++;
|
||||
if (i == 2 && (_features & LibraryFeature.Extract7z) != 0 &&
|
||||
(_features & LibraryFeature.Extract7zLZMA2) != 0)
|
||||
{
|
||||
_features |= LibraryFeature.Extract7zAll;
|
||||
}
|
||||
}
|
||||
ExtractionBenchmark("Test.rar", outStream, ref _features, LibraryFeature.ExtractRar);
|
||||
ExtractionBenchmark("Test.tar", outStream, ref _features, LibraryFeature.ExtractTar);
|
||||
ExtractionBenchmark("Test.txt.bz2", outStream, ref _features, LibraryFeature.ExtractBzip2);
|
||||
ExtractionBenchmark("Test.txt.gz", outStream, ref _features, LibraryFeature.ExtractGzip);
|
||||
ExtractionBenchmark("Test.txt.xz", outStream, ref _features, LibraryFeature.ExtractXz);
|
||||
ExtractionBenchmark("Test.zip", outStream, ref _features, LibraryFeature.ExtractZip);
|
||||
}
|
||||
#endregion
|
||||
#region Compression features
|
||||
using (var inStream = new MemoryStream())
|
||||
{
|
||||
inStream.Write(Encoding.UTF8.GetBytes("Test"), 0, 4);
|
||||
using (var outStream = new MemoryStream())
|
||||
{
|
||||
CompressionBenchmark(inStream, outStream,
|
||||
OutArchiveFormat.SevenZip, CompressionMethod.Lzma,
|
||||
ref _features, LibraryFeature.Compress7z);
|
||||
CompressionBenchmark(inStream, outStream,
|
||||
OutArchiveFormat.SevenZip, CompressionMethod.Lzma2,
|
||||
ref _features, LibraryFeature.Compress7zLZMA2);
|
||||
int i = 0;
|
||||
if (CompressionBenchmark(inStream, outStream,
|
||||
OutArchiveFormat.SevenZip, CompressionMethod.BZip2,
|
||||
ref _features, _features.Value))
|
||||
{
|
||||
i++;
|
||||
}
|
||||
if (CompressionBenchmark(inStream, outStream,
|
||||
OutArchiveFormat.SevenZip, CompressionMethod.Ppmd,
|
||||
ref _features, _features.Value))
|
||||
{
|
||||
i++;
|
||||
if (i == 2 && (_features & LibraryFeature.Compress7z) != 0 &&
|
||||
(_features & LibraryFeature.Compress7zLZMA2) != 0)
|
||||
{
|
||||
_features |= LibraryFeature.Compress7zAll;
|
||||
}
|
||||
}
|
||||
CompressionBenchmark(inStream, outStream,
|
||||
OutArchiveFormat.Zip, CompressionMethod.Default,
|
||||
ref _features, LibraryFeature.CompressZip);
|
||||
CompressionBenchmark(inStream, outStream,
|
||||
OutArchiveFormat.BZip2, CompressionMethod.Default,
|
||||
ref _features, LibraryFeature.CompressBzip2);
|
||||
CompressionBenchmark(inStream, outStream,
|
||||
OutArchiveFormat.GZip, CompressionMethod.Default,
|
||||
ref _features, LibraryFeature.CompressGzip);
|
||||
CompressionBenchmark(inStream, outStream,
|
||||
OutArchiveFormat.Tar, CompressionMethod.Default,
|
||||
ref _features, LibraryFeature.CompressTar);
|
||||
CompressionBenchmark(inStream, outStream,
|
||||
OutArchiveFormat.XZ, CompressionMethod.Default,
|
||||
ref _features, LibraryFeature.CompressXz);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
#endregion
|
||||
if (ModifyCapable && (_features.Value & LibraryFeature.Compress7z) != 0)
|
||||
{
|
||||
_features |= LibraryFeature.Modify;
|
||||
}
|
||||
return _features.Value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Removes user from reference list and frees the 7-zip library if it becomes empty
|
||||
/// </summary>
|
||||
/// <param name="user">Caller of the function</param>
|
||||
/// <param name="format">Archive format</param>
|
||||
public static void FreeLibrary(object user, Enum format)
|
||||
{
|
||||
#if !WINCE && !MONO
|
||||
var sp = new SecurityPermission(SecurityPermissionFlag.UnmanagedCode);
|
||||
sp.Demand();
|
||||
#endif
|
||||
lock (_syncRoot)
|
||||
{
|
||||
if (_modulePtr != IntPtr.Zero)
|
||||
{
|
||||
if (format is InArchiveFormat)
|
||||
{
|
||||
if (_inArchives != null && _inArchives.ContainsKey(user) &&
|
||||
_inArchives[user].ContainsKey((InArchiveFormat) format) &&
|
||||
_inArchives[user][(InArchiveFormat) format] != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
Marshal.ReleaseComObject(_inArchives[user][(InArchiveFormat) format]);
|
||||
}
|
||||
catch (InvalidComObjectException) {}
|
||||
_inArchives[user].Remove((InArchiveFormat) format);
|
||||
_totalUsers--;
|
||||
if (_inArchives[user].Count == 0)
|
||||
{
|
||||
_inArchives.Remove(user);
|
||||
}
|
||||
}
|
||||
}
|
||||
#if COMPRESS
|
||||
if (format is OutArchiveFormat)
|
||||
{
|
||||
if (_outArchives != null && _outArchives.ContainsKey(user) &&
|
||||
_outArchives[user].ContainsKey((OutArchiveFormat) format) &&
|
||||
_outArchives[user][(OutArchiveFormat) format] != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
Marshal.ReleaseComObject(_outArchives[user][(OutArchiveFormat) format]);
|
||||
}
|
||||
catch (InvalidComObjectException) {}
|
||||
_outArchives[user].Remove((OutArchiveFormat) format);
|
||||
_totalUsers--;
|
||||
if (_outArchives[user].Count == 0)
|
||||
{
|
||||
_outArchives.Remove(user);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if ((_inArchives == null || _inArchives.Count == 0)
|
||||
#if COMPRESS
|
||||
&& (_outArchives == null || _outArchives.Count == 0)
|
||||
#endif
|
||||
)
|
||||
{
|
||||
_inArchives = null;
|
||||
#if COMPRESS
|
||||
_outArchives = null;
|
||||
#endif
|
||||
if (_totalUsers == 0)
|
||||
{
|
||||
#if !WINCE && !MONO
|
||||
libLoader.FreePlatformSpecific(_modulePtr);
|
||||
|
||||
#endif
|
||||
_modulePtr = IntPtr.Zero;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets IInArchive interface to extract 7-zip archives.
|
||||
/// </summary>
|
||||
/// <param name="format">Archive format.</param>
|
||||
/// <param name="user">Archive format user.</param>
|
||||
public static IInArchive InArchive(InArchiveFormat format, object user)
|
||||
{
|
||||
lock (_syncRoot)
|
||||
{
|
||||
if (_inArchives[user][format] == null)
|
||||
{
|
||||
#if !WINCE && !MONO
|
||||
var sp = new SecurityPermission(SecurityPermissionFlag.UnmanagedCode);
|
||||
sp.Demand();
|
||||
|
||||
if (_modulePtr == IntPtr.Zero)
|
||||
{
|
||||
LoadLibrary(user, format);
|
||||
if (_modulePtr == IntPtr.Zero)
|
||||
{
|
||||
throw new SevenZipLibraryException();
|
||||
}
|
||||
}
|
||||
var createObject = (NativeMethods.CreateObjectDelegate)
|
||||
Marshal.GetDelegateForFunctionPointer(
|
||||
libLoader.GetProcAddr(_modulePtr, "CreateObject"),
|
||||
typeof(NativeMethods.CreateObjectDelegate));
|
||||
if (createObject == null)
|
||||
{
|
||||
throw new SevenZipLibraryException();
|
||||
}
|
||||
#endif
|
||||
object result;
|
||||
Guid interfaceId =
|
||||
#if !WINCE && !MONO
|
||||
typeof(IInArchive).GUID;
|
||||
#else
|
||||
new Guid(((GuidAttribute)typeof(IInArchive).GetCustomAttributes(typeof(GuidAttribute), false)[0]).Value);
|
||||
#endif
|
||||
Guid classID = Formats.InFormatGuids[format];
|
||||
try
|
||||
{
|
||||
#if !WINCE && !MONO
|
||||
createObject(ref classID, ref interfaceId, out result);
|
||||
#elif !MONO
|
||||
NativeMethods.CreateCOMObject(ref classID, ref interfaceId, out result);
|
||||
#else
|
||||
result = SevenZip.Mono.Factory.CreateInterface<IInArchive>(user, classID, interfaceId);
|
||||
#endif
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
throw new SevenZipLibraryException("Your 7-zip library does not support this archive type.");
|
||||
}
|
||||
InitUserInFormat(user, format);
|
||||
_inArchives[user][format] = result as IInArchive;
|
||||
}
|
||||
return _inArchives[user][format];
|
||||
#if !WINCE && !MONO
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#if COMPRESS
|
||||
/// <summary>
|
||||
/// Gets IOutArchive interface to pack 7-zip archives.
|
||||
/// </summary>
|
||||
/// <param name="format">Archive format.</param>
|
||||
/// <param name="user">Archive format user.</param>
|
||||
public static IOutArchive OutArchive(OutArchiveFormat format, object user)
|
||||
{
|
||||
lock (_syncRoot)
|
||||
{
|
||||
if (_outArchives[user][format] == null)
|
||||
{
|
||||
#if !WINCE && !MONO
|
||||
var sp = new SecurityPermission(SecurityPermissionFlag.UnmanagedCode);
|
||||
sp.Demand();
|
||||
if (_modulePtr == IntPtr.Zero)
|
||||
{
|
||||
throw new SevenZipLibraryException();
|
||||
}
|
||||
var createObject = (NativeMethods.CreateObjectDelegate)
|
||||
Marshal.GetDelegateForFunctionPointer(
|
||||
libLoader.GetProcAddr(_modulePtr, "CreateObject"),
|
||||
typeof(NativeMethods.CreateObjectDelegate));
|
||||
if (createObject == null)
|
||||
{
|
||||
throw new SevenZipLibraryException();
|
||||
}
|
||||
#endif
|
||||
object result;
|
||||
Guid interfaceId =
|
||||
#if !WINCE && !MONO
|
||||
typeof(IOutArchive).GUID;
|
||||
#else
|
||||
new Guid(((GuidAttribute)typeof(IOutArchive).GetCustomAttributes(typeof(GuidAttribute), false)[0]).Value);
|
||||
#endif
|
||||
Guid classID = Formats.OutFormatGuids[format];
|
||||
try
|
||||
{
|
||||
#if !WINCE && !MONO
|
||||
createObject(ref classID, ref interfaceId, out result);
|
||||
#elif !MONO
|
||||
NativeMethods.CreateCOMObject(ref classID, ref interfaceId, out result);
|
||||
#else
|
||||
result = SevenZip.Mono.Factory.CreateInterface<IOutArchive>(classID, interfaceId, user);
|
||||
#endif
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
throw new SevenZipLibraryException("Your 7-zip library does not support this archive type.");
|
||||
}
|
||||
InitUserOutFormat(user, format);
|
||||
_outArchives[user][format] = result as IOutArchive;
|
||||
}
|
||||
return _outArchives[user][format];
|
||||
#if !WINCE && !MONO
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
#endif
|
||||
#if !WINCE && !MONO
|
||||
public static void SetLibraryPath(string libraryPath)
|
||||
{
|
||||
if (_modulePtr != IntPtr.Zero && !Path.GetFullPath(libraryPath).Equals(
|
||||
Path.GetFullPath(_libraryFileName), StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
throw new SevenZipLibraryException(
|
||||
"can not change the library path while the library \"" + _libraryFileName + "\" is being used.");
|
||||
}
|
||||
if (!File.Exists(libraryPath))
|
||||
{
|
||||
throw new SevenZipLibraryException(
|
||||
"can not change the library path because the file \"" + libraryPath + "\" does not exist.");
|
||||
}
|
||||
_libraryFileName = libraryPath;
|
||||
_features = null;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
}
|
|
@ -1,240 +0,0 @@
|
|||
/* This file is part of SevenZipSharp.
|
||||
|
||||
SevenZipSharp is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
SevenZipSharp is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with SevenZipSharp. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
using SevenZip.Sdk.Compression.Lzma;
|
||||
|
||||
namespace SevenZip
|
||||
{
|
||||
#if LZMA_STREAM
|
||||
/// <summary>
|
||||
/// The stream which decompresses data with LZMA on the fly.
|
||||
/// </summary>
|
||||
public class LzmaDecodeStream : Stream
|
||||
{
|
||||
private readonly MemoryStream _buffer = new MemoryStream();
|
||||
private readonly Decoder _decoder = new Decoder();
|
||||
private readonly Stream _input;
|
||||
private byte[] _commonProperties;
|
||||
private bool _error;
|
||||
private bool _firstChunkRead;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the LzmaDecodeStream class.
|
||||
/// </summary>
|
||||
/// <param name="encodedStream">A compressed stream.</param>
|
||||
public LzmaDecodeStream(Stream encodedStream)
|
||||
{
|
||||
if (!encodedStream.CanRead)
|
||||
{
|
||||
throw new ArgumentException("The specified stream can not read.", "encodedStream");
|
||||
}
|
||||
_input = encodedStream;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the chunk size.
|
||||
/// </summary>
|
||||
public int ChunkSize
|
||||
{
|
||||
get
|
||||
{
|
||||
return (int) _buffer.Length;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether the current stream supports reading.
|
||||
/// </summary>
|
||||
public override bool CanRead
|
||||
{
|
||||
get
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether the current stream supports seeking.
|
||||
/// </summary>
|
||||
public override bool CanSeek
|
||||
{
|
||||
get
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether the current stream supports writing.
|
||||
/// </summary>
|
||||
public override bool CanWrite
|
||||
{
|
||||
get
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the length in bytes of the output stream.
|
||||
/// </summary>
|
||||
public override long Length
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_input.CanSeek)
|
||||
{
|
||||
return _input.Length;
|
||||
}
|
||||
return _buffer.Length;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the position within the output stream.
|
||||
/// </summary>
|
||||
public override long Position
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_input.CanSeek)
|
||||
{
|
||||
return _input.Position;
|
||||
}
|
||||
return _buffer.Position;
|
||||
}
|
||||
set
|
||||
{
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
}
|
||||
|
||||
private void ReadChunk()
|
||||
{
|
||||
long size;
|
||||
byte[] properties;
|
||||
try
|
||||
{
|
||||
properties = SevenZipExtractor.GetLzmaProperties(_input, out size);
|
||||
}
|
||||
catch (LzmaException)
|
||||
{
|
||||
_error = true;
|
||||
return;
|
||||
}
|
||||
if (!_firstChunkRead)
|
||||
{
|
||||
_commonProperties = properties;
|
||||
}
|
||||
if (_commonProperties[0] != properties[0] ||
|
||||
_commonProperties[1] != properties[1] ||
|
||||
_commonProperties[2] != properties[2] ||
|
||||
_commonProperties[3] != properties[3] ||
|
||||
_commonProperties[4] != properties[4])
|
||||
{
|
||||
_error = true;
|
||||
return;
|
||||
}
|
||||
if (_buffer.Capacity < (int) size)
|
||||
{
|
||||
_buffer.Capacity = (int) size;
|
||||
}
|
||||
_buffer.SetLength(size);
|
||||
_decoder.SetDecoderProperties(properties);
|
||||
_buffer.Position = 0;
|
||||
_decoder.Code(
|
||||
_input, _buffer, 0, size, null);
|
||||
_buffer.Position = 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Does nothing.
|
||||
/// </summary>
|
||||
public override void Flush() {}
|
||||
|
||||
/// <summary>
|
||||
/// Reads a sequence of bytes from the current stream and decompresses data if necessary.
|
||||
/// </summary>
|
||||
/// <param name="buffer">An array of bytes.</param>
|
||||
/// <param name="offset">The zero-based byte offset in buffer at which to begin storing the data read from the current stream.</param>
|
||||
/// <param name="count">The maximum number of bytes to be read from the current stream.</param>
|
||||
/// <returns>The total number of bytes read into the buffer.</returns>
|
||||
public override int Read(byte[] buffer, int offset, int count)
|
||||
{
|
||||
if (_error)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!_firstChunkRead)
|
||||
{
|
||||
ReadChunk();
|
||||
_firstChunkRead = true;
|
||||
}
|
||||
int readCount = 0;
|
||||
while (count > _buffer.Length - _buffer.Position && !_error)
|
||||
{
|
||||
var buf = new byte[_buffer.Length - _buffer.Position];
|
||||
_buffer.Read(buf, 0, buf.Length);
|
||||
buf.CopyTo(buffer, offset);
|
||||
offset += buf.Length;
|
||||
count -= buf.Length;
|
||||
readCount += buf.Length;
|
||||
ReadChunk();
|
||||
}
|
||||
if (!_error)
|
||||
{
|
||||
_buffer.Read(buffer, offset, count);
|
||||
readCount += count;
|
||||
}
|
||||
return readCount;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the position within the current stream.
|
||||
/// </summary>
|
||||
/// <param name="offset">A byte offset relative to the origin parameter.</param>
|
||||
/// <param name="origin">A value of type System.IO.SeekOrigin indicating the reference point used to obtain the new position.</param>
|
||||
/// <returns>The new position within the current stream.</returns>
|
||||
public override long Seek(long offset, SeekOrigin origin)
|
||||
{
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the length of the current stream.
|
||||
/// </summary>
|
||||
/// <param name="value">The desired length of the current stream in bytes.</param>
|
||||
public override void SetLength(long value)
|
||||
{
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes a sequence of bytes to the current stream.
|
||||
/// </summary>
|
||||
/// <param name="buffer">An array of bytes.</param>
|
||||
/// <param name="offset">The zero-based byte offset in buffer at which to begin storing the data read from the current stream.</param>
|
||||
/// <param name="count">The maximum number of bytes to be read from the current stream.</param>
|
||||
public override void Write(byte[] buffer, int offset, int count)
|
||||
{
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
|
@ -1,304 +0,0 @@
|
|||
/* This file is part of SevenZipSharp.
|
||||
|
||||
SevenZipSharp is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
SevenZipSharp is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with SevenZipSharp. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
using SevenZip.Sdk.Compression.Lzma;
|
||||
|
||||
namespace SevenZip
|
||||
{
|
||||
#if LZMA_STREAM
|
||||
#if COMPRESS
|
||||
/// <summary>
|
||||
/// The stream which compresses data with LZMA on the fly.
|
||||
/// </summary>
|
||||
public class LzmaEncodeStream : Stream
|
||||
{
|
||||
private const int MAX_BUFFER_CAPACITY = 1 << 30; //1 Gb
|
||||
private readonly MemoryStream _buffer = new MemoryStream();
|
||||
private readonly int _bufferCapacity = 1 << 18; //256 kb
|
||||
private readonly bool _ownOutput;
|
||||
private bool _disposed;
|
||||
private Encoder _lzmaEncoder;
|
||||
private Stream _output;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the LzmaEncodeStream class.
|
||||
/// </summary>
|
||||
public LzmaEncodeStream()
|
||||
{
|
||||
_output = new MemoryStream();
|
||||
_ownOutput = true;
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the LzmaEncodeStream class.
|
||||
/// </summary>
|
||||
/// <param name="bufferCapacity">The buffer size. The bigger size, the better compression.</param>
|
||||
public LzmaEncodeStream(int bufferCapacity)
|
||||
{
|
||||
_output = new MemoryStream();
|
||||
_ownOutput = true;
|
||||
if (bufferCapacity > MAX_BUFFER_CAPACITY)
|
||||
{
|
||||
throw new ArgumentException("Too large capacity.", "bufferCapacity");
|
||||
}
|
||||
_bufferCapacity = bufferCapacity;
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the LzmaEncodeStream class.
|
||||
/// </summary>
|
||||
/// <param name="outputStream">An output stream which supports writing.</param>
|
||||
public LzmaEncodeStream(Stream outputStream)
|
||||
{
|
||||
if (!outputStream.CanWrite)
|
||||
{
|
||||
throw new ArgumentException("The specified stream can not write.", "outputStream");
|
||||
}
|
||||
_output = outputStream;
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the LzmaEncodeStream class.
|
||||
/// </summary>
|
||||
/// <param name="outputStream">An output stream which supports writing.</param>
|
||||
/// <param name="bufferCapacity">A buffer size. The bigger size, the better compression.</param>
|
||||
public LzmaEncodeStream(Stream outputStream, int bufferCapacity)
|
||||
{
|
||||
if (!outputStream.CanWrite)
|
||||
{
|
||||
throw new ArgumentException("The specified stream can not write.", "outputStream");
|
||||
}
|
||||
_output = outputStream;
|
||||
if (bufferCapacity > 1 << 30)
|
||||
{
|
||||
throw new ArgumentException("Too large capacity.", "bufferCapacity");
|
||||
}
|
||||
_bufferCapacity = bufferCapacity;
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether the current stream supports reading.
|
||||
/// </summary>
|
||||
public override bool CanRead
|
||||
{
|
||||
get
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether the current stream supports seeking.
|
||||
/// </summary>
|
||||
public override bool CanSeek
|
||||
{
|
||||
get
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether the current stream supports writing.
|
||||
/// </summary>
|
||||
public override bool CanWrite
|
||||
{
|
||||
get
|
||||
{
|
||||
DisposedCheck();
|
||||
return _buffer.CanWrite;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the length in bytes of the output stream.
|
||||
/// </summary>
|
||||
public override long Length
|
||||
{
|
||||
get
|
||||
{
|
||||
DisposedCheck();
|
||||
if (_output.CanSeek)
|
||||
{
|
||||
return _output.Length;
|
||||
}
|
||||
return _buffer.Position;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the position within the output stream.
|
||||
/// </summary>
|
||||
public override long Position
|
||||
{
|
||||
get
|
||||
{
|
||||
DisposedCheck();
|
||||
if (_output.CanSeek)
|
||||
{
|
||||
return _output.Position;
|
||||
}
|
||||
return _buffer.Position;
|
||||
}
|
||||
set
|
||||
{
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
}
|
||||
|
||||
private void Init()
|
||||
{
|
||||
_buffer.Capacity = _bufferCapacity;
|
||||
SevenZipCompressor.LzmaDictionarySize = _bufferCapacity;
|
||||
_lzmaEncoder = new Encoder();
|
||||
SevenZipCompressor.WriteLzmaProperties(_lzmaEncoder);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checked whether the class was disposed.
|
||||
/// </summary>
|
||||
/// <exception cref="System.ObjectDisposedException" />
|
||||
private void DisposedCheck()
|
||||
{
|
||||
if (_disposed)
|
||||
{
|
||||
throw new ObjectDisposedException("SevenZipExtractor");
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteChunk()
|
||||
{
|
||||
_lzmaEncoder.WriteCoderProperties(_output);
|
||||
long streamSize = _buffer.Position;
|
||||
if (_buffer.Length != _buffer.Position)
|
||||
{
|
||||
_buffer.SetLength(_buffer.Position);
|
||||
}
|
||||
_buffer.Position = 0;
|
||||
for (int i = 0; i < 8; i++)
|
||||
{
|
||||
_output.WriteByte((byte) (streamSize >> (8*i)));
|
||||
}
|
||||
_lzmaEncoder.Code(_buffer, _output, -1, -1, null);
|
||||
_buffer.Position = 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Converts the LzmaEncodeStream to the LzmaDecodeStream to read data.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public LzmaDecodeStream ToDecodeStream()
|
||||
{
|
||||
DisposedCheck();
|
||||
Flush();
|
||||
return new LzmaDecodeStream(_output);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Clears all buffers for this stream and causes any buffered data to be compressed and written.
|
||||
/// </summary>
|
||||
public override void Flush()
|
||||
{
|
||||
DisposedCheck();
|
||||
WriteChunk();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Releases all unmanaged resources used by LzmaEncodeStream.
|
||||
/// </summary>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (!_disposed)
|
||||
{
|
||||
if (disposing)
|
||||
{
|
||||
Flush();
|
||||
_buffer.Close();
|
||||
if (_ownOutput)
|
||||
{
|
||||
_output.Dispose();
|
||||
}
|
||||
_output = null;
|
||||
}
|
||||
_disposed = true;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read.
|
||||
/// </summary>
|
||||
/// <param name="buffer">An array of bytes.</param>
|
||||
/// <param name="offset">The zero-based byte offset in buffer at which to begin storing the data read from the current stream.</param>
|
||||
/// <param name="count">The maximum number of bytes to be read from the current stream.</param>
|
||||
/// <returns>The total number of bytes read into the buffer.</returns>
|
||||
public override int Read(byte[] buffer, int offset, int count)
|
||||
{
|
||||
DisposedCheck();
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the position within the current stream.
|
||||
/// </summary>
|
||||
/// <param name="offset">A byte offset relative to the origin parameter.</param>
|
||||
/// <param name="origin">A value of type System.IO.SeekOrigin indicating the reference point used to obtain the new position.</param>
|
||||
/// <returns>The new position within the current stream.</returns>
|
||||
public override long Seek(long offset, SeekOrigin origin)
|
||||
{
|
||||
DisposedCheck();
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the length of the current stream.
|
||||
/// </summary>
|
||||
/// <param name="value">The desired length of the current stream in bytes.</param>
|
||||
public override void SetLength(long value)
|
||||
{
|
||||
DisposedCheck();
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes a sequence of bytes to the current stream and compresses it if necessary.
|
||||
/// </summary>
|
||||
/// <param name="buffer">An array of bytes.</param>
|
||||
/// <param name="offset">The zero-based byte offset in buffer at which to begin storing the data read from the current stream.</param>
|
||||
/// <param name="count">The maximum number of bytes to be read from the current stream.</param>
|
||||
public override void Write(byte[] buffer, int offset, int count)
|
||||
{
|
||||
DisposedCheck();
|
||||
int dataLength = Math.Min(buffer.Length - offset, count);
|
||||
while (_buffer.Position + dataLength >= _bufferCapacity)
|
||||
{
|
||||
int length = _bufferCapacity - (int) _buffer.Position;
|
||||
_buffer.Write(buffer, offset, length);
|
||||
offset = length + offset;
|
||||
dataLength -= length;
|
||||
WriteChunk();
|
||||
}
|
||||
_buffer.Write(buffer, offset, dataLength);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
}
|
|
@ -1,72 +0,0 @@
|
|||
/* This file is part of SevenZipSharp.
|
||||
|
||||
SevenZipSharp is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
SevenZipSharp is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with SevenZipSharp. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using SevenZip.Sdk;
|
||||
|
||||
namespace SevenZip
|
||||
{
|
||||
/// <summary>
|
||||
/// Callback to implement the ICodeProgress interface
|
||||
/// </summary>
|
||||
internal sealed class LzmaProgressCallback : ICodeProgress
|
||||
{
|
||||
private readonly long _inSize;
|
||||
private float _oldPercentDone;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the LzmaProgressCallback class
|
||||
/// </summary>
|
||||
/// <param name="inSize">The input size</param>
|
||||
/// <param name="working">Progress event handler</param>
|
||||
public LzmaProgressCallback(long inSize, EventHandler<ProgressEventArgs> working)
|
||||
{
|
||||
_inSize = inSize;
|
||||
Working += working;
|
||||
}
|
||||
|
||||
#region ICodeProgress Members
|
||||
|
||||
/// <summary>
|
||||
/// Sets the progress
|
||||
/// </summary>
|
||||
/// <param name="inSize">The processed input size</param>
|
||||
/// <param name="outSize">The processed output size</param>
|
||||
public void SetProgress(long inSize, long outSize)
|
||||
{
|
||||
if (Working != null)
|
||||
{
|
||||
float newPercentDone = (inSize + 0.0f) / _inSize;
|
||||
float delta = newPercentDone - _oldPercentDone;
|
||||
if (delta * 100 < 1.0)
|
||||
{
|
||||
delta = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
_oldPercentDone = newPercentDone;
|
||||
}
|
||||
Working(this, new ProgressEventArgs(
|
||||
PercentDoneEventArgs.ProducePercentDone(newPercentDone),
|
||||
delta > 0 ? PercentDoneEventArgs.ProducePercentDone(delta) : (byte)0));
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public event EventHandler<ProgressEventArgs> Working;
|
||||
}
|
||||
}
|
|
@ -1,67 +0,0 @@
|
|||
/* This file is part of SevenZipSharp.
|
||||
|
||||
SevenZipSharp is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
SevenZipSharp is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with SevenZipSharp. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
#if MONO
|
||||
using SevenZip.Mono.COM;
|
||||
#endif
|
||||
|
||||
namespace SevenZip
|
||||
{
|
||||
#if UNMANAGED
|
||||
internal static class NativeMethods
|
||||
{
|
||||
#if !WINCE && !MONO
|
||||
#region Delegates
|
||||
|
||||
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
|
||||
public delegate int CreateObjectDelegate(
|
||||
[In] ref Guid classID,
|
||||
[In] ref Guid interfaceID,
|
||||
[MarshalAs(UnmanagedType.Interface)] out object outObject);
|
||||
|
||||
#endregion
|
||||
#endif
|
||||
|
||||
#if WINCE
|
||||
[DllImport("7z.dll", EntryPoint="CreateObject")]
|
||||
public static extern int CreateCOMObject(
|
||||
[In] ref Guid classID,
|
||||
[In] ref Guid interfaceID,
|
||||
[MarshalAs(UnmanagedType.Interface)] out object outObject);
|
||||
#endif
|
||||
|
||||
public static T SafeCast<T>(PropVariant var, T def)
|
||||
{
|
||||
object obj;
|
||||
try
|
||||
{
|
||||
obj = var.Object;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return def;
|
||||
}
|
||||
if (obj != null && obj is T)
|
||||
{
|
||||
return (T) obj;
|
||||
}
|
||||
return def;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -1,705 +0,0 @@
|
|||
/* This file is part of SevenZipSharp.
|
||||
|
||||
SevenZipSharp is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
SevenZipSharp is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with SevenZipSharp. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
namespace SevenZip
|
||||
{
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
#if DOTNET20
|
||||
using System.Threading;
|
||||
#else
|
||||
using System.Windows.Threading;
|
||||
#endif
|
||||
|
||||
partial class SevenZipCompressor
|
||||
{
|
||||
#region Delegates
|
||||
private delegate void CompressFiles1Delegate(string archiveName, string[] fileFullNames);
|
||||
private delegate void CompressFiles2Delegate(Stream archiveStream, string[] fileFullNames);
|
||||
private delegate void CompressFiles3Delegate(string archiveName, int commonRootLength, string[] fileFullNames);
|
||||
private delegate void CompressFiles4Delegate(Stream archiveStream, int commonRootLength, string[] fileFullNames);
|
||||
|
||||
private delegate void CompressFilesEncrypted1Delegate(string archiveName, string password, string[] fileFullNames);
|
||||
private delegate void CompressFilesEncrypted2Delegate(Stream archiveStream, string password, string[] fileFullNames);
|
||||
private delegate void CompressFilesEncrypted3Delegate(string archiveName, int commonRootLength, string password, string[] fileFullNames);
|
||||
private delegate void CompressFilesEncrypted4Delegate(Stream archiveStream, int commonRootLength, string password, string[] fileFullNames);
|
||||
|
||||
private delegate void CompressDirectory1Delegate(string directory, string archiveName);
|
||||
private delegate void CompressDirectory2Delegate(string directory, Stream archiveStream);
|
||||
private delegate void CompressDirectory3Delegate(string directory, string archiveName, string password);
|
||||
private delegate void CompressDirectory4Delegate(string directory, Stream archiveStream, string password);
|
||||
private delegate void CompressDirectory5Delegate(string directory, string archiveName,
|
||||
string password, string searchPattern, bool recursion);
|
||||
private delegate void CompressDirectory6Delegate(string directory, Stream archiveStream,
|
||||
string password, string searchPattern, bool recursion);
|
||||
|
||||
private delegate void CompressStream1Delegate(Stream inStream, Stream outStream);
|
||||
private delegate void CompressStream2Delegate(Stream inStream, Stream outStream, string password);
|
||||
|
||||
private delegate void ModifyArchive1Delegate(string archiveName, Dictionary<int, string> newFileNames);
|
||||
private delegate void ModifyArchive2Delegate(string archiveName, Dictionary<int, string> newFileNames,
|
||||
string password);
|
||||
#endregion
|
||||
|
||||
#region CompressFiles overloads
|
||||
#if !DOTNET20
|
||||
/// <summary>
|
||||
/// Packs files into the archive asynchronously.
|
||||
/// </summary>
|
||||
/// <param name="fileFullNames">Array of file names to pack.</param>
|
||||
/// <param name="archiveName">The archive file name.</param>
|
||||
/// <param name="eventPriority">The priority of events, relative to the other pending operations in the System.Windows.Threading.Dispatcher event queue, the specified method is invoked.</param>
|
||||
#else
|
||||
/// <summary>
|
||||
/// Packs files into the archive asynchronously.
|
||||
/// </summary>
|
||||
/// <param name="fileFullNames">Array of file names to pack.</param>
|
||||
/// <param name="archiveName">The archive file name.</param>
|
||||
#endif
|
||||
public void BeginCompressFiles(
|
||||
string archiveName
|
||||
#if !DOTNET20
|
||||
, DispatcherPriority eventPriority
|
||||
#endif
|
||||
, params string[] fileFullNames
|
||||
)
|
||||
{
|
||||
SaveContext(
|
||||
#if !DOTNET20
|
||||
eventPriority
|
||||
#endif
|
||||
);
|
||||
(new CompressFiles1Delegate(CompressFiles)).BeginInvoke(archiveName, fileFullNames,
|
||||
AsyncCallbackImplementation, this);
|
||||
}
|
||||
|
||||
#if !DOTNET20
|
||||
/// <summary>
|
||||
/// Packs files into the archive asynchronously.
|
||||
/// </summary>
|
||||
/// <param name="fileFullNames">Array of file names to pack.</param>
|
||||
/// <param name="archiveStream">The archive output stream.
|
||||
/// Use CompressFiles(string archiveName ... ) overloads for archiving to disk.</param>
|
||||
/// <param name="eventPriority">The priority of events, relative to the other pending operations in the System.Windows.Threading.Dispatcher event queue, the specified method is invoked.</param>
|
||||
#else
|
||||
/// <summary>
|
||||
/// Packs files into the archive asynchronously.
|
||||
/// </summary>
|
||||
/// <param name="fileFullNames">Array of file names to pack.</param>
|
||||
/// <param name="archiveStream">The archive output stream.
|
||||
/// Use CompressFiles(string archiveName ... ) overloads for archiving to disk.</param>
|
||||
#endif
|
||||
public void BeginCompressFiles(
|
||||
Stream archiveStream
|
||||
#if !DOTNET20
|
||||
, DispatcherPriority eventPriority
|
||||
#endif
|
||||
, params string[] fileFullNames
|
||||
)
|
||||
{
|
||||
SaveContext(
|
||||
#if !DOTNET20
|
||||
eventPriority
|
||||
#endif
|
||||
);
|
||||
(new CompressFiles2Delegate(CompressFiles)).BeginInvoke(archiveStream, fileFullNames,
|
||||
AsyncCallbackImplementation, this);
|
||||
}
|
||||
|
||||
#if !DOTNET20
|
||||
/// <summary>
|
||||
/// Packs files into the archive asynchronously.
|
||||
/// </summary>
|
||||
/// <param name="fileFullNames">Array of file names to pack.</param>
|
||||
/// <param name="commonRootLength">The length of the common root of the file names.</param>
|
||||
/// <param name="archiveName">The archive file name.</param>
|
||||
/// <param name="eventPriority">The priority of events, relative to the other pending operations in the System.Windows.Threading.Dispatcher event queue, the specified method is invoked.</param>
|
||||
#else
|
||||
/// <summary>
|
||||
/// Packs files into the archive asynchronously.
|
||||
/// </summary>
|
||||
/// <param name="fileFullNames">Array of file names to pack.</param>
|
||||
/// <param name="commonRootLength">The length of the common root of the file names.</param>
|
||||
/// <param name="archiveName">The archive file name.</param>
|
||||
#endif
|
||||
public void BeginCompressFiles(
|
||||
string archiveName, int commonRootLength
|
||||
#if !DOTNET20
|
||||
, DispatcherPriority eventPriority
|
||||
#endif
|
||||
, params string[] fileFullNames
|
||||
)
|
||||
{
|
||||
SaveContext(
|
||||
#if !DOTNET20
|
||||
eventPriority
|
||||
#endif
|
||||
);
|
||||
(new CompressFiles3Delegate(CompressFiles)).BeginInvoke(archiveName, commonRootLength, fileFullNames,
|
||||
AsyncCallbackImplementation, this);
|
||||
}
|
||||
|
||||
#if !DOTNET20
|
||||
/// <summary>
|
||||
/// Packs files into the archive asynchronously.
|
||||
/// </summary>
|
||||
/// <param name="fileFullNames">Array of file names to pack.</param>
|
||||
/// <param name="commonRootLength">The length of the common root of the file names.</param>
|
||||
/// <param name="archiveStream">The archive output stream.
|
||||
/// Use CompressFiles(string archiveName, ... ) overloads for archiving to disk.</param>
|
||||
/// <param name="eventPriority">The priority of events, relative to the other pending operations in the System.Windows.Threading.Dispatcher event queue, the specified method is invoked.</param>
|
||||
#else
|
||||
/// <summary>
|
||||
/// Packs files into the archive asynchronously.
|
||||
/// </summary>
|
||||
/// <param name="fileFullNames">Array of file names to pack.</param>
|
||||
/// <param name="commonRootLength">The length of the common root of the file names.</param>
|
||||
/// <param name="archiveStream">The archive output stream.
|
||||
/// Use CompressFiles(string archiveName, ... ) overloads for archiving to disk.</param>
|
||||
#endif
|
||||
public void BeginCompressFiles(
|
||||
Stream archiveStream, int commonRootLength
|
||||
#if !DOTNET20
|
||||
, DispatcherPriority eventPriority
|
||||
#endif
|
||||
, params string[] fileFullNames
|
||||
)
|
||||
{
|
||||
SaveContext(
|
||||
#if !DOTNET20
|
||||
eventPriority
|
||||
#endif
|
||||
);
|
||||
(new CompressFiles4Delegate(CompressFiles)).BeginInvoke(archiveStream, commonRootLength, fileFullNames,
|
||||
AsyncCallbackImplementation, this);
|
||||
}
|
||||
|
||||
#if !DOTNET20
|
||||
/// <summary>
|
||||
/// Packs files into the archive asynchronously.
|
||||
/// </summary>
|
||||
/// <param name="fileFullNames">Array of file names to pack.</param>
|
||||
/// <param name="archiveName">The archive file name</param>
|
||||
/// <param name="password">The archive password.</param>
|
||||
/// <param name="eventPriority">The priority of events, relative to the other pending operations in the System.Windows.Threading.Dispatcher event queue, the specified method is invoked.</param>
|
||||
#else
|
||||
/// <summary>
|
||||
/// Packs files into the archive asynchronously.
|
||||
/// </summary>
|
||||
/// <param name="fileFullNames">Array of file names to pack.</param>
|
||||
/// <param name="archiveName">The archive file name</param>
|
||||
/// <param name="password">The archive password.</param>
|
||||
#endif
|
||||
public void BeginCompressFilesEncrypted(
|
||||
string archiveName, string password
|
||||
#if !DOTNET20
|
||||
, DispatcherPriority eventPriority
|
||||
#endif
|
||||
, params string[] fileFullNames
|
||||
)
|
||||
{
|
||||
SaveContext(
|
||||
#if !DOTNET20
|
||||
eventPriority
|
||||
#endif
|
||||
);
|
||||
(new CompressFilesEncrypted1Delegate(CompressFilesEncrypted)).BeginInvoke(archiveName, password, fileFullNames,
|
||||
AsyncCallbackImplementation, this);
|
||||
}
|
||||
|
||||
#if !DOTNET20
|
||||
/// <summary>
|
||||
/// Packs files into the archive asynchronously.
|
||||
/// </summary>
|
||||
/// <param name="fileFullNames">Array of file names to pack.</param>
|
||||
/// <param name="archiveStream">The archive output stream.
|
||||
/// Use CompressFiles( ... string archiveName ... ) overloads for archiving to disk.</param>
|
||||
/// <param name="password">The archive password.</param>
|
||||
/// <param name="eventPriority">The priority of events, relative to the other pending operations in the System.Windows.Threading.Dispatcher event queue, the specified method is invoked.</param>
|
||||
#else
|
||||
/// <summary>
|
||||
/// Packs files into the archive asynchronously.
|
||||
/// </summary>
|
||||
/// <param name="fileFullNames">Array of file names to pack.</param>
|
||||
/// <param name="archiveStream">The archive output stream.
|
||||
/// Use CompressFiles( ... string archiveName ... ) overloads for archiving to disk.</param>
|
||||
/// <param name="password">The archive password.</param>
|
||||
#endif
|
||||
public void BeginCompressFilesEncrypted(
|
||||
Stream archiveStream, string password
|
||||
#if !DOTNET20
|
||||
, DispatcherPriority eventPriority
|
||||
#endif
|
||||
, params string[] fileFullNames
|
||||
)
|
||||
{
|
||||
SaveContext(
|
||||
#if !DOTNET20
|
||||
eventPriority
|
||||
#endif
|
||||
);
|
||||
(new CompressFilesEncrypted2Delegate(CompressFilesEncrypted)).BeginInvoke(archiveStream, password, fileFullNames,
|
||||
AsyncCallbackImplementation, this);
|
||||
}
|
||||
|
||||
#if !DOTNET20
|
||||
/// <summary>
|
||||
/// Packs files into the archive asynchronously.
|
||||
/// </summary>
|
||||
/// <param name="fileFullNames">Array of file names to pack.</param>
|
||||
/// <param name="archiveName">The archive file name</param>
|
||||
/// <param name="password">The archive password.</param>
|
||||
/// <param name="commonRootLength">The length of the common root of the file names.</param>
|
||||
/// <param name="eventPriority">The priority of events, relative to the other pending operations in the System.Windows.Threading.Dispatcher event queue, the specified method is invoked.</param>
|
||||
#else
|
||||
/// <summary>
|
||||
/// Packs files into the archive asynchronously.
|
||||
/// </summary>
|
||||
/// <param name="fileFullNames">Array of file names to pack.</param>
|
||||
/// <param name="archiveName">The archive file name</param>
|
||||
/// <param name="password">The archive password.</param>
|
||||
/// <param name="commonRootLength">The length of the common root of the file names.</param>
|
||||
#endif
|
||||
public void BeginCompressFilesEncrypted(
|
||||
string archiveName, int commonRootLength, string password
|
||||
#if !DOTNET20
|
||||
, DispatcherPriority eventPriority
|
||||
#endif
|
||||
, params string[] fileFullNames
|
||||
)
|
||||
{
|
||||
SaveContext(
|
||||
#if !DOTNET20
|
||||
eventPriority
|
||||
#endif
|
||||
);
|
||||
(new CompressFilesEncrypted3Delegate(CompressFilesEncrypted)).BeginInvoke(archiveName, commonRootLength, password,
|
||||
fileFullNames, AsyncCallbackImplementation, this);
|
||||
}
|
||||
|
||||
#if !DOTNET20
|
||||
/// <summary>
|
||||
/// Packs files into the archive asynchronously.
|
||||
/// </summary>
|
||||
/// <param name="fileFullNames">Array of file names to pack.</param>
|
||||
/// <param name="archiveStream">The archive output stream.
|
||||
/// Use CompressFiles( ... string archiveName ... ) overloads for archiving to disk.</param>
|
||||
/// <param name="password">The archive password.</param>
|
||||
/// <param name="commonRootLength">The length of the common root of the file names.</param>
|
||||
/// <param name="eventPriority">The priority of events, relative to the other pending operations in the System.Windows.Threading.Dispatcher event queue, the specified method is invoked.</param>
|
||||
#else
|
||||
/// <summary>
|
||||
/// Packs files into the archive asynchronously.
|
||||
/// </summary>
|
||||
/// <param name="fileFullNames">Array of file names to pack.</param>
|
||||
/// <param name="archiveStream">The archive output stream.
|
||||
/// Use CompressFiles( ... string archiveName ... ) overloads for archiving to disk.</param>
|
||||
/// <param name="password">The archive password.</param>
|
||||
/// <param name="commonRootLength">The length of the common root of the file names.</param>
|
||||
#endif
|
||||
public void BeginCompressFilesEncrypted(
|
||||
Stream archiveStream, int commonRootLength, string password
|
||||
#if !DOTNET20
|
||||
, DispatcherPriority eventPriority
|
||||
#endif
|
||||
, params string[] fileFullNames
|
||||
)
|
||||
{
|
||||
SaveContext(
|
||||
#if !DOTNET20
|
||||
eventPriority
|
||||
#endif
|
||||
);
|
||||
(new CompressFilesEncrypted4Delegate(CompressFilesEncrypted)).BeginInvoke(archiveStream, commonRootLength, password,
|
||||
fileFullNames, AsyncCallbackImplementation, this);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region BeginCompressDirectory overloads
|
||||
|
||||
#if !CS4
|
||||
#if !DOTNET20
|
||||
/// <summary>
|
||||
/// Recursively packs all files in the specified directory.
|
||||
/// </summary>
|
||||
/// <param name="directory">The directory to compress.</param>
|
||||
/// <param name="archiveName">The archive file name.</param>
|
||||
/// <param name="eventPriority">The priority of events, relative to the other pending operations in the System.Windows.Threading.Dispatcher event queue, the specified method is invoked.</param>
|
||||
#else
|
||||
/// <summary>
|
||||
/// Recursively packs all files in the specified directory.
|
||||
/// </summary>
|
||||
/// <param name="directory">The directory to compress.</param>
|
||||
/// <param name="archiveName">The archive file name.</param>
|
||||
#endif
|
||||
public void BeginCompressDirectory(
|
||||
string directory, string archiveName
|
||||
#if !DOTNET20
|
||||
, DispatcherPriority eventPriority
|
||||
#endif
|
||||
)
|
||||
{
|
||||
SaveContext(
|
||||
#if !DOTNET20
|
||||
eventPriority
|
||||
#endif
|
||||
);
|
||||
(new CompressDirectory1Delegate(CompressDirectory)).BeginInvoke(directory, archiveName,
|
||||
AsyncCallbackImplementation, this);
|
||||
}
|
||||
|
||||
#if !DOTNET20
|
||||
/// <summary>
|
||||
/// Recursively packs all files in the specified directory.
|
||||
/// </summary>
|
||||
/// <param name="directory">The directory to compress.</param>
|
||||
/// <param name="archiveStream">The archive output stream.
|
||||
/// Use CompressDirectory( ... string archiveName ... ) overloads for archiving to disk.</param>
|
||||
/// <param name="eventPriority">The priority of events, relative to the other pending operations in the System.Windows.Threading.Dispatcher event queue, the specified method is invoked.</param>
|
||||
#else
|
||||
/// <summary>
|
||||
/// Recursively packs all files in the specified directory.
|
||||
/// </summary>
|
||||
/// <param name="directory">The directory to compress.</param>
|
||||
/// <param name="archiveStream">The archive output stream.
|
||||
/// Use CompressDirectory( ... string archiveName ... ) overloads for archiving to disk.</param>
|
||||
#endif
|
||||
public void BeginCompressDirectory(
|
||||
string directory, Stream archiveStream
|
||||
#if !DOTNET20
|
||||
, DispatcherPriority eventPriority
|
||||
#endif
|
||||
)
|
||||
{
|
||||
SaveContext(
|
||||
#if !DOTNET20
|
||||
eventPriority
|
||||
#endif
|
||||
);
|
||||
(new CompressDirectory2Delegate(CompressDirectory)).BeginInvoke(directory, archiveStream,
|
||||
AsyncCallbackImplementation, this);
|
||||
}
|
||||
|
||||
#if !DOTNET20
|
||||
/// <summary>
|
||||
/// Recursively packs all files in the specified directory.
|
||||
/// </summary>
|
||||
/// <param name="directory">The directory to compress.</param>
|
||||
/// <param name="archiveName">The archive file name.</param>
|
||||
/// <param name="password">The archive password.</param>
|
||||
/// <param name="eventPriority">The priority of events, relative to the other pending operations in the System.Windows.Threading.Dispatcher event queue, the specified method is invoked.</param>
|
||||
#else
|
||||
/// <summary>
|
||||
/// Recursively packs all files in the specified directory.
|
||||
/// </summary>
|
||||
/// <param name="directory">The directory to compress.</param>
|
||||
/// <param name="archiveName">The archive file name.</param>
|
||||
/// <param name="password">The archive password.</param>
|
||||
#endif
|
||||
public void BeginCompressDirectory(
|
||||
string directory, string archiveName, string password
|
||||
#if !DOTNET20
|
||||
, DispatcherPriority eventPriority
|
||||
#endif
|
||||
)
|
||||
{
|
||||
SaveContext(
|
||||
#if !DOTNET20
|
||||
eventPriority
|
||||
#endif
|
||||
);
|
||||
(new CompressDirectory3Delegate(CompressDirectory)).BeginInvoke(directory, archiveName,
|
||||
password, AsyncCallbackImplementation, this);
|
||||
}
|
||||
|
||||
#if !DOTNET20
|
||||
/// <summary>
|
||||
/// Recursively packs all files in the specified directory.
|
||||
/// </summary>
|
||||
/// <param name="directory">The directory to compress.</param>
|
||||
/// <param name="archiveStream">The archive output stream.
|
||||
/// Use CompressDirectory( ... string archiveName ... ) overloads for archiving to disk.</param>
|
||||
/// <param name="password">The archive password.</param>
|
||||
/// <param name="eventPriority">The priority of events, relative to the other pending operations in the System.Windows.Threading.Dispatcher event queue, the specified method is invoked.</param>
|
||||
#else
|
||||
/// <summary>
|
||||
/// Recursively packs all files in the specified directory.
|
||||
/// </summary>
|
||||
/// <param name="directory">The directory to compress.</param>
|
||||
/// <param name="archiveStream">The archive output stream.
|
||||
/// Use CompressDirectory( ... string archiveName ... ) overloads for archiving to disk.</param>
|
||||
/// <param name="password">The archive password.</param>
|
||||
#endif
|
||||
public void BeginCompressDirectory(
|
||||
string directory, Stream archiveStream, string password
|
||||
#if !DOTNET20
|
||||
, DispatcherPriority eventPriority
|
||||
#endif
|
||||
)
|
||||
{
|
||||
SaveContext(
|
||||
#if !DOTNET20
|
||||
eventPriority
|
||||
#endif
|
||||
);
|
||||
(new CompressDirectory4Delegate(CompressDirectory)).BeginInvoke(directory, archiveStream,
|
||||
password, AsyncCallbackImplementation, this);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if !DOTNET20
|
||||
/// <summary>
|
||||
/// Packs all files in the specified directory asynchronously.
|
||||
/// </summary>
|
||||
/// <param name="directory">The directory to compress.</param>
|
||||
/// <param name="archiveName">The archive file name.</param>
|
||||
/// <param name="password">The archive password.</param>
|
||||
/// <param name="searchPattern">Search string, such as "*.txt".</param>
|
||||
/// <param name="recursion">If true, files will be searched for recursively; otherwise, not.</param>
|
||||
/// <param name="eventPriority">The priority of events, relative to the other pending operations in the System.Windows.Threading.Dispatcher event queue, the specified method is invoked.</param>
|
||||
#else
|
||||
/// <summary>
|
||||
/// Packs all files in the specified directory asynchronously.
|
||||
/// </summary>
|
||||
/// <param name="directory">The directory to compress.</param>
|
||||
/// <param name="archiveName">The archive file name.</param>
|
||||
/// <param name="password">The archive password.</param>
|
||||
/// <param name="searchPattern">Search string, such as "*.txt".</param>
|
||||
/// <param name="recursion">If true, files will be searched for recursively; otherwise, not.</param>
|
||||
#endif
|
||||
public void BeginCompressDirectory(string directory, string archiveName,
|
||||
string password
|
||||
#if CS4
|
||||
= ""
|
||||
#endif
|
||||
, string searchPattern
|
||||
#if CS4
|
||||
= "*"
|
||||
#endif
|
||||
, bool recursion
|
||||
#if CS4
|
||||
= true
|
||||
#endif
|
||||
#if !DOTNET20
|
||||
, DispatcherPriority eventPriority
|
||||
#if CS4
|
||||
= DispatcherPriority.Normal
|
||||
#endif
|
||||
#endif
|
||||
)
|
||||
{
|
||||
SaveContext(
|
||||
#if !DOTNET20
|
||||
eventPriority
|
||||
#endif
|
||||
);
|
||||
(new CompressDirectory5Delegate(CompressDirectory)).BeginInvoke(directory, archiveName,
|
||||
password, searchPattern, recursion, AsyncCallbackImplementation, this);
|
||||
}
|
||||
|
||||
#if !DOTNET20
|
||||
/// <summary>
|
||||
/// Packs all files in the specified directory asynchronously.
|
||||
/// </summary>
|
||||
/// <param name="directory">The directory to compress.</param>
|
||||
/// <param name="archiveStream">The archive output stream.
|
||||
/// Use CompressDirectory( ... string archiveName ... ) overloads for archiving to disk.</param>
|
||||
/// <param name="password">The archive password.</param>
|
||||
/// <param name="searchPattern">Search string, such as "*.txt".</param>
|
||||
/// <param name="recursion">If true, files will be searched for recursively; otherwise, not.</param>
|
||||
/// <param name="eventPriority">The priority of events, relative to the other pending operations in the System.Windows.Threading.Dispatcher event queue, the specified method is invoked.</param>
|
||||
#else
|
||||
/// <summary>
|
||||
/// Packs all files in the specified directory asynchronously.
|
||||
/// </summary>
|
||||
/// <param name="directory">The directory to compress.</param>
|
||||
/// <param name="archiveStream">The archive output stream.
|
||||
/// Use CompressDirectory( ... string archiveName ... ) overloads for archiving to disk.</param>
|
||||
/// <param name="password">The archive password.</param>
|
||||
/// <param name="searchPattern">Search string, such as "*.txt".</param>
|
||||
/// <param name="recursion">If true, files will be searched for recursively; otherwise, not.</param>
|
||||
#endif
|
||||
public void BeginCompressDirectory(string directory, Stream archiveStream,
|
||||
string password
|
||||
#if CS4
|
||||
= ""
|
||||
#endif
|
||||
, string searchPattern
|
||||
#if CS4
|
||||
= "*"
|
||||
#endif
|
||||
, bool recursion
|
||||
#if CS4
|
||||
= true
|
||||
#endif
|
||||
#if !DOTNET20
|
||||
, DispatcherPriority eventPriority
|
||||
#if CS4
|
||||
= DispatcherPriority.Normal
|
||||
#endif
|
||||
#endif
|
||||
)
|
||||
{
|
||||
SaveContext(
|
||||
#if !DOTNET20
|
||||
eventPriority
|
||||
#endif
|
||||
);
|
||||
(new CompressDirectory6Delegate(CompressDirectory)).BeginInvoke(directory, archiveStream,
|
||||
password, searchPattern, recursion, AsyncCallbackImplementation, this);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region BeginCompressStream overloads
|
||||
#if !CS4
|
||||
#if !DOTNET20
|
||||
/// <summary>
|
||||
/// Compresses the specified stream.
|
||||
/// </summary>
|
||||
/// <param name="inStream">The source uncompressed stream.</param>
|
||||
/// <param name="outStream">The destination compressed stream.</param>
|
||||
/// <exception cref="ArgumentException">ArgumentException: at least one of the specified streams is invalid.</exception>
|
||||
/// <param name="eventPriority">The priority of events, relative to the other pending operations in the System.Windows.Threading.Dispatcher event queue, the specified method is invoked.</param>
|
||||
#else
|
||||
/// <summary>
|
||||
/// Compresses the specified stream.
|
||||
/// </summary>
|
||||
/// <param name="inStream">The source uncompressed stream.</param>
|
||||
/// <param name="outStream">The destination compressed stream.</param>
|
||||
/// <exception cref="System.ArgumentException">ArgumentException: at least one of the specified streams is invalid.</exception>
|
||||
#endif
|
||||
public void BeginCompressStream(Stream inStream, Stream outStream
|
||||
#if !DOTNET20
|
||||
, DispatcherPriority eventPriority
|
||||
#endif
|
||||
)
|
||||
{
|
||||
SaveContext(
|
||||
#if !DOTNET20
|
||||
eventPriority
|
||||
#endif
|
||||
);
|
||||
(new CompressStream1Delegate(CompressStream)).BeginInvoke(inStream, outStream, AsyncCallbackImplementation, this);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if !DOTNET20
|
||||
/// <summary>
|
||||
/// Compresses the specified stream.
|
||||
/// </summary>
|
||||
/// <param name="inStream">The source uncompressed stream.</param>
|
||||
/// <param name="outStream">The destination compressed stream.</param>
|
||||
/// <param name="password">The archive password.</param>
|
||||
/// <exception cref="System.ArgumentException">ArgumentException: at least one of the specified streams is invalid.</exception>
|
||||
/// <param name="eventPriority">The priority of events, relative to the other pending operations in the System.Windows.Threading.Dispatcher event queue, the specified method is invoked.</param>
|
||||
#else
|
||||
/// <summary>
|
||||
/// Compresses the specified stream.
|
||||
/// </summary>
|
||||
/// <param name="inStream">The source uncompressed stream.</param>
|
||||
/// <param name="outStream">The destination compressed stream.</param>
|
||||
/// <param name="password">The archive password.</param>
|
||||
/// <exception cref="System.ArgumentException">ArgumentException: at least one of the specified streams is invalid.</exception>
|
||||
#endif
|
||||
public void BeginCompressStream(Stream inStream, Stream outStream, string password
|
||||
#if !DOTNET20
|
||||
, DispatcherPriority eventPriority
|
||||
#if CS4
|
||||
= DispatcherPriority.Normal
|
||||
#endif
|
||||
#endif
|
||||
)
|
||||
{
|
||||
SaveContext(
|
||||
#if !DOTNET20
|
||||
eventPriority
|
||||
#endif
|
||||
);
|
||||
(new CompressStream2Delegate(CompressStream)).BeginInvoke(inStream, outStream, password, AsyncCallbackImplementation, this);
|
||||
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region BeginModifyArchive overloads
|
||||
#if !CS4
|
||||
#if !DOTNET20
|
||||
/// <summary>
|
||||
/// Modifies the existing archive asynchronously (renames files or deletes them).
|
||||
/// </summary>
|
||||
/// <param name="archiveName">The archive file name.</param>
|
||||
/// <param name="newFileNames">New file names. Null value to delete the corresponding index.</param>
|
||||
/// <param name="eventPriority">The priority of events, relative to the other pending operations in the System.Windows.Threading.Dispatcher event queue, the specified method is invoked.</param>
|
||||
#else
|
||||
/// <summary>
|
||||
/// Modifies the existing archive asynchronously (renames files or deletes them).
|
||||
/// </summary>
|
||||
/// <param name="archiveName">The archive file name.</param>
|
||||
/// <param name="newFileNames">New file names. Null value to delete the corresponding index.</param>
|
||||
#endif
|
||||
public void BeginModifyArchive(string archiveName, Dictionary<int, string> newFileNames
|
||||
#if !DOTNET20
|
||||
, DispatcherPriority eventPriority
|
||||
#endif
|
||||
)
|
||||
{
|
||||
SaveContext(
|
||||
#if !DOTNET20
|
||||
eventPriority
|
||||
#endif
|
||||
);
|
||||
(new ModifyArchive1Delegate(ModifyArchive)).BeginInvoke(archiveName, newFileNames, AsyncCallbackImplementation, this);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if !DOTNET20
|
||||
/// <summary>
|
||||
/// Modifies the existing archive asynchronously (renames files or deletes them).
|
||||
/// </summary>
|
||||
/// <param name="archiveName">The archive file name.</param>
|
||||
/// <param name="newFileNames">New file names. Null value to delete the corresponding index.</param>
|
||||
/// <param name="password">The archive password.</param>
|
||||
/// <param name="eventPriority">The priority of events, relative to the other pending operations in the System.Windows.Threading.Dispatcher event queue, the specified method is invoked.</param>
|
||||
#else
|
||||
/// <summary>
|
||||
/// Modifies the existing archive asynchronously (renames files or deletes them).
|
||||
/// </summary>
|
||||
/// <param name="archiveName">The archive file name.</param>
|
||||
/// <param name="newFileNames">New file names. Null value to delete the corresponding index.</param>
|
||||
/// <param name="password">The archive password.</param>
|
||||
#endif
|
||||
public void BeginModifyArchive(string archiveName, Dictionary<int, string> newFileNames,
|
||||
string password
|
||||
#if CS4
|
||||
= ""
|
||||
#endif
|
||||
#if !DOTNET20
|
||||
, DispatcherPriority eventPriority
|
||||
#if CS4
|
||||
= DispatcherPriority.Normal
|
||||
#endif
|
||||
#endif
|
||||
)
|
||||
{
|
||||
SaveContext(
|
||||
#if !DOTNET20
|
||||
eventPriority
|
||||
#endif
|
||||
);
|
||||
(new ModifyArchive2Delegate(ModifyArchive)).BeginInvoke(archiveName, newFileNames, password, AsyncCallbackImplementation, this);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -1,317 +0,0 @@
|
|||
/* This file is part of SevenZipSharp.
|
||||
|
||||
SevenZipSharp is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
SevenZipSharp is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with SevenZipSharp. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
namespace SevenZip
|
||||
{
|
||||
using System;
|
||||
using System.IO;
|
||||
#if DOTNET20
|
||||
using System.Threading;
|
||||
#else
|
||||
using System.Windows.Threading;
|
||||
#endif
|
||||
|
||||
partial class SevenZipExtractor
|
||||
{
|
||||
#region Asynchronous core methods
|
||||
|
||||
/// <summary>
|
||||
/// Recreates the instance of the SevenZipExtractor class.
|
||||
/// Used in asynchronous methods.
|
||||
/// </summary>
|
||||
private void RecreateInstanceIfNeeded()
|
||||
{
|
||||
if (NeedsToBeRecreated)
|
||||
{
|
||||
NeedsToBeRecreated = false;
|
||||
Stream backupStream = null;
|
||||
string backupFileName = null;
|
||||
if (String.IsNullOrEmpty(_fileName))
|
||||
{
|
||||
backupStream = _inStream;
|
||||
}
|
||||
else
|
||||
{
|
||||
backupFileName = _fileName;
|
||||
}
|
||||
CommonDispose();
|
||||
if (backupStream == null)
|
||||
{
|
||||
Init(backupFileName);
|
||||
}
|
||||
else
|
||||
{
|
||||
Init(backupStream);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal override void SaveContext(
|
||||
#if !DOTNET20
|
||||
DispatcherPriority eventPriority
|
||||
#if CS4
|
||||
= DispatcherPriority.Normal
|
||||
#endif
|
||||
#endif
|
||||
)
|
||||
{
|
||||
DisposedCheck();
|
||||
_asynchronousDisposeLock = true;
|
||||
base.SaveContext(
|
||||
#if !DOTNET20
|
||||
eventPriority
|
||||
#endif
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
internal override void ReleaseContext()
|
||||
{
|
||||
base.ReleaseContext();
|
||||
_asynchronousDisposeLock = false;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Delegates
|
||||
/// <summary>
|
||||
/// The delegate to use in BeginExtractArchive.
|
||||
/// </summary>
|
||||
/// <param name="directory">The directory where the files are to be unpacked.</param>
|
||||
private delegate void ExtractArchiveDelegate(string directory);
|
||||
|
||||
/// <summary>
|
||||
/// The delegate to use in BeginExtractFile (by file name).
|
||||
/// </summary>
|
||||
/// <param name="fileName">The file full name in the archive file table.</param>
|
||||
/// <param name="stream">The stream where the file is to be unpacked.</param>
|
||||
private delegate void ExtractFileByFileNameDelegate(string fileName, Stream stream);
|
||||
|
||||
/// <summary>
|
||||
/// The delegate to use in BeginExtractFile (by index).
|
||||
/// </summary>
|
||||
/// <param name="index">Index in the archive file table.</param>
|
||||
/// <param name="stream">The stream where the file is to be unpacked.</param>
|
||||
private delegate void ExtractFileByIndexDelegate(int index, Stream stream);
|
||||
|
||||
/// <summary>
|
||||
/// The delegate to use in BeginExtractFiles(string directory, params int[] indexes).
|
||||
/// </summary>
|
||||
/// <param name="indexes">indexes of the files in the archive file table.</param>
|
||||
/// <param name="directory">Directory where the files are to be unpacked.</param>
|
||||
private delegate void ExtractFiles1Delegate(string directory, int[] indexes);
|
||||
|
||||
/// <summary>
|
||||
/// The delegate to use in BeginExtractFiles(string directory, params string[] fileNames).
|
||||
/// </summary>
|
||||
/// <param name="fileNames">Full file names in the archive file table.</param>
|
||||
/// <param name="directory">Directory where the files are to be unpacked.</param>
|
||||
private delegate void ExtractFiles2Delegate(string directory, string[] fileNames);
|
||||
|
||||
/// <summary>
|
||||
/// The delegate to use in BeginExtractFiles(ExtractFileCallback extractFileCallback).
|
||||
/// </summary>
|
||||
/// <param name="extractFileCallback">The callback to call for each file in the archive.</param>
|
||||
private delegate void ExtractFiles3Delegate(ExtractFileCallback extractFileCallback);
|
||||
#endregion
|
||||
|
||||
#if !DOTNET20
|
||||
/// <summary>
|
||||
/// Unpacks the whole archive asynchronously to the specified directory name at the specified priority.
|
||||
/// </summary>
|
||||
/// <param name="directory">The directory where the files are to be unpacked.</param>
|
||||
/// <param name="eventPriority">The priority of events, relative to the other pending operations in the System.Windows.Threading.Dispatcher event queue, the specified method is invoked.</param>
|
||||
#else
|
||||
/// <summary>
|
||||
/// Unpacks the whole archive asynchronously to the specified directory name at the specified priority.
|
||||
/// </summary>
|
||||
/// <param name="directory">The directory where the files are to be unpacked.</param>
|
||||
#endif
|
||||
public void BeginExtractArchive(string directory
|
||||
#if !DOTNET20
|
||||
, DispatcherPriority eventPriority
|
||||
#if CS4
|
||||
= DispatcherPriority.Normal
|
||||
#endif
|
||||
#endif
|
||||
)
|
||||
{
|
||||
SaveContext(
|
||||
#if !DOTNET20
|
||||
eventPriority
|
||||
#endif
|
||||
);
|
||||
(new ExtractArchiveDelegate(ExtractArchive)).BeginInvoke(directory, AsyncCallbackImplementation, this);
|
||||
}
|
||||
|
||||
#if !DOTNET20
|
||||
/// <summary>
|
||||
/// Unpacks the file asynchronously by its name to the specified stream.
|
||||
/// </summary>
|
||||
/// <param name="fileName">The file full name in the archive file table.</param>
|
||||
/// <param name="stream">The stream where the file is to be unpacked.</param>
|
||||
/// <param name="eventPriority">The priority of events, relative to the other pending operations in the System.Windows.Threading.Dispatcher event queue, the specified method is invoked.</param>
|
||||
#else
|
||||
/// <summary>
|
||||
/// Unpacks the file asynchronously by its name to the specified stream.
|
||||
/// </summary>
|
||||
/// <param name="fileName">The file full name in the archive file table.</param>
|
||||
/// <param name="stream">The stream where the file is to be unpacked.</param>
|
||||
#endif
|
||||
public void BeginExtractFile(string fileName, Stream stream
|
||||
#if !DOTNET20
|
||||
, DispatcherPriority eventPriority
|
||||
#if CS4
|
||||
= DispatcherPriority.Normal
|
||||
#endif
|
||||
#endif
|
||||
)
|
||||
{
|
||||
SaveContext(
|
||||
#if !DOTNET20
|
||||
eventPriority
|
||||
#endif
|
||||
);
|
||||
(new ExtractFileByFileNameDelegate(ExtractFile)).BeginInvoke(fileName, stream, AsyncCallbackImplementation, this);
|
||||
}
|
||||
|
||||
#if !DOTNET20
|
||||
/// <summary>
|
||||
/// Unpacks the file asynchronously by its index to the specified stream.
|
||||
/// </summary>
|
||||
/// <param name="index">Index in the archive file table.</param>
|
||||
/// <param name="stream">The stream where the file is to be unpacked.</param>
|
||||
/// <param name="eventPriority">The priority of events, relative to the other pending operations in the System.Windows.Threading.Dispatcher event queue, the specified method is invoked.</param>
|
||||
#else
|
||||
/// <summary>
|
||||
/// Unpacks the file asynchronously by its index to the specified stream.
|
||||
/// </summary>
|
||||
/// <param name="index">Index in the archive file table.</param>
|
||||
/// <param name="stream">The stream where the file is to be unpacked.</param>
|
||||
#endif
|
||||
public void BeginExtractFile(int index, Stream stream
|
||||
#if !DOTNET20
|
||||
, DispatcherPriority eventPriority
|
||||
#if CS4
|
||||
= DispatcherPriority.Normal
|
||||
#endif
|
||||
#endif
|
||||
)
|
||||
{
|
||||
SaveContext(
|
||||
#if !DOTNET20
|
||||
eventPriority
|
||||
#endif
|
||||
);
|
||||
(new ExtractFileByIndexDelegate(ExtractFile)).BeginInvoke(index, stream, AsyncCallbackImplementation, this);
|
||||
}
|
||||
|
||||
#if !DOTNET20
|
||||
/// <summary>
|
||||
/// Unpacks files asynchronously by their indices to the specified directory.
|
||||
/// </summary>
|
||||
/// <param name="indexes">indexes of the files in the archive file table.</param>
|
||||
/// <param name="directory">Directory where the files are to be unpacked.</param>
|
||||
/// <param name="eventPriority">The priority of events, relative to the other pending operations in the System.Windows.Threading.Dispatcher event queue, the specified method is invoked.</param>
|
||||
#else
|
||||
/// <summary>
|
||||
/// Unpacks files asynchronously by their indices to the specified directory.
|
||||
/// </summary>
|
||||
/// <param name="indexes">indexes of the files in the archive file table.</param>
|
||||
/// <param name="directory">Directory where the files are to be unpacked.</param>
|
||||
#endif
|
||||
public void BeginExtractFiles(string directory
|
||||
#if !DOTNET20
|
||||
, DispatcherPriority eventPriority
|
||||
#if CS4
|
||||
= DispatcherPriority.Normal
|
||||
#endif
|
||||
#endif
|
||||
, params int[] indexes)
|
||||
{
|
||||
SaveContext(
|
||||
#if !DOTNET20
|
||||
eventPriority
|
||||
#endif
|
||||
);
|
||||
(new ExtractFiles1Delegate(ExtractFiles)).BeginInvoke(directory, indexes, AsyncCallbackImplementation, this);
|
||||
}
|
||||
|
||||
#if !DOTNET20
|
||||
/// <summary>
|
||||
/// Unpacks files asynchronously by their full names to the specified directory.
|
||||
/// </summary>
|
||||
/// <param name="fileNames">Full file names in the archive file table.</param>
|
||||
/// <param name="directory">Directory where the files are to be unpacked.</param>
|
||||
/// <param name="eventPriority">The priority of events, relative to the other pending operations in the System.Windows.Threading.Dispatcher event queue, the specified method is invoked.</param>
|
||||
#else
|
||||
/// <summary>
|
||||
/// Unpacks files asynchronously by their full names to the specified directory.
|
||||
/// </summary>
|
||||
/// <param name="fileNames">Full file names in the archive file table.</param>
|
||||
/// <param name="directory">Directory where the files are to be unpacked.</param>
|
||||
#endif
|
||||
public void BeginExtractFiles(string directory
|
||||
#if !DOTNET20
|
||||
, DispatcherPriority eventPriority
|
||||
#if CS4
|
||||
= DispatcherPriority.Normal
|
||||
#endif
|
||||
#endif
|
||||
, params string[] fileNames)
|
||||
{
|
||||
SaveContext(
|
||||
#if !DOTNET20
|
||||
eventPriority
|
||||
#endif
|
||||
);
|
||||
(new ExtractFiles2Delegate(ExtractFiles)).BeginInvoke(directory, fileNames, AsyncCallbackImplementation, this);
|
||||
}
|
||||
|
||||
#if !DOTNET20
|
||||
/// <summary>
|
||||
/// Extracts files from the archive asynchronously, giving a callback the choice what
|
||||
/// to do with each file. The order of the files is given by the archive.
|
||||
/// 7-Zip (and any other solid) archives are NOT supported.
|
||||
/// </summary>
|
||||
/// <param name="extractFileCallback">The callback to call for each file in the archive.</param>
|
||||
/// <param name="eventPriority">The priority of events, relative to the other pending operations in the System.Windows.Threading.Dispatcher event queue, the specified method is invoked.</param>
|
||||
#else
|
||||
/// <summary>
|
||||
/// Extracts files from the archive asynchronously, giving a callback the choice what
|
||||
/// to do with each file. The order of the files is given by the archive.
|
||||
/// 7-Zip (and any other solid) archives are NOT supported.
|
||||
/// </summary>
|
||||
/// <param name="extractFileCallback">The callback to call for each file in the archive.</param>
|
||||
#endif
|
||||
public void BeginExtractFiles(ExtractFileCallback extractFileCallback
|
||||
#if !DOTNET20
|
||||
, DispatcherPriority eventPriority
|
||||
#if CS4
|
||||
= DispatcherPriority.Normal
|
||||
#endif
|
||||
#endif
|
||||
)
|
||||
{
|
||||
SaveContext(
|
||||
#if !DOTNET20
|
||||
eventPriority
|
||||
#endif
|
||||
);
|
||||
(new ExtractFiles3Delegate(ExtractFiles)).BeginInvoke(extractFileCallback, AsyncCallbackImplementation, this);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,499 +0,0 @@
|
|||
/* This file is part of SevenZipSharp.
|
||||
|
||||
SevenZipSharp is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
SevenZipSharp is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with SevenZipSharp. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Xml;
|
||||
using System.Xml.Schema;
|
||||
|
||||
namespace SevenZip
|
||||
{
|
||||
#if SFX
|
||||
using SfxSettings = Dictionary<string, string>;
|
||||
|
||||
/// <summary>
|
||||
/// Sfx module choice enumeration
|
||||
/// </summary>
|
||||
public enum SfxModule
|
||||
{
|
||||
/// <summary>
|
||||
/// Default module (leave this if unsure)
|
||||
/// </summary>
|
||||
Default,
|
||||
/// <summary>
|
||||
/// The simple sfx module by Igor Pavlov with no adjustable parameters
|
||||
/// </summary>
|
||||
Simple,
|
||||
/// <summary>
|
||||
/// The installer sfx module by Igor Pavlov
|
||||
/// </summary>
|
||||
Installer,
|
||||
/// <summary>
|
||||
/// The extended installer sfx module by Oleg Scherbakov
|
||||
/// </summary>
|
||||
Extended,
|
||||
/// <summary>
|
||||
/// The custom sfx module. First you must specify the module file name.
|
||||
/// </summary>
|
||||
Custom
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The class for making 7-zip based self-extracting archives.
|
||||
/// </summary>
|
||||
public class SevenZipSfx
|
||||
{
|
||||
private static readonly Dictionary<SfxModule, List<string>> SfxSupportedModuleNames =
|
||||
new Dictionary<SfxModule, List<string>>(3)
|
||||
{
|
||||
{SfxModule.Default, new List<string>(1) {"7zxSD_All.sfx"}},
|
||||
{SfxModule.Simple, new List<string>(2) {"7z.sfx", "7zCon.sfx"}},
|
||||
{SfxModule.Installer, new List<string>(2) {"7zS.sfx", "7zSD.sfx"}},
|
||||
{
|
||||
SfxModule.Extended,
|
||||
new List<string>(4) {"7zxSD_All.sfx", "7zxSD_Deflate", "7zxSD_LZMA", "7zxSD_PPMd"}
|
||||
}
|
||||
};
|
||||
|
||||
private SfxModule _module = SfxModule.Default;
|
||||
private string _moduleFileName;
|
||||
private Dictionary<SfxModule, List<string>> _sfxCommands;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipSfx class.
|
||||
/// </summary>
|
||||
public SevenZipSfx()
|
||||
{
|
||||
_module = SfxModule.Default;
|
||||
CommonInit();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipSfx class.
|
||||
/// </summary>
|
||||
/// <param name="module">The sfx module to use as a front-end.</param>
|
||||
public SevenZipSfx(SfxModule module)
|
||||
{
|
||||
if (module == SfxModule.Custom)
|
||||
{
|
||||
throw new ArgumentException("You must specify the custom module executable.", "module");
|
||||
}
|
||||
_module = module;
|
||||
CommonInit();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the SevenZipSfx class.
|
||||
/// </summary>
|
||||
/// <param name="moduleFileName"></param>
|
||||
public SevenZipSfx(string moduleFileName)
|
||||
{
|
||||
_module = SfxModule.Custom;
|
||||
ModuleFileName = moduleFileName;
|
||||
CommonInit();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the sfx module type.
|
||||
/// </summary>
|
||||
public SfxModule SfxModule
|
||||
{
|
||||
get
|
||||
{
|
||||
return _module;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the custom sfx module file name
|
||||
/// </summary>
|
||||
public string ModuleFileName
|
||||
{
|
||||
get
|
||||
{
|
||||
return _moduleFileName;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
if (!File.Exists(value))
|
||||
{
|
||||
throw new ArgumentException("The specified file does not exist.");
|
||||
}
|
||||
_moduleFileName = value;
|
||||
_module = SfxModule.Custom;
|
||||
string sfxName = Path.GetFileName(value);
|
||||
foreach (SfxModule mod in SfxSupportedModuleNames.Keys)
|
||||
{
|
||||
if (SfxSupportedModuleNames[mod].Contains(sfxName))
|
||||
{
|
||||
_module = mod;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void CommonInit()
|
||||
{
|
||||
LoadCommandsFromResource("Configs");
|
||||
}
|
||||
|
||||
private static string GetResourceString(string str)
|
||||
{
|
||||
#if !WINCE
|
||||
return "SevenZip.sfx." + str;
|
||||
#else
|
||||
return "SevenZipSharpMobile.sfx." + str;
|
||||
#endif
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the sfx module enum by the list of supported modules
|
||||
/// </summary>
|
||||
/// <param name="name"></param>
|
||||
/// <returns></returns>
|
||||
private static SfxModule GetModuleByName(string name)
|
||||
{
|
||||
if (name.IndexOf("7z.sfx", StringComparison.Ordinal) > -1)
|
||||
{
|
||||
return SfxModule.Simple;
|
||||
}
|
||||
if (name.IndexOf("7zS.sfx", StringComparison.Ordinal) > -1)
|
||||
{
|
||||
return SfxModule.Installer;
|
||||
}
|
||||
if (name.IndexOf("7zxSD_All.sfx", StringComparison.Ordinal) > -1)
|
||||
{
|
||||
return SfxModule.Extended;
|
||||
}
|
||||
throw new SevenZipSfxValidationException("The specified configuration is unsupported.");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Loads the commands for each supported sfx module configuration
|
||||
/// </summary>
|
||||
/// <param name="xmlDefinitions">The resource name for xml definitions</param>
|
||||
private void LoadCommandsFromResource(string xmlDefinitions)
|
||||
{
|
||||
using (Stream cfg = Assembly.GetExecutingAssembly().GetManifestResourceStream(
|
||||
GetResourceString(xmlDefinitions + ".xml")))
|
||||
{
|
||||
if (cfg == null)
|
||||
{
|
||||
throw new SevenZipSfxValidationException("The configuration \"" + xmlDefinitions +
|
||||
"\" does not exist.");
|
||||
}
|
||||
using (Stream schm = Assembly.GetExecutingAssembly().GetManifestResourceStream(
|
||||
GetResourceString(xmlDefinitions + ".xsd")))
|
||||
{
|
||||
if (schm == null)
|
||||
{
|
||||
throw new SevenZipSfxValidationException("The configuration schema \"" + xmlDefinitions +
|
||||
"\" does not exist.");
|
||||
}
|
||||
var sc = new XmlSchemaSet();
|
||||
using (XmlReader scr = XmlReader.Create(schm))
|
||||
{
|
||||
sc.Add(null, scr);
|
||||
var settings = new XmlReaderSettings {ValidationType = ValidationType.Schema, Schemas = sc};
|
||||
string validationErrors = "";
|
||||
settings.ValidationEventHandler +=
|
||||
((s, t) =>
|
||||
{
|
||||
validationErrors += String.Format(CultureInfo.InvariantCulture, "[{0}]: {1}\n",
|
||||
t.Severity.ToString(), t.Message);
|
||||
});
|
||||
using (XmlReader rdr = XmlReader.Create(cfg, settings))
|
||||
{
|
||||
_sfxCommands = new Dictionary<SfxModule, List<string>>();
|
||||
rdr.Read();
|
||||
rdr.Read();
|
||||
rdr.Read();
|
||||
rdr.Read();
|
||||
rdr.Read();
|
||||
rdr.ReadStartElement("sfxConfigs");
|
||||
rdr.Read();
|
||||
do
|
||||
{
|
||||
SfxModule mod = GetModuleByName(rdr["modules"]);
|
||||
rdr.ReadStartElement("config");
|
||||
rdr.Read();
|
||||
if (rdr.Name == "id")
|
||||
{
|
||||
var cmds = new List<string>();
|
||||
_sfxCommands.Add(mod, cmds);
|
||||
do
|
||||
{
|
||||
cmds.Add(rdr["command"]);
|
||||
rdr.Read();
|
||||
rdr.Read();
|
||||
} while (rdr.Name == "id");
|
||||
rdr.ReadEndElement();
|
||||
rdr.Read();
|
||||
}
|
||||
else
|
||||
{
|
||||
_sfxCommands.Add(mod, null);
|
||||
}
|
||||
} while (rdr.Name == "config");
|
||||
}
|
||||
if (!String.IsNullOrEmpty(validationErrors))
|
||||
{
|
||||
throw new SevenZipSfxValidationException(
|
||||
"\n" + validationErrors.Substring(0, validationErrors.Length - 1));
|
||||
}
|
||||
_sfxCommands.Add(SfxModule.Default, _sfxCommands[SfxModule.Extended]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validates the sfx scenario commands.
|
||||
/// </summary>
|
||||
/// <param name="settings">The sfx settings dictionary to validate.</param>
|
||||
private void ValidateSettings(SfxSettings settings)
|
||||
{
|
||||
if (_module == SfxModule.Custom)
|
||||
{
|
||||
return;
|
||||
}
|
||||
List<string> commands = _sfxCommands[_module];
|
||||
if (commands == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
var invalidCommands = new List<string>();
|
||||
foreach (string command in settings.Keys)
|
||||
{
|
||||
if (!commands.Contains(command))
|
||||
{
|
||||
invalidCommands.Add(command);
|
||||
}
|
||||
}
|
||||
if (invalidCommands.Count > 0)
|
||||
{
|
||||
var invalidText = new StringBuilder("\nInvalid commands:\n");
|
||||
foreach (string str in invalidCommands)
|
||||
{
|
||||
invalidText.Append(str);
|
||||
}
|
||||
throw new SevenZipSfxValidationException(invalidText.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the stream containing the sfx settings.
|
||||
/// </summary>
|
||||
/// <param name="settings">The sfx settings dictionary.</param>
|
||||
/// <returns></returns>
|
||||
private static Stream GetSettingsStream(SfxSettings settings)
|
||||
{
|
||||
var ms = new MemoryStream();
|
||||
byte[] buf = Encoding.UTF8.GetBytes(@";!@Install@!UTF-8!" + '\n');
|
||||
ms.Write(buf, 0, buf.Length);
|
||||
foreach (string command in settings.Keys)
|
||||
{
|
||||
buf =
|
||||
Encoding.UTF8.GetBytes(String.Format(CultureInfo.InvariantCulture, "{0}=\"{1}\"\n", command,
|
||||
settings[command]));
|
||||
ms.Write(buf, 0, buf.Length);
|
||||
}
|
||||
buf = Encoding.UTF8.GetBytes(@";!@InstallEnd@!");
|
||||
ms.Write(buf, 0, buf.Length);
|
||||
return ms;
|
||||
}
|
||||
|
||||
private SfxSettings GetDefaultSettings()
|
||||
{
|
||||
switch (_module)
|
||||
{
|
||||
default:
|
||||
return null;
|
||||
case SfxModule.Installer:
|
||||
var settings = new Dictionary<string, string> {{"Title", "7-Zip self-extracting archive"}};
|
||||
return settings;
|
||||
case SfxModule.Default:
|
||||
case SfxModule.Extended:
|
||||
settings = new Dictionary<string, string>
|
||||
{
|
||||
{"GUIMode", "0"},
|
||||
{"InstallPath", "."},
|
||||
{"GUIFlags", "128+8"},
|
||||
{"ExtractPathTitle", "7-Zip self-extracting archive"},
|
||||
{"ExtractPathText", "Specify the path where to extract the files:"}
|
||||
};
|
||||
return settings;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the whole to the other one.
|
||||
/// </summary>
|
||||
/// <param name="src">The source stream to read from.</param>
|
||||
/// <param name="dest">The destination stream to wrie to.</param>
|
||||
private static void WriteStream(Stream src, Stream dest)
|
||||
{
|
||||
src.Seek(0, SeekOrigin.Begin);
|
||||
var buf = new byte[32768];
|
||||
int bytesRead;
|
||||
while ((bytesRead = src.Read(buf, 0, buf.Length)) > 0)
|
||||
{
|
||||
dest.Write(buf, 0, bytesRead);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Makes the self-extracting archive.
|
||||
/// </summary>
|
||||
/// <param name="archive">The archive stream.</param>
|
||||
/// <param name="sfxFileName">The name of the self-extracting executable.</param>
|
||||
public void MakeSfx(Stream archive, string sfxFileName)
|
||||
{
|
||||
using (Stream sfxStream = File.Create(sfxFileName))
|
||||
{
|
||||
MakeSfx(archive, GetDefaultSettings(), sfxStream);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Makes the self-extracting archive.
|
||||
/// </summary>
|
||||
/// <param name="archive">The archive stream.</param>
|
||||
/// <param name="sfxStream">The stream to write the self-extracting executable to.</param>
|
||||
public void MakeSfx(Stream archive, Stream sfxStream)
|
||||
{
|
||||
MakeSfx(archive, GetDefaultSettings(), sfxStream);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Makes the self-extracting archive.
|
||||
/// </summary>
|
||||
/// <param name="archive">The archive stream.</param>
|
||||
/// <param name="settings">The sfx settings.</param>
|
||||
/// <param name="sfxFileName">The name of the self-extracting executable.</param>
|
||||
public void MakeSfx(Stream archive, SfxSettings settings, string sfxFileName)
|
||||
{
|
||||
using (Stream sfxStream = File.Create(sfxFileName))
|
||||
{
|
||||
MakeSfx(archive, settings, sfxStream);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Makes the self-extracting archive.
|
||||
/// </summary>
|
||||
/// <param name="archive">The archive stream.</param>
|
||||
/// <param name="settings">The sfx settings.</param>
|
||||
/// <param name="sfxStream">The stream to write the self-extracting executable to.</param>
|
||||
public void MakeSfx(Stream archive, SfxSettings settings, Stream sfxStream)
|
||||
{
|
||||
if (!sfxStream.CanWrite)
|
||||
{
|
||||
throw new ArgumentException("The specified output stream can not write.", "sfxStream");
|
||||
}
|
||||
ValidateSettings(settings);
|
||||
using (Stream sfx = _module == SfxModule.Default
|
||||
? Assembly.GetExecutingAssembly().GetManifestResourceStream(
|
||||
GetResourceString(SfxSupportedModuleNames[_module][0]))
|
||||
: new FileStream(_moduleFileName, FileMode.Open, FileAccess.Read,
|
||||
FileShare.ReadWrite))
|
||||
{
|
||||
WriteStream(sfx, sfxStream);
|
||||
}
|
||||
if (_module == SfxModule.Custom || _sfxCommands[_module] != null)
|
||||
{
|
||||
using (Stream set = GetSettingsStream(settings))
|
||||
{
|
||||
WriteStream(set, sfxStream);
|
||||
}
|
||||
}
|
||||
WriteStream(archive, sfxStream);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Makes the self-extracting archive.
|
||||
/// </summary>
|
||||
/// <param name="archiveFileName">The archive file name.</param>
|
||||
/// <param name="sfxFileName">The name of the self-extracting executable.</param>
|
||||
public void MakeSfx(string archiveFileName, string sfxFileName)
|
||||
{
|
||||
using (Stream sfxStream = File.Create(sfxFileName))
|
||||
{
|
||||
using (
|
||||
Stream archive = new FileStream(archiveFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
|
||||
)
|
||||
{
|
||||
MakeSfx(archive, GetDefaultSettings(), sfxStream);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Makes the self-extracting archive.
|
||||
/// </summary>
|
||||
/// <param name="archiveFileName">The archive file name.</param>
|
||||
/// <param name="sfxStream">The stream to write the self-extracting executable to.</param>
|
||||
public void MakeSfx(string archiveFileName, Stream sfxStream)
|
||||
{
|
||||
using (Stream archive = new FileStream(archiveFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
|
||||
)
|
||||
{
|
||||
MakeSfx(archive, GetDefaultSettings(), sfxStream);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Makes the self-extracting archive.
|
||||
/// </summary>
|
||||
/// <param name="archiveFileName">The archive file name.</param>
|
||||
/// <param name="settings">The sfx settings.</param>
|
||||
/// <param name="sfxFileName">The name of the self-extracting executable.</param>
|
||||
public void MakeSfx(string archiveFileName, SfxSettings settings, string sfxFileName)
|
||||
{
|
||||
using (Stream sfxStream = File.Create(sfxFileName))
|
||||
{
|
||||
using (
|
||||
Stream archive = new FileStream(archiveFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
|
||||
)
|
||||
{
|
||||
MakeSfx(archive, settings, sfxStream);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Makes the self-extracting archive.
|
||||
/// </summary>
|
||||
/// <param name="archiveFileName">The archive file name.</param>
|
||||
/// <param name="settings">The sfx settings.</param>
|
||||
/// <param name="sfxStream">The stream to write the self-extracting executable to.</param>
|
||||
public void MakeSfx(string archiveFileName, SfxSettings settings, Stream sfxStream)
|
||||
{
|
||||
using (Stream archive = new FileStream(archiveFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
|
||||
)
|
||||
{
|
||||
MakeSfx(archive, settings, sfxStream);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
|
@ -1,545 +0,0 @@
|
|||
/* This file is part of SevenZipSharp.
|
||||
|
||||
SevenZipSharp is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
SevenZipSharp is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with SevenZipSharp. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
#if MONO
|
||||
using SevenZip.Mono.COM;
|
||||
#endif
|
||||
|
||||
namespace SevenZip
|
||||
{
|
||||
#if UNMANAGED
|
||||
|
||||
/// <summary>
|
||||
/// A class that has DisposeStream property.
|
||||
/// </summary>
|
||||
internal class DisposeVariableWrapper
|
||||
{
|
||||
public bool DisposeStream { protected get; set; }
|
||||
|
||||
protected DisposeVariableWrapper(bool disposeStream) { DisposeStream = disposeStream; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Stream wrapper used in InStreamWrapper
|
||||
/// </summary>
|
||||
internal class StreamWrapper : DisposeVariableWrapper, IDisposable
|
||||
{
|
||||
/// <summary>
|
||||
/// File name associated with the stream (for date fix)
|
||||
/// </summary>
|
||||
private readonly string _fileName;
|
||||
|
||||
private readonly DateTime _fileTime;
|
||||
|
||||
/// <summary>
|
||||
/// Worker stream for reading, writing and seeking.
|
||||
/// </summary>
|
||||
private Stream _baseStream;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the StreamWrapper class
|
||||
/// </summary>
|
||||
/// <param name="baseStream">Worker stream for reading, writing and seeking</param>
|
||||
/// <param name="fileName">File name associated with the stream (for attributes fix)</param>
|
||||
/// <param name="time">File last write time (for attributes fix)</param>
|
||||
/// <param name="disposeStream">Indicates whether to dispose the baseStream</param>
|
||||
protected StreamWrapper(Stream baseStream, string fileName, DateTime time, bool disposeStream)
|
||||
: base(disposeStream)
|
||||
{
|
||||
_baseStream = baseStream;
|
||||
_fileName = fileName;
|
||||
_fileTime = time;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the StreamWrapper class
|
||||
/// </summary>
|
||||
/// <param name="baseStream">Worker stream for reading, writing and seeking</param>
|
||||
/// <param name="disposeStream">Indicates whether to dispose the baseStream</param>
|
||||
protected StreamWrapper(Stream baseStream, bool disposeStream)
|
||||
: base(disposeStream)
|
||||
{
|
||||
_baseStream = baseStream;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the worker stream for reading, writing and seeking.
|
||||
/// </summary>
|
||||
protected Stream BaseStream
|
||||
{
|
||||
get
|
||||
{
|
||||
return _baseStream;
|
||||
}
|
||||
}
|
||||
|
||||
#region IDisposable Members
|
||||
|
||||
/// <summary>
|
||||
/// Cleans up any resources used and fixes file attributes.
|
||||
/// </summary>
|
||||
public void Dispose()
|
||||
{
|
||||
if (_baseStream != null && DisposeStream)
|
||||
{
|
||||
try
|
||||
{
|
||||
_baseStream.Dispose();
|
||||
}
|
||||
catch (ObjectDisposedException) { }
|
||||
_baseStream = null;
|
||||
}
|
||||
if (!String.IsNullOrEmpty(_fileName) && File.Exists(_fileName))
|
||||
{
|
||||
try
|
||||
{
|
||||
#if !WINCE
|
||||
|
||||
File.SetLastWriteTime(_fileName, _fileTime);
|
||||
File.SetLastAccessTime(_fileName, _fileTime);
|
||||
File.SetCreationTime(_fileName, _fileTime);
|
||||
#elif WINCE
|
||||
OpenNETCF.IO.FileHelper.SetLastWriteTime(_fileName, _fileTime);
|
||||
OpenNETCF.IO.FileHelper.SetLastAccessTime(_fileName, _fileTime);
|
||||
OpenNETCF.IO.FileHelper.SetCreationTime(_fileName, _fileTime);
|
||||
#endif
|
||||
//TODO: time support for Windows Phone
|
||||
}
|
||||
catch (ArgumentOutOfRangeException) {}
|
||||
}
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public virtual void Seek(long offset, SeekOrigin seekOrigin, IntPtr newPosition)
|
||||
{
|
||||
if (BaseStream != null)
|
||||
{
|
||||
long position = BaseStream.Seek(offset, seekOrigin);
|
||||
if (newPosition != IntPtr.Zero)
|
||||
{
|
||||
Marshal.WriteInt64(newPosition, position);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// IInStream wrapper used in stream read operations.
|
||||
/// </summary>
|
||||
internal sealed class InStreamWrapper : StreamWrapper, ISequentialInStream, IInStream
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the InStreamWrapper class.
|
||||
/// </summary>
|
||||
/// <param name="baseStream">Stream for writing data</param>
|
||||
/// <param name="disposeStream">Indicates whether to dispose the baseStream</param>
|
||||
public InStreamWrapper(Stream baseStream, bool disposeStream) : base(baseStream, disposeStream) { }
|
||||
|
||||
#region ISequentialInStream Members
|
||||
|
||||
/// <summary>
|
||||
/// Reads data from the stream.
|
||||
/// </summary>
|
||||
/// <param name="data">A data array.</param>
|
||||
/// <param name="size">The array size.</param>
|
||||
/// <returns>The read bytes count.</returns>
|
||||
public int Read(byte[] data, uint size)
|
||||
{
|
||||
int readCount = 0;
|
||||
if (BaseStream != null)
|
||||
{
|
||||
readCount = BaseStream.Read(data, 0, (int) size);
|
||||
if (readCount > 0)
|
||||
{
|
||||
OnBytesRead(new IntEventArgs(readCount));
|
||||
}
|
||||
}
|
||||
return readCount;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// Occurs when IntEventArgs.Value bytes were read from the source.
|
||||
/// </summary>
|
||||
public event EventHandler<IntEventArgs> BytesRead;
|
||||
|
||||
private void OnBytesRead(IntEventArgs e)
|
||||
{
|
||||
if (BytesRead != null)
|
||||
{
|
||||
BytesRead(this, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// IOutStream wrapper used in stream write operations.
|
||||
/// </summary>
|
||||
internal sealed class OutStreamWrapper : StreamWrapper, ISequentialOutStream, IOutStream
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the OutStreamWrapper class
|
||||
/// </summary>
|
||||
/// <param name="baseStream">Stream for writing data</param>
|
||||
/// <param name="fileName">File name (for attributes fix)</param>
|
||||
/// <param name="time">Time of the file creation (for attributes fix)</param>
|
||||
/// <param name="disposeStream">Indicates whether to dispose the baseStream</param>
|
||||
public OutStreamWrapper(Stream baseStream, string fileName, DateTime time, bool disposeStream) :
|
||||
base(baseStream, fileName, time, disposeStream) {}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the OutStreamWrapper class
|
||||
/// </summary>
|
||||
/// <param name="baseStream">Stream for writing data</param>
|
||||
/// <param name="disposeStream">Indicates whether to dispose the baseStream</param>
|
||||
public OutStreamWrapper(Stream baseStream, bool disposeStream) :
|
||||
base(baseStream, disposeStream) {}
|
||||
|
||||
#region IOutStream Members
|
||||
|
||||
public int SetSize(long newSize)
|
||||
{
|
||||
BaseStream.SetLength(newSize);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ISequentialOutStream Members
|
||||
|
||||
/// <summary>
|
||||
/// Writes data to the stream
|
||||
/// </summary>
|
||||
/// <param name="data">Data array</param>
|
||||
/// <param name="size">Array size</param>
|
||||
/// <param name="processedSize">Count of written bytes</param>
|
||||
/// <returns>Zero if Ok</returns>
|
||||
public int Write(byte[] data, uint size, IntPtr processedSize)
|
||||
{
|
||||
BaseStream.Write(data, 0, (int) size);
|
||||
if (processedSize != IntPtr.Zero)
|
||||
{
|
||||
Marshal.WriteInt32(processedSize, (int) size);
|
||||
}
|
||||
OnBytesWritten(new IntEventArgs((int) size));
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// Occurs when IntEventArgs.Value bytes were written.
|
||||
/// </summary>
|
||||
public event EventHandler<IntEventArgs> BytesWritten;
|
||||
|
||||
private void OnBytesWritten(IntEventArgs e)
|
||||
{
|
||||
if (BytesWritten != null)
|
||||
{
|
||||
BytesWritten(this, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Base multi volume stream wrapper class.
|
||||
/// </summary>
|
||||
internal class MultiStreamWrapper : DisposeVariableWrapper, IDisposable
|
||||
{
|
||||
protected readonly Dictionary<int, KeyValuePair<long, long>> StreamOffsets =
|
||||
new Dictionary<int, KeyValuePair<long, long>>();
|
||||
|
||||
protected readonly List<Stream> Streams = new List<Stream>();
|
||||
protected int CurrentStream;
|
||||
protected long Position;
|
||||
protected long StreamLength;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the MultiStreamWrapper class.
|
||||
/// </summary>
|
||||
/// <param name="dispose">Perform Dispose() if requested to.</param>
|
||||
protected MultiStreamWrapper(bool dispose) : base(dispose) {}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the total length of input data.
|
||||
/// </summary>
|
||||
public long Length
|
||||
{
|
||||
get
|
||||
{
|
||||
return StreamLength;
|
||||
}
|
||||
}
|
||||
|
||||
#region IDisposable Members
|
||||
|
||||
/// <summary>
|
||||
/// Cleans up any resources used and fixes file attributes.
|
||||
/// </summary>
|
||||
public virtual void Dispose()
|
||||
{
|
||||
if (DisposeStream)
|
||||
{
|
||||
foreach (Stream stream in Streams)
|
||||
{
|
||||
try
|
||||
{
|
||||
stream.Dispose();
|
||||
}
|
||||
catch (ObjectDisposedException) {}
|
||||
}
|
||||
Streams.Clear();
|
||||
}
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
protected static string VolumeNumber(int num)
|
||||
{
|
||||
if (num < 10)
|
||||
{
|
||||
return ".00" + num.ToString(CultureInfo.InvariantCulture);
|
||||
}
|
||||
if (num > 9 && num < 100)
|
||||
{
|
||||
return ".0" + num.ToString(CultureInfo.InvariantCulture);
|
||||
}
|
||||
if (num > 99 && num < 1000)
|
||||
{
|
||||
return "." + num.ToString(CultureInfo.InvariantCulture);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
private int StreamNumberByOffset(long offset)
|
||||
{
|
||||
foreach (int number in StreamOffsets.Keys)
|
||||
{
|
||||
if (StreamOffsets[number].Key <= offset &&
|
||||
StreamOffsets[number].Value >= offset)
|
||||
{
|
||||
return number;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
public void Seek(long offset, SeekOrigin seekOrigin, IntPtr newPosition)
|
||||
{
|
||||
long absolutePosition = (seekOrigin == SeekOrigin.Current)
|
||||
? Position + offset
|
||||
: offset;
|
||||
CurrentStream = StreamNumberByOffset(absolutePosition);
|
||||
long delta = Streams[CurrentStream].Seek(
|
||||
absolutePosition - StreamOffsets[CurrentStream].Key, SeekOrigin.Begin);
|
||||
Position = StreamOffsets[CurrentStream].Key + delta;
|
||||
if (newPosition != IntPtr.Zero)
|
||||
{
|
||||
Marshal.WriteInt64(newPosition, Position);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// IInStream wrapper used in stream multi volume read operations.
|
||||
/// </summary>
|
||||
internal sealed class InMultiStreamWrapper : MultiStreamWrapper, ISequentialInStream, IInStream
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the InMultiStreamWrapper class.
|
||||
/// </summary>
|
||||
/// <param name="fileName">The archive file name.</param>
|
||||
/// <param name="dispose">Perform Dispose() if requested to.</param>
|
||||
public InMultiStreamWrapper(string fileName, bool dispose) :
|
||||
base(dispose)
|
||||
{
|
||||
string baseName = fileName.Substring(0, fileName.Length - 4);
|
||||
int i = 0;
|
||||
while (File.Exists(fileName))
|
||||
{
|
||||
Streams.Add(new FileStream(fileName, FileMode.Open));
|
||||
long length = Streams[i].Length;
|
||||
StreamOffsets.Add(i++, new KeyValuePair<long, long>(StreamLength, StreamLength + length));
|
||||
StreamLength += length;
|
||||
fileName = baseName + VolumeNumber(i + 1);
|
||||
}
|
||||
}
|
||||
|
||||
#region ISequentialInStream Members
|
||||
|
||||
/// <summary>
|
||||
/// Reads data from the stream.
|
||||
/// </summary>
|
||||
/// <param name="data">A data array.</param>
|
||||
/// <param name="size">The array size.</param>
|
||||
/// <returns>The read bytes count.</returns>
|
||||
public int Read(byte[] data, uint size)
|
||||
{
|
||||
var readSize = (int) size;
|
||||
int readCount = Streams[CurrentStream].Read(data, 0, readSize);
|
||||
readSize -= readCount;
|
||||
Position += readCount;
|
||||
while (readCount < (int) size)
|
||||
{
|
||||
if (CurrentStream == Streams.Count - 1)
|
||||
{
|
||||
return readCount;
|
||||
}
|
||||
CurrentStream++;
|
||||
Streams[CurrentStream].Seek(0, SeekOrigin.Begin);
|
||||
int count = Streams[CurrentStream].Read(data, readCount, readSize);
|
||||
readCount += count;
|
||||
readSize -= count;
|
||||
Position += count;
|
||||
}
|
||||
return readCount;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
#if COMPRESS
|
||||
/// <summary>
|
||||
/// IOutStream wrapper used in multi volume stream write operations.
|
||||
/// </summary>
|
||||
internal sealed class OutMultiStreamWrapper : MultiStreamWrapper, ISequentialOutStream, IOutStream
|
||||
{
|
||||
private readonly string _archiveName;
|
||||
private readonly int _volumeSize;
|
||||
private long _overallLength;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the OutMultiStreamWrapper class.
|
||||
/// </summary>
|
||||
/// <param name="archiveName">The archive name.</param>
|
||||
/// <param name="volumeSize">The volume size.</param>
|
||||
public OutMultiStreamWrapper(string archiveName, int volumeSize) :
|
||||
base(true)
|
||||
{
|
||||
_archiveName = archiveName;
|
||||
_volumeSize = volumeSize;
|
||||
CurrentStream = -1;
|
||||
NewVolumeStream();
|
||||
}
|
||||
|
||||
#region IOutStream Members
|
||||
|
||||
public int SetSize(long newSize)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ISequentialOutStream Members
|
||||
|
||||
public int Write(byte[] data, uint size, IntPtr processedSize)
|
||||
{
|
||||
int offset = 0;
|
||||
var originalSize = (int) size;
|
||||
Position += size;
|
||||
_overallLength = Math.Max(Position + 1, _overallLength);
|
||||
while (size > _volumeSize - Streams[CurrentStream].Position)
|
||||
{
|
||||
var count = (int) (_volumeSize - Streams[CurrentStream].Position);
|
||||
Streams[CurrentStream].Write(data, offset, count);
|
||||
size -= (uint) count;
|
||||
offset += count;
|
||||
NewVolumeStream();
|
||||
}
|
||||
Streams[CurrentStream].Write(data, offset, (int) size);
|
||||
if (processedSize != IntPtr.Zero)
|
||||
{
|
||||
Marshal.WriteInt32(processedSize, originalSize);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public override void Dispose()
|
||||
{
|
||||
int lastIndex = Streams.Count - 1;
|
||||
Streams[lastIndex].SetLength(lastIndex > 0? Streams[lastIndex].Position : _overallLength);
|
||||
base.Dispose();
|
||||
}
|
||||
|
||||
private void NewVolumeStream()
|
||||
{
|
||||
CurrentStream++;
|
||||
Streams.Add(File.Create(_archiveName + VolumeNumber(CurrentStream + 1)));
|
||||
Streams[CurrentStream].SetLength(_volumeSize);
|
||||
StreamOffsets.Add(CurrentStream, new KeyValuePair<long, long>(0, _volumeSize - 1));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
internal sealed class FakeOutStreamWrapper : ISequentialOutStream, IDisposable
|
||||
{
|
||||
#region IDisposable Members
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ISequentialOutStream Members
|
||||
|
||||
/// <summary>
|
||||
/// Does nothing except calling the BytesWritten event
|
||||
/// </summary>
|
||||
/// <param name="data">Data array</param>
|
||||
/// <param name="size">Array size</param>
|
||||
/// <param name="processedSize">Count of written bytes</param>
|
||||
/// <returns>Zero if Ok</returns>
|
||||
public int Write(byte[] data, uint size, IntPtr processedSize)
|
||||
{
|
||||
OnBytesWritten(new IntEventArgs((int) size));
|
||||
if (processedSize != IntPtr.Zero)
|
||||
{
|
||||
Marshal.WriteInt32(processedSize, (int) size);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// Occurs when IntEventArgs.Value bytes were written
|
||||
/// </summary>
|
||||
public event EventHandler<IntEventArgs> BytesWritten;
|
||||
|
||||
private void OnBytesWritten(IntEventArgs e)
|
||||
{
|
||||
if (BytesWritten != null)
|
||||
{
|
||||
BytesWritten(this, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue