Giter VIP home page Giter VIP logo

terraonion's Introduction

Build Status Go Report Card GoDoc

Terraonion

A collection of libraries and utilities for some of the Terraonion products.

Installation:

go get github.com/bodgit/terraonion/...

neosd

The neosd utility creates .neo files suitable for the NeoSD cartridge using a zip archive or directory containing Neo Geo ROM images.

If the base filename, minus any preceding path or extension, matches the name of a game known to MAME then the ROM images will be unscrambled and processed based on the same logic MAME uses. If the game is also a clone of another game then the utility will attempt to find any missing ROM images in a zip archive or directory based on the name of the parent game.

If the game is not known to MAME then the filenames of the individual ROM images are used to try and best work out how to process the game.

A quick demo:

terraonion's People

Contributors

bodgit avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

terraonion's Issues

Segfault on 32-bit ARM

On Linux/armv7l:

# ./neosd convert mslug.zip
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x11fb0]

goroutine 1 [running]:
runtime/internal/atomic.goXadd64(0x256dd0c, 0x400, 0x0, 0x2536400, 0x2536400)
        /usr/lib/go-1.15/src/runtime/internal/atomic/atomic_arm.go:103 +0x1c
github.com/bodgit/plumbing.(*WriteCounter).Write(0x256dd0c, 0x2536400, 0x400, 0x400, 0xc8df76, 0x0, 0x400)
        /root/terraonion/go/pkg/mod/github.com/bodgit/[email protected]/count.go:15 +0x30
github.com/bodgit/plumbing.(*teeReaderAt).ReadAt(0x251e730, 0x2536400, 0x400, 0x400, 0xc8df76, 0x0, 0x22b30, 0x269b4, 0x4)
        /root/terraonion/go/pkg/mod/github.com/bodgit/[email protected]/tee.go:13 +0xa4
archive/zip.readDirectoryEnd(0x31d340, 0x251e730, 0xc8e376, 0x0, 0xb6dac1e8, 0x20, 0xe9)
        /usr/lib/go-1.15/src/archive/zip/reader.go:476 +0x110
archive/zip.(*Reader).init(0x256dd20, 0x31d340, 0x251e730, 0xc8e376, 0x0, 0x282c68, 0x1)
        /usr/lib/go-1.15/src/archive/zip/reader.go:82 +0x34
archive/zip.NewReader(0x31d340, 0x251e730, 0xc8e376, 0x0, 0x0, 0x0, 0x0)
        /usr/lib/go-1.15/src/archive/zip/reader.go:75 +0x84
github.com/bodgit/rom.NewZipReader(0xbe9ede54, 0x9, 0x256dd00, 0x0, 0x0)
        /root/terraonion/go/pkg/mod/github.com/bodgit/[email protected]/reader.go:292 +0x1cc
github.com/bodgit/rom.NewReader(0xbe9ede54, 0x9, 0x259bc0c, 0x2562fa0, 0x261201, 0x7)
        /root/terraonion/go/pkg/mod/github.com/bodgit/[email protected]/reader.go:61 +0x10c
github.com/bodgit/terraonion/neo.(*File).readMameROM(0x25b2000, 0xbe9ede54, 0x9, 0x0, 0x0)
        /root/terraonion/neo/file.go:203 +0x1a8
github.com/bodgit/terraonion/neo.NewFile(0xbe9ede54, 0x9, 0x9, 0x24ba44, 0x438c30)
        /root/terraonion/neo/file.go:105 +0x5c
main.convert(0x256dcc0, 0x7, 0xc)
        /root/terraonion/cmd/neosd/main.go:124 +0x114
github.com/urfave/cli/v2.(*Command).Run(0x25265a0, 0x256da80, 0x0, 0x0)
        /root/terraonion/go/pkg/mod/github.com/urfave/cli/[email protected]/command.go:161 +0x3e8
github.com/urfave/cli/v2.(*App).RunContext(0x252e340, 0x31e780, 0x256f0a0, 0x25140e0, 0x3, 0x4, 0x0, 0x0)
        /root/terraonion/go/pkg/mod/github.com/urfave/cli/[email protected]/app.go:302 +0x608
github.com/urfave/cli/v2.(*App).Run(...)
        /root/terraonion/go/pkg/mod/github.com/urfave/cli/[email protected]/app.go:211
main.main()
        /root/terraonion/cmd/neosd/main.go:225 +0x634

This appears to be caused by a Go bug in 64bit atomic operations on certain 32-bit platforms: golang/go#23345

Quote from sync/atomic bugs section:

On ARM, 386, and 32-bit MIPS, it is the caller's responsibility to arrange for 64-bit alignment of 64-bit words accessed atomically via the primitive atomic functions (types Int64 and Uint64 are automatically aligned). The first word in an allocated struct, array, or slice; in a global variable; or in a local variable (because the subject of all atomic operations will escape to the heap) can be relied upon to be 64-bit aligned.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.