Mercurial > hg > forks > multipaint-js
changeset 127:4cebbee4b29b
More work on source export.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 12 Jul 2018 22:33:07 +0300 |
parents | d2b8166fa2a5 |
children | 3f48c23c7987 |
files | exporters.pde |
diffstat | 1 files changed, 112 insertions(+), 97 deletions(-) [+] |
line wrap: on
line diff
--- a/exporters.pde Thu Jul 12 14:35:42 2018 +0300 +++ b/exporters.pde Thu Jul 12 22:33:07 2018 +0300 @@ -30,8 +30,9 @@ m_byteDef = ".byte"; m_src = ""; m_eol = "\n"; + + m_intmode = 0; m_prefix = ""; - m_intmode = 1; } void setOffs(int offs) @@ -64,35 +65,28 @@ return m_src; } + String getHexValue(int dval, int dlen) + { + static final String mpHexChars[16] = "0123456789abcdef"; + char[] dstr = new char[dlen]; + + for (i = dlen - 1; i >= 0; i--) + { + dstr[i] = mpHexChars[dval & 0x0f]; + dval >>= 4; + } + + return new String(dstr.join('')); + } + String getByteStr(int val) { switch (m_intmode) { case 0: return str(val & 0xff); - } - } - - boolean changeState(int nstate) - { - boolean changed = (nstate != m_state); - if (changed && m_state != -1) - { - m_src += m_eol; + case 1: return "$"+ getHexValue(val & 0xff, 2); + case 2: return getHexValue(val & 0xff, 2) +"h"; } - - m_state = nstate; - return changed; - } - - void addEOL() - { - changeState(4); - m_src += m_eol; - } - - void addByteSep() - { - m_src += ","; } void addIndent() @@ -101,9 +95,20 @@ m_src += " "; } - void addByteDef(boolean nl) + void addByteSep() + { + m_src += ","; + } + + void addEOL() { - if (!nl) + m_state = 4; + m_src += m_eol; + } + + void addByteDef(boolean force) + { + if (m_state != 2 || force) { m_src += m_eol; addIndent(); @@ -116,20 +121,29 @@ void addLabel(String blabel, boolean nl) { - changeState(3); + if (m_state != 3) + addEOL(); + m_src += m_prefix + blabel +":"+ (nl ? " " : ""); + m_state = 3; } void addComment(String bstr) { - changeState(4); + if (m_state != 4) + addEOL(); + m_src += "; "+ bstr + m_eol; + m_state = 4; } void addLine(String bstr) { - changeState(4); - m_src += bstr + m_eol; + if (m_state != 4) + addEOL(); + + m_src += bstr.replace("@@", m_prefix) + m_eol; + m_state = 4; } void writeByte(int bval, String blabel) @@ -139,17 +153,18 @@ if (blabel != null) { addLabel(blabel, true); - addByteDef(true); + m_state = 2; + addByteDef(false); m_src += getByteStr(bval); m_src += m_eol; } else { - if (changeState(2)) + if (m_state != 2) addByteDef(true); else if (m_bpl > 0 && m_bytes > m_bpl) - addByteDef(false); + addByteDef(true); if (m_bytes++ > 0) addByteSep(); @@ -598,12 +613,12 @@ if (machine == PLUS4M) { //PLUS4 MULTICOLOR ctx.loadTemplate("showpfourm.prg"); - ctx.addLine(".global _bitmap"); - ctx.addLine(".global _color1"); - ctx.addLine(".global _color2"); - ctx.addLine(".global _border"); - ctx.addLine(".global _back1"); - ctx.addLine(".global _back2"); + ctx.addLine(".global @@_bitmap"); + ctx.addLine(".global @@_color1"); + ctx.addLine(".global @@_color2"); + ctx.addLine(".global @@_border"); + ctx.addLine(".global @@_back1"); + ctx.addLine(".global @@_back2"); ctx.addLabel("_bitmap"); ctx.setOffs(0x013e); @@ -650,24 +665,26 @@ if (machine == PLUS4) { // Plus 4 hires ctx.loadTemplate("showpfour.prg"); - ctx.addLine(".global _bitmap"); - ctx.addLine(".global _color"); - ctx.addLine(".global _lumi"); - ctx.addLine(".global _border"); + ctx.addLine(".global @@_bitmap"); + ctx.addLine(".global @@_color"); + ctx.addLine(".global @@_lumi"); + ctx.addLine(".global @@_border"); ctx.setOffs(0x0137); + ctx.addLabel("_bitmap"); mpExportBitmapData(ctx, 40, 25); val1 = getpluscolor(int(g_map[0])); val2 = getplusluminance(int(g_map[0])); val3 = val2 * 16 + val1; - ctx.setOffs(0x2077); - ctx.writeByte(val3); //border + ctx.writeByteAt(0x2077, val3, "_border"); //border ctx.setOffs(0x2078); + ctx.addLabel("_color"); mpExportColorData(ctx, 40, 25, 65536, 4); //colors ctx.setOffs(0x2460); + ctx.addLabel("_lumi"); mpExportColorData(ctx, 40, 25, 65536, 5); //lumis //plus4 hires @@ -680,7 +697,7 @@ if (machine == MSX) { // MSX ctx.loadTemplate("msxshow.com"); - ctx.addLine(".globl _bitmap,_nimi2"); + ctx.addLine(".globl @@_bitmap,@@_nimi2"); ctx.addLine(".area _CODE"); ctx.setOffs(0x00f9); @@ -705,75 +722,72 @@ //would need some cleaning up // ctx.addLine(".area _DATA"); - // ctx.addLine(".globl _taustakuva"); + // ctx.addLine(".globl @@_taustakuva"); // ctx.addLabel("_taustakuva"); ctx.loadTemplate("specshow.tap"); int checksum = 0xc9; - for (y = 0x1d24; y <= 0x1d3d; y++) { //1d3e + for (y = 0x1d24; y < 0x1d3e; y++) + { checksum = checksum ^ int(g_template[y]); } //TAP requires fiddling with the checksum //println("Checksum:"+hex(checksum,2)); - ctx.addLabel("paske"); - ctx.writeByteAt(0x0223, g_map[0]); + ctx.writeByteAt(0x0223, g_map[0], "_something1"); checksum = checksum ^ int(g_map[0]); - ctx.addLabel("jottain"); + ctx.addLabel("_something2"); + ctx.setBPL(32); for (int y = 0; y <= 2; y++) for (int y2 = 0; y2 < 8; y2++) for (int yy = 0; yy < 8; yy++) + for (int x = 0; x < 32; x++) { - for (int x = 0; x < 32; x++) - { - int yp = y * 64 + yy * 8 + y2, - ad = 1024 + yp * 256 + x * 8, - valu = - g_map[ad + 0] * 128 + - g_map[ad + 1] * 64 + - g_map[ad + 2] * 32 + - g_map[ad + 3] * 16 + - g_map[ad + 4] * 8 + - g_map[ad + 5] * 4 + - g_map[ad + 6] * 2 + - g_map[ad + 7] * 1; + int yp = y * 64 + yy * 8 + y2, + ad = 1024 + yp * 256 + x * 8, + valu = + g_map[ad + 0] * 128 + + g_map[ad + 1] * 64 + + g_map[ad + 2] * 32 + + g_map[ad + 3] * 16 + + g_map[ad + 4] * 8 + + g_map[ad + 5] * 4 + + g_map[ad + 6] * 2 + + g_map[ad + 7] * 1; - ctx.writeByte(valu); - checksum = checksum ^ int(valu); - } + ctx.writeByte(valu); + checksum = checksum ^ int(valu); } - ctx.addLabel("attributes"); + ctx.addLabel("_attributes"); for (int y = 0; y < 24; y++) + for (int x = 0; x < 32; x++) { - for (int x = 0; x < 32; x++) - { - int ad = 65536 + x + y * 256, - valu = int(g_map[ad]), - valu2 = int(g_map[ad + MX * MY * 8]), - bri = 0; + int ad = 65536 + x + y * 256, + valu = int(g_map[ad]), + valu2 = int(g_map[ad + MX * MY * 8]), + bri = 0; - if (valu >= 8) - { - bri = 1; - valu = valu - 8; - valu2 = valu2 - 8; - if (valu2 <= 0) { - valu2 = 0; - } + if (valu >= 8) + { + bri = 1; + valu = valu - 8; + valu2 = valu2 - 8; + if (valu2 <= 0) { + valu2 = 0; } - if (bri == 1) { - valu = valu + 64; - } + } + if (bri == 1) { + valu = valu + 64; + } - ctx.writeByte(valu + valu2 * 8); - checksum = checksum ^ int(valu + valu2 * 8); - } + ctx.writeByte(valu + valu2 * 8); + checksum = checksum ^ int(valu + valu2 * 8); } + ctx.setBPLOff(); - //println("checksum:"+hex(checksum,2)); - ctx.writeByteAt(0x1d3e, int(checksum)); + ctx.writeByteAt(0x1d3e, int(checksum), "_checksum"); } else if (machine == CPC) { @@ -786,7 +800,7 @@ //fixed # of palette entries, just trying to be generic ctx.setOffs(16453); - ctx.setBPL(g_maxcolors - 1); + ctx.setBPL(32); ctx.addLabel("_palette"); for (int i = 0; i < g_maxcolors; i++) { @@ -794,7 +808,7 @@ val2 = int(g_r[i] / (256 / g_palsteps)); val3 = int(g_b[i] / (256 / g_palsteps)); - ctx.writeByte(ctx, val1 * 9 + val2 * 3 + val3); + ctx.writeByte(val1 * 9 + val2 * 3 + val3); } ctx.setBPLOff(); @@ -815,6 +829,7 @@ else return false; + ctx.addEOL(); return true; } @@ -825,11 +840,11 @@ int pix0b0, pix0b1, pix0b2, pix0b3; int pix1b0, pix1b1, pix1b2, pix1b3; - ctx.setBPL(xwid / 2); + ctx.setBPL(32); for (y2 = 0; y2 < 8; y2++) { - ctx.addByteDef(); + ctx.addByteDef(true); for (y = 0; y < 25; y++) for (x = 0; x < int(xwid / 2); x++) @@ -862,7 +877,7 @@ ctx.writeByte(val2); } - ctx.addByteDef(); + ctx.addByteDef(true); for (int j = 0; j <= 47; j++) ctx.writeByte(0); } @@ -878,7 +893,7 @@ ywid = yy * 8; ctx.setBPL(32); - ctx.addByteDef(); + ctx.addByteDef(true); for (int y = 0; y < yy; y++) for (int x = 0; x < xx; x++) @@ -969,7 +984,7 @@ for (int yc = 0; yc < height; yc++) { - ctx.addByteDef(); + ctx.addByteDef(true); for (int xc = 0; xc < width; xc++) for (int yline = 0; yline <= myrpsi; yline++) {