nanoasm: added "endian":"little" attribute to variable defs
This commit is contained in:
parent
aa7fe61a86
commit
51ee5526c9
9
Makefile
9
Makefile
|
@ -2,9 +2,12 @@
|
||||||
TSC=./node_modules/typescript/bin/tsc --build
|
TSC=./node_modules/typescript/bin/tsc --build
|
||||||
TMP=./tmp/dist
|
TMP=./tmp/dist
|
||||||
|
|
||||||
all:
|
buildtsc:
|
||||||
|
$(TSC) tsconfig.json
|
||||||
|
|
||||||
|
prepare: buildtsc
|
||||||
patch -i meta/electron.diff -o electron.html
|
patch -i meta/electron.diff -o electron.html
|
||||||
cp nanoasm/src/assembler.ts src/worker/
|
#cp nanoasm/src/assembler.ts src/worker/
|
||||||
cp node_modules/jquery/dist/jquery.min.js ./jquery/
|
cp node_modules/jquery/dist/jquery.min.js ./jquery/
|
||||||
cp -r node_modules/bootstrap/dist/* ./bootstrap/
|
cp -r node_modules/bootstrap/dist/* ./bootstrap/
|
||||||
cp node_modules/bootstrap-tourist/*.css node_modules/bootstrap-tourist/*.js ./lib/
|
cp node_modules/bootstrap-tourist/*.css node_modules/bootstrap-tourist/*.js ./lib/
|
||||||
|
@ -19,8 +22,6 @@ all:
|
||||||
cp unicorn.js/dist/unicorn-arm.min.js ./unicorn.js/demos/externals/capstone-arm.min.js ./lib/
|
cp unicorn.js/dist/unicorn-arm.min.js ./unicorn.js/demos/externals/capstone-arm.min.js ./lib/
|
||||||
cp gif.js/dist/* ./lib/
|
cp gif.js/dist/* ./lib/
|
||||||
cd jsnes && npm i
|
cd jsnes && npm i
|
||||||
$(TSC) -v
|
|
||||||
$(TSC)
|
|
||||||
npm run mkdoc
|
npm run mkdoc
|
||||||
|
|
||||||
distro:
|
distro:
|
||||||
|
|
|
@ -42,7 +42,7 @@
|
||||||
"mocha-simple-html-reporter": "^2.0.0",
|
"mocha-simple-html-reporter": "^2.0.0",
|
||||||
"mousetrap": "^1.6.5",
|
"mousetrap": "^1.6.5",
|
||||||
"nightwatch": "^1.6.4",
|
"nightwatch": "^1.6.4",
|
||||||
"octokat": "^0.8.0",
|
"octokat": "^0.10.0",
|
||||||
"pngjs": "^3.4.0",
|
"pngjs": "^3.4.0",
|
||||||
"rgbquant": "^1.1.2",
|
"rgbquant": "^1.1.2",
|
||||||
"split.js": "^1.6.2",
|
"split.js": "^1.6.2",
|
||||||
|
@ -3630,6 +3630,27 @@
|
||||||
"node": ">= 0.8"
|
"node": ">= 0.8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/encoding": {
|
||||||
|
"version": "0.1.13",
|
||||||
|
"resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
|
||||||
|
"integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"iconv-lite": "^0.6.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/encoding/node_modules/iconv-lite": {
|
||||||
|
"version": "0.6.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
|
||||||
|
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"safer-buffer": ">= 2.1.2 < 3.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/end-of-stream": {
|
"node_modules/end-of-stream": {
|
||||||
"version": "1.4.4",
|
"version": "1.4.4",
|
||||||
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
|
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
|
||||||
|
@ -3905,6 +3926,26 @@
|
||||||
"pend": "~1.2.0"
|
"pend": "~1.2.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/fetch-vcr": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/fetch-vcr/-/fetch-vcr-1.1.2.tgz",
|
||||||
|
"integrity": "sha512-bFOx3+5YtViximcqhG05tqMlsyPRXNOmiToDCf6TyVUCKHYP/vGPmn0HUhGVNd1jI0KpElwz+RH3X/ZQo0Asfg==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"node-fetch": "^1.6.3",
|
||||||
|
"whatwg-fetch": "^2.0.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/fetch-vcr/node_modules/node-fetch": {
|
||||||
|
"version": "1.7.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
|
||||||
|
"integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"encoding": "^0.1.11",
|
||||||
|
"is-stream": "^1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/file-saver": {
|
"node_modules/file-saver": {
|
||||||
"version": "2.0.5",
|
"version": "2.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz",
|
||||||
|
@ -6781,6 +6822,15 @@
|
||||||
"semver": "bin/semver"
|
"semver": "bin/semver"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/node-fetch": {
|
||||||
|
"version": "2.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
|
||||||
|
"integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": "4.x || >=6.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/normalize-package-data": {
|
"node_modules/normalize-package-data": {
|
||||||
"version": "2.5.0",
|
"version": "2.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
|
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
|
||||||
|
@ -7058,13 +7108,14 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/octokat": {
|
"node_modules/octokat": {
|
||||||
"version": "0.8.0",
|
"version": "0.10.0",
|
||||||
"resolved": "https://registry.npmjs.org/octokat/-/octokat-0.8.0.tgz",
|
"resolved": "https://registry.npmjs.org/octokat/-/octokat-0.10.0.tgz",
|
||||||
"integrity": "sha1-UIQcolV0P5GnFdEaG9528u782Xo=",
|
"integrity": "sha512-VJ21L1gMlByYMurduLYiOcI8AwlZkUV8OXRN8pMXsbkIqIVqn0tgdTfxzWM9spX4VJTTG02OgqwDTqQsOmDing==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"fetch-vcr": "^1.1.0",
|
||||||
"lodash": "^4.16.4",
|
"lodash": "^4.16.4",
|
||||||
"xmlhttprequest": "~1.8.0"
|
"node-fetch": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/once": {
|
"node_modules/once": {
|
||||||
|
@ -9445,6 +9496,12 @@
|
||||||
"iconv-lite": "0.4.24"
|
"iconv-lite": "0.4.24"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/whatwg-fetch": {
|
||||||
|
"version": "2.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz",
|
||||||
|
"integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node_modules/whatwg-mimetype": {
|
"node_modules/whatwg-mimetype": {
|
||||||
"version": "2.3.0",
|
"version": "2.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
|
||||||
|
@ -9707,15 +9764,6 @@
|
||||||
"node": ">=10.0.0"
|
"node": ">=10.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/xmlhttprequest": {
|
|
||||||
"version": "1.8.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz",
|
|
||||||
"integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=",
|
|
||||||
"dev": true,
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.4.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/xregexp": {
|
"node_modules/xregexp": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz",
|
||||||
|
@ -12729,6 +12777,26 @@
|
||||||
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
|
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
|
"encoding": {
|
||||||
|
"version": "0.1.13",
|
||||||
|
"resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
|
||||||
|
"integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"iconv-lite": "^0.6.2"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"iconv-lite": {
|
||||||
|
"version": "0.6.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
|
||||||
|
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"safer-buffer": ">= 2.1.2 < 3.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"end-of-stream": {
|
"end-of-stream": {
|
||||||
"version": "1.4.4",
|
"version": "1.4.4",
|
||||||
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
|
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
|
||||||
|
@ -12934,6 +13002,28 @@
|
||||||
"pend": "~1.2.0"
|
"pend": "~1.2.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"fetch-vcr": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/fetch-vcr/-/fetch-vcr-1.1.2.tgz",
|
||||||
|
"integrity": "sha512-bFOx3+5YtViximcqhG05tqMlsyPRXNOmiToDCf6TyVUCKHYP/vGPmn0HUhGVNd1jI0KpElwz+RH3X/ZQo0Asfg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"node-fetch": "^1.6.3",
|
||||||
|
"whatwg-fetch": "^2.0.3"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"node-fetch": {
|
||||||
|
"version": "1.7.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
|
||||||
|
"integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"encoding": "^0.1.11",
|
||||||
|
"is-stream": "^1.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"file-saver": {
|
"file-saver": {
|
||||||
"version": "2.0.5",
|
"version": "2.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz",
|
||||||
|
@ -15200,6 +15290,12 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node-fetch": {
|
||||||
|
"version": "2.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
|
||||||
|
"integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"normalize-package-data": {
|
"normalize-package-data": {
|
||||||
"version": "2.5.0",
|
"version": "2.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
|
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
|
||||||
|
@ -15418,13 +15514,14 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"octokat": {
|
"octokat": {
|
||||||
"version": "0.8.0",
|
"version": "0.10.0",
|
||||||
"resolved": "https://registry.npmjs.org/octokat/-/octokat-0.8.0.tgz",
|
"resolved": "https://registry.npmjs.org/octokat/-/octokat-0.10.0.tgz",
|
||||||
"integrity": "sha1-UIQcolV0P5GnFdEaG9528u782Xo=",
|
"integrity": "sha512-VJ21L1gMlByYMurduLYiOcI8AwlZkUV8OXRN8pMXsbkIqIVqn0tgdTfxzWM9spX4VJTTG02OgqwDTqQsOmDing==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
|
"fetch-vcr": "^1.1.0",
|
||||||
"lodash": "^4.16.4",
|
"lodash": "^4.16.4",
|
||||||
"xmlhttprequest": "~1.8.0"
|
"node-fetch": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"once": {
|
"once": {
|
||||||
|
@ -17265,6 +17362,12 @@
|
||||||
"iconv-lite": "0.4.24"
|
"iconv-lite": "0.4.24"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"whatwg-fetch": {
|
||||||
|
"version": "2.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz",
|
||||||
|
"integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"whatwg-mimetype": {
|
"whatwg-mimetype": {
|
||||||
"version": "2.3.0",
|
"version": "2.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
|
||||||
|
@ -17483,12 +17586,6 @@
|
||||||
"integrity": "sha512-Foaj5FXVzgn7xFzsKeNIde9g6aFBxTPi37iwsno8QvApmtg7KYrr+OPyRHcJF7dud2a5nGRBXK3n0dL62Gf7PA==",
|
"integrity": "sha512-Foaj5FXVzgn7xFzsKeNIde9g6aFBxTPi37iwsno8QvApmtg7KYrr+OPyRHcJF7dud2a5nGRBXK3n0dL62Gf7PA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"xmlhttprequest": {
|
|
||||||
"version": "1.8.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz",
|
|
||||||
"integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"xregexp": {
|
"xregexp": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz",
|
||||||
|
|
|
@ -44,7 +44,7 @@
|
||||||
"mocha-simple-html-reporter": "^2.0.0",
|
"mocha-simple-html-reporter": "^2.0.0",
|
||||||
"mousetrap": "^1.6.5",
|
"mousetrap": "^1.6.5",
|
||||||
"nightwatch": "^1.6.4",
|
"nightwatch": "^1.6.4",
|
||||||
"octokat": "^0.8.0",
|
"octokat": "^0.10.0",
|
||||||
"pngjs": "^3.4.0",
|
"pngjs": "^3.4.0",
|
||||||
"rgbquant": "^1.1.2",
|
"rgbquant": "^1.1.2",
|
||||||
"split.js": "^1.6.2",
|
"split.js": "^1.6.2",
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
type AssemblerVar = {
|
type AssemblerVar = {
|
||||||
bits : number,
|
bits : number,
|
||||||
toks : string[],
|
toks : string[],
|
||||||
|
endian? : 'big' | 'little',
|
||||||
iprel? : boolean,
|
iprel? : boolean,
|
||||||
ipofs? : number,
|
ipofs? : number,
|
||||||
ipmul? : number,
|
ipmul? : number,
|
||||||
|
@ -219,12 +220,31 @@ export class Assembler {
|
||||||
return parseInt(s);
|
return parseInt(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
changeEndian(endian: 'big'|'little', x: number, nbits: number) {
|
||||||
|
if (endian == null || endian == 'big') {
|
||||||
|
return x;
|
||||||
|
} else if (endian == 'little') {
|
||||||
|
var y = 0;
|
||||||
|
while (nbits > 0) {
|
||||||
|
var n = Math.min(nbits, this.width);
|
||||||
|
var mask = (1 << n) - 1;
|
||||||
|
y <<= n;
|
||||||
|
y |= (x & mask);
|
||||||
|
x >>>= n;
|
||||||
|
nbits -= n;
|
||||||
|
}
|
||||||
|
return y;
|
||||||
|
} else {
|
||||||
|
this.fatal('Endian must be "big" or "little"');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
buildInstruction(rule:AssemblerRule, m:string[]) : AssemblerLineResult {
|
buildInstruction(rule:AssemblerRule, m:string[]) : AssemblerLineResult {
|
||||||
var opcode = 0;
|
var opcode = 0;
|
||||||
var oplen = 0;
|
var oplen = 0;
|
||||||
// iterate over each component of the rule output ("bits")
|
// iterate over each component of the rule output ("bits")
|
||||||
for (var b of rule.bits) {
|
for (let b of rule.bits) {
|
||||||
var n,x;
|
let n,x;
|
||||||
// is a string? then it's a bit constant
|
// is a string? then it's a bit constant
|
||||||
// TODO
|
// TODO
|
||||||
if (typeof b === "string") {
|
if (typeof b === "string") {
|
||||||
|
@ -253,6 +273,7 @@ export class Assembler {
|
||||||
} else {
|
} else {
|
||||||
// otherwise, parse it as a constant
|
// otherwise, parse it as a constant
|
||||||
x = this.parseConst(id, n);
|
x = this.parseConst(id, n);
|
||||||
|
x = this.changeEndian(v.endian, x, v.bits);
|
||||||
// is it a label? add fixup
|
// is it a label? add fixup
|
||||||
if (isNaN(x)) {
|
if (isNaN(x)) {
|
||||||
this.fixups.push({
|
this.fixups.push({
|
||||||
|
@ -267,6 +288,7 @@ export class Assembler {
|
||||||
return {error:"Value " + x + " does not fit in " + v.bits + " bits"};
|
return {error:"Value " + x + " does not fit in " + v.bits + " bits"};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// is it an array slice? slice the bits
|
||||||
if (typeof b !== "number") {
|
if (typeof b !== "number") {
|
||||||
x = (x >>> shift) & ((1 << b.n)-1);
|
x = (x >>> shift) & ((1 << b.n)-1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ var BEAKER8_SPEC = {
|
||||||
"cond": { "bits": 3, "toks": ["♦", "♦", ".z", ".nz", ".c", ".nc", ".s", ".ns"] },
|
"cond": { "bits": 3, "toks": ["♦", "♦", ".z", ".nz", ".c", ".nc", ".s", ".ns"] },
|
||||||
"ic": { "bits": 3 },
|
"ic": { "bits": 3 },
|
||||||
"abs8": { "bits": 8 },
|
"abs8": { "bits": 8 },
|
||||||
"abs16": { "bits": 16 },
|
"abs16": { "bits": 16, "endian": "little" },
|
||||||
"rel8": { "bits": 8, "iprel": true, "ipofs": 2 }
|
"rel8": { "bits": 8, "iprel": true, "ipofs": 2 }
|
||||||
},
|
},
|
||||||
"rules": [
|
"rules": [
|
||||||
|
@ -317,7 +317,6 @@ WaitVsync:
|
||||||
.define vdpReg1 $41
|
.define vdpReg1 $41
|
||||||
.define vdpReg2 $42
|
.define vdpReg2 $42
|
||||||
|
|
||||||
|
|
||||||
boot: di
|
boot: di
|
||||||
jump Init
|
jump Init
|
||||||
|
|
||||||
|
@ -325,21 +324,16 @@ init: call setTextMode
|
||||||
halt
|
halt
|
||||||
|
|
||||||
setTextMode:
|
setTextMode:
|
||||||
; // set vdp0 border 1, mode 4 (Text)
|
|
||||||
send vdpReg0, $14
|
send vdpReg0, $14
|
||||||
const.w $2000 ;// length
|
const.w $2000 ;// length
|
||||||
const.w.0 ;// address
|
const.w.0 ;// address
|
||||||
call clrVram
|
call clrVram
|
||||||
ret
|
ret
|
||||||
|
|
||||||
; // w length
|
|
||||||
; // w address
|
|
||||||
clrVram:
|
clrVram:
|
||||||
; // send address to vdp
|
|
||||||
send vdpReg1
|
send vdpReg1
|
||||||
send vdpReg2
|
send vdpReg2
|
||||||
|
|
||||||
; // send 0 to vram
|
|
||||||
_loop:
|
_loop:
|
||||||
const.0
|
const.0
|
||||||
send vramWrite
|
send vramWrite
|
||||||
|
@ -348,7 +342,23 @@ _loop:
|
||||||
`;
|
`;
|
||||||
let asm = new assembler.Assembler(BEAKER8_SPEC);
|
let asm = new assembler.Assembler(BEAKER8_SPEC);
|
||||||
let result = asm.assembleFile(source);
|
let result = asm.assembleFile(source);
|
||||||
|
console.log(result.lines);
|
||||||
assert.deepEqual(result.lines, [
|
assert.deepEqual(result.lines, [
|
||||||
|
{ line: 13, offset: 0, nbits: 8, insns: 'E4' },
|
||||||
|
{ line: 14, offset: 1, nbits: 24, insns: 'E9 00 00' },
|
||||||
|
{ line: 16, offset: 4, nbits: 24, insns: 'EB 00 00' },
|
||||||
|
{ line: 17, offset: 7, nbits: 8, insns: 'E1' },
|
||||||
|
{ line: 20, offset: 8, nbits: 32, insns: '06 40 29 40' },
|
||||||
|
{ line: 21, offset: 12, nbits: 24, insns: '0E 00 20' },
|
||||||
|
{ line: 22, offset: 15, nbits: 8, insns: '08' },
|
||||||
|
{ line: 23, offset: 16, nbits: 24, insns: 'EB 00 00' },
|
||||||
|
{ line: 24, offset: 19, nbits: 8, insns: 'F8' },
|
||||||
|
{ line: 27, offset: 20, nbits: 16, insns: '29 41' },
|
||||||
|
{ line: 28, offset: 22, nbits: 16, insns: '29 42' },
|
||||||
|
{ line: 31, offset: 24, nbits: 8, insns: '00' },
|
||||||
|
{ line: 32, offset: 25, nbits: 16, insns: '29 00' },
|
||||||
|
{ line: 33, offset: 27, nbits: 8, insns: 'EF' },
|
||||||
|
{ line: 34, offset: 28, nbits: 8, insns: 'F8' }
|
||||||
]);
|
]);
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue