em-dosbox

基本知识:

1.emscripten gcc8.2

2.参考:https://blog.csdn.net/martinking1997/article/details/82460849

########## error:

emcc 报错

version `GLIBCXX_3.4.21' not found

strings /usr/lib64/libstdc++.so.6 |grep GLIBCXX

检查C_INCLUDE_PATH and LD_LIBRARY_PATH and PATH

是因为gcc版本太低了,需要gcc8.0

############需要emscripten

https://haoningabc.iteye.com/admin/blogs/2411956

######################## 如果有ssl错误:

Error: Downloading URL 'https://storage.googleapis.com/webassembly/emscripten-releases-builds/mac/b024b71038d1291ed7ec23ecd553bf2c0c8d6da6/wasm-binaries.tbz2':

Warning: Possibly SSL/TLS issue. Update or install Python SSL root certificates (2048-bit or greater) supplied in Python folder or https://pypi.org/project/certifi/ and try again.

Installation failed!

vim emsdk.py

加入

import ssl

ssl._create_default_https_context = ssl._create_unverified_context

######################### 错误 expected unqualified-id

make em-dosbox的时候会报错

这个在mac下没解决。。。

########### redhat8 上安装没有 libgcc的问题

export LANGUAGE="en_US.UTF-8"

export LANG=en_US:zh_CN.UTF-8

export LC_ALL=C

yum install autoconf automake cmake -y

yum install python3 -y

ln -s /usr/bin/python3 /usr/bin/python

注意需要用cmake3 卸载cmake2

########### centos 7 完整实验:

因为emcc需要的libstdc++.so 要比较高的版本,默认的4.8不行,

先装gcc8.2,

设置 LD_LIBRARY_PATH

再使用emsdk

参考:

https://blog.csdn.net/martinking1997/article/details/82460849

不用https://blog.cles.jp/item/9428

gcc 要用8

下载:http://ftp.gnu.org/gnu/gcc/gcc-8.2.0/

需要cmake3

必要包的安装:

1
2
3
4
5
6
7
8
9
10
11
yum install -y epel-release
yum install -y cmake3 nodejs npm java-1.8.0-openjdk java-1.8.0-openjdk-devel git
ln -s /usr/bin/cmake3 /usr/local/bin/cmake
yum install autoconf automake -y

yum install  -y gmp  gmp-devel  mpfr  mpfr-devel  libmpc  libmpc-devel
yum install zlib zlib-devel pcre pcre-devel -y
yum install gcc-c++ glibc-headers -y
yum remove gcc

这样容易看出gcc的错误

安装gcc8.2:

1
2
3
./configure --with-system-zlib --disable-multilib --enable-languages=c,c++,fortran   --prefix=/usr/local/gcc8
make -j4
make install

检查

strings /usr/local/gcc8/lib64/libstdc++.so|grep GLIBCXX

export LD_LIBRARY_PATH=/usr/local/gcc8/lib64:$LD_LIBRARY_PATH

先删除本机的gcc方便调试

yum remove gcc

安装em-dosbox

后设置环境变量:

1
2
3
4
5
6
7
8
export GCC_HOME=/usr/local/gcc8
export PATH=$GCC_HOME/bin:$PATH

export MANPATH=$GCC_HOME/share/man
export CPATH=$GCC_HOME/include
export C_INCLUDE_DIRS=$GCC_HOME/include
export LD_LIBRARY_PATH=$GCC_HOME/lib:$GCC_HOME/lib64
export LIBRARY_PATH=$GCC_HOME/lib:$GCC_HOME/lib64

安装参考:

http://www.ruanyifeng.com/blog/2017/09/asmjs_emscripten.html

https://blog.csdn.net/martinking1997/article/details/82460849

这个最重要

安装emscripten:

1
2
3
4
5
git clone https://github.com/juj/emsdk.git
cd emsdk
./emsdk install --build=Release sdk-incoming-64bit binaryen-master-64bit
./emsdk activate --build=Release sdk-incoming-64bit binaryen-master-64bit
source ./emsdk_env.sh --build=Release

##########在安装clang的时候

The CXX compiler identification is unknown

需要在 emsdk/clang/fastcomp/src

里面加

1
2
set(CMAKE_C_COMPILER "/usr/local/gcc8/bin/gcc")
set(CMAKE_CXX_COMPILER "/usr/local/gcc8/bin/g++")

删除emsdk/clang/fastcomp 编译过的clang目录,因为cmake CACHE PATH的时候 ,里面有CMakeCache.txt错误会保留,

重新

./emsdk activate --build=Release sdk-incoming-64bit binaryen-master-64bit

/opt/mt/emsdk/emscripten/incoming/tools/optimizer/CMakeLists.txt

的cc也找不到

1
2
set(CMAKE_C_COMPILER "/usr/local/gcc8/bin/gcc")
set(CMAKE_CXX_COMPILER "/usr/local/gcc8/bin/g++")

删掉incoming上一层 的编译的目录

重新

/opt/mt/emsdk/binaryen/master/CMakeLists.txt

加入

1
2
set(CMAKE_C_COMPILER "/usr/local/gcc8/bin/gcc")
set(CMAKE_CXX_COMPILER "/usr/local/gcc8/bin/g++")

删掉master上一层 的编译的目录

重新

##############################

测试hello.c

1
2
3
4
5
6
#include <stdio.h>
int main( )
{
  printf("Hello World!
");
}

emcc hello.c

node a.out.js

安装em-dosbox:

1
2
3
4
cd em-dosbox
./autogen.sh
emconfigure ./configure --prefix=/usr/local/em-dosbox
make -j4

############# mac 下:

参考https://csl.name/post/em-dosbox/

直接

1
2
3
brew install SDL2 SDL2_image emscripten

brew install binaryen

~/.emscripten

检查一下,需要类似如下:

1
2
3
4
5
6
LLVM_ROOT = "/usr/local/opt/emscripten/libexec/llvm/bin"
NODE_JS = "/usr/local/bin/node"
EMSCRIPTEN_ROOT = "/usr/local/Cellar/emscripten/1.38.44/libexec"
BINARYEN_ROOT = "/usr/local/opt/binaryen"
COMPILER_ENGINE = NODE_JS
JS_ENGINES = [NODE_JS]

emcc不报错

emcc hello.c

cd em-dosbox

emconfigure ./configure --prefix=/usr/local/em-dosbox

make -j4

还是报错

原因这里找试试,

https://github.com/dreamer/dosbox-staging/issues/19

目前未解决

###########

em-dosbox:

./autogen.sh

emconfigure ./configure --prefix=/usr/local/em-dosbox

make

#######error: error: unknown type name 'ptrdiff_t'

https://github.com/joncampbell123/dosbox-x/issues/859

在autogen.sh之前

grep -nr LDFLAGS *

configure.ac里面设置

+new="-framework CoreFoundation -framework Carbon "

+export LDFLAGS="$new$LDFLAGS"

这个不好使

python -m http.server 9999

################# 普通 dosbox 的基本使用

dosbox:

mount c ~/mydos

ctrl +f10 退出

去百度盘下载 masm工具,放到 ~/mydos下

meituan下面有tools.rar

dosbox的helloworld:

https://www.cnblogs.com/flipped/p/7683656.html

hello.asm

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
STACK SEGMENT STACK
    DB 200 DUP(0)  
STACK ENDS

DATA SEGMENT
    BUF DB 'Hello world!$'  
DATA ENDS

CODE SEGMENT
    ASSUME CS:CODE,DS:DATA,SS:STACK  
 
START:
    MOV AX,DATA
    MOV DS,AX
    LEA DX,BUF
    MOV AH,9
    INT 21H
    MOV AH,4CH
    INT 21H
    CODE ENDS
END START

masm hello

生成hello.obj

link hello

生成hello.exe

python -m SimpleHTTPServer 8000

https://www.helplib.com/GitHub/article_98874

###########

jsdos:

https://js-dos.com/getting-started/

https://dos.zczc.cz/games/%E8%B6%85%E6%97%B6%E7%A9%BAG%E7%82%B9/

https://github.com/killinux/emularity

原来的github上的dosbox-sync.js dosbox-sync.mem没有了,去doc。zczc.cz上找到的这俩文件

################# 使用DosBox运行dos游戏的简易方法

http://blog.lujun9972.win/blog/2017/11/01/%E4%BD%BF%E7%94%A8dosbox%E8%BF%90%E8%A1%8Cdos%E6%B8%B8%E6%88%8F%E7%9A%84%E7%AE%80%E6%98%93%E6%96%B9%E6%B3%95/index.html

cp cskgd.zip ~/mydos

unzip cskgd.zip

/Applications/dosbox.app/Contents/MacOS

./DOSBox

mount c ~/mydos

c:

cd cskgd

qr

问题:

已经有的exe 怎么用em-dosbox运行