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

updated sms i/o mask, multicolor preset

This commit is contained in:
Steven Hugg 2018-11-30 08:54:50 -05:00
parent b397406f45
commit 6e41dcd6c2
3 changed files with 31 additions and 91 deletions

View File

@ -1,4 +1,4 @@

#include <stdlib.h> #include <stdlib.h>
#include <cv.h> #include <cv.h>
#include <cvu.h> #include <cvu.h>
@ -35,7 +35,10 @@ typedef void SetPixelFunc(byte x, byte y, byte color);
void set_pixel(byte x, byte y, byte color) { void set_pixel(byte x, byte y, byte color) {
word pg = (x>>1)*8 + (y & 7) + (y & ~7)*32 + PATTERN; word pg = (x>>1)*8 + (y & 7) + (y & ~7)*32 + PATTERN;
byte b = cvu_vinb(pg); byte b = cvu_vinb(pg);
b |= (x & 1) ? color : color<<4; if (x&1)
b = color | (b & 0xf0);
else
b = (color<<4) | (b & 0xf);
cvu_voutb(b, pg); cvu_voutb(b, pg);
} }
@ -45,54 +48,27 @@ void set_two_pixels(byte x, byte y, byte leftcolor, byte rightcolor) {
cvu_voutb(b, pg); cvu_voutb(b, pg);
} }
void draw_line(sbyte x0, sbyte y0, sbyte x1, sbyte y1, byte color) void draw_line(int x0, int y0, int x1, int y1, byte color) {
{ int dx = abs(x1-x0);
int dx, dy, p, x, y; int sx = x0<x1 ? 1 : -1;
dx=x1-x0; int dy = abs(y1-y0);
dy=y1-y0; int sy = y0<y1 ? 1 : -1;
x=x0; int err = (dx>dy ? dx : -dy)>>1;
y=y0; int e2;
p=2*dy-dx; for(;;) {
while(x<x1) set_pixel(x0, y0, color);
{ if (x0==x1 && y0==y1) break;
if(p>=0) e2 = err;
{ if (e2 > -dx) { err -= dy; x0 += sx; }
set_pixel(x,y,color); if (e2 < dy) { err += dx; y0 += sy; }
y=y+1; }
p=p+2*dy-2*dx;
}
else
{
set_pixel(x,y,color);
p=p+2*dy;
}
x=x+1;
}
} }
void main() { void main() {
setup_multicolor(); setup_multicolor();
set_pixel(0, 0, 4);
set_pixel(1, 0, 4);
set_pixel(COLS-1, 0, 4);
set_pixel(0, 1, 6);
set_pixel(0, 2, 6);
set_pixel(0, 3, 6);
set_pixel(1, 4, 4);
set_pixel(2, 6, 5);
set_pixel(4, 7, 5);
set_pixel(7, 7, 5);
set_pixel(8, 8, 5);
draw_line(0, 0, COLS-1, ROWS-1, 2);
draw_line(COLS-1, 0, 0, ROWS-1, 3);
cv_set_screen_active(true); cv_set_screen_active(true);
{ while(1) {
for (int y=0; y<ROWS; y++) { draw_line(rand()%64, rand()%48, rand()%64, rand()%48, rand()&15);
for (int x=0; x<COLS; x+=2) {
//set_pixel(x, y, rand());
set_two_pixels(x, y, rand(), rand());
}
}
} }
while (1); while (1);
} }

View File

@ -84,11 +84,11 @@ const _SG1000Platform = function(mainElement) {
read: function(addr) { read: function(addr) {
addr &= 0xff; addr &= 0xff;
//console.log('IO read', hex(addr,4)); //console.log('IO read', hex(addr,4));
switch (addr) { switch (addr & 0xc1) {
case 0xbe: return vdp.readData(); case 0x80: return vdp.readData();
case 0xbf: return vdp.readStatus(); case 0x81: return vdp.readStatus();
case 0xc0: case 0xdc: return inputs[0] ^ 0xff; case 0xc0: return inputs[0] ^ 0xff;
case 0xc1: case 0xdd: return inputs[1] ^ 0xff; case 0xc1: return inputs[1] ^ 0xff;
} }
return 0; return 0;
}, },
@ -96,10 +96,11 @@ const _SG1000Platform = function(mainElement) {
addr &= 0xff; addr &= 0xff;
val &= 0xff; val &= 0xff;
//console.log('IO write', hex(addr,4), hex(val,2)); //console.log('IO write', hex(addr,4), hex(val,2));
switch (addr) { switch (addr & 0xc1) {
case 0xbe: return vdp.writeData(val); case 0x80: return vdp.writeData(val);
case 0xbf: return vdp.writeAddress(val); case 0x81: return vdp.writeAddress(val);
case 0x7e: case 0x7f: return psg.setData(val); case 0x40:
case 0x41: return psg.setData(val);
} }
} }
}; };

View File

@ -30,43 +30,6 @@ var OldFileStore = function(storage, prefix:string) {
} }
} }
/*
// localforage-compatible driver for old file store format
var OldFileStoreDriver = {
_driver: 'oldFileStoreDriver',
_initStorage: function(options) {
this._store = new OldFileStore(localStorage, options.name + '/');
},
clear: function(callback) {
// Custom implementation here...
},
getItem: function(key, callback) {
callback(null, this._store.loadFile(key));
},
iterate: function(iteratorCallback, successCallback) {
// Custom implementation here...
},
key: function(n, callback) {
// Custom implementation here...
},
keys: function(callback) {
callback(this._store.getFiles(''));
},
length: function(callback) {
callback(this._store.getFiles('').length);
},
removeItem: function(key, callback) {
this._store.deleteFile(key);
callback();
},
setItem: function(key, value, callback) {
this._store.saveFile(key, value);
callback();
}
}
localforage.defineDriver(OldFileStoreDriver);
*/
// copy localStorage to new driver // copy localStorage to new driver
function copyFromOldStorageFormat(platformid:string, newstore, conversioncallback:()=>void) { function copyFromOldStorageFormat(platformid:string, newstore, conversioncallback:()=>void) {
var alreadyMigratedKey = "__migrated_" + platformid; var alreadyMigratedKey = "__migrated_" + platformid;