--- a/src/sb16.js +++ b/src/sb16.js @@ -187 +187,2 @@ - this.fm_waveform_select_enable = false; + this.fm_status = 0xFF; + this.fm_waveform_select_enable = [false, false]; @@ -247,0 +249,4 @@ + bus.register("opl-status", function(status) + { + this.fm_status = status; + }, this); @@ -302,0 +307 @@ + this.bus.send("opl-reset"); @@ -433,2 +438,3 @@ - dbg_log("220 read: fm music status port (unimplemented)", LOG_SB16); - return 0xFF; + dbg_log("220 read: fm music status port", LOG_SB16); + this.bus.send("opl-status-request", 0); + return this.fm_status; @@ -445,2 +451,3 @@ - dbg_log("222 read: advanced fm music status port (unimplemented)", LOG_SB16); - return 0xFF; + dbg_log("222 read: advanced fm music status port", LOG_SB16); + this.bus.send("opl-status-request", 0); + return this.fm_status; @@ -553,2 +561,3 @@ - dbg_log("220 write: (unimplemented) fm register 0 address = " + h(value), LOG_SB16); - this.fm_current_address0 = 0; + dbg_log("220 write: fm register 0 address = " + h(value), LOG_SB16); + this.fm_current_address0 = value; + this.bus.send("opl-write", [0, value]); @@ -560 +569,2 @@ - dbg_log("221 write: (unimplemented) fm register 0 data = " + h(value), LOG_SB16); + dbg_log("221 write: fm register 0 data = " + h(value), LOG_SB16); + this.bus.send("opl-write", [1, value]); @@ -572,2 +582,3 @@ - dbg_log("222 write: (unimplemented) fm register 1 address = " + h(value), LOG_SB16); - this.fm_current_address1 = 0; + dbg_log("222 write: fm register 1 address = " + h(value), LOG_SB16); + this.fm_current_address1 = value; + this.bus.send("opl-write", [2, value]); @@ -579 +590,2 @@ - dbg_log("223 write: (unimplemented) fm register 1 data =" + h(value), LOG_SB16); + dbg_log("223 write: fm register 1 data =" + h(value), LOG_SB16); + this.bus.send("opl-write", [3, value]); @@ -631 +643,2 @@ - dbg_log("228 write: fm music register port (unimplemented)", LOG_SB16); + dbg_log("228 write: fm music register port", LOG_SB16); + this.port2x0_write(value); @@ -636 +649,2 @@ - dbg_log("229 write: fm music data port (unimplemented)", LOG_SB16); + dbg_log("229 write: fm music data port", LOG_SB16); + this.port2x1_write(value);