@@ -42,12 +42,30 @@ impl Palette {
42
42
palette
43
43
}
44
44
45
+ pub fn get ( ) -> Self {
46
+ let mut palette = Palette :: new ( ) ;
47
+ for i in 0 ..256 {
48
+ palette. colors [ i] = get_palette ( i) ;
49
+ }
50
+ palette
51
+ }
52
+
45
53
pub fn set ( & self ) {
46
54
for ( i, ( r, g, b) ) in self . colors . iter ( ) . enumerate ( ) {
47
55
set_palette ( i, * r, * g, * b) ;
48
56
}
49
57
}
50
58
59
+ pub fn to_bytes ( & self ) -> [ u8 ; 256 * 3 ] {
60
+ let mut buf = [ 0 ; 256 * 3 ] ;
61
+ for ( i, ( r, g, b) ) in self . colors . iter ( ) . enumerate ( ) {
62
+ buf[ i * 3 + 0 ] = * r;
63
+ buf[ i * 3 + 1 ] = * g;
64
+ buf[ i * 3 + 2 ] = * b;
65
+ }
66
+ buf
67
+ }
68
+
51
69
pub fn size ( ) -> usize {
52
70
256 * 3
53
71
}
@@ -70,8 +88,13 @@ impl TryFrom<&[u8]> for Palette {
70
88
}
71
89
72
90
impl FileIO for VgaPalette {
73
- fn read ( & mut self , _buf : & mut [ u8 ] ) -> Result < usize , ( ) > {
74
- Err ( ( ) ) // TODO
91
+ fn read ( & mut self , buf : & mut [ u8 ] ) -> Result < usize , ( ) > {
92
+ let res = Palette :: get ( ) . to_bytes ( ) ;
93
+ if buf. len ( ) < res. len ( ) {
94
+ return Err ( ( ) ) ;
95
+ }
96
+ buf. clone_from_slice ( & res) ;
97
+ Ok ( res. len ( ) )
75
98
}
76
99
77
100
fn write ( & mut self , buf : & [ u8 ] ) -> Result < usize , ( ) > {
@@ -84,14 +107,22 @@ impl FileIO for VgaPalette {
84
107
85
108
fn poll ( & mut self , event : IO ) -> bool {
86
109
match event {
87
- IO :: Read => false , // TODO
88
- IO :: Write => true , // TODO
110
+ IO :: Read => true ,
111
+ IO :: Write => true ,
89
112
}
90
113
}
91
114
}
92
115
93
- pub fn set_palette ( i : usize , r : u8 , g : u8 , b : u8 ) {
116
+ // TODO: Rename to `write_palette_index`
117
+ fn set_palette ( i : usize , r : u8 , g : u8 , b : u8 ) {
94
118
interrupts:: without_interrupts ( ||
95
119
WRITER . lock ( ) . set_palette ( i, r, g, b)
96
120
)
97
121
}
122
+
123
+ // TODO: Rename to `read_palette_index`
124
+ fn get_palette ( i : usize ) -> ( u8 , u8 , u8 ) {
125
+ interrupts:: without_interrupts ( ||
126
+ WRITER . lock ( ) . palette ( i)
127
+ )
128
+ }
0 commit comments