# HG changeset patch # User Robert McIntyre # Date 1339394151 18000 # Node ID 1d81ddd4fa41b5463a12b0a424f1303b929e845a # Parent 151c96d6092177961cc98810355c8c901d1e01cc# Parent 79606f17365832f03c0a5432726586bf487b1f83 merged changes from trip to wichita. diff -r 151c96d60921 -r 1d81ddd4fa41 clojure/com/aurellem/gb/items.clj --- a/clojure/com/aurellem/gb/items.clj Mon Jun 11 00:53:20 2012 -0500 +++ b/clojure/com/aurellem/gb/items.clj Mon Jun 11 00:55:51 2012 -0500 @@ -11,7 +11,6 @@ (def pc-item-list-start 0xD539) (def pc-item-list-width 101) - (defn item-list ([^SaveState state] (subvec @@ -27,7 +26,6 @@ (aget mem (+ item-list-start 2 (* 2 n)))])) ([n] (nth-item @current-state n))) - (defn nth-pc-item ([^SaveState state n] (let [mem (memory state)] @@ -35,7 +33,6 @@ (aget mem (+ pc-item-list-start 2 (* 2 n)))])) ([n] (nth-pc-item @current-state n))) - (def item-code->item-name (hash-map 0x01 :master-ball diff -r 151c96d60921 -r 1d81ddd4fa41 clojure/com/aurellem/run/image.clj --- a/clojure/com/aurellem/run/image.clj Mon Jun 11 00:53:20 2012 -0500 +++ b/clojure/com/aurellem/run/image.clj Mon Jun 11 00:55:51 2012 -0500 @@ -2,7 +2,7 @@ (:use (com.aurellem.gb saves gb-driver util constants items vbm characters money rlm-assembly)) - (:use (com.aurellem.run util title save-corruption + (:use (com.aurellem.run util music title save-corruption bootstrap-0 bootstrap-1)) (:require clojure.string) (:import [com.aurellem.gb.gb_driver SaveState]) @@ -43,5 +43,112 @@ +(def image-program-target 0xB000) +(def display-width 160) +(def display-height 144) + + +;{:r :g :b } + +(def character-data 0x8000) +(def character-data-end 0x97FF) + + + + +(def BG-data-1 0x9800) + +(def BG-data-2 0x9C00) + +(def OAM 0xFE00) + + + +(def video-bank-select-register 0xFF4F) + +(defn gb-rgb->bits [[r g b]] + (assert (<= 0 r 31)) + (assert (<= 0 g 31)) + (assert (<= 0 b 31)) + [(bit-and + 0xFF + (+ + r + (bit-shift-left g 5))) + (+ + (bit-shift-right g 3) + (bit-shift-left b 2))]) + + +(def bg-palette-select 0xFF68) +(def bg-palette-data 0xFF69) + +(def obj-palette-select 0xFF6A) +(def obj-palette-data 0xFF6B) + +(def max-palettes 8) + +(defn write-data [target data] + (flatten + [0x3E ;; load literal to A + data + 0xEA ;; load A into target + (reverse (disect-bytes-2 target))])) + +(defn begin-sequential-palette-write + [palette-num palette-select-address] + (assert (<= 0 palette-num max-palettes)) + (assert + (or (= palette-select-address bg-palette-select) + (= palette-select-address obj-palette-select))) + (let [palette-write-data + (Integer/parseInt + (str "1" ;; auto increment + "0" ;; not used + (format + "%03d" + (Integer/parseInt + (Integer/toBinaryString palette-num) 10)) + "00" ;; color num + "0" ;; H/L + ) 2)] + (write-data palette-select-address palette-write-data))) + +(defn set-palettes [palette-select palette-data palettes] + (assert (<= (count palettes)) max-palettes) + (flatten + [(begin-sequential-palette-write 0 palette-select) + (map (partial write-data palette-data) + (flatten (map gb-rgb->bits palettes)))])) + +(defn display-one-color + "Displayes a single color onto the gameboy screen. input rgb in + gameboy rgb." + [[r g b]] + ;; construct a kernel that displays a single color + (let + [palettes (repeat 8 [r g b]) + kernel-address 0xC000 + kernel + [0xF3 ;; disable interrupts + (clear-music-registers) + (frame-metronome) + (set-palettes obj-palette-select obj-palette-data palettes) + (set-palettes bg-palette-select bg-palette-data palettes) + (infinite-loop)]] + (-> (set-memory-range (second (music-base)) + kernel-address (flatten kernel)) + (PC! kernel-address)))) + + + + +(defn write-palette-color [palette-num r g b] + (let [[byte-1 byte-2] (gb-rgb->bits r g b)] + + + )) + + diff -r 151c96d60921 -r 1d81ddd4fa41 moves/temp.vbm Binary file moves/temp.vbm has changed