diff --git a/.gitignore b/.gitignore index c2717a01..52ef0725 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,9 @@ *~ node_modules local -release -gen -test/output +./release +./gen +./test/output tests_output/ .DS_Store tmp - diff --git a/doc/notes.txt b/doc/notes.txt index bb4b8845..b5f5e640 100644 --- a/doc/notes.txt +++ b/doc/notes.txt @@ -190,6 +190,7 @@ TODO: https://8bitworkshop.com/v3.4.1/javatari.js/release/javatari/javatari.js (32:443651) Safari 12.1.2 - Safari: doesn't send good exception reasons ("undefined") + - probably XMLHttpRequest.timeout (https://github.com/getsentry/sentry-javascript/issues/2210) diff --git a/presets/sms-sms-libcv/mode4test.c b/presets/sms-sms-libcv/mode4test.c index f8970a0b..28ec4fa1 100644 --- a/presets/sms-sms-libcv/mode4test.c +++ b/presets/sms-sms-libcv/mode4test.c @@ -2,14 +2,19 @@ #include #include +// SMS doesn't have a BIOS +// so we have to link in a pattern table + #ifdef CV_SMS //#link "fonts.s" extern uintptr_t font_bitmap_a[]; extern uintptr_t font_bitmap_0[]; #endif +// HALT waits for a 60 Hz interrupt #define wait_vsync() __asm__("halt") +// VRAM table addresses #define PATTERN 0x0000 // 256*8 = 2048 bytes #define IMAGE 0x2000 // 32*24 = 768 bytes #define COLOR 0x0b00 // 32 bytes @@ -18,37 +23,39 @@ extern uintptr_t font_bitmap_0[]; /*{pal:222,n:16}*/ const char PALETTE0[16] = { - 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, - 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x0D, + 0x10, 0x03, 0x0B, 0x0F, 0x13, 0x17, 0x1B, 0x1F, + 0x22, 0x28, 0x2A, 0x2E, 0x30, 0x37, 0x3B, 0x3F, }; /*{pal:222,n:16}*/ const char PALETTE1[16] = { - 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, - 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x3F, + 0x10, 0x03, 0x0B, 0x0F, 0x13, 0x17, 0x1B, 0x1F, + 0x22, 0x28, 0x2A, 0x2E, 0x30, 0x37, 0x3B, 0x3F, }; /*{w:8,h:8,bpp:1,count:2,brev:1,np:4,pofs:1,sl:4}*/ const char PATTERNS[64] = { - 0x00, 0x00, 0x00, 0x00, - 0x3C, 0x3C, 0x3C, 0x3C, - 0x56, 0x7E, 0x56, 0x56, - 0x7E, 0x7E, 0x7E, 0x7E, - 0x62, 0x62, 0x62, 0x62, - 0x3C, 0x3C, 0x3C, 0x3C, - 0x18, 0x3E, 0x18, 0x3E, - 0x18, 0x7F, 0x00, 0x7F, + 0x7C, 0x1C, 0x64, 0x64, + 0xFE, 0x7E, 0xFE, 0xFE, + 0xD6, 0x7E, 0xD6, 0xD6, + 0xFE, 0x7E, 0xFE, 0xFE, + 0x66, 0xE6, 0xE6, 0xE6, + 0xBC, 0xBC, 0xBC, 0x3C, + 0x18, 0x18, 0x3E, 0x18, + 0x7F, 0x18, 0x67, 0x18, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, - 0x55, 0x66, 0x77, 0xFF, - 0xC0, 0xC0, 0xC0, 0xC0, - 0x05, 0x06, 0x07, 0x08, - 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, + 0x7D, 0x3C, 0x02, 0x3C, + 0x7D, 0x3C, 0x9A, 0x3C, + 0x7C, 0x3C, 0x83, 0x3C, + 0x7E, 0x3C, 0x81, 0x3C, + 0x3E, 0x3E, 0x00, 0x00, + 0x36, 0x36, 0x00, 0x00, + 0x36, 0x36, 0x00, 0x00, + 0x00, 0x77, 0x77, 0x77, }; +// convert a mono bitmap to 4-plane +// just copy each byte 4 times void expand_monobitmap(const char* src, int count) { while (count--) { char b = *src++; @@ -59,45 +66,51 @@ void expand_monobitmap(const char* src, int count) { } } +// set up mode 4 graphics void setup_graphics() { cv_set_screen_mode(CV_SCREENMODE_4); - cv_set_character_pattern_t(PATTERN | 0x3000); - cv_set_image_table(IMAGE | 0x400); + // set up tables + cv_set_character_pattern_t(PATTERN | 0x3000); // mask for mode 4 + cv_set_image_table(IMAGE | 0x400); // mask for mode 4 cv_set_sprite_attribute_table(SPRITES); - /* - cvu_vmemset(0, 0, 0x4000); - cv_set_colors(0x2, 0x5); - cv_set_color_table(COLOR | 0xfff); - cv_set_sprite_pattern_table(SPRITE_PATTERNS | 0x1800); - */ cv_set_write_vram_address(PATTERN + '0'*32); + // convert mono bitmap font to 4-plane in VRAM expand_monobitmap(font_bitmap_0, (128-48)*8); - cvu_memtovmemcpy(PATTERN+32, PATTERNS, 32); + // copy sprites to pattern table VRAM + cvu_memtovmemcpy(PATTERN+32, PATTERNS, sizeof(PATTERNS)); + // copy palettes to VRAM cvu_memtocmemcpy(0xc000, PALETTE0, 16); cvu_memtocmemcpy(0xc010, PALETTE1, 16); } +// image table has two bytes per cell (name + attribute) void show_text() { cvu_vmemset(IMAGE, 0, 32*28); - cvu_memtovmemcpy(IMAGE, "H e l l o P r o f e s s o r F a l k e n ", 22*2); - cv_voutb(0x01); - cv_voutb(0x00); + cvu_memtovmemcpy(IMAGE, "H e l l o W o r l d \1 ", 12*2); } void main() { char i=0; struct cvu_sprite4 sprite; + // set up mode 4 and draw initial text setup_graphics(); show_text(); + // turn on screen cv_set_screen_active(true); + // loop (once per frame) while (1) { wait_vsync(); i++; + // scroll background in two directions cv_set_hscroll(i); cv_set_vscroll(i); + // move sprite across screen sprite.y = i; sprite.x = i; sprite.name = 1; cvu_set_sprite4(SPRITES, 0, &sprite); + sprite.y += 8; + sprite.name++; + cvu_set_sprite4(SPRITES, 1, &sprite); } } diff --git a/web/images/scrnshots/apple2map.png b/web/images/scrnshots/apple2map.png new file mode 100644 index 00000000..c7ae34aa Binary files /dev/null and b/web/images/scrnshots/apple2map.png differ diff --git a/web/images/scrnshots/astrocade.png b/web/images/scrnshots/astrocade.png new file mode 100644 index 00000000..81f809aa Binary files /dev/null and b/web/images/scrnshots/astrocade.png differ diff --git a/web/images/scrnshots/atari2600-1-fs8.png b/web/images/scrnshots/atari2600-1-fs8.png new file mode 100644 index 00000000..0385bd3f Binary files /dev/null and b/web/images/scrnshots/atari2600-1-fs8.png differ diff --git a/web/images/scrnshots/atari7800.png b/web/images/scrnshots/atari7800.png new file mode 100644 index 00000000..f72878b0 Binary files /dev/null and b/web/images/scrnshots/atari7800.png differ diff --git a/web/images/scrnshots/coleco.png b/web/images/scrnshots/coleco.png new file mode 100644 index 00000000..6a0243a3 Binary files /dev/null and b/web/images/scrnshots/coleco.png differ diff --git a/web/images/scrnshots/galaxian-1-fs8.png b/web/images/scrnshots/galaxian-1-fs8.png new file mode 100644 index 00000000..c0ec3765 Binary files /dev/null and b/web/images/scrnshots/galaxian-1-fs8.png differ diff --git a/web/images/scrnshots/msx.png b/web/images/scrnshots/msx.png new file mode 100644 index 00000000..776623fb Binary files /dev/null and b/web/images/scrnshots/msx.png differ diff --git a/web/images/scrnshots/mw8080-1-fs8.png b/web/images/scrnshots/mw8080-1-fs8.png new file mode 100644 index 00000000..e38066ae Binary files /dev/null and b/web/images/scrnshots/mw8080-1-fs8.png differ diff --git a/web/images/scrnshots/nes-1-fs8.png b/web/images/scrnshots/nes-1-fs8.png new file mode 100644 index 00000000..a0ea6c63 Binary files /dev/null and b/web/images/scrnshots/nes-1-fs8.png differ diff --git a/web/images/scrnshots/scope_clockdiv2.png b/web/images/scrnshots/scope_clockdiv2.png new file mode 100644 index 00000000..6545ae2b Binary files /dev/null and b/web/images/scrnshots/scope_clockdiv2.png differ diff --git a/web/images/scrnshots/sms.png b/web/images/scrnshots/sms.png new file mode 100644 index 00000000..e86a8500 Binary files /dev/null and b/web/images/scrnshots/sms.png differ diff --git a/web/images/scrnshots/vector-1-fs8.png b/web/images/scrnshots/vector-1-fs8.png new file mode 100644 index 00000000..e0d9eac8 Binary files /dev/null and b/web/images/scrnshots/vector-1-fs8.png differ diff --git a/web/images/scrnshots/vicdual-1-fs8.png b/web/images/scrnshots/vicdual-1-fs8.png new file mode 100644 index 00000000..884c9021 Binary files /dev/null and b/web/images/scrnshots/vicdual-1-fs8.png differ diff --git a/web/images/scrnshots/williams-1-fs8.png b/web/images/scrnshots/williams-1-fs8.png new file mode 100644 index 00000000..34057487 Binary files /dev/null and b/web/images/scrnshots/williams-1-fs8.png differ