Skip to content

Commit 6d483db

Browse files
committed
Start migrating to typescript
1 parent 91cd4e6 commit 6d483db

File tree

7 files changed

+676
-564
lines changed

7 files changed

+676
-564
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
node_modules
33
*.log
44
public
5-
src/system/table.js
5+
src/system/table.ts
66
!public/favicon.png
77
!public/index.html
88
compiled.js

core/wasm/wasi-libc

package-lock.json

Lines changed: 571 additions & 462 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
"description": "Pokemon mini emulator",
55
"main": "src/index.jsx",
66
"scripts": {
7-
"core": "cd core; make",
7+
"core": "cd core; make wasm",
88
"retroarch": "cd core/libretro; make test",
9-
"table": "python3 ./tools/convert.py > ./src/system/table.js",
9+
"table": "python3 ./tools/convert.py > ./src/system/table.ts",
1010
"start": "npm run table; webpack-dev-server --open --mode development",
1111
"build": "npm run table; npm run core; webpack --mode production",
1212
"deploy": "npm run build; scp public/* [email protected]:~/minimon/"
@@ -19,7 +19,8 @@
1919
"@babel/plugin-proposal-class-properties"
2020
],
2121
"presets": [
22-
"@babel/preset-react"
22+
"@babel/preset-react",
23+
"@babel/preset-typescript"
2324
]
2425
},
2526
"bin": {
@@ -34,24 +35,26 @@
3435
},
3536
"homepage": "https://github.com/asterick/minimon.js#readme",
3637
"dependencies": {
37-
"@babel/core": "^7.10.2",
38-
"@babel/plugin-proposal-class-properties": "^7.10.1",
39-
"@babel/preset-react": "^7.10.1",
40-
"@fluentui/react": "^7.119.0",
38+
"@babel/core": "^7.10.4",
39+
"@babel/plugin-proposal-class-properties": "^7.10.4",
40+
"@babel/preset-react": "^7.10.4",
41+
"@babel/preset-typescript": "^7.10.4",
42+
"@fluentui/react": "^7.121.9",
4143
"babel-loader": "^8.1.0",
42-
"css-loader": "^3.5.3",
43-
"less-loader": "^6.1.0",
44+
"css-loader": "^3.6.0",
45+
"less-loader": "^6.2.0",
4446
"normalize.css": "^8.0.1",
4547
"raw-loader": "^4.0.1",
4648
"rc-dock": "^2.6.0",
4749
"react": "^16.13.1",
4850
"react-dom": "^16.13.1",
4951
"react-virtualized": "^9.21.2",
5052
"style-loader": "^1.2.1",
53+
"typescript": "^3.9.6",
5154
"webpack": "^4.43.0"
5255
},
5356
"devDependencies": {
54-
"webpack-cli": "^3.3.11",
57+
"webpack-cli": "^3.3.12",
5558
"webpack-dev-server": "^3.11.0"
5659
}
5760
}

src/system/disassemble.js

Lines changed: 57 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1616
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1717
*/
1818

19-
import * as Table from "./table.js";
19+
import * as Table from "./table.ts";
2020

