This commit is contained in:
upthorn 2020-05-10 15:34:06 -07:00
commit b37b82958a
4748 changed files with 327954 additions and 432416 deletions

View File

@ -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

43
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@ -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."

11
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@ -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."

12
.gitignore vendored
View File

@ -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

33
.gitlab-ci.yml Normal file
View File

@ -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

6
.gitmodules vendored
View File

@ -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

26
.stylecop.json Normal file
View File

@ -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"
}
}
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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 ************

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

BIN
Assets/libbizlynx.dll.so Normal file

Binary file not shown.

BIN
Assets/libbizswan.dll.so Normal file

Binary file not shown.

BIN
Assets/libgambatte.dll.so Normal file

Binary file not shown.

BIN
Assets/libvbanext.dll.so Normal file

Binary file not shown.

View File

@ -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
}
}

View File

@ -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
}
}

View File

@ -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>

View File

@ -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>

View File

@ -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;
}
}
}

View File

@ -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;
}
}
}

View File

@ -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*/
}
}
}
}

View File

@ -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
}
}

View File

@ -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
}
}

View File

@ -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);
}
}
}
}

View File

@ -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();
}
}
}

View File

@ -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();
}
}
}

View File

@ -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;
}
}
}

View File

@ -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;
}
}
}
}

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}
}

View File

@ -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);
}
}
}

View File

@ -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
}
}

View File

@ -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
}
}

View File

@ -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
}
}

View File

@ -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
}
}

View File

@ -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
}
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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
}
}

View File

@ -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
}
}

View File

@ -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
{
}
}

View File

@ -1,10 +0,0 @@
using System.Collections.Generic;
namespace BizHawk.Client.ApiHawk
{
public interface IInput : IExternalApi
{
Dictionary<string, bool> Get();
Dictionary<string, dynamic> GetMouse();
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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();
}
}

View File

@ -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);
}
}

View File

@ -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 = "");
}
}

View File

@ -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);
}
}

View File

@ -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")]

View File

@ -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>

View File

@ -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();
}
}
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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&lt;file stream, name of the archive entry&gt;</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&lt;file stream, name of the archive entry&gt;</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

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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;
}
}

View File

@ -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

View File

@ -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

View File

@ -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);
}
}
}

View File

@ -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
}

View File

@ -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