mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2025-01-02 23:30:21 +00:00
added //#resource "file.bin"
This commit is contained in:
parent
8f1a7c710e
commit
f71c8602e0
6
.gitattributes
vendored
Normal file
6
.gitattributes
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
*.pal binary
|
||||||
|
*.chr binary
|
||||||
|
*.rle binary
|
||||||
|
*.lz4 binary
|
||||||
|
*.bin binary
|
||||||
|
*.nam binary
|
@ -102,6 +102,7 @@ TODO:
|
|||||||
- throw errors when bad/no refs
|
- throw errors when bad/no refs
|
||||||
- per-View keyboard shortcuts
|
- per-View keyboard shortcuts
|
||||||
- parse labels
|
- parse labels
|
||||||
|
- parse .incbin directives?
|
||||||
- crt0.s compiled each time?
|
- crt0.s compiled each time?
|
||||||
- debug highlight doesn't go away when debugging -> running
|
- debug highlight doesn't go away when debugging -> running
|
||||||
- show breakpoint of PC or highest address on stack
|
- show breakpoint of PC or highest address on stack
|
||||||
|
BIN
presets/nes/climbr_title.nam.rle
Normal file
BIN
presets/nes/climbr_title.nam.rle
Normal file
Binary file not shown.
BIN
presets/nes/climbr_title.pal
Normal file
BIN
presets/nes/climbr_title.pal
Normal file
Binary file not shown.
BIN
presets/nes/jroatch.chr.lz4
Normal file
BIN
presets/nes/jroatch.chr.lz4
Normal file
Binary file not shown.
@ -19,7 +19,6 @@ const JSNES_PRESETS = [
|
|||||||
{id:'rletitle.c', name:'Title Screen RLE'},
|
{id:'rletitle.c', name:'Title Screen RLE'},
|
||||||
{id:'statusbar.c', name:'Split Status Bar'},
|
{id:'statusbar.c', name:'Split Status Bar'},
|
||||||
{id:'horizmask.c', name:'Offscreen Scrolling'},
|
{id:'horizmask.c', name:'Offscreen Scrolling'},
|
||||||
{id:'attributes.c', name:'Attribute Table + Pixels'},
|
|
||||||
{id:'monobitmap.c', name:'Monochrome Bitmap'},
|
{id:'monobitmap.c', name:'Monochrome Bitmap'},
|
||||||
{id:'aputest.c', name:'Sound Tester'},
|
{id:'aputest.c', name:'Sound Tester'},
|
||||||
{id:'music.c', name:'Music Player'},
|
{id:'music.c', name:'Music Player'},
|
||||||
|
@ -73,43 +73,48 @@ export class CodeProject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
parseIncludeDependencies(text:string):string[] {
|
parseIncludeDependencies(text:string):string[] {
|
||||||
var files = [];
|
let files = [];
|
||||||
var m;
|
let m;
|
||||||
if (this.platform_id.startsWith('verilog')) {
|
if (this.platform_id.startsWith('verilog')) {
|
||||||
// include verilog includes
|
// include verilog includes
|
||||||
var re1 = /^\s*(`include|[.]include)\s+"(.+?)"/gmi;
|
let re1 = /^\s*(`include|[.]include)\s+"(.+?)"/gmi;
|
||||||
while (m = re1.exec(text)) {
|
while (m = re1.exec(text)) {
|
||||||
this.pushAllFiles(files, m[2]);
|
this.pushAllFiles(files, m[2]);
|
||||||
}
|
}
|
||||||
// include .arch (json) statements
|
// include .arch (json) statements
|
||||||
var re2 = /^\s*([.]arch)\s+(\w+)/gmi;
|
let re2 = /^\s*([.]arch)\s+(\w+)/gmi;
|
||||||
while (m = re2.exec(text)) {
|
while (m = re2.exec(text)) {
|
||||||
this.pushAllFiles(files, m[2]+".json");
|
this.pushAllFiles(files, m[2]+".json");
|
||||||
}
|
}
|
||||||
// include $readmem[bh] (TODO)
|
// include $readmem[bh] (TODO)
|
||||||
var re3 = /\b\$readmem[bh]\("(.+?)"/gmi;
|
let re3 = /\b\$readmem[bh]\("(.+?)"/gmi;
|
||||||
while (m = re3.exec(text)) {
|
while (m = re3.exec(text)) {
|
||||||
this.pushAllFiles(files, m[2]);
|
this.pushAllFiles(files, m[2]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// for .asm -- [.]include "file"
|
// for .asm -- [.]include "file"
|
||||||
// for .c -- #include "file"
|
// for .c -- #include "file"
|
||||||
var re2 = /^\s*[.#]?(include|incbin)\s+"(.+?)"/gmi;
|
let re2 = /^\s*[.#]?(include|incbin)\s+"(.+?)"/gmi;
|
||||||
while (m = re2.exec(text)) {
|
while (m = re2.exec(text)) {
|
||||||
this.pushAllFiles(files, m[2]);
|
this.pushAllFiles(files, m[2]);
|
||||||
}
|
}
|
||||||
|
// for .c -- //#link "file" (or ;link or #link)
|
||||||
|
let re3 = /^\s*([;#]|[/][/][#])resource\s+"(.+?)"/gm;
|
||||||
|
while (m = re3.exec(text)) {
|
||||||
|
this.pushAllFiles(files, m[2]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return files;
|
return files;
|
||||||
}
|
}
|
||||||
|
|
||||||
parseLinkDependencies(text:string):string[] {
|
parseLinkDependencies(text:string):string[] {
|
||||||
var files = [];
|
let files = [];
|
||||||
var m;
|
let m;
|
||||||
if (this.platform_id.startsWith('verilog')) {
|
if (this.platform_id.startsWith('verilog')) {
|
||||||
//
|
//
|
||||||
} else {
|
} else {
|
||||||
// for .c -- //#link "file" (or ;link or #link)
|
// for .c -- //#link "file" (or ;link or #link)
|
||||||
var re = /^\s*([;#]|[/][/][#])link\s+"(.+?)"/gm;
|
let re = /^\s*([;#]|[/][/][#])link\s+"(.+?)"/gm;
|
||||||
while (m = re.exec(text)) {
|
while (m = re.exec(text)) {
|
||||||
this.pushAllFiles(files, m[2]);
|
this.pushAllFiles(files, m[2]);
|
||||||
}
|
}
|
||||||
@ -118,14 +123,16 @@ export class CodeProject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
loadFileDependencies(text:string, callback:LoadFilesCallback) {
|
loadFileDependencies(text:string, callback:LoadFilesCallback) {
|
||||||
var includes = this.parseIncludeDependencies(text);
|
let includes = this.parseIncludeDependencies(text);
|
||||||
var linkfiles = this.parseLinkDependencies(text);
|
let linkfiles = this.parseLinkDependencies(text);
|
||||||
var allfiles = includes.concat(linkfiles);
|
let allfiles = includes.concat(linkfiles);
|
||||||
this.loadFiles(allfiles, (err:string, result?:Dependency[]) => {
|
this.loadFiles(allfiles, (err:string, result?:Dependency[]) => {
|
||||||
// set 'link' property on files that are link dependencies (must match filename)
|
// set 'link' property on files that are link dependencies (must match filename)
|
||||||
if (result)
|
if (result) {
|
||||||
for (var dep of result)
|
for (let dep of result) {
|
||||||
dep.link = linkfiles.indexOf(dep.path) >= 0;
|
dep.link = linkfiles.indexOf(dep.path) >= 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
callback(err, result);
|
callback(err, result);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -320,8 +320,10 @@ export function isProbablyBinary(path:string, data?:number[] | Uint8Array) : boo
|
|||||||
// check extensions
|
// check extensions
|
||||||
if (path) {
|
if (path) {
|
||||||
path = path.toUpperCase();
|
path = path.toUpperCase();
|
||||||
if (path.endsWith('.CHR') || path.endsWith('.BIN'))
|
const BINEXTS = ['.CHR','.BIN','.PAL','.NAM','.RLE','.LZ4'];
|
||||||
score++;
|
for (var ext of BINEXTS) {
|
||||||
|
if (path.endsWith(ext)) score++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// decode as UTF-8
|
// decode as UTF-8
|
||||||
for (var i = 0; i < (data?data.length:0);) {
|
for (var i = 0; i < (data?data.length:0);) {
|
||||||
|
@ -1171,13 +1171,20 @@ export class AssetEditorView implements ProjectView, pixed.EditorContext {
|
|||||||
// TODO: check fmt w/h/etc limits
|
// TODO: check fmt w/h/etc limits
|
||||||
// TODO: defer editor creation
|
// TODO: defer editor creation
|
||||||
// TODO: only refresh when needed
|
// TODO: only refresh when needed
|
||||||
if (fileid.endsWith('.chr') && data instanceof Uint8Array) {
|
if (platform_id.startsWith('nes') && fileid.endsWith('.chr') && data instanceof Uint8Array) {
|
||||||
// is this a NES CHR?
|
// is this a NES CHR?
|
||||||
let node = new pixed.FileDataNode(projectWindows, fileid);
|
let node = new pixed.FileDataNode(projectWindows, fileid);
|
||||||
const neschrfmt = {w:8,h:8,bpp:1,count:(data.length>>4),brev:true,np:2,pofs:8,remap:[0,1,2,4,5,6,7,8,9,10,11,12]}; // TODO
|
const neschrfmt = {w:8,h:8,bpp:1,count:(data.length>>4),brev:true,np:2,pofs:8,remap:[0,1,2,4,5,6,7,8,9,10,11,12]}; // TODO
|
||||||
this.addPixelEditor(this.ensureFileDiv(fileid), node, neschrfmt);
|
this.addPixelEditor(this.ensureFileDiv(fileid), node, neschrfmt);
|
||||||
this.registerAsset("charmap", node, true);
|
this.registerAsset("charmap", node, true);
|
||||||
nassets++;
|
nassets++;
|
||||||
|
} else if (platform_id.startsWith('nes') && fileid.endsWith('.pal') && data instanceof Uint8Array) {
|
||||||
|
// is this a NES PAL?
|
||||||
|
let node = new pixed.FileDataNode(projectWindows, fileid);
|
||||||
|
const nespalfmt = {pal:"nes",layout:"nes"};
|
||||||
|
this.addPaletteEditor(this.ensureFileDiv(fileid), node, nespalfmt);
|
||||||
|
this.registerAsset("palette", node, false);
|
||||||
|
nassets++;
|
||||||
} else if (typeof data === 'string') {
|
} else if (typeof data === 'string') {
|
||||||
let textfrags = this.scanFileTextForAssets(fileid, data);
|
let textfrags = this.scanFileTextForAssets(fileid, data);
|
||||||
for (let frag of textfrags) {
|
for (let frag of textfrags) {
|
||||||
|
Loading…
Reference in New Issue
Block a user