2121
function toHex(v, c) {
2222
v = v.toString(16).toUpperCase();
@@ -56,76 +56,76 @@ export class Disassembler {
5656
let val;
5757

5858
switch (arg) {
59-
case Table.REGS_ALL:
59+
case Table.Argument.REGS_ALL:
6060
return "ALL";
61-
case Table.REGS_ALE:
61+
case Table.Argument.REGS_ALE:
6262
return "ALE";
63-
case Table.REG_A:
63+
case Table.Argument.REG_A:
6464
return "A";
65-
case Table.REG_B:
65+
case Table.Argument.REG_B:
6666
return "B";
67-
case Table.REG_L:
67+
case Table.Argument.REG_L:
6868
return "L";
69-
case Table.REG_H:
69+
case Table.Argument.REG_H:
7070
return "H";
71-
case Table.REG_BA:
71+
case Table.Argument.REG_BA:
7272
return "BA";
73-
case Table.REG_HL:
73+
case Table.Argument.REG_HL:
7474
return "HL";
75-
case Table.REG_IX:
75+
case Table.Argument.REG_IX:
7676
return "IX";
77-
case Table.REG_IY:
77+
case Table.Argument.REG_IY:
7878
return "IY";
79-
case Table.REG_NB:
79+
case Table.Argument.REG_NB:
8080
return "NB";
81-
case Table.REG_BR:
81+
case Table.Argument.REG_BR:
8282
return "BR";
83-
case Table.REG_EP:
83+
case Table.Argument.REG_EP:
8484
return "EP";
85-
case Table.REG_IP:
85+
case Table.Argument.REG_IP:
8686
return "IP";
87-
case Table.REG_XP:
87+
case Table.Argument.REG_XP:
8888
return "XP";
89-
case Table.REG_YP:
89+
case Table.Argument.REG_YP:
9090
return "YP";
91-
case Table.REG_SC:
91+
case Table.Argument.REG_SC:
9292
return "SC";
93-
case Table.REG_SP:
93+
case Table.Argument.REG_SP:
9494
return "SP";
95-
case Table.REG_PC:
95+
case Table.Argument.REG_PC:
9696
return "PC";
97-
case Table.MEM_HL:
97+
case Table.Argument.MEM_HL:
9898
return "[HL]";
99-
case Table.MEM_IX:
99+
case Table.Argument.MEM_IX:
100100
return "[IX]";
101-
case Table.MEM_IY:
101+
case Table.Argument.MEM_IY:
102102
return "[IY]";
103-
case Table.MEM_IX_OFF:
103+
case Table.Argument.MEM_IX_OFF:
104104
return "[IX+L]";
105-
case Table.MEM_IY_OFF:
105+
case Table.Argument.MEM_IY_OFF:
106106
return "[IY+L]";
107-
case Table.MEM_SP_DISP:
107+
case Table.Argument.MEM_SP_DISP:
108108
val = this._sign8();
109109
return `[SP${val > 0 ? "+" : ""}${val}]`;
110-
case Table.MEM_IX_DISP:
110+
case Table.Argument.MEM_IX_DISP:
111111
val = this._sign8();
112112
return `[IX${val > 0 ? "+" : ""}${val}]`;
113-
case Table.MEM_IY_DISP:
113+
case Table.Argument.MEM_IY_DISP:
114114
val = this._sign8();
115115
return `[IY${val > 0 ? "+" : ""}${val}]`;
116-
case Table.MEM_ABS16:
116+
case Table.Argument.MEM_ABS16:
117117
return `[${toHex(this._read16(), 4)}h]`;
118-
case Table.MEM_BR:
118+
case Table.Argument.MEM_BR:
119119
return `[BR:${toHex(this._read8(), 2)}h]`;
120-
case Table.MEM_VECTOR:
120+
case Table.Argument.MEM_VECTOR:
121121
return `[${toHex(this._read8(), 2)}h]`;
122-
case Table.IMM_8:
122+
case Table.Argument.IMM_8:
123123
return `#0${this._read8().toString(16).toUpperCase()}h`;
124-
case Table.IMM_16:
124+
case Table.Argument.IMM_16:
125125
return `#0${this._read16().toString(16).toUpperCase()}h`;
126-
case Table.REL_8:
126+
case Table.Argument.REL_8:
127127
return `#${toHex(this._pcRelative(this._sign8()), 6)}h`
128-
case Table.REL_16:
128+
case Table.Argument.REL_16:
129129
return `#${toHex(this._pcRelative(this._sign16()), 6)}h`
130130
default:
131131
throw new Error(arg);
@@ -134,45 +134,45 @@ export class Disassembler {
134134

135135
_processCondition(cond) {
136136
switch (cond) {
137-
case Table.CONDITION_LESS_THAN:
137+
case Table.Condition.LESS_THAN:
138138
return "LT";
139-
case Table.CONDITION_LESS_EQUAL:
139+
case Table.Condition.LESS_EQUAL:
140140
return "LE";
141-
case Table.CONDITION_GREATER_THAN:
141+
case Table.Condition.GREATER_THAN:
142142
return "GT";
143-
case Table.CONDITION_GREATER_EQUAL:
143+
case Table.Condition.GREATER_EQUAL:
144144
return "LE";
145-
case Table.CONDITION_OVERFLOW:
145+
case Table.Condition.OVERFLOW:
146146
return "V";
147-
case Table.CONDITION_NOT_OVERFLOW:
147+
case Table.Condition.NOT_OVERFLOW:
148148
return "NV";
149-
case Table.CONDITION_POSITIVE:
149+
case Table.Condition.POSITIVE:
150150
return "P";
151-
case Table.CONDITION_MINUS:
151+
case Table.Condition.MINUS:
152152
return "M";
153-
case Table.CONDITION_CARRY:
153+
case Table.Condition.CARRY:
154154
return "C";
155-
case Table.CONDITION_NOT_CARRY:
155+
case Table.Condition.NOT_CARRY:
156156
return "NC";
157-
case Table.CONDITION_ZERO:
157+
case Table.Condition.ZERO:
158158
return "Z";
159-
case Table.CONDITION_NOT_ZERO:
159+
case Table.Condition.NOT_ZERO:
160160
return "NZ";
161-
case Table.CONDITION_SPECIAL_FLAG_0:
161+
case Table.Condition.SPECIAL_FLAG_0:
162162
return "F0";
163-
case Table.CONDITION_SPECIAL_FLAG_1:
163+
case Table.Condition.SPECIAL_FLAG_1:
164164
return "F1";
165-
case Table.CONDITION_SPECIAL_FLAG_2:
165+
case Table.Condition.SPECIAL_FLAG_2:
166166
return "F2";
167-
case Table.CONDITION_SPECIAL_FLAG_3:
167+
case Table.Condition.SPECIAL_FLAG_3:
168168
return "F3";
169-
case Table.CONDITION_NOT_SPECIAL_FLAG_0:
169+
case Table.Condition.NOT_SPECIAL_FLAG_0:
170170
return "NF0";
171-
case Table.CONDITION_NOT_SPECIAL_FLAG_1:
171+
case Table.Condition.NOT_SPECIAL_FLAG_1:
172172
return "NF1";
173-
case Table.CONDITION_NOT_SPECIAL_FLAG_2:
173+
case Table.Condition.NOT_SPECIAL_FLAG_2:
174174
return "NF2";
175-
case Table.CONDITION_NOT_SPECIAL_FLAG_3:
175+
case Table.Condition.NOT_SPECIAL_FLAG_3:
176176
return "NF3";
177177
default:
178178
throw new Error(cond);
@@ -184,7 +184,7 @@ export class Disassembler {
184184

185185
this._data = [];
186186

187-
let inst = Table.INSTRUCTION_TABLE;
187+
let inst = Table.InstructionTable;
188188

189189
do {
190190
inst = inst[this._read8()];
@@ -196,7 +196,7 @@ export class Disassembler {
196196

197197
args = args.map(a => this._processArg(a))
198198

199-
if (condition !== Table.CONDITION_NONE) {
199+
if (condition !== Table.Condition.NONE) {
200200
args.unshift(this._processCondition(condition))
201201
}
202202

tools/convert.py

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -25,28 +25,28 @@
2525
op0s[0xCF] = op2s
2626

2727
CONDITIONS = {
28-
"\xFF": "CONDITION_NONE",
29-
"LT": "CONDITION_LESS_THAN",
30-
"LE": "CONDITION_LESS_EQUAL",
31-
"GT": "CONDITION_GREATER_THAN",
32-
"GE": "CONDITION_GREATER_EQUAL",
33-
"V": "CONDITION_OVERFLOW",
34-
"NV": "CONDITION_NOT_OVERFLOW",
35-
"P": "CONDITION_POSITIVE",
36-
"M": "CONDITION_MINUS",
37-
"C": "CONDITION_CARRY",
38-
"NC": "CONDITION_NOT_CARRY",
39-
"Z": "CONDITION_ZERO",
40-
"NZ": "CONDITION_NOT_ZERO",
41-
42-
"F0": "CONDITION_SPECIAL_FLAG_0",
43-
"F1": "CONDITION_SPECIAL_FLAG_1",
44-
"F2": "CONDITION_SPECIAL_FLAG_2",
45-
"F3": "CONDITION_SPECIAL_FLAG_3",
46-
"NF0": "CONDITION_NOT_SPECIAL_FLAG_0",
47-
"NF1": "CONDITION_NOT_SPECIAL_FLAG_1",
48-
"NF2": "CONDITION_NOT_SPECIAL_FLAG_2",
49-
"NF3": "CONDITION_NOT_SPECIAL_FLAG_3"
28+
"\xFF": "NONE",
29+
"LT": "LESS_THAN",
30+
"LE": "LESS_EQUAL",
31+
"GT": "GREATER_THAN",
32+
"GE": "GREATER_EQUAL",
33+
"V": "OVERFLOW",
34+
"NV": "NOT_OVERFLOW",
35+
"P": "POSITIVE",
36+
"M": "MINUS",
37+
"C": "CARRY",
38+
"NC": "NOT_CARRY",
39+
"Z": "ZERO",
40+
"NZ": "NOT_ZERO",
41+
42+
"F0": "SPECIAL_FLAG_0",
43+
"F1": "SPECIAL_FLAG_1",
44+
"F2": "SPECIAL_FLAG_2",
45+
"F3": "SPECIAL_FLAG_3",
46+
"NF0": "NOT_SPECIAL_FLAG_0",
47+
"NF1": "NOT_SPECIAL_FLAG_1",
48+
"NF2": "NOT_SPECIAL_FLAG_2",
49+
"NF3": "NOT_SPECIAL_FLAG_3"
5050
}
5151

5252
ARGUMENTS = {
@@ -98,14 +98,14 @@ def format(op, arg1, arg2):
9898
if arg1 in CONDITIONS:
9999
condition, arg1, arg2 = CONDITIONS[arg1], arg2, None
100100

101-
args = [ARGUMENTS[arg] for arg in [arg1, arg2] if arg]
101+
args = ["Argument.%s" % ARGUMENTS[arg] for arg in [arg1, arg2] if arg]
102102

103103
# add conditions
104-
return { "op": op, "condition": condition or "CONDITION_NONE", "args": args }
104+
return { "op": op, "condition": condition or "NONE", "args": args }
105105

106106
def display(table, tabs = ""):
107107
if type(table) == dict:
108-
return '%s{ "op": "%s", "condition": %s, "args": [ %s ] }' % ( tabs, table['op'], table['condition'], ", ".join(table["args"]))
108+
return '%s{ "op": "%s", "condition": Condition.%s, "args": [ %s ] }' % ( tabs, table['op'], table['condition'], ", ".join(table["args"]))
109109
return "%sggg" % tabs
110110
elif type(table) == list:
111111
return "%s[\n%s\n%s]" % (tabs, (",\n").join([ display(t, tabs + "\t") for t in table ]), tabs)
@@ -134,12 +134,12 @@ def display(table, tabs = ""):
134134
all_ops += [op0, op1, op2]
135135
all_args += [arg0_1, arg0_2, arg1_1, arg1_2, arg2_1, arg2_2]
136136

137-
for i, (k, v) in enumerate(ARGUMENTS.items()):
138-
print ("export const %s = %i;" % (v, i + 1))
139-
print ()
137+
print ("""export enum Argument {
138+
%s
139+
};""" % ',\n\t'.join(ARGUMENTS.values()))
140140

141-
for i, (k, v) in enumerate(CONDITIONS.items()):
142-
print ("export const %s = %i;" % (v, i + 1))
143-
print ()
141+
print ("""export enum Condition {
142+
%s
143+
};""" % ',\n\t'.join(CONDITIONS.values()))
144144

145-
print ("export const INSTRUCTION_TABLE =\n%s;" % display(op0s))
145+
print ("export const InstructionTable = %s;" % display(op0s))

webpack.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ module.exports = {
5151
],
5252
},
5353
{
54-
test: /\.jsx?$/,
54+
test: /\.(js|ts)x?$/,
5555
exclude: /node_modules/,
5656
use: [ { loader: 'babel-loader' } ],
5757
}

0 commit comments

Comments
 (0)