-
+
+
+
+ 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.
+
-
+
+
+
+ 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.
+
-
+
+
+
+ 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 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'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.
+
+
+
+
+
+ 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;
}