Skip to content

Commit dc966ef

Browse files
author
kirjavascript
committed
prototype ASL implementation
1 parent d6f5f55 commit dc966ef

File tree

15 files changed

+351
-1069
lines changed

15 files changed

+351
-1069
lines changed

app/components/file/file-object.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import {
88
writeBIN,
99
writeASM,
1010
} from '#formats/scripts';
11+
import { assemble } from '#formats/asm';
12+
1113
import { decompress, compress, compressionFormats } from '#formats/compression';
1214
import { bufferToTiles, tilesToBuffer } from '#formats/art';
1315
import { buffersToColors, colorsToBuffers } from '#formats/palette';
@@ -123,6 +125,11 @@ export const FileObject = observer(({ obj }) => {
123125
function loadMappings(e) {
124126
ioWrap(obj.mappings.path, setMappingError, e, async (path) => {
125127
if (!obj.dplcs.enabled) environment.config.dplcsEnabled = false;
128+
129+
if (mappingsASM) {
130+
await assemble(await fs.readFile(path, 'utf8'))
131+
}
132+
126133
const buffer = mappingsASM
127134
? parseASM(await fs.readFile(path, 'utf8'))
128135
: await fs.readFile(path);

app/formats/asm/asl-worker.js

Lines changed: 188 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,188 @@
1+
import * as Comlink from 'comlink';
2+
3+
// __flex2__done__
4+
5+
function init(code, { asmsg, ioerrsmsg, cmdargmsg }) {
6+
self.Module = {
7+
locateFile: url => `../wasm/${url}`,
8+
arguments: ['-q', '-xx', '-L', 'code.asm'],
9+
print: (text) => console.log('stdout: ' + text),
10+
printErr: (text) => console.error('stderr: ' + text),
11+
preInit: () => {
12+
FS.writeFile('as.msg', asmsg);
13+
FS.writeFile('cmdarg.msg', cmdargmsg);
14+
FS.writeFile('ioerrs.msg', ioerrsmsg);
15+
FS.writeFile('code.asm', prelude + code);
16+
},
17+
};
18+
importScripts('../wasm/asl.js');
19+
20+
setTimeout(() => {
21+
22+
console.log(self.Module.FS.readdir('/'));
23+
console.log(self.Module);
24+
}, 1000);
25+
}
26+
27+
function build() {
28+
}
29+
30+
Comlink.expose({
31+
init,
32+
build,
33+
});
34+
35+
const prelude = `SonicMappingsVer := 2
36+
37+
; macro to declare a mappings table (taken from Sonic 2 Hg disassembly)
38+
mappingsTable macro {INTLABEL}
39+
__LABEL__ label *
40+
.current_mappings_table := __LABEL__
41+
endm
42+
43+
; macro to declare an entry in a mappings table (taken from Sonic 2 Hg disassembly)
44+
mappingsTableEntry macro ptr
45+
dc.ATTRIBUTE ptr-.current_mappings_table
46+
endm
47+
48+
spriteHeader macro {INTLABEL}
49+
__LABEL__ label *
50+
if SonicMappingsVer=1
51+
dc.b ((__LABEL___End - __LABEL___Begin) / 5)
52+
elseif SonicMappingsVer=2
53+
dc.w ((__LABEL___End - __LABEL___Begin) / 8)
54+
else
55+
dc.w ((__LABEL___End - __LABEL___Begin) / 6)
56+
endif
57+
__LABEL___Begin label *
58+
endm
59+
60+
spritePiece macro xpos,ypos,width,height,tile,xflip,yflip,pal,pri
61+
if SonicMappingsVer=1
62+
dc.b ypos
63+
dc.b (((width-1)&3)<<2)|((height-1)&3)
64+
dc.b ((pri&1)<<7)|((pal&3)<<5)|((yflip&1)<<4)|((xflip&1)<<3)|((tile&$700)>>8)
65+
dc.b tile&$FF
66+
dc.b xpos
67+
elseif SonicMappingsVer=2
68+
dc.w ((ypos&$FF)<<8)|(((width-1)&3)<<2)|((height-1)&3)
69+
dc.w ((pri&1)<<15)|((pal&3)<<13)|((yflip&1)<<12)|((xflip&1)<<11)|(tile&$7FF)
70+
dc.w ((pri&1)<<15)|((pal&3)<<13)|((yflip&1)<<12)|((xflip&1)<<11)|((tile>>1)&$7FF)
71+
dc.w xpos
72+
else
73+
dc.w ((ypos&$FF)<<8)|(((width-1)&3)<<2)|((height-1)&3)
74+
dc.w ((pri&1)<<15)|((pal&3)<<13)|((yflip&1)<<12)|((xflip&1)<<11)|(tile&$7FF)
75+
dc.w xpos
76+
endif
77+
endm
78+
79+
spritePiece2P macro xpos,ypos,width,height,tile,xflip,yflip,pal,pri,tile2,xflip2,yflip2,pal2,pri2
80+
if SonicMappingsVer=1
81+
dc.b ypos
82+
dc.b (((width-1)&3)<<2)|((height-1)&3)
83+
dc.b ((pri&1)<<7)|((pal&3)<<5)|((yflip&1)<<4)|((xflip&1)<<3)|((tile&$700)>>8)
84+
dc.b tile&$FF
85+
dc.b xpos
86+
elseif SonicMappingsVer=2
87+
dc.w ((ypos&$FF)<<8)|(((width-1)&3)<<2)|((height-1)&3)
88+
dc.w ((pri&1)<<15)|((pal&3)<<13)|((yflip&1)<<12)|((xflip&1)<<11)|(tile&$7FF)
89+
dc.w ((pri2&1)<<15)|((pal2&3)<<13)|((yflip2&1)<<12)|((xflip2&1)<<11)|(tile2&$7FF)
90+
dc.w xpos
91+
else
92+
dc.w ((ypos&$FF)<<8)|(((width-1)&3)<<2)|((height-1)&3)
93+
dc.w ((pri&1)<<15)|((pal&3)<<13)|((yflip&1)<<12)|((xflip&1)<<11)|(tile&$7FF)
94+
dc.w xpos
95+
endif
96+
endm
97+
98+
dplcHeader macro {INTLABEL}
99+
__LABEL__ label *
100+
if SonicDplcVer=1
101+
dc.b ((__LABEL___End - __LABEL___Begin) / 2)
102+
elseif SonicDplcVer=3
103+
dc.w (((__LABEL___End - __LABEL___Begin) / 2)-1)
104+
else
105+
dc.w ((__LABEL___End - __LABEL___Begin) / 2)
106+
endif
107+
__LABEL___Begin label *
108+
endm
109+
110+
dplcEntry macro tiles,offset
111+
if SonicDplcVer=3
112+
dc.w ((offset&$FFF)<<4)|((tiles-1)&$F)
113+
elseif SonicDplcVer=4
114+
dc.w (((tiles-1)&$F)<<12)|((offset&$FFF)<<4)
115+
else
116+
dc.w (((tiles-1)&$F)<<12)|(offset&$FFF)
117+
endif
118+
endm
119+
120+
even macro
121+
if (*)&1
122+
paddingSoFar set paddingSoFar+1
123+
dc.b 0 ;ds.b 1
124+
endif
125+
endm
126+
127+
cpu 68000
128+
129+
Map_hud_a: mappingsTable
130+
mappingsTableEntry.w Map_hud_a_0008
131+
mappingsTableEntry.w Map_hud_a_005A
132+
mappingsTableEntry.w Map_hud_a_00AC
133+
mappingsTableEntry.w Map_hud_a_00FE
134+
135+
Map_hud_a_0008: spriteHeader
136+
spritePiece 0, -$80, 4, 2, 0, 0, 0, 1, 0
137+
spritePiece $20, -$80, 4, 2, $18, 0, 0, 1, 0
138+
spritePiece $40, -$80, 4, 2, $20, 0, 0, 1, 0
139+
spritePiece 0, -$70, 4, 2, $10, 0, 0, 1, 0
140+
spritePiece $28, -$70, 4, 2, $28, 0, 0, 1, 0
141+
spritePiece 0, -$60, 4, 2, 8, 0, 0, 1, 0
142+
spritePiece $20, -$60, 1, 2, 0, 0, 0, 1, 0
143+
spritePiece $30, -$60, 3, 2, $30, 0, 0, 1, 0
144+
spritePiece 0, $40, 2, 2, $10A, 0, 0, 0, 0
145+
spritePiece $10, $40, 4, 2, $10E, 0, 0, 1, 0
146+
Map_hud_a_0008_End
147+
148+
Map_hud_a_005A: spriteHeader
149+
spritePiece 0, -$80, 4, 2, 0, 0, 0, 1, 0
150+
spritePiece $20, -$80, 4, 2, $18, 0, 0, 1, 0
151+
spritePiece $40, -$80, 4, 2, $20, 0, 0, 1, 0
152+
spritePiece 0, -$70, 4, 2, $10, 0, 0, 1, 0
153+
spritePiece $28, -$70, 4, 2, $28, 0, 0, 1, 0
154+
spritePiece 0, -$60, 4, 2, 8, 0, 0, 0, 0
155+
spritePiece $20, -$60, 1, 2, 0, 0, 0, 0, 0
156+
spritePiece $30, -$60, 3, 2, $30, 0, 0, 1, 0
157+
spritePiece 0, $40, 2, 2, $10A, 0, 0, 0, 0
158+
spritePiece $10, $40, 4, 2, $10E, 0, 0, 1, 0
159+
Map_hud_a_005A_End
160+
161+
Map_hud_a_00AC: spriteHeader
162+
spritePiece 0, -$80, 4, 2, 0, 0, 0, 1, 0
163+
spritePiece $20, -$80, 4, 2, $18, 0, 0, 1, 0
164+
spritePiece $40, -$80, 4, 2, $20, 0, 0, 1, 0
165+
spritePiece 0, -$70, 4, 2, $10, 0, 0, 0, 0
166+
spritePiece $28, -$70, 4, 2, $28, 0, 0, 1, 0
167+
spritePiece 0, -$60, 4, 2, 8, 0, 0, 1, 0
168+
spritePiece $20, -$60, 1, 2, 0, 0, 0, 1, 0
169+
spritePiece $30, -$60, 3, 2, $30, 0, 0, 1, 0
170+
spritePiece 0, $40, 2, 2, $10A, 0, 0, 0, 0
171+
spritePiece $10, $40, 4, 2, $10E, 0, 0, 1, 0
172+
Map_hud_a_00AC_End
173+
174+
Map_hud_a_00FE: spriteHeader
175+
spritePiece 0, -$80, 4, 2, 0, 0, 0, 1, 0
176+
spritePiece $20, -$80, 4, 2, $18, 0, 0, 1, 0
177+
spritePiece $40, -$80, 4, 2, $20, 0, 0, 1, 0
178+
spritePiece 0, -$70, 4, 2, $10, 0, 0, 0, 0
179+
spritePiece $28, -$70, 4, 2, $28, 0, 0, 1, 0
180+
spritePiece 0, -$60, 4, 2, 8, 0, 0, 0, 0
181+
spritePiece $20, -$60, 1, 2, 0, 0, 0, 0, 0
182+
spritePiece $30, -$60, 3, 2, $30, 0, 0, 1, 0
183+
spritePiece 0, $40, 2, 2, $10A, 0, 0, 0, 0
184+
spritePiece $10, $40, 4, 2, $10E, 0, 0, 1, 0
185+
Map_hud_a_00FE_End
186+
187+
even
188+
`;

app/formats/asm/index.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import * as Comlink from 'comlink';
2+
3+
import asmsg from './messages/as.msg';
4+
import ioerrsmsg from './messages/ioerrs.msg';
5+
import cmdargmsg from './messages/cmdarg.msg';
6+
7+
export async function assemble(code) {
8+
const worker = new Worker('bundles/asl-worker.js')
9+
const asl = Comlink.wrap(worker);
10+
11+
console.time('asd');
12+
await asl.init(code, {
13+
asmsg,
14+
ioerrsmsg,
15+
cmdargmsg,
16+
});
17+
console.timeEnd('asd');
18+
await asl.build();
19+
// worker.terminate();
20+
}
File renamed without changes.
307 Bytes
Binary file not shown.
2.79 KB
Binary file not shown.
File renamed without changes.

app/formats/asm/p2bin-worker.js

Whitespace-only changes.

development/build.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ module.exports = (mainWindow) => {
1818
entryPoints: {
1919
main: './app/main.js',
2020
'compression-worker': './app/formats/compression-worker.js',
21+
'asl-worker': './app/formats/asm/asl-worker.js',
2122
},
2223
bundle: true,
2324
watch: devMode,
@@ -52,6 +53,7 @@ module.exports = (mainWindow) => {
5253
loader: {
5354
'.js': 'jsx',
5455
'.md': 'text',
56+
'.msg': 'binary',
5557
},
5658
})
5759
.catch(() => {

development/build.sh

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,35 +2,35 @@
22
# copy latest version of electron remote
33
cp -r node_modules/@electron/remote ./static
44
node -e "require('./development/build')()"
5-
npx electron-packager ./static Flex2 --platform=win32 --arch=x64 \
6-
--asar --overwrite --package-manager yarn \
7-
--win32metadata.CompanyName="Flex 2" \
8-
--win32metadata.FileDescription="Flex 2" \
9-
--win32metadata.ProductName="Flex 2" \
10-
--appCopyright="kirjavascript" \
11-
--icon=./development/icon.ico
12-
npx electron-packager ./static Flex2 --platform=win32 --arch=ia32 \
13-
--asar --overwrite --package-manager yarn \
14-
--win32metadata.CompanyName="Flex 2" \
15-
--win32metadata.FileDescription="Flex 2" \
16-
--win32metadata.ProductName="Flex 2" \
17-
--appCopyright="kirjavascript" \
18-
--icon=./development/icon.ico
5+
# npx electron-packager ./static Flex2 --platform=win32 --arch=x64 \
6+
# --asar --overwrite --package-manager yarn \
7+
# --win32metadata.CompanyName="Flex 2" \
8+
# --win32metadata.FileDescription="Flex 2" \
9+
# --win32metadata.ProductName="Flex 2" \
10+
# --appCopyright="kirjavascript" \
11+
# --icon=./development/icon.ico
12+
# npx electron-packager ./static Flex2 --platform=win32 --arch=ia32 \
13+
# --asar --overwrite --package-manager yarn \
14+
# --win32metadata.CompanyName="Flex 2" \
15+
# --win32metadata.FileDescription="Flex 2" \
16+
# --win32metadata.ProductName="Flex 2" \
17+
# --appCopyright="kirjavascript" \
18+
# --icon=./development/icon.ico
1919
npx electron-packager ./static Flex2 --platform=linux --arch=x64 --asar --overwrite --package-manager yarn
20-
npx electron-packager ./static Flex2 --platform=darwin --arch=x64 --asar --overwrite --package-manager yarn
20+
# npx electron-packager ./static Flex2 --platform=darwin --arch=x64 --asar --overwrite --package-manager yarn
2121

2222

23-
cp -r scripts Flex2-win32-ia32
24-
cd Flex2-win32-ia32
25-
zip -r ../flex2-win32-ia32.zip *
26-
cd ..
27-
rm -r Flex2-win32-ia32
23+
# cp -r scripts Flex2-win32-ia32
24+
# cd Flex2-win32-ia32
25+
# zip -r ../flex2-win32-ia32.zip *
26+
# cd ..
27+
# rm -r Flex2-win32-ia32
2828

29-
cp -r scripts Flex2-win32-x64
30-
cd Flex2-win32-x64
31-
zip -r ../flex2-win32-x64.zip *
32-
cd ..
33-
rm -r Flex2-win32-x64
29+
# cp -r scripts Flex2-win32-x64
30+
# cd Flex2-win32-x64
31+
# zip -r ../flex2-win32-x64.zip *
32+
# cd ..
33+
# rm -r Flex2-win32-x64
3434

3535
cp -r scripts Flex2-linux-x64
3636
cd Flex2-linux-x64
@@ -39,9 +39,9 @@ tar cfvz ../flex2-linux-x64.tar.gz *
3939
cd ..
4040
rm -r Flex2-linux-x64
4141

42-
cp -r scripts Flex2-darwin-x64
43-
cd Flex2-darwin-x64
44-
chmod a+x Flex2
45-
tar cfvz ../flex2-osx-x64.tar.gz *
46-
cd ..
47-
rm -r Flex2-darwin-x64
42+
# cp -r scripts Flex2-darwin-x64
43+
# cd Flex2-darwin-x64
44+
# chmod a+x Flex2
45+
# tar cfvz ../flex2-osx-x64.tar.gz *
46+
# cd ..
47+
# rm -r Flex2-darwin-x64

0 commit comments

Comments
 (0)