From 1675ab628e1d589256be2615eefbd5ad2cc0896f Mon Sep 17 00:00:00 2001 From: Steven Hugg Date: Fri, 5 May 2017 09:51:47 -0400 Subject: [PATCH] support ;;{...};; bitmap header for assembler --- package.json | 1 + pixels.html | 12 ++--- presets/vcs/examples/brickgame.a | 70 +++++---------------------- presets/vcs/examples/missiles.a | 80 +++++-------------------------- presets/vcs/examples/scoreboard.a | 73 +++++----------------------- presets/vcs/examples/timing2.a | 80 +++++-------------------------- src/pixed/pixeleditor.js | 53 +++++++++++++------- src/ui.js | 10 ++-- test/cli/testpixelconvert.js | 40 ++++++++++++++++ 9 files changed, 134 insertions(+), 285 deletions(-) create mode 100644 test/cli/testpixelconvert.js diff --git a/package.json b/package.json index 52e622ed..577ee4c4 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ }, "scripts": { "test": "npm run test-node && npm run test-browser", + "test-one": "mocha --recursive --timeout 20000", "test-node": "mocha --recursive --timeout 20000 test/cli", "test-profile": "mocha --recursive --timeout 60000 --prof test/cli", "test-browser": "mocha-phantomjs ./testemu.html" diff --git a/pixels.html b/pixels.html index 0fa7ce20..942f1734 100644 --- a/pixels.html +++ b/pixels.html @@ -24,9 +24,9 @@ body {
-
+
-
+
@@ -46,15 +46,15 @@ if (window.self === window.top) { var fmt = {w:8,h:8,bpp:1,count:8}; var palette = [0xff000000, 0xffffffff]; */ - /* var paldatastr = " 0x00, 0x03, 0x19, 0x50, 0x52, 0x07, 0x1f, 0x37, 0xe0, 0xa4, 0xfd, 0xff, 0x38, 0x70, 0x7f, 0xf8, "; var fmt = {w:14,h:16,bpp:4,brev:1}; - fmt = {w:14,h:8,bpp:4,brev:1,count:2}; + //fmt = {w:14,h:8,bpp:4,brev:1,count:2}; var datastr = "0x00,0x00,0xef,0xef,0xe0,0x00,0x00, 0x00,0xee,0xee,0xfe,0xee,0xe0,0x00, 0x0e,0xed,0xef,0xef,0xed,0xee,0x00, 0x0e,0xee,0xdd,0xdd,0xde,0xee,0x00, 0x0e,0xee,0xed,0xde,0xee,0xee,0x00, 0x00,0xee,0xee,0xde,0xee,0xe0,0x00, 0x00,0xee,0xee,0xde,0xee,0xe0,0x00, 0x00,0x00,0xed,0xdd,0xe0,0x00,0x0d, 0xdd,0xdd,0xee,0xee,0xed,0xdd,0xd0, 0x0d,0xee,0xee,0xee,0xee,0xee,0x00, 0x0e,0xe0,0xee,0xee,0xe0,0xee,0x00, 0x0e,0xe0,0xee,0xee,0xe0,0xee,0x00, 0x0e,0xe0,0xdd,0xdd,0xd0,0xde,0x00, 0x0d,0x00,0xee,0x0e,0xe0,0x0d,0x00, 0x00,0x00,0xed,0x0e,0xe0,0x00,0x00, 0x00,0x0d,0xdd,0x0d,0xdd,0x00,0x18,"; - */ - var datastr = "0x00,0xfe,0x82,0x82,0x82,0xfe,0xfe,0x00,0x00,0x00,0xfe,0xfe,0xc0,0x00,0x00,0x00,0x00,0xf2,0xf2,0x92,0x92,0x9e,0x9e,0x00,0x00,0xfe,0xfe,0x92,0x92,0x82,0x00,0x00,0x08,0xfe,0xfe,0x88,0x88,0xf8,0xf8,0x00,0x00,0x9e,0x9e,0x92,0x92,0xf2,0xf2,0x00,0x00,0x9e,0x92,0x92,0x92,0xfe,0xfe,0x00,0x00,0xf0,0xf0,0x9e,0x9e,0x80,0x80,0x00,0x00,0xfe,0x92,0x92,0x92,0xfe,0xfe,0x00,0x00,0xfe,0x92,0x92,0x92,0xf2,0xf0,0x00,0x00,0xfe,0xc8,0x88,0x88,0xfe,0xfe,0x00,0x00,0xee,0x92,0x92,0x92,0xfe,0xfe,0x00,0x00,0x82,0x82,0x82,0x86,0xfe,0xfe,0x00,0x00,0xfc,0x86,0x82,0x82,0xfe,0xfe,0x00,0x00,0x82,0x92,0x92,0x92,0xfe,0xfe,0x00,0x00,0x80,0x90,0x90,0x90,0xfe,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xc8,0x88,0x88,0xfe,0xfe,0x00,0x00,0xee,0x92,0x92,0x92,0xfe,0xfe,0x00,0x00,0x82,0x82,0x82,0x86,0xfe,0xfe,0x00,0x00,0xfc,0x86,0x82,0x82,0xfe,0xfe,0x00,0x00,0x82,0x92,0x92,0x92,0xfe,0xfe,0x00,0x80,0x90,0x90,0x90,0x90,0xfe,0xfe,0x00,0x00,0x9e,0x92,0x82,0x82,0xfe,0xfe,0x00,0xfe,0xfe,0x10,0x10,0x10,0xfe,0xfe,0x00,0x00,0x00,0xbe,0xbe,0x00,0x00,0x00,0x00,0xfc,0xfe,0x06,0x02,0x02,0x02,0x00,0x00,0x00,0x82,0x44,0x28,0x18,0xfe,0xfe,0x00,0x02,0x02,0x02,0x06,0xfe,0xfe,0x00,0x00,0xfe,0x40,0x20,0x18,0x20,0xfe,0xfe,0x00,0xfe,0x0c,0x08,0x10,0x20,0xfe,0xfe,0x00,0xfe,0x82,0x82,0x82,0x86,0xfe,0xfe,0x00,0x00,0xfe,0x82,0x82,0x82,0xfe,0xfe,0x00,0x00,0x00,0xfe,0xfe,0xc0,0x00,0x00,0x00,0x00,0xf2,0xf2,0x92,0x92,0x9e,0x9e,0x00,0x00,0xfe,0xfe,0x92,0x92,0x82,0x00,0x00,0x08,0xfe,0xfe,0x88,0x88,0xf8,0xf8,0x00,0x00,0x9e,0x9e,0x92,0x92,0xf2,0xf2,0x00,0x00,0x9e,0x92,0x92,0x92,0xfe,0xfe,0x00,0x00,0xf0,0xf0,0x9e,0x9e,0x80,0x80,0x00,0x00,0xfe,0x92,0x92,0x92,0xfe,0xfe,0x00,0x00,0xfe,0x92,0x92,0x92,0xf2,0xf0,0x00,0x00,0xfe,0xc8,0x88,0x88,0xfe,0xfe,0x00,0x00,0xee,0x92,0x92,0x92,0xfe,0xfe,0x00,0x00,0x82,0x82,0x82,0x86,0xfe,0xfe,0x00,0x00,0xfc,0x86,0x82,0x82,0xfe,0xfe,0x00,0x00,0x82,0x92,0x92,0x92,0xfe,0xfe,0x00,0x00,0x80,0x90,0x90,0x90,0xfe,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xc8,0x88,0x88,0xfe,0xfe,0x00,0x00,0xee,0x92,0x92,0x92,0xfe,0xfe,0x00,0x00,0x82,0x82,0x82,0x86,0xfe,0xfe,0x00,0x00,0xfc,0x86,0x82,0x82,0xfe,0xfe,0x00,0x00,0x82,0x92,0x92,0x92,0xfe,0xfe,0x00,0x80,0x90,0x90,0x90,0x90,0xfe,0xfe,0x00,0x00,0x9e,0x92,0x82,0x82,0xfe,0xfe,0x00,0xfe,0xfe,0x10,0x10,0x10,0xfe,0xfe,0x00,0x00,0x00,0xbe,0xbe,0x00,0x00,0x00,0x00,0xfc,0xfe,0x06,0x02,0x02,0x02,0x00,0x00,0x00,0x82,0x44,0x28,0x18,0xfe,0xfe,0x00,0x02,0x02,0x02,0x06,0xfe,0xfe,0x00,0x00,0xfe,0x40,0x20,0x18,0x20,0xfe,0xfe,0x00,0xfe,0x0c,0x08,0x10,0x20,0xfe,0xfe,0x00,0xfe,0x82,0x82,0x82,0x86,0xfe,0xfe,0x00,"; + /* + var datastr = "$00,0xfe,0x82,0x82,0x82,0xfe,0xfe,0x00,0x00,0x00,0xfe,0xfe,0xc0,0x00,0x00,0x00,0x00,0xf2,0xf2,0x92,0x92,0x9e,0x9e,0x00,0x00,0xfe,0xfe,0x92,0x92,0x82,0x00,0x00,0x08,0xfe,0xfe,0x88,0x88,0xf8,0xf8,0x00,0x00,0x9e,0x9e,0x92,0x92,0xf2,0xf2,0x00,0x00,0x9e,0x92,0x92,0x92,0xfe,0xfe,0x00,0x00,0xf0,0xf0,0x9e,0x9e,0x80,0x80,0x00,0x00,0xfe,0x92,0x92,0x92,0xfe,0xfe,0x00,0x00,0xfe,0x92,0x92,0x92,0xf2,0xf0,0x00,0x00,0xfe,0xc8,0x88,0x88,0xfe,0xfe,0x00,0x00,0xee,0x92,0x92,0x92,0xfe,0xfe,0x00,0x00,0x82,0x82,0x82,0x86,0xfe,0xfe,0x00,0x00,0xfc,0x86,0x82,0x82,0xfe,0xfe,0x00,0x00,0x82,0x92,0x92,0x92,0xfe,0xfe,0x00,0x00,0x80,0x90,0x90,0x90,0xfe,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xc8,0x88,0x88,0xfe,0xfe,0x00,0x00,0xee,0x92,0x92,0x92,0xfe,0xfe,0x00,0x00,0x82,0x82,0x82,0x86,0xfe,0xfe,0x00,0x00,0xfc,0x86,0x82,0x82,0xfe,0xfe,0x00,0x00,0x82,0x92,0x92,0x92,0xfe,0xfe,0x00,0x80,0x90,0x90,0x90,0x90,0xfe,0xfe,0x00,0x00,0x9e,0x92,0x82,0x82,0xfe,0xfe,0x00,0xfe,0xfe,0x10,0x10,0x10,0xfe,0xfe,0x00,0x00,0x00,0xbe,0xbe,0x00,0x00,0x00,0x00,0xfc,0xfe,0x06,0x02,0x02,0x02,0x00,0x00,0x00,0x82,0x44,0x28,0x18,0xfe,0xfe,0x00,0x02,0x02,0x02,0x06,0xfe,0xfe,0x00,0x00,0xfe,0x40,0x20,0x18,0x20,0xfe,0xfe,0x00,0xfe,0x0c,0x08,0x10,0x20,0xfe,0xfe,0x00,0xfe,0x82,0x82,0x82,0x86,0xfe,0xfe,0x00,0x00,0xfe,0x82,0x82,0x82,0xfe,0xfe,0x00,0x00,0x00,0xfe,0xfe,0xc0,0x00,0x00,0x00,0x00,0xf2,0xf2,0x92,0x92,0x9e,0x9e,0x00,0x00,0xfe,0xfe,0x92,0x92,0x82,0x00,0x00,0x08,0xfe,0xfe,0x88,0x88,0xf8,0xf8,0x00,0x00,0x9e,0x9e,0x92,0x92,0xf2,0xf2,0x00,0x00,0x9e,0x92,0x92,0x92,0xfe,0xfe,0x00,0x00,0xf0,0xf0,0x9e,0x9e,0x80,0x80,0x00,0x00,0xfe,0x92,0x92,0x92,0xfe,0xfe,0x00,0x00,0xfe,0x92,0x92,0x92,0xf2,0xf0,0x00,0x00,0xfe,0xc8,0x88,0x88,0xfe,0xfe,0x00,0x00,0xee,0x92,0x92,0x92,0xfe,0xfe,0x00,0x00,0x82,0x82,0x82,0x86,0xfe,0xfe,0x00,0x00,0xfc,0x86,0x82,0x82,0xfe,0xfe,0x00,0x00,0x82,0x92,0x92,0x92,0xfe,0xfe,0x00,0x00,0x80,0x90,0x90,0x90,0xfe,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xc8,0x88,0x88,0xfe,0xfe,0x00,0x00,0xee,0x92,0x92,0x92,0xfe,0xfe,0x00,0x00,0x82,0x82,0x82,0x86,0xfe,0xfe,0x00,0x00,0xfc,0x86,0x82,0x82,0xfe,0xfe,0x00,0x00,0x82,0x92,0x92,0x92,0xfe,0xfe,0x00,0x80,0x90,0x90,0x90,0x90,0xfe,0xfe,0x00,0x00,0x9e,0x92,0x82,0x82,0xfe,0xfe,0x00,0xfe,0xfe,0x10,0x10,0x10,0xfe,0xfe,0x00,0x00,0x00,0xbe,0xbe,0x00,0x00,0x00,0x00,0xfc,0xfe,0x06,0x02,0x02,0x02,0x00,0x00,0x00,0x82,0x44,0x28,0x18,0xfe,0xfe,0x00,0x02,0x02,0x02,0x06,0xfe,0xfe,0x00,0x00,0xfe,0x40,0x20,0x18,0x20,0xfe,0xfe,0x00,0xfe,0x0c,0x08,0x10,0x20,0xfe,0xfe,0x00,0xfe,0x82,0x82,0x82,0x86,0xfe,0xfe,0x00,"; var fmt = {w:8,h:8,bpp:1,np:2,pofs:0x100,count:32,xform:"rotate(90deg) scaleX(-1)"}; var paldatastr = "0x00,0x30,0x4f,0xff,0x00,0xf0,0xc0,0x7f, 0x00,0xc0,0x04,0x1f,0x00,0xd0,0xd0,0x0f, 0x00,0xc0,0xc0,0x0f,0x00,0x04,0x04,0x0f, 0x00,0xff,0x0f,0xf0,0x00,0x7f,0x0f,0xdf,"; + */ pixelEditorReceiveMessage({data:{fmt:fmt,bytestr:datastr,palfmt:{pal:332,n:16},palstr:paldatastr}}); console.log(postToParentWindow({save:true})); } diff --git a/presets/vcs/examples/brickgame.a b/presets/vcs/examples/brickgame.a index e8b134be..06d2a789 100644 --- a/presets/vcs/examples/brickgame.a +++ b/presets/vcs/examples/brickgame.a @@ -655,65 +655,17 @@ ColorFrame0 ; Bitmap pattern for digits -DigitsBitmap .byte $0E ; | XXX | $F5C5 Leading zero is not drawn - .byte $0A ; | X X | $F5C6 because it's never used. - .byte $0A ; | X X | $F5C7 - .byte $0A ; | X X | $F5C8 - .byte $0E ; | XXX | $F5C9 - - .byte $22 ; | X X | $F5CA - .byte $22 ; | X X | $F5CB - .byte $22 ; | X X | $F5CC - .byte $22 ; | X X | $F5CD - .byte $22 ; | X X | $F5CE - - .byte $EE ; |XXX XXX | $F5CF - .byte $22 ; | X X | $F5D0 - .byte $EE ; |XXX XXX | $F5D1 - .byte $88 ; |X X | $F5D2 - .byte $EE ; |XXX XXX | $F5D3 - - .byte $EE ; |XXX XXX | $F5D4 - .byte $22 ; | X X | $F5D5 - .byte $66 ; | XX XX | $F5D6 - .byte $22 ; | X X | $F5D7 - .byte $EE ; |XXX XXX | $F5D8 - - .byte $AA ; |X X X X | $F5D9 - .byte $AA ; |X X X X | $F5DA - .byte $EE ; |XXX XXX | $F5DB - .byte $22 ; | X X | $F5DC - .byte $22 ; | X X | $F5DD - - .byte $EE ; |XXX XXX | $F5DE - .byte $88 ; |X X | $F5DF - .byte $EE ; |XXX XXX | $F5E0 - .byte $22 ; | X X | $F5E1 - .byte $EE ; |XXX XXX | $F5E2 - - .byte $EE ; |XXX XXX | $F5E3 - .byte $88 ; |X X | $F5E4 - .byte $EE ; |XXX XXX | $F5E5 - .byte $AA ; |X X X X | $F5E6 - .byte $EE ; |XXX XXX | $F5E7 - - .byte $EE ; |XXX XXX | $F5E8 - .byte $22 ; | X X | $F5E9 - .byte $22 ; | X X | $F5EA - .byte $22 ; | X X | $F5EB - .byte $22 ; | X X | $F5EC - - .byte $EE ; |XXX XXX | $F5ED - .byte $AA ; |X X X X | $F5EE - .byte $EE ; |XXX XXX | $F5EF - .byte $AA ; |X X X X | $F5F0 - .byte $EE ; |XXX XXX | $F5F1 - - .byte $EE ; |XXX XXX | $F5F2 - .byte $AA ; |X X X X | $F5F3 - .byte $EE ; |XXX XXX | $F5F4 - .byte $22 ; | X X | $F5F5 - .byte $EE ; |XXX XXX | $F5F6 +DigitsBitmap ;;{w:8,h:6,count:10,brev:1};; + .byte $EE,$AA,$AA,$AA,$EE,$00 + .byte $22,$22,$22,$22,$22,$00 + .byte $EE,$22,$EE,$88,$EE,$00 + .byte $EE,$22,$66,$22,$EE,$00 + .byte $AA,$AA,$EE,$22,$22,$00 + .byte $EE,$88,$EE,$22,$EE,$00 + .byte $EE,$88,$EE,$AA,$EE,$00 + .byte $EE,$22,$22,$22,$22,$00 + .byte $EE,$AA,$EE,$AA,$EE,$00 + .byte $EE,$AA,$EE,$22,$EE,$00 ; Playfield bitmasks for all 40 brick columns PFMaskTable diff --git a/presets/vcs/examples/missiles.a b/presets/vcs/examples/missiles.a index 7cf13e9e..d3bb6f57 100644 --- a/presets/vcs/examples/missiles.a +++ b/presets/vcs/examples/missiles.a @@ -151,75 +151,17 @@ MOVEMENT .byte $20 ; -2 pixels ; Bitmap pattern for digits -NUMBERS .byte $0E ; | XXX | $F5C5 Leading zero is not drawn - .byte $0A ; | X X | $F5C6 because it's never used. - .byte $0A ; | X X | $F5C7 - .byte $0A ; | X X | $F5C8 - .byte $0E ; | XXX | $F5C9 - .byte $00 - - .byte $22 ; | X X | $F5CA - .byte $22 ; | X X | $F5CB - .byte $22 ; | X X | $F5CC - .byte $22 ; | X X | $F5CD - .byte $22 ; | X X | $F5CE - .byte $00 - - .byte $EE ; |XXX XXX | $F5CF - .byte $22 ; | X X | $F5D0 - .byte $EE ; |XXX XXX | $F5D1 - .byte $88 ; |X X | $F5D2 - .byte $EE ; |XXX XXX | $F5D3 - .byte $00 - - .byte $EE ; |XXX XXX | $F5D4 - .byte $22 ; | X X | $F5D5 - .byte $66 ; | XX XX | $F5D6 - .byte $22 ; | X X | $F5D7 - .byte $EE ; |XXX XXX | $F5D8 - .byte $00 - - .byte $AA ; |X X X X | $F5D9 - .byte $AA ; |X X X X | $F5DA - .byte $EE ; |XXX XXX | $F5DB - .byte $22 ; | X X | $F5DC - .byte $22 ; | X X | $F5DD - .byte $00 - - .byte $EE ; |XXX XXX | $F5DE - .byte $88 ; |X X | $F5DF - .byte $EE ; |XXX XXX | $F5E0 - .byte $22 ; | X X | $F5E1 - .byte $EE ; |XXX XXX | $F5E2 - .byte $00 - - .byte $EE ; |XXX XXX | $F5E3 - .byte $88 ; |X X | $F5E4 - .byte $EE ; |XXX XXX | $F5E5 - .byte $AA ; |X X X X | $F5E6 - .byte $EE ; |XXX XXX | $F5E7 - .byte $00 - - .byte $EE ; |XXX XXX | $F5E8 - .byte $22 ; | X X | $F5E9 - .byte $22 ; | X X | $F5EA - .byte $22 ; | X X | $F5EB - .byte $22 ; | X X | $F5EC - .byte $00 - - .byte $EE ; |XXX XXX | $F5ED - .byte $AA ; |X X X X | $F5EE - .byte $EE ; |XXX XXX | $F5EF - .byte $AA ; |X X X X | $F5F0 - .byte $EE ; |XXX XXX | $F5F1 - .byte $00 - - .byte $EE ; |XXX XXX | $F5F2 - .byte $AA ; |X X X X | $F5F3 - .byte $EE ; |XXX XXX | $F5F4 - .byte $22 ; | X X | $F5F5 - .byte $EE ; |XXX XXX | $F5F6 - .byte $00 +NUMBERS ;;{w:8,h:6,count:10,brev:1};; + .byte $EE,$AA,$AA,$AA,$EE,$00 + .byte $22,$22,$22,$22,$22,$00 + .byte $EE,$22,$EE,$88,$EE,$00 + .byte $EE,$22,$66,$22,$EE,$00 + .byte $AA,$AA,$EE,$22,$22,$00 + .byte $EE,$88,$EE,$22,$EE,$00 + .byte $EE,$88,$EE,$AA,$EE,$00 + .byte $EE,$22,$22,$22,$22,$00 + .byte $EE,$AA,$EE,$AA,$EE,$00 + .byte $EE,$AA,$EE,$22,$EE,$00 ; Epilogue org $fffc diff --git a/presets/vcs/examples/scoreboard.a b/presets/vcs/examples/scoreboard.a index 71f53fdd..819828d5 100644 --- a/presets/vcs/examples/scoreboard.a +++ b/presets/vcs/examples/scoreboard.a @@ -131,67 +131,18 @@ GetBCDBitmap subroutine org $FF00 ; Bitmap pattern for digits -DigitsBitmap - .byte $0E ; | XXX | - .byte $0A ; | X X | - .byte $0A ; | X X | - .byte $0A ; | X X | - .byte $0E ; | XXX | - - .byte $22 ; | X X | - .byte $22 ; | X X | - .byte $22 ; | X X | - .byte $22 ; | X X | - .byte $22 ; | X X | - - .byte $EE ; |XXX XXX | - .byte $22 ; | X X | - .byte $EE ; |XXX XXX | - .byte $88 ; |X X | - .byte $EE ; |XXX XXX | - - .byte $EE ; |XXX XXX | - .byte $22 ; | X X | - .byte $66 ; | XX XX | - .byte $22 ; | X X | - .byte $EE ; |XXX XXX | - - .byte $AA ; |X X X X | - .byte $AA ; |X X X X | - .byte $EE ; |XXX XXX | - .byte $22 ; | X X | - .byte $22 ; | X X | - - .byte $EE ; |XXX XXX | - .byte $88 ; |X X | - .byte $EE ; |XXX XXX | - .byte $22 ; | X X | - .byte $EE ; |XXX XXX | - - .byte $EE ; |XXX XXX | - .byte $88 ; |X X | - .byte $EE ; |XXX XXX | - .byte $AA ; |X X X X | - .byte $EE ; |XXX XXX | - - .byte $EE ; |XXX XXX | - .byte $22 ; | X X | - .byte $22 ; | X X | - .byte $22 ; | X X | - .byte $22 ; | X X | - - .byte $EE ; |XXX XXX | - .byte $AA ; |X X X X | - .byte $EE ; |XXX XXX | - .byte $AA ; |X X X X | - .byte $EE ; |XXX XXX | - - .byte $EE ; |XXX XXX | - .byte $AA ; |X X X X | - .byte $EE ; |XXX XXX | - .byte $22 ; | X X | - .byte $EE ; |XXX XXX | - +DigitsBitmap ;;{w:8,h:6,count:10,brev:1};; + .byte $EE,$AA,$AA,$AA,$EE,$00 + .byte $22,$22,$22,$22,$22,$00 + .byte $EE,$22,$EE,$88,$EE,$00 + .byte $EE,$22,$66,$22,$EE,$00 + .byte $AA,$AA,$EE,$22,$22,$00 + .byte $EE,$88,$EE,$22,$EE,$00 + .byte $EE,$88,$EE,$AA,$EE,$00 + .byte $EE,$22,$22,$22,$22,$00 + .byte $EE,$AA,$EE,$AA,$EE,$00 + .byte $EE,$AA,$EE,$22,$EE,$00 + ; Epilogue org $fffc .word Start diff --git a/presets/vcs/examples/timing2.a b/presets/vcs/examples/timing2.a index 59506b5d..a134c066 100644 --- a/presets/vcs/examples/timing2.a +++ b/presets/vcs/examples/timing2.a @@ -98,75 +98,17 @@ lvover sta WSYNC ; Bitmap pattern for digits -NUMBERS .byte $0E ; | XXX | $F5C5 Leading zero is not drawn - .byte $0A ; | X X | $F5C6 because it's never used. - .byte $0A ; | X X | $F5C7 - .byte $0A ; | X X | $F5C8 - .byte $0E ; | XXX | $F5C9 - .byte $00 - - .byte $22 ; | X X | $F5CA - .byte $22 ; | X X | $F5CB - .byte $22 ; | X X | $F5CC - .byte $22 ; | X X | $F5CD - .byte $22 ; | X X | $F5CE - .byte $00 - - .byte $EE ; |XXX XXX | $F5CF - .byte $22 ; | X X | $F5D0 - .byte $EE ; |XXX XXX | $F5D1 - .byte $88 ; |X X | $F5D2 - .byte $EE ; |XXX XXX | $F5D3 - .byte $00 - - .byte $EE ; |XXX XXX | $F5D4 - .byte $22 ; | X X | $F5D5 - .byte $66 ; | XX XX | $F5D6 - .byte $22 ; | X X | $F5D7 - .byte $EE ; |XXX XXX | $F5D8 - .byte $00 - - .byte $AA ; |X X X X | $F5D9 - .byte $AA ; |X X X X | $F5DA - .byte $EE ; |XXX XXX | $F5DB - .byte $22 ; | X X | $F5DC - .byte $22 ; | X X | $F5DD - .byte $00 - - .byte $EE ; |XXX XXX | $F5DE - .byte $88 ; |X X | $F5DF - .byte $EE ; |XXX XXX | $F5E0 - .byte $22 ; | X X | $F5E1 - .byte $EE ; |XXX XXX | $F5E2 - .byte $00 - - .byte $EE ; |XXX XXX | $F5E3 - .byte $88 ; |X X | $F5E4 - .byte $EE ; |XXX XXX | $F5E5 - .byte $AA ; |X X X X | $F5E6 - .byte $EE ; |XXX XXX | $F5E7 - .byte $00 - - .byte $EE ; |XXX XXX | $F5E8 - .byte $22 ; | X X | $F5E9 - .byte $22 ; | X X | $F5EA - .byte $22 ; | X X | $F5EB - .byte $22 ; | X X | $F5EC - .byte $00 - - .byte $EE ; |XXX XXX | $F5ED - .byte $AA ; |X X X X | $F5EE - .byte $EE ; |XXX XXX | $F5EF - .byte $AA ; |X X X X | $F5F0 - .byte $EE ; |XXX XXX | $F5F1 - .byte $00 - - .byte $EE ; |XXX XXX | $F5F2 - .byte $AA ; |X X X X | $F5F3 - .byte $EE ; |XXX XXX | $F5F4 - .byte $22 ; | X X | $F5F5 - .byte $EE ; |XXX XXX | $F5F6 - .byte $00 +NUMBERS ;;{w:8,h:6,count:10,brev:1};; + .byte $EE,$AA,$AA,$AA,$EE,$00 + .byte $22,$22,$22,$22,$22,$00 + .byte $EE,$22,$EE,$88,$EE,$00 + .byte $EE,$22,$66,$22,$EE,$00 + .byte $AA,$AA,$EE,$22,$22,$00 + .byte $EE,$88,$EE,$22,$EE,$00 + .byte $EE,$88,$EE,$AA,$EE,$00 + .byte $EE,$22,$22,$22,$22,$00 + .byte $EE,$AA,$EE,$AA,$EE,$00 + .byte $EE,$AA,$EE,$22,$EE,$00 ; Epilogue org $fffc diff --git a/src/pixed/pixeleditor.js b/src/pixed/pixeleditor.js index 38e54e26..968a2137 100644 --- a/src/pixed/pixeleditor.js +++ b/src/pixed/pixeleditor.js @@ -47,7 +47,7 @@ function PixelEditor(parentDiv, fmt, palette, initialData, thumbnails) { var pixcanvas = createCanvas(); var ctx = pixcanvas.getContext('2d'); - var pixdata = ctx.createImageData(pixcanvas.width, pixcanvas.height); + var pixdata = ctx.createImageData(width, height); var pixints = new Uint32Array(pixdata.data.buffer); for (var i=0; i= width || y < 0 || y >= height) return; + var ofs = x+y*width; var oldrgba = pixints[ofs]; var rgba = palette[col]; if (oldrgba != rgba) { @@ -139,6 +140,7 @@ function PixelEditor(parentDiv, fmt, palette, initialData, thumbnails) { dragcol = getPixel(pos.x, pos.y) == curpalcol ? 0 : curpalcol; setPixel(pos.x, pos.y, curpalcol); dragging = true; + pixcanvas.setCapture(); }) .mousemove(function(e) { var pos = getPositionFromEvent(e); @@ -151,38 +153,47 @@ function PixelEditor(parentDiv, fmt, palette, initialData, thumbnails) { setPixel(pos.x, pos.y, dragcol); dragging = false; updateThumbnails(); + pixcanvas.releaseCapture(); }); } } ///////////////// +var pixel_re = /([0#]?)([x$%])([0-9a-f]+)/gi; + function parseHexBytes(s) { var arr = []; - var re = /0x([0-9a-f]+)/gi; var m; - while (m = re.exec(s)) { - if (m[0].startsWith('0x')) - arr.push(parseInt(m[1],16)); + while (m = pixel_re.exec(s)) { + var n; + if (m[2].startsWith('%')) + n = parseInt(m[3],2); + else if (m[2].startsWith('x') || m[2].startsWith('$')) + n = parseInt(m[3],16); else - arr.push(parseInt(m[1])); + n = parseInt(m[3]); + arr.push(n); } return arr; } function replaceHexBytes(s, bytes) { var result = ""; - var re = /0x[0-9a-f]+/gi; // TODO: decimal var m; var li = 0; var i = 0; - while (m = re.exec(s)) { - result += s.slice(li, re.lastIndex - m[0].length); - li = re.lastIndex; - if (m[0].startsWith('0x')) - result += "0x" + hex(bytes[i++]); + while (m = pixel_re.exec(s)) { + result += s.slice(li, pixel_re.lastIndex - m[0].length); + li = pixel_re.lastIndex; + if (m[2].startsWith('%')) + result += m[1] + "%" + bytes[i++].toString(2); + else if (m[2].startsWith('x')) + result += m[1] + "x" + hex(bytes[i++]); + else if (m[2].startsWith('$')) + result += m[1] + "$" + hex(bytes[i++]); else - result += bytes[i++].toString(); + result += m[1] + bytes[i++].toString(); } result += s.slice(li); return result; @@ -227,7 +238,7 @@ function convertImagesToBytes(images, fmt) { var width = fmt.w; var height = fmt.h; var bpp = fmt.bpp ? fmt.bpp : 1; - var bytesperline = fmt.sl ? fmt.sl : Math.ceil(fmt.w * fmt.bpp / 8); + var bytesperline = fmt.sl ? fmt.sl : Math.ceil(fmt.w * bpp / 8); var mask = (1 << bpp)-1; var nplanes = fmt.np ? fmt.np : 1; var bytes = new Uint8Array(bytesperline * height * nplanes * count); @@ -277,7 +288,7 @@ var currentPaletteStr; var currentPaletteFmt; var allthumbs; -function pixelEditorReceiveMessage(e) { +function pixelEditorDecodeMessage(e) { console.log(e.data); parentSource = e.source; parentOrigin = e.origin; @@ -302,6 +313,9 @@ function pixelEditorReceiveMessage(e) { // TODO: default palette? } palette = new Uint32Array(palette); +} + +function pixelEditorCreateThumbnails(e) { // create thumbnail for all images $("#thumbnaildiv").empty(); var parentdiv; @@ -313,6 +327,11 @@ function pixelEditorReceiveMessage(e) { } allthumbs.push(createThumbnailForImage(parentdiv, i)); } +} + +function pixelEditorReceiveMessage(e) { + pixelEditorDecodeMessage(e); + pixelEditorCreateThumbnails(e); // create initial editor createEditorForImage(0); } diff --git a/src/ui.js b/src/ui.js index 2deae1f2..5d2913ba 100644 --- a/src/ui.js +++ b/src/ui.js @@ -1023,7 +1023,7 @@ function openBitmapEditorWithParams(fmt, bytestr, palfmt, palstr) { } function lookBackwardsForJSONComment(line, req) { - var re = /[/][*]([{].+[}])[*][/]/; + var re = /[/;][*;]([{].+[}])[*;][/;]/; while (--line >= 0) { var s = editor.getLine(line); var m = re.exec(s); @@ -1033,12 +1033,14 @@ function lookBackwardsForJSONComment(line, req) { if (obj[req]) { var start = {obj:obj, line:line, ch:s.indexOf(m[0])+m[0].length}; var line0 = line; + var pos0 = start.ch; line--; while (++line < editor.lineCount()) { - if (editor.getLine(line).indexOf(';') >= 0) { + if (editor.getLine(line).indexOf(';') >= pos0) { var end = {line:line, ch:editor.getLine(line).length}; return {obj:obj, start:start, end:end}; } + pos0 = 0; } line = line0; } @@ -1051,8 +1053,8 @@ function openBitmapEditorAtCursor() { $("#pixeditback").hide(250); return; } - var data = lookBackwardsForJSONComment(getCurrentLine(), 'bpp'); - if (data && data.obj && data.obj.w>0 && data.obj.h>0 && data.obj.bpp>0) { + var data = lookBackwardsForJSONComment(getCurrentLine(), 'w'); + if (data && data.obj && data.obj.w>0 && data.obj.h>0) { var paldata = lookBackwardsForJSONComment(data.start.line-1, 'pal'); var palbytestr; if (paldata) { diff --git a/test/cli/testpixelconvert.js b/test/cli/testpixelconvert.js new file mode 100644 index 00000000..a170b401 --- /dev/null +++ b/test/cli/testpixelconvert.js @@ -0,0 +1,40 @@ + +var vm = require('vm'); +var fs = require('fs'); +var assert = require('assert'); +var includeInThisContext = function(path) { + var code = fs.readFileSync(path); + vm.runInThisContext(code, path); +}; + +includeInThisContext("src/util.js"); +includeInThisContext("src/pixed/pixeleditor.js"); + +describe('Pixel editor', function() { + it('Should decode', function() { + var paldatastr = " 0x00, 0x03, 0x19, 0x50, 0x52, 0x07, 0x1f, 0x37, 0xe0, 0xa4, 0xfd, 0xff, 0x38, 0x70, 0x7f, 0xf8, "; + var fmt = {w:14,h:16,bpp:4,brev:1}; + var datastr = "0x00,0x00,0xef,0xef,0xe0,0x00,0x00, 0x00,0xee,0xee,0xfe,0xee,0xe0,0x00, 0x0e,0xed,0xef,0xef,0xed,0xee,0x00, 0x0e,0xee,0xdd,0xdd,0xde,0xee,0x00, 0x0e,0xee,0xed,0xde,0xee,0xee,0x00, 0x00,0xee,0xee,0xde,0xee,0xe0,0x00, 0x00,0xee,0xee,0xde,0xee,0xe0,0x00, 0x00,0x00,0xed,0xdd,0xe0,0x00,0x0d, 0xdd,0xdd,0xee,0xee,0xed,0xdd,0xd0, 0x0d,0xee,0xee,0xee,0xee,0xee,0x00, 0x0e,0xe0,0xee,0xee,0xe0,0xee,0x00, 0x0e,0xe0,0xee,0xee,0xe0,0xee,0x00, 0x0e,0xe0,0xdd,0xdd,0xd0,0xde,0x00, 0x0d,0x00,0xee,0x0e,0xe0,0x0d,0x00, 0x00,0x00,0xed,0x0e,0xe0,0x00,0x00, 0x00,0x0d,0xdd,0x0d,0xdd,0x00,0x18,"; + pixelEditorDecodeMessage({data:{fmt:fmt,bytestr:datastr,palfmt:{pal:332,n:16},palstr:paldatastr}}); + assert.deepEqual(palette, [0xff000000, + 0xff000060, + 0xff006020, + 0xff404000, + 0xff404040, + 0xff0000e0, + 0xff0060e0, + 0xff00c0e0, + 0xffc08000, + 0xff808080, + 0xffc0e0a0, + 0xffc0e0e0, + 0xff00e000, + 0xff40c000, + 0xff40e0e0, + 0xffc0e000, + ]); + assert.deepEqual(allimages, [[0,0,0,0,14,15,14,15,14,0,0,0,0,0,0,0,14,14,14,14,15,14,14,14,14,0,0,0,0,14,14,13,14,15,14,15,14,13,14,14,0,0,0,14,14,14,13,13,13,13,13,14,14,14,0,0,0,14,14,14,14,13,13,14,14,14,14,14,0,0,0,0,14,14,14,14,13,14,14,14,14,0,0,0,0,0,14,14,14,14,13,14,14,14,14,0,0,0,0,0,0,0,14,13,13,13,14,0,0,0,0,13,13,13,13,13,14,14,14,14,14,13,13,13,13,0,0,13,14,14,14,14,14,14,14,14,14,14,0,0,0,14,14,0,14,14,14,14,14,0,14,14,0,0,0,14,14,0,14,14,14,14,14,0,14,14,0,0,0,14,14,0,13,13,13,13,13,0,13,14,0,0,0,13,0,0,14,14,0,14,14,0,0,13,0,0,0,0,0,0,14,13,0,14,14,0,0,0,0,0,0,0,0,13,13,13,0,13,13,13,0,0,1,8]]); + assert.equal(" 0x00, 0x03, 0x19, 0x50, 0x52, 0x07, 0x1F, 0x37, 0xE0, 0xA4, 0xFD, 0xFF, 0x38, 0x70, 0x7F, 0xF8, ", + replaceHexBytes(paldatastr, parseHexBytes(paldatastr))); + }); +});