diff --git a/demo.html b/demo.html index 2a519310..8147e8d8 100644 --- a/demo.html +++ b/demo.html @@ -160,25 +160,23 @@ We're always adding new things here, so subscribe to our mailing list for update

Learn More With a Book!

-
+
- +
-
+

Making Games For The Atari 2600

The Atari 2600 was released in 1977, and now there's finally a book about how to write games for it! You'll learn about the 6502 CPU, NTSC frames, scanlines, cycle counting, players, missiles, collisions, procedural generation, pseudo-3D, and more. While using the manual, take advantage of our Web-based IDE to write 6502 assembly code, and see your code run instantly in the browser. We'll cover the same programming tricks that master programmers used to make classic games. Create your own graphics and sound, and share your games with friends!

-
-
-
+
- +
-
+

Making 8-Bit Arcade Games in C

@@ -188,13 +186,78 @@ We're always adding new things here, so subscribe to our mailing list for update
+

Supported Platforms

-
+
+

Atari 2600

+

+ In 1977, the Atari 2600 popularized the idea of programmable video game consoles. + Its 6502 CPU and mere 128 bytes of RAM powered hundreds of classic games. + Fiendishly difficult to program, developers learned plenty of tricks for "racing the beam" to generate displays far beyond what its designers believed possible. +

-
+
+

VIC Dual

+

+ The VIC Dual system was one of the first CPU-based arcade platforms from Gremlin Industries, later acquired by Sega. + It used a Z80 CPU and a character-based display with simple RGB colors. + "Carnival" is probably the best-remembered game on this platform. +

-
+
+

Midway 8080

+

+ The Midway 8080 system powered Gun Fight, the first CPU-based arcade game. + Later, it would also run the immensely popular Space Invaders. + It used a Z80 and a simple black-and-white frame buffer backed by 7 KB of RAM, a huge amount for the time. +

+
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+

Galaxian/Scramble

+

+ Galaxian pushed the limit of video game designs in 1979, with a 3 MHz Z80 and RGB color graphics with hardware sprites overlapping a scrolling background. + This hardware was licensed for many classics like Scramble and Frogger. +

+
+
+

Atari Vector

+

+ Atari's black-and-white vector games like Lunar Lander and Asteroids took the industry by storm, later leading to color vector games like Tempest. + Powered by a 6502 CPU and custom state machine, they could draw points and lines at a resolution far beyond the CRT-based games of the era. +

+
+
+

Williams

+

+ The Williams games like Defender, Robotron, and Joust were powered by plenty of hardware. + A 36 KB framebuffer gave it 16-color graphics, and a custom bit blitter chip moved pixels around quickly. + A separate CPU powered its unique sound effects. +

+
+
+
+
+ +
+
+ +
+
+
@@ -207,6 +270,9 @@ We're always adding new things here, so subscribe to our mailing list for update © 2018 Puzzling Plans LLC. Privacy Policy.

+

+Some brands and product names mentioned are trademarks or service marks of their respective companies. Use of a term in this work should not be regarded as affecting the validity of any trademark or service mark. +

