Extended write hooks and debugged sound
This commit is contained in:
+12
-13
@@ -26,14 +26,9 @@ function UxnCore() {
|
||||
//helper methods
|
||||
|
||||
function trapout(errcode) { //error reporting with vector execution
|
||||
var vec = (mem.dev[0] << 8) | mem.dev[1]
|
||||
if(vec)
|
||||
uxnstart(vec)
|
||||
else {
|
||||
console.error('Error code: '+errcode+' at instruction #'+pc)
|
||||
console.log('Working stack: ', mem.wst.dat)
|
||||
console.log('Return stack: ', mem.rst.dat)
|
||||
}
|
||||
console.error('Error code: '+errcode+' at instruction #'+pc)
|
||||
console.log('Working stack: ', mem.wst.dat)
|
||||
console.log('Return stack: ', mem.rst.dat)
|
||||
pc = 0
|
||||
}
|
||||
|
||||
@@ -60,18 +55,22 @@ function UxnCore() {
|
||||
function PEEK(x) {return bs ? PEEK16(x) : mem.ram[x]}
|
||||
function DEVR(x) {if(x in devReadHooks) devReadHooks[x]();return bs ? (mem.dev[x] << 8)|mem.dev[x+1] : mem.dev[x]}
|
||||
function DEVW(x, y) {
|
||||
var p, p2
|
||||
if(bs) {
|
||||
p = mem.dev[x]
|
||||
p2 = mem.dev[x+1]
|
||||
mem.dev[x] = y>>8
|
||||
if(x in devWriteHooks)
|
||||
devWriteHooks[x](x, mem.dev[x])
|
||||
devWriteHooks[x](x, mem.dev[x], p)
|
||||
mem.dev[x+1] = y&255
|
||||
if((x+1) in devWriteHooks)
|
||||
devWriteHooks[x+1](x+1, mem.dev[x+1])
|
||||
devWriteHooks[x+1](x+1, mem.dev[x+1], p2)
|
||||
}
|
||||
else {
|
||||
p = mem.dev[x]
|
||||
mem.dev[x] = y
|
||||
if(x in devWriteHooks)
|
||||
devWriteHooks[x](x, y)
|
||||
devWriteHooks[x](x, y, p)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,7 +79,7 @@ function UxnCore() {
|
||||
function uxnstart(startaddr, vmTrace) {
|
||||
pc = startaddr & 65535
|
||||
var instr, src, dst, a, b, c, tmpTrace = !!vmTrace
|
||||
if(!pc || mem.dev[0x0f]) {
|
||||
if(!pc) {
|
||||
this.active = false
|
||||
return 0
|
||||
}
|
||||
@@ -132,7 +131,7 @@ function UxnCore() {
|
||||
case 0x18: /* ADD */ a = POP(src); b = POP(src); PUSH(src, b + a); break;
|
||||
case 0x19: /* SUB */ a = POP(src); b = POP(src); PUSH(src, b - a); break;
|
||||
case 0x1a: /* MUL */ a = POP(src); b = POP(src); PUSH(src, b * a); break;
|
||||
case 0x1b: /* DIV */ a = POP(src); b = POP(src); if(!a) trapout(3); PUSH(src, b / a); break;
|
||||
case 0x1b: /* DIV */ a = POP(src); b = POP(src); if(!a) trapout(3); PUSH(src, 0|(b / a)); break;
|
||||
case 0x1c: /* AND */ a = POP(src); b = POP(src); PUSH(src, b & a); break;
|
||||
case 0x1d: /* ORA */ a = POP(src); b = POP(src); PUSH(src, b | a); break;
|
||||
case 0x1e: /* EOR */ a = POP(src); b = POP(src); PUSH(src, b ^ a); break;
|
||||
|
||||
Reference in New Issue
Block a user