rlm@60: (ns com.aurellem.gb-driver rlm@60: (:import com.aurellem.gb.Gb) rlm@65: (:import java.io.File) rlm@60: (:import (java.nio IntBuffer ByteOrder))) rlm@48: rlm@65: rlm@65: (def yellow-rom-image rlm@65: (File. "/home/r/proj/pokemon-escape/roms/yellow.gbc")) rlm@65: rlm@62: (defn vba-init [] rlm@60: (Gb/loadVBA) rlm@60: (future rlm@65: (Gb/startEmulator (.getCanonicalPath yellow-rom-image)))) rlm@60: rlm@64: (defn cpu-data [size arr-fn] rlm@64: (let [store (int-array size)] rlm@64: (fn [] rlm@64: (arr-fn store) rlm@64: store))) rlm@60: rlm@64: (def ram rlm@64: (cpu-data (Gb/getRAMSize) #(Gb/getRAM %))) rlm@61: rlm@64: (def rom rlm@64: (cpu-data (Gb/getROMSize) #(Gb/getROM %))) rlm@61: rlm@64: (def working-ram rlm@64: (cpu-data Gb/WRAM_SIZE #(Gb/getWRAM %))) rlm@62: rlm@64: (def video-ram rlm@64: (cpu-data Gb/VRAM_SIZE #(Gb/getVRAM %))) rlm@64: rlm@64: (def registers rlm@64: (cpu-data Gb/NUM_REGISTERS #(Gb/getRegisters %))) rlm@64: rlm@64: rlm@65: (def key-mask rlm@65: {:a 0x0001 rlm@65: :b 0x0002 rlm@65: rlm@65: :l 0x0020 rlm@65: :r 0x0010 rlm@65: :u 0x0040 rlm@65: :d 0x0080 rlm@65: rlm@65: :select 0x0004 rlm@65: :start 0x0008 rlm@65: :restart 0x0800}) rlm@65: rlm@65: (defn keycode [& keys] rlm@65: (reduce bit-or (map key-mask keys))) rlm@65: rlm@65: (defn step rlm@65: ([] (Gb/step)) rlm@65: ([& keys] (Gb/step (apply keycode keys)))) rlm@65: rlm@65: rlm@65: rlm@65: