1
0
mirror of https://github.com/sehugg/8bitworkshop.git synced 2024-12-22 12:30:01 +00:00

added CV alt. rom to romsrc/

This commit is contained in:
Steven Hugg 2017-11-10 11:16:28 -05:00
parent 041a0a056c
commit 07a0f97245
6 changed files with 231 additions and 0 deletions

28
emsrc/cc65/Makefile.local Normal file
View File

@ -0,0 +1,28 @@
%.js: bin/%.bc
emcc -O2 --memory-init-file 0 \
-s ASM_JS=1 \
-s MODULARIZE=1 \
-s EXPORT_NAME=\"'$*'\" \
-s 'EXTRA_EXPORTED_RUNTIME_METHODS=["FS"]' \
-s FORCE_FILESYSTEM=1 \
bin/$*.bc -o $@ $(ARGS_$*)
bin/%.bc:
mkdir -p bin js
emmake make $*
cp bin/$*.exe bin/$*.bc
emscripten: include asminc cfg lib/apple2.lib target/apple2
cp -rp src Makefile js
make -C js cc65.js ca65.js co65.js ld65.js
fs65.js:
python $(EMSCRIPTEN)/tools/file_packager.py fs65.data \
--preload include asminc cfg \
lib/apple2.lib target/apple2 \
lib/nes.lib target/nes \
neslib/nes.cfg@cfg/neslib.cfg \
neslib/neslib.lib@lib/neslib.lib \
neslib/neslib.h@include/neslib.h \
--separate-metadata --js-output=fs65.js

3
emsrc/cc65/build.sh Executable file
View File

@ -0,0 +1,3 @@
#!/bin/sh
emmake make -f Makefile.local CC=emcc

0
mame/roms/coleco/313 10031-4005 73108a.u2 Executable file → Normal file
View File

195
presets/coleco/frogs.c Normal file
View File

@ -0,0 +1,195 @@
#include <stdlib.h>
#include <string.h>
#include "cv.h"
#include "cvu.h"
#define SPRITE_PATTERNS ((const cv_vmemp)0x3800)
#define SPRITES ((const cv_vmemp)0x3c00)
typedef unsigned char byte;
typedef signed char sbyte;
typedef unsigned short word;
uintptr_t __at(0x6a) font_bitmap_a;
uintptr_t __at(0x6c) font_bitmap_0;
volatile bool vint;
volatile uint_fast8_t vint_counter;
void vint_handler(void)
{
vint = true;
vint_counter++;
}
#define NUM_SPRITE_PATTERNS 5
const byte sprite_table[NUM_SPRITE_PATTERNS][16*2] = {
/*{w:16,h:16,remap:[4,0,1,2,3,5,6,7,8,9],brev:1,count:4}*/
{ // first plane
0x00, 0x00, 0x00, 0x02, 0x01, 0x06, 0x01, 0x07,
0x1F, 0x7F, 0xFF, 0xEF, 0xF3, 0x7C, 0x3E, 0x2A,
0x00, 0x00, 0x80, 0x80, 0x70, 0xF8, 0xEC, 0xFE,
0xC0, 0xFC, 0xFE, 0xEF, 0xDE, 0xDC, 0x3C, 0x2A,
},{
0x02, 0x01, 0x06, 0x02, 0x19, 0x07, 0x0F, 0x1F,
0x3F, 0x7F, 0x77, 0x73, 0x30, 0x38, 0x3E, 0x2A,
0x38, 0x6C, 0xFE, 0xFE, 0x80, 0xEF, 0xF0, 0xFC,
0xC0, 0xFC, 0xFE, 0xCE, 0x1C, 0x18, 0x3C, 0x2A,
},{
0x04, 0xC5, 0xA2, 0x51, 0x2A, 0x17, 0x0E, 0x1B,
0x64, 0x89, 0x90, 0x61, 0x00, 0x01, 0x00, 0x00,
0x20, 0xA3, 0x45, 0x8A, 0x54, 0xF8, 0x60, 0xD8,
0xA6, 0x11, 0x89, 0x06, 0x80, 0x00, 0x80, 0x00,
},{
0x04, 0x05, 0x02, 0xE1, 0xDA, 0x3F, 0x06, 0x7B,
0x8E, 0x91, 0x60, 0x01, 0x00, 0x01, 0x00, 0x00,
0x20, 0xA0, 0x40, 0x87, 0x5B, 0xFC, 0x70, 0xEE,
0xF1, 0x09, 0x86, 0x00, 0x80, 0x00, 0x80, 0x00,
}
};
///
const unsigned char reverse_lookup[16] = {
0x0, 0x8, 0x4, 0xc, 0x2, 0xa, 0x6, 0xe, 0x1, 0x9, 0x5, 0xd, 0x3, 0xb, 0x7, 0xf, };
byte reverse_bits(byte n) {
return (reverse_lookup[n&0b1111] << 4) | reverse_lookup[n>>4];
}
void flip_sprite_patterns(word dest, const byte* patterns, word len) {
word i;
for (i=0; i<len; i++) {
cvu_voutb(reverse_bits(*patterns++), dest++ ^ 16); // swap left/right chars
}
}
#define BGCOL CV_COLOR_BLUE
void setup_32_column_font() {
cvu_vmemset(0, 0, 0x4000); // clear video memory
cv_set_screen_mode(CV_SCREENMODE_STANDARD);
cvu_memtovmemcpy(SPRITE_PATTERNS, sprite_table, sizeof(sprite_table));
flip_sprite_patterns(SPRITE_PATTERNS + 512, (const byte*)sprite_table, sizeof(sprite_table));
cv_set_sprite_pattern_table(SPRITE_PATTERNS);
cv_set_sprite_attribute_table(SPRITES);
cv_set_sprite_big(true);
cvu_vmemset(SPRITES, 0xfc, 4*32); // to prevent spurious collisions
}
void wait_vsync() {
vint = false;
while (!vint) ;
}
void delay(byte i) {
while (i--) {
wait_vsync();
}
}
#define Y_CEILING 32
#define Y_FLOOR 160
#define JUMP_SPEED 4
struct cvu_sprite player;
sbyte player_jump;
byte player_dir;
struct cvu_sprite bug;
byte bug_dir;
void draw_sprites() {
if (player_jump)
player.name = 4;
else
player.name = 0;
if (!player_dir) player.name += 64;
cvu_set_sprite(SPRITES, 0, &player);
bug.name = (bug.x & 1) ? 8 : 12;
cvu_set_sprite(SPRITES, 1, &bug);
}
void move_player() {
struct cv_controller_state ctrl;
cv_get_controller_state(&ctrl, 0);
if (ctrl.joystick & CV_LEFT) {
player.x--;
player_dir = 0;
}
if (ctrl.joystick & CV_RIGHT) {
player.x++;
player_dir = 1;
}
if ((ctrl.joystick & CV_UP) && !player_jump) {
player_jump = -JUMP_SPEED;
}
// are we jumping?
if (player_jump) {
player.y += player_jump;
// when we hit the top of jump, bounce down
if (player.y <= Y_CEILING)
player_jump = JUMP_SPEED;
// stop when we hit the ground
if (player.y >= Y_FLOOR)
player_jump = 0;
}
}
void move_bug() {
bug.x += bug_dir;
}
void place_new_bug() {
bug.y = (rand() & 0x3f) + Y_CEILING;
if (rand() & 1) {
bug.x = 0;
bug_dir = 1;
} else {
bug.x = 255;
bug_dir = -1;
}
}
void check_collision() {
if (cv_get_sprite_collission()) {
place_new_bug();
player_jump = 2; // settle back down
}
}
void play_scene() {
while (1) {
wait_vsync();
draw_sprites();
move_player();
move_bug();
check_collision();
}
}
void init_sprites() {
player.x = 128;
player.y = Y_FLOOR;
player.tag = CV_COLOR_GREEN;
player_jump = 0;
player_dir = 0;
bug.tag = CV_COLOR_BLUE;
place_new_bug();
}
void main() {
setup_32_column_font();
cv_set_screen_active(true);
cv_set_vint_handler(&vint_handler);
init_sprites();
play_scene();
}

View File

@ -1,5 +1,10 @@
all: minbios.rom
mkdir -p ../../mame/roms/coleco
cp $< ../../mame/roms/coleco/"313 10031-4005 73108a.u2"
clean:
rm -f minbios.rom
%.rom: %.asm
naken_asm -b $<