diff --git a/README.md b/README.md
index 8a5846cccf70b2f96558bbddd8474b2b66ac4825..fb0e7965bcb562226953fd79b9123c9d676445a0 100644
--- a/README.md
+++ b/README.md
@@ -45,7 +45,7 @@ python3 -m http.server
 
 And... yes this is the real inspiration behind the emulator's name:
 
-<img src="resources/chips-ahoy.jpeg" alt="Chips Ahoy" width="200" />
+<img src="res/chips-ahoy.jpeg" alt="Chips Ahoy" width="200" />
 
 ## Inspiration
 
diff --git a/examples/benchmark/resources/pong.ch8 b/examples/benchmark/res/pong.ch8
similarity index 100%
rename from examples/benchmark/resources/pong.ch8
rename to examples/benchmark/res/pong.ch8
diff --git a/examples/benchmark/src/main.rs b/examples/benchmark/src/main.rs
index 5dfefe1a37c319b7fbdfe27610f630b3d0ab5283..cb5c7d1274d6cb45b505f807905d72981e697853 100644
--- a/examples/benchmark/src/main.rs
+++ b/examples/benchmark/src/main.rs
@@ -8,7 +8,7 @@ const CYCLE_COUNT: u64 = 5_000_000_000;
 fn main() {
     let chips: [Box<dyn Chip8>; 2] = [Box::new(Chip8Classic::new()), Box::new(Chip8Neo::new())];
 
-    let rom_path = "./resources/pong.ch8";
+    let rom_path = "./res/pong.ch8";
     let rom = read_file(rom_path);
 
     for mut chip8 in chips {
diff --git a/examples/sdl/resources/OpenSans-Bold.ttf b/examples/sdl/res/OpenSans-Bold.ttf
similarity index 100%
rename from examples/sdl/resources/OpenSans-Bold.ttf
rename to examples/sdl/res/OpenSans-Bold.ttf
diff --git a/examples/sdl/resources/Roboto-Bold.ttf b/examples/sdl/res/Roboto-Bold.ttf
similarity index 100%
rename from examples/sdl/resources/Roboto-Bold.ttf
rename to examples/sdl/res/Roboto-Bold.ttf
diff --git a/examples/sdl/resources/RobotoMono-Bold.ttf b/examples/sdl/res/RobotoMono-Bold.ttf
similarity index 100%
rename from examples/sdl/resources/RobotoMono-Bold.ttf
rename to examples/sdl/res/RobotoMono-Bold.ttf
diff --git a/examples/sdl/resources/VT323-Regular.ttf b/examples/sdl/res/VT323-Regular.ttf
similarity index 100%
rename from examples/sdl/resources/VT323-Regular.ttf
rename to examples/sdl/res/VT323-Regular.ttf
diff --git a/examples/sdl/resources/icon.png b/examples/sdl/res/icon.png
similarity index 100%
rename from examples/sdl/resources/icon.png
rename to examples/sdl/res/icon.png
diff --git a/examples/sdl/src/main.rs b/examples/sdl/src/main.rs
index fee2d737401c60acce335b379f0c85347576e504..88257adf63a6be9cdd869b49bbfc6df3a1e2820f 100644
--- a/examples/sdl/src/main.rs
+++ b/examples/sdl/src/main.rs
@@ -160,7 +160,7 @@ fn main() {
     // loads the font that is going to be used in the drawing
     // process cycle if necessary
     let mut font = ttf_context
-        .load_font(format!("./resources/{}", FONT_NAME), FONT_SIZE)
+        .load_font(format!("./res/{}", FONT_NAME), FONT_SIZE)
         .unwrap();
     font.set_style(sdl2::ttf::FontStyle::BOLD);
     font.set_hinting(Hinting::Light);
@@ -181,7 +181,7 @@ fn main() {
 
     // updates the icon of the window to reflect the image
     // and style of the emulator
-    let surface = Surface::from_file("./resources/icon.png").unwrap();
+    let surface = Surface::from_file("./res/icon.png").unwrap();
     window.set_icon(&surface);
 
     let mut canvas = window.into_canvas().accelerated().build().unwrap();
diff --git a/examples/web/chip_ahoyto.d.ts b/examples/web/chip_ahoyto.d.ts
index f8874e8f2084f3913c19ce763be8d86303dcf0b4..f7ec932319bfaa08932b3ae56c837cdccee942d8 100644
--- a/examples/web/chip_ahoyto.d.ts
+++ b/examples/web/chip_ahoyto.d.ts
@@ -32,14 +32,18 @@ export class Chip8Neo {
 /**
 */
   clock_ws(): void;
+/**
+*/
+  clock_dt_ws(): void;
+/**
+*/
+  clock_st_ws(): void;
 }
 
 export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;
 
 export interface InitOutput {
   readonly memory: WebAssembly.Memory;
-  readonly __wbg_chip8classic_free: (a: number) => void;
-  readonly chip8classic_new: () => number;
   readonly __wbg_chip8neo_free: (a: number) => void;
   readonly chip8neo_new: () => number;
   readonly chip8neo_load_rom_ws: (a: number, b: number, c: number) => void;
@@ -47,6 +51,10 @@ export interface InitOutput {
   readonly chip8neo_reset_hard_ws: (a: number) => void;
   readonly chip8neo_vram_ws: (a: number, b: number) => void;
   readonly chip8neo_clock_ws: (a: number) => void;
+  readonly chip8neo_clock_dt_ws: (a: number) => void;
+  readonly chip8neo_clock_st_ws: (a: number) => void;
+  readonly __wbg_chip8classic_free: (a: number) => void;
+  readonly chip8classic_new: () => number;
   readonly __wbindgen_malloc: (a: number) => number;
   readonly __wbindgen_add_to_stack_pointer: (a: number) => number;
   readonly __wbindgen_free: (a: number, b: number) => void;
diff --git a/examples/web/chip_ahoyto.js b/examples/web/chip_ahoyto.js
index a1dfc0901badade7479d9329847a6eed07de7d37..f66794cc02fdde22d7e4adba7c682f0f046c8971 100644
--- a/examples/web/chip_ahoyto.js
+++ b/examples/web/chip_ahoyto.js
@@ -7,25 +7,8 @@ heap.push(undefined, null, true, false);
 
 function getObject(idx) { return heap[idx]; }
 
-function _assertBoolean(n) {
-    if (typeof(n) !== 'boolean') {
-        throw new Error('expected a boolean argument');
-    }
-}
-
 let heap_next = heap.length;
 
-function addHeapObject(obj) {
-    if (heap_next === heap.length) heap.push(heap.length + 1);
-    const idx = heap_next;
-    heap_next = heap[idx];
-
-    if (typeof(heap_next) !== 'number') throw new Error('corrupt heap');
-
-    heap[idx] = obj;
-    return idx;
-}
-
 function dropObject(idx) {
     if (idx < 36) return;
     heap[idx] = heap_next;
@@ -38,6 +21,15 @@ function takeObject(idx) {
     return ret;
 }
 
+function addHeapObject(obj) {
+    if (heap_next === heap.length) heap.push(heap.length + 1);
+    const idx = heap_next;
+    heap_next = heap[idx];
+
+    heap[idx] = obj;
+    return idx;
+}
+
 const cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
 
 cachedTextDecoder.decode();
@@ -54,10 +46,6 @@ function getStringFromWasm0(ptr, len) {
     return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));
 }
 
-function _assertNum(n) {
-    if (typeof(n) !== 'number') throw new Error('expected a number argument');
-}
-
 let WASM_VECTOR_LEN = 0;
 
 function passArray8ToWasm0(arg, malloc) {
@@ -79,22 +67,6 @@ function getArrayU8FromWasm0(ptr, len) {
     return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);
 }
 
-function logError(f, args) {
-    try {
-        return f.apply(this, args);
-    } catch (e) {
-        let error = (function () {
-            try {
-                return e instanceof Error ? `${e.message}\n\nStack:\n${e.stack}` : e.toString();
-            } catch(_) {
-                return "<failed to stringify thrown value>";
-            }
-        }());
-        console.error("wasm-bindgen: imported JS function that was not marked as `catch` threw an error:", error);
-        throw e;
-    }
-}
-
 function handleError(f, args) {
     try {
         return f.apply(this, args);
@@ -163,8 +135,6 @@ export class Chip8Neo {
     * @param {Uint8Array} rom
     */
     load_rom_ws(rom) {
-        if (this.ptr == 0) throw new Error('Attempt to use a moved value');
-        _assertNum(this.ptr);
         const ptr0 = passArray8ToWasm0(rom, wasm.__wbindgen_malloc);
         const len0 = WASM_VECTOR_LEN;
         wasm.chip8neo_load_rom_ws(this.ptr, ptr0, len0);
@@ -172,15 +142,11 @@ export class Chip8Neo {
     /**
     */
     reset_ws() {
-        if (this.ptr == 0) throw new Error('Attempt to use a moved value');
-        _assertNum(this.ptr);
         wasm.chip8neo_reset_ws(this.ptr);
     }
     /**
     */
     reset_hard_ws() {
-        if (this.ptr == 0) throw new Error('Attempt to use a moved value');
-        _assertNum(this.ptr);
         wasm.chip8neo_reset_hard_ws(this.ptr);
     }
     /**
@@ -188,9 +154,7 @@ export class Chip8Neo {
     */
     vram_ws() {
         try {
-            if (this.ptr == 0) throw new Error('Attempt to use a moved value');
             const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
-            _assertNum(this.ptr);
             wasm.chip8neo_vram_ws(retptr, this.ptr);
             var r0 = getInt32Memory0()[retptr / 4 + 0];
             var r1 = getInt32Memory0()[retptr / 4 + 1];
@@ -204,10 +168,18 @@ export class Chip8Neo {
     /**
     */
     clock_ws() {
-        if (this.ptr == 0) throw new Error('Attempt to use a moved value');
-        _assertNum(this.ptr);
         wasm.chip8neo_clock_ws(this.ptr);
     }
+    /**
+    */
+    clock_dt_ws() {
+        wasm.chip8neo_clock_dt_ws(this.ptr);
+    }
+    /**
+    */
+    clock_st_ws() {
+        wasm.chip8neo_clock_st_ws(this.ptr);
+    }
 }
 
 async function load(module, imports) {
@@ -244,63 +216,64 @@ async function load(module, imports) {
 function getImports() {
     const imports = {};
     imports.wbg = {};
-    imports.wbg.__wbg_msCrypto_5a86d77a66230f81 = function() { return logError(function (arg0) {
-        const ret = getObject(arg0).msCrypto;
-        return addHeapObject(ret);
-    }, arguments) };
-    imports.wbg.__wbg_crypto_b95d7173266618a9 = function() { return logError(function (arg0) {
-        const ret = getObject(arg0).crypto;
-        return addHeapObject(ret);
+    imports.wbg.__wbg_randomFillSync_91e2b39becca6147 = function() { return handleError(function (arg0, arg1, arg2) {
+        getObject(arg0).randomFillSync(getArrayU8FromWasm0(arg1, arg2));
     }, arguments) };
+    imports.wbg.__wbindgen_object_drop_ref = function(arg0) {
+        takeObject(arg0);
+    };
     imports.wbg.__wbg_getRandomValues_b14734aa289bc356 = function() { return handleError(function (arg0, arg1) {
         getObject(arg0).getRandomValues(getObject(arg1));
     }, arguments) };
-    imports.wbg.__wbg_static_accessor_NODE_MODULE_26b231378c1be7dd = function() { return logError(function () {
-        const ret = module;
-        return addHeapObject(ret);
-    }, arguments) };
-    imports.wbg.__wbg_require_0db1598d9ccecb30 = function() { return handleError(function (arg0, arg1, arg2) {
-        const ret = getObject(arg0).require(getStringFromWasm0(arg1, arg2));
-        return addHeapObject(ret);
-    }, arguments) };
-    imports.wbg.__wbg_randomFillSync_91e2b39becca6147 = function() { return handleError(function (arg0, arg1, arg2) {
-        getObject(arg0).randomFillSync(getArrayU8FromWasm0(arg1, arg2));
-    }, arguments) };
-    imports.wbg.__wbg_process_e56fd54cf6319b6c = function() { return logError(function (arg0) {
+    imports.wbg.__wbg_process_e56fd54cf6319b6c = function(arg0) {
         const ret = getObject(arg0).process;
         return addHeapObject(ret);
-    }, arguments) };
-    imports.wbg.__wbg_versions_77e21455908dad33 = function() { return logError(function (arg0) {
-        const ret = getObject(arg0).versions;
-        return addHeapObject(ret);
-    }, arguments) };
-    imports.wbg.__wbg_node_0dd25d832e4785d5 = function() { return logError(function (arg0) {
-        const ret = getObject(arg0).node;
-        return addHeapObject(ret);
-    }, arguments) };
+    };
     imports.wbg.__wbindgen_is_object = function(arg0) {
         const val = getObject(arg0);
         const ret = typeof(val) === 'object' && val !== null;
-        _assertBoolean(ret);
         return ret;
     };
+    imports.wbg.__wbg_versions_77e21455908dad33 = function(arg0) {
+        const ret = getObject(arg0).versions;
+        return addHeapObject(ret);
+    };
+    imports.wbg.__wbg_node_0dd25d832e4785d5 = function(arg0) {
+        const ret = getObject(arg0).node;
+        return addHeapObject(ret);
+    };
     imports.wbg.__wbindgen_is_string = function(arg0) {
         const ret = typeof(getObject(arg0)) === 'string';
-        _assertBoolean(ret);
         return ret;
     };
-    imports.wbg.__wbg_newnoargs_fc5356289219b93b = function() { return logError(function (arg0, arg1) {
-        const ret = new Function(getStringFromWasm0(arg0, arg1));
+    imports.wbg.__wbg_static_accessor_NODE_MODULE_26b231378c1be7dd = function() {
+        const ret = module;
+        return addHeapObject(ret);
+    };
+    imports.wbg.__wbg_require_0db1598d9ccecb30 = function() { return handleError(function (arg0, arg1, arg2) {
+        const ret = getObject(arg0).require(getStringFromWasm0(arg1, arg2));
         return addHeapObject(ret);
     }, arguments) };
+    imports.wbg.__wbg_crypto_b95d7173266618a9 = function(arg0) {
+        const ret = getObject(arg0).crypto;
+        return addHeapObject(ret);
+    };
+    imports.wbg.__wbg_msCrypto_5a86d77a66230f81 = function(arg0) {
+        const ret = getObject(arg0).msCrypto;
+        return addHeapObject(ret);
+    };
+    imports.wbg.__wbg_newnoargs_fc5356289219b93b = function(arg0, arg1) {
+        const ret = new Function(getStringFromWasm0(arg0, arg1));
+        return addHeapObject(ret);
+    };
     imports.wbg.__wbg_call_4573f605ca4b5f10 = function() { return handleError(function (arg0, arg1) {
         const ret = getObject(arg0).call(getObject(arg1));
         return addHeapObject(ret);
     }, arguments) };
-    imports.wbg.__wbg_globalThis_56d9c9f814daeeee = function() { return handleError(function () {
-        const ret = globalThis.globalThis;
+    imports.wbg.__wbindgen_object_clone_ref = function(arg0) {
+        const ret = getObject(arg0);
         return addHeapObject(ret);
-    }, arguments) };
+    };
     imports.wbg.__wbg_self_ba1ddafe9ea7a3a2 = function() { return handleError(function () {
         const ret = self.self;
         return addHeapObject(ret);
@@ -309,46 +282,41 @@ function getImports() {
         const ret = window.window;
         return addHeapObject(ret);
     }, arguments) };
-    imports.wbg.__wbg_global_8c35aeee4ac77f2b = function() { return handleError(function () {
-        const ret = global.global;
-        return addHeapObject(ret);
-    }, arguments) };
-    imports.wbg.__wbg_new_97cf52648830a70d = function() { return logError(function (arg0) {
-        const ret = new Uint8Array(getObject(arg0));
-        return addHeapObject(ret);
-    }, arguments) };
-    imports.wbg.__wbg_newwithlength_e833b89f9db02732 = function() { return logError(function (arg0) {
-        const ret = new Uint8Array(arg0 >>> 0);
+    imports.wbg.__wbg_globalThis_56d9c9f814daeeee = function() { return handleError(function () {
+        const ret = globalThis.globalThis;
         return addHeapObject(ret);
     }, arguments) };
-    imports.wbg.__wbg_subarray_9482ae5cd5cd99d3 = function() { return logError(function (arg0, arg1, arg2) {
-        const ret = getObject(arg0).subarray(arg1 >>> 0, arg2 >>> 0);
+    imports.wbg.__wbg_global_8c35aeee4ac77f2b = function() { return handleError(function () {
+        const ret = global.global;
         return addHeapObject(ret);
     }, arguments) };
-    imports.wbg.__wbg_length_e09c0b925ab8de5d = function() { return logError(function (arg0) {
-        const ret = getObject(arg0).length;
-        _assertNum(ret);
-        return ret;
-    }, arguments) };
-    imports.wbg.__wbg_set_a0172b213e2469e9 = function() { return logError(function (arg0, arg1, arg2) {
-        getObject(arg0).set(getObject(arg1), arg2 >>> 0);
-    }, arguments) };
     imports.wbg.__wbindgen_is_undefined = function(arg0) {
         const ret = getObject(arg0) === undefined;
-        _assertBoolean(ret);
         return ret;
     };
-    imports.wbg.__wbindgen_object_clone_ref = function(arg0) {
-        const ret = getObject(arg0);
+    imports.wbg.__wbg_buffer_de1150f91b23aa89 = function(arg0) {
+        const ret = getObject(arg0).buffer;
         return addHeapObject(ret);
     };
-    imports.wbg.__wbindgen_object_drop_ref = function(arg0) {
-        takeObject(arg0);
+    imports.wbg.__wbg_new_97cf52648830a70d = function(arg0) {
+        const ret = new Uint8Array(getObject(arg0));
+        return addHeapObject(ret);
     };
-    imports.wbg.__wbg_buffer_de1150f91b23aa89 = function() { return logError(function (arg0) {
-        const ret = getObject(arg0).buffer;
+    imports.wbg.__wbg_set_a0172b213e2469e9 = function(arg0, arg1, arg2) {
+        getObject(arg0).set(getObject(arg1), arg2 >>> 0);
+    };
+    imports.wbg.__wbg_length_e09c0b925ab8de5d = function(arg0) {
+        const ret = getObject(arg0).length;
+        return ret;
+    };
+    imports.wbg.__wbg_newwithlength_e833b89f9db02732 = function(arg0) {
+        const ret = new Uint8Array(arg0 >>> 0);
         return addHeapObject(ret);
-    }, arguments) };
+    };
+    imports.wbg.__wbg_subarray_9482ae5cd5cd99d3 = function(arg0, arg1, arg2) {
+        const ret = getObject(arg0).subarray(arg1 >>> 0, arg2 >>> 0);
+        return addHeapObject(ret);
+    };
     imports.wbg.__wbindgen_throw = function(arg0, arg1) {
         throw new Error(getStringFromWasm0(arg0, arg1));
     };
diff --git a/examples/web/chip_ahoyto_bg.wasm b/examples/web/chip_ahoyto_bg.wasm
index 21dabefd9e3d00745f8db9023d32a4039529a271..863046d35e007e90f80b2f3235a5beb152ce8643 100644
Binary files a/examples/web/chip_ahoyto_bg.wasm and b/examples/web/chip_ahoyto_bg.wasm differ
diff --git a/examples/web/chip_ahoyto_bg.wasm.d.ts b/examples/web/chip_ahoyto_bg.wasm.d.ts
index 9677a6dc6a64da20c3020c8f5e8ee5249c0899d7..20b66726d8b15bbaf361078b41cdbca4932d4a0a 100644
--- a/examples/web/chip_ahoyto_bg.wasm.d.ts
+++ b/examples/web/chip_ahoyto_bg.wasm.d.ts
@@ -1,8 +1,6 @@
 /* tslint:disable */
 /* eslint-disable */
 export const memory: WebAssembly.Memory;
-export function __wbg_chip8classic_free(a: number): void;
-export function chip8classic_new(): number;
 export function __wbg_chip8neo_free(a: number): void;
 export function chip8neo_new(): number;
 export function chip8neo_load_rom_ws(a: number, b: number, c: number): void;
@@ -10,6 +8,10 @@ export function chip8neo_reset_ws(a: number): void;
 export function chip8neo_reset_hard_ws(a: number): void;
 export function chip8neo_vram_ws(a: number, b: number): void;
 export function chip8neo_clock_ws(a: number): void;
+export function chip8neo_clock_dt_ws(a: number): void;
+export function chip8neo_clock_st_ws(a: number): void;
+export function __wbg_chip8classic_free(a: number): void;
+export function chip8classic_new(): number;
 export function __wbindgen_malloc(a: number): number;
 export function __wbindgen_add_to_stack_pointer(a: number): number;
 export function __wbindgen_free(a: number, b: number): void;
diff --git a/examples/web/index.html b/examples/web/index.html
index ca1964d732444776f6b1d2aba1e0a0323a6a2c52..d2545a4af8b7ce32d95d13c958d7e8613c1b1844 100644
--- a/examples/web/index.html
+++ b/examples/web/index.html
@@ -2,6 +2,7 @@
 <html>
     <head>
         <title>CHIP-Ahoyto</title>
+        <link rel="icon" href="res/icon.png" />
     </head>
     <body>
         <canvas id="chip-canvas" width="960" height="480"></canvas>
diff --git a/examples/web/index.js b/examples/web/index.js
index a164b80a09e9032a60b4dd6dcde20eb56bf3f30e..81e3919d2f085a7ac3acc5cf3916279c75a15565 100644
--- a/examples/web/index.js
+++ b/examples/web/index.js
@@ -6,7 +6,14 @@ import {
 const PIXEL_SET_COLOR = 0x50cb93ff;
 const PIXEL_UNSET_COLOR = 0x1b1a17ff;
 
+const LOGIC_HZ = 480;
+const TIMER_HZ = 60;
+const VISUAL_HZ = 60;
+
+const ROM = "res/roms/pong.ch8";
+
 const state = {
+    chip8: null,
     canvas: null,
     canvasScaled: null,
     canvasCtx: null,
@@ -20,9 +27,9 @@ const state = {
     // so that the global symbols become available
     await wasm();
 
-    const ROM = "roms/ibm_logo.ch8";
-
-    console.info("System Loaded!");
+    // initializes the canvas sub-sytem
+    initCanvas();
+    registerDrop();
 
     // loads the ROM data and converts it into the
     // target u8 array bufffer
@@ -32,25 +39,58 @@ const state = {
     const data = new Uint8Array(arrayBuffer);
 
     // creates the CHIP-8 instance and resets it
-    const chip8 = new Chip8Neo();
-    chip8.reset_hard_ws();
-    chip8.load_rom_ws(data);
+    state.chip8 = new Chip8Neo();
+    state.chip8.reset_hard_ws();
+    state.chip8.load_rom_ws(data);
 
-    console.info(`ROM Loaded ${ROM}`);
+    // runs the sequence as an infinite loop, running
+    // the associated CPU cycles accordingly
+    while (true) {        
+        const ratioLogic = LOGIC_HZ / VISUAL_HZ;
+        for(let i = 0; i < ratioLogic; i++) {
+            state.chip8.clock_ws();
+        }
 
-    initCanvas();
+        const ratioTimer = TIMER_HZ / VISUAL_HZ;
+        for(let i = 0; i < ratioTimer; i++) {
+            state.chip8.clock_dt_ws();
+            state.chip8.clock_st_ws();
+        }
 
-    while (true) {
-        chip8.clock_ws();
-        updateCanvas(chip8.vram_ws());
+        // updates the canvas object with the new
+        // visual information comming in
+        updateCanvas(state.chip8.vram_ws());
         
-        // hack
+        // @todo hack
         await new Promise((resolve, reject) => {
-            setTimeout(resolve, 100);
+            setTimeout(resolve, 1000 / VISUAL_HZ);
         })
     }
 })();
 
+const registerDrop = () => {
+    document.addEventListener("drop", async (e) => {
+        e.preventDefault();
+        e.stopPropagation();
+
+        if (!e.dataTransfer.files) return;
+
+        const file = e.dataTransfer.files[0];
+
+        const arrayBuffer = await file.arrayBuffer();
+        const data = new Uint8Array(arrayBuffer);
+
+        state.chip8.reset_hard_ws();
+        state.chip8.load_rom_ws(data);
+    });
+    document.addEventListener("dragover", async (e) => {
+        e.preventDefault();
+        e.stopPropagation();
+
+        console.info("draging over");
+    });
+}
+
 const initCanvas = () => {
     // initializes the off-screen canvas that is going to be
     // used in the drawing proces
diff --git a/resources/chips-ahoy.jpeg b/res/chips-ahoy.jpeg
similarity index 100%
rename from resources/chips-ahoy.jpeg
rename to res/chips-ahoy.jpeg
diff --git a/resources/roms/bc_test.ch8 b/res/roms/bc_test.ch8
similarity index 100%
rename from resources/roms/bc_test.ch8
rename to res/roms/bc_test.ch8
diff --git a/resources/roms/bmp.ch8 b/res/roms/bmp.ch8
similarity index 100%
rename from resources/roms/bmp.ch8
rename to res/roms/bmp.ch8
diff --git a/resources/roms/breakout.ch8 b/res/roms/breakout.ch8
similarity index 100%
rename from resources/roms/breakout.ch8
rename to res/roms/breakout.ch8
diff --git a/resources/roms/chip8_picture.ch8 b/res/roms/chip8_picture.ch8
similarity index 100%
rename from resources/roms/chip8_picture.ch8
rename to res/roms/chip8_picture.ch8
diff --git a/resources/roms/chipwar.ch8 b/res/roms/chipwar.ch8
similarity index 100%
rename from resources/roms/chipwar.ch8
rename to res/roms/chipwar.ch8
diff --git a/resources/roms/ibm_logo.ch8 b/res/roms/ibm_logo.ch8
similarity index 100%
rename from resources/roms/ibm_logo.ch8
rename to res/roms/ibm_logo.ch8
diff --git a/resources/roms/keypad.ch8 b/res/roms/keypad.ch8
similarity index 100%
rename from resources/roms/keypad.ch8
rename to res/roms/keypad.ch8
diff --git a/resources/roms/maze.ch8 b/res/roms/maze.ch8
similarity index 100%
rename from resources/roms/maze.ch8
rename to res/roms/maze.ch8
diff --git a/resources/roms/octojam_6_title.ch8 b/res/roms/octojam_6_title.ch8
similarity index 100%
rename from resources/roms/octojam_6_title.ch8
rename to res/roms/octojam_6_title.ch8
diff --git a/resources/roms/pong.ch8 b/res/roms/pong.ch8
similarity index 100%
rename from resources/roms/pong.ch8
rename to res/roms/pong.ch8
diff --git a/resources/roms/pong_paul.ch8 b/res/roms/pong_paul.ch8
similarity index 100%
rename from resources/roms/pong_paul.ch8
rename to res/roms/pong_paul.ch8
diff --git a/resources/roms/sirpinski.ch8 b/res/roms/sirpinski.ch8
similarity index 100%
rename from resources/roms/sirpinski.ch8
rename to res/roms/sirpinski.ch8
diff --git a/resources/roms/snake.ch8 b/res/roms/snake.ch8
similarity index 100%
rename from resources/roms/snake.ch8
rename to res/roms/snake.ch8
diff --git a/resources/roms/soccer.ch8 b/res/roms/soccer.ch8
similarity index 100%
rename from resources/roms/soccer.ch8
rename to res/roms/soccer.ch8
diff --git a/resources/roms/space_invaders.ch8 b/res/roms/space_invaders.ch8
similarity index 100%
rename from resources/roms/space_invaders.ch8
rename to res/roms/space_invaders.ch8
diff --git a/resources/roms/spacejam.ch8 b/res/roms/spacejam.ch8
similarity index 100%
rename from resources/roms/spacejam.ch8
rename to res/roms/spacejam.ch8
diff --git a/resources/roms/test_opcode.ch8 b/res/roms/test_opcode.ch8
similarity index 100%
rename from resources/roms/test_opcode.ch8
rename to res/roms/test_opcode.ch8
diff --git a/resources/roms/tetris.ch8 b/res/roms/tetris.ch8
similarity index 100%
rename from resources/roms/tetris.ch8
rename to res/roms/tetris.ch8
diff --git a/resources/roms/tic_tac_toe.ch8 b/res/roms/tic_tac_toe.ch8
similarity index 100%
rename from resources/roms/tic_tac_toe.ch8
rename to res/roms/tic_tac_toe.ch8
diff --git a/src/chip8_neo.rs b/src/chip8_neo.rs
index 0b01cfafe72de6cf60095fd69c6832b25e87be80..17a7c82e5203733a34ef24bef740cd92eb53a84a 100644
--- a/src/chip8_neo.rs
+++ b/src/chip8_neo.rs
@@ -385,6 +385,14 @@ impl Chip8Neo {
     pub fn clock_ws(&mut self) {
         self.clock()
     }
+
+    pub fn clock_dt_ws(&mut self) {
+        self.clock_dt()
+    }
+
+    pub fn clock_st_ws(&mut self) {
+        self.clock_st()
+    }
 }
 
 impl Default for Chip8Neo {