diff --git a/doc/notes.txt b/doc/notes.txt index aca47a84..79f5851c 100644 --- a/doc/notes.txt +++ b/doc/notes.txt @@ -49,6 +49,10 @@ TODO: - go to error in include files - BOM in upload/download? +FYI: Image links for the books on http://8bitworkshop.com/ are broken +On the website the additional grey spacing next to the program line numbers is not dynamically resized when the web browser window size is changed. Intentional? + + WEB WORKER FORMAT diff --git a/images/ide_screenshot1.png b/images/ide_screenshot1.png index f522d250..1d89b95a 100644 Binary files a/images/ide_screenshot1.png and b/images/ide_screenshot1.png differ diff --git a/images/scrnshots/atari2600-1-fs8.png b/images/scrnshots/atari2600-1-fs8.png new file mode 100644 index 00000000..0385bd3f Binary files /dev/null and b/images/scrnshots/atari2600-1-fs8.png differ diff --git a/images/scrnshots/galaxian-1-fs8.png b/images/scrnshots/galaxian-1-fs8.png new file mode 100644 index 00000000..c0ec3765 Binary files /dev/null and b/images/scrnshots/galaxian-1-fs8.png differ diff --git a/images/scrnshots/mw8080-1-fs8.png b/images/scrnshots/mw8080-1-fs8.png new file mode 100644 index 00000000..e38066ae Binary files /dev/null and b/images/scrnshots/mw8080-1-fs8.png differ diff --git a/images/scrnshots/vector-1-fs8.png b/images/scrnshots/vector-1-fs8.png new file mode 100644 index 00000000..e0d9eac8 Binary files /dev/null and b/images/scrnshots/vector-1-fs8.png differ diff --git a/images/scrnshots/vicdual-1-fs8.png b/images/scrnshots/vicdual-1-fs8.png new file mode 100644 index 00000000..884c9021 Binary files /dev/null and b/images/scrnshots/vicdual-1-fs8.png differ diff --git a/images/scrnshots/williams-1-fs8.png b/images/scrnshots/williams-1-fs8.png new file mode 100644 index 00000000..34057487 Binary files /dev/null and b/images/scrnshots/williams-1-fs8.png differ diff --git a/pixels.html b/pixels.html index 50d85cf4..432b775f 100644 --- a/pixels.html +++ b/pixels.html @@ -27,7 +27,7 @@ body {
-
+
@@ -48,8 +48,7 @@ if (window.self === window.top) { 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,count:2}; - //fmt = {w:14,h:8,bpp:4,brev:1,count:2}; + var fmt = {w:14,h:16,bpp:4,brev:1,count:128}; 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 = "$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,"; diff --git a/presets/apple2/lz4fh.a b/presets/apple2/lz4fh.a index 637c3c0f..c885609e 100644 --- a/presets/apple2/lz4fh.a +++ b/presets/apple2/lz4fh.a @@ -1,16 +1,17 @@ - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; ; -; LZ4FH uncompression for 6502 ; -; By Andy McFadden ; -; Version 1.0.1, August 2015 ; -; ; -; Refactored for size & speed ; -; by Peter Ferrie. ; -; ; -; Developed with Merlin-16 ; -; ; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +; +; LZ4FH uncompression for 6502 +; By Andy McFadden +; Version 1.0.1, August 2015 +; +; Refactored for size & speed +; by Peter Ferrie. +; +; Developed with Merlin-16 +; Ported to DASM by Steven Hugg +; Apache 2.0 license +; http://www.apache.org/licenses/LICENSE-2.0 +; processor 6502 @@ -241,7 +242,7 @@ ClrScr: rts LZDATA: - +; WORLDMAP file hex 661f7f1400002001002900b040014019 hex 0000007c000008290041030600032a00 hex 43065433002900980000403f00002603 diff --git a/presets/verilog/digits10.v b/presets/verilog/digits10.v index 21818b46..8b8b6532 100644 --- a/presets/verilog/digits10.v +++ b/presets/verilog/digits10.v @@ -85,7 +85,7 @@ module digits10_array(digit, yofs, bits); input [2:0] yofs; // vertical offset (0-4) output [4:0] bits; // output (5 bits) - reg [4:0] bitarray[0:15][0:4]; // ROM array + reg [4:0] bitarray[16][5]; // ROM array (16 x 5 x 5 bits) assign bits = bitarray[digit][yofs]; // assign module output diff --git a/src/util.ts b/src/util.ts index b6496043..aa932119 100644 --- a/src/util.ts +++ b/src/util.ts @@ -300,3 +300,10 @@ function stringToByteArray(s:string) : Uint8Array { a[i] = s.charCodeAt(i); return a; } + +function removeBOM(s:string) { + if (s.charCodeAt(0) === 0xFEFF) { + s = s.substr(1); + } + return s; +} diff --git a/src/worker/workermain.js b/src/worker/workermain.js index 69f9ee5d..faf17214 100644 --- a/src/worker/workermain.js +++ b/src/worker/workermain.js @@ -554,6 +554,7 @@ function assembleDASM(step) { var listings = {}; listings[lstpath] = {lines:listing.lines}; // parse include files + // TODO: kinda wasted effort for (var fn of step.files) { if (fn != step.path) { var lst = parseDASMListing(alst, unresolved, fn); @@ -1084,8 +1085,6 @@ function detectTopModuleName(code) { var topmod = detectModuleName(code) || "top"; var m = /\bmodule\s+(\w+?_top)/.exec(code); if (m && m[1]) topmod = m[1]; - m = /\bmodule\s+(\w+?_top)/.exec(code); - if (m && m[1]) topmod = m[1]; return topmod; }