Extended write hooks and debugged sound

This commit is contained in:
Luxferre
2022-07-28 22:55:10 +03:00
parent 1d68fc8d4a
commit 61018ab06d
5 changed files with 82 additions and 30 deletions
+12 -13
View File
@@ -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;