Skip to content

Commit a13d0a3

Browse files
committed
debug feature now works like a charm
1 parent 9280c94 commit a13d0a3

File tree

3 files changed

+27
-27
lines changed

3 files changed

+27
-27
lines changed

8085-wasm/src/lib.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,24 +75,23 @@ impl Emulator {
7575
}
7676

7777
pub fn assemble(&self,data: &str) -> Box<[u8]> {
78-
79-
let my_vec = generate_assembly_code(vec![String::from(data)]);
78+
let (my_vec,_) = generate_assembly_code(vec![String::from(data)]);
8079
my_vec.into_boxed_slice()
8180
}
8281

8382

84-
pub fn load_program(&mut self,offset:usize, data: Box<[JsValue]>) -> usize{
83+
pub fn load_program(&mut self,offset:usize, data: Box<[JsValue]>) -> Box<[usize]>{
8584
let start_address = self.offset;
8685
let formatted_data = data.iter().map(|s| { s.as_string().unwrap().to_lowercase() }).collect();
8786

88-
let assembled_code = generate_assembly_code(formatted_data);
87+
let (assembled_code,meta) = generate_assembly_code(formatted_data);
8988

9089
let mut position = start_address+offset;
9190
for (counter,&hex_code) in assembled_code.iter().enumerate() {
9291
self.state.memory[start_address + offset + counter] = hex_code;
9392
position = position + counter;
9493
}
95-
position
94+
meta.into_boxed_slice()
9695
}
9796

9897
pub fn watch_memory(&self, start: usize, stop : usize ) -> Box<[u8]> {

frontend/src/App.tsx

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ import * as wasm from './wasm/wasm_8085';
1515
type CodeEditor = monaco.editor.IStandaloneCodeEditor;
1616

1717
function App() {
18-
let [line, setLine] = useState<number>(0);
19-
let [programCounter, setProgramCounter] = useState<number>(0);
18+
let [line, setLine] = useState<number>(1);
19+
let [pcLineVec, setPcLineVec] = useState<Uint32Array>(new Uint32Array());
2020
let [code, setCode] = useState<string[]>([]);
2121
let [loaded, setLoaded] = useState<boolean>(false);
2222
let [decoration, setDecoration] = useState<string[] | undefined>();
@@ -76,21 +76,28 @@ function App() {
7676
}
7777

7878
function debugMode() {
79-
setLoaded(!loaded);
80-
gotoLine(line+1);
81-
let newPC = emulator?.load_program(programCounter,[code[line]]) as number;
82-
setProgramCounter(newPC);
83-
console.log(newPC + "is new program counter");
84-
setLine(line + 1);
79+
if(loaded) {
80+
81+
emulator?.emulate_line_by_line();
82+
let val = pcLineVec.findIndex((val) => {
83+
return emulator?.program_counter() as number == val;
84+
});
85+
86+
setLine(val+1);
87+
gotoLine(line);
88+
89+
console.log(line);
8590
stopDecoration();
91+
}
8692
}
8793

8894
function loadProgram() {
89-
9095
//force update
96+
setLine(0)
9197
loadEmulator(() => {
9298
setEmulator(new wasm.Emulator(0));
93-
emulator?.load_program(0,code);
99+
setPcLineVec(emulator?.load_program(0,code) as Uint32Array);
100+
console.log(pcLineVec);
94101
emulator?.set_program_counter(0);
95102
setLoaded(true);
96103
});

src/lib.rs

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ use assembler::utils::convert_8085_hex_to_i32;
99
use assembler::assemble;
1010
use assembler::assembly;
1111

12-
use crate::core::AssembledMeta;
1312

1413
fn remove_comments(line: &str) -> &str{
1514
if let Some(index) = line.find(";") {
@@ -48,13 +47,13 @@ fn test_fix_hexadecimal() {
4847

4948

5049
#[allow(unused_variables,unused_mut)]
51-
pub fn generate_assembly_code(lines:Vec<String>) -> (Vec<u8>,Vec<AssembledMeta>) {
50+
pub fn generate_assembly_code(lines:Vec<String>) -> (Vec<u8>,Vec<usize>) {
5251

5352
let mut label_offset_map: HashMap<String, u32> = HashMap::new();
5453

5554

5655
let mut assembly_code :Vec<u8> = Vec::new();
57-
let mut assembled_metadata : Vec<AssembledMeta> = Vec::new();
56+
let mut line_pc_vec: Vec<usize> = Vec::new();
5857
let mut line_number: u32 = 0;
5958

6059
for line in lines {
@@ -65,26 +64,21 @@ pub fn generate_assembly_code(lines:Vec<String>) -> (Vec<u8>,Vec<AssembledMeta>)
6564
match assembly::OpcodeParser::new().parse(line) {
6665
Ok(ops) => {
6766
if let Some(l) = &ops.Label {
68-
label_offset_map.insert(l.clone(), line_number);
67+
label_offset_map.insert(l.clone(), assembly_code.len() as u32);
6968
}
70-
let e_data = AssembledMeta {
71-
line_number : line_number as usize,
72-
start_position: assembly_code.len(),
73-
original_text : original_line
74-
};
7569
assembly_code.append(&mut assemble(ops, &label_offset_map));
76-
assembled_metadata.push(e_data);
7770
},
7871
Err(_) => {println!("error");}
7972
}
73+
line_pc_vec.push(assembly_code.len());
8074
}
81-
(assembly_code,assembled_metadata)
75+
(assembly_code,line_pc_vec)
8276
}
8377

8478

8579
#[test]
8680
fn test_if_assembly_generated() {
87-
assert_eq!(generate_assembly_code(vec!["nop","trello: mvi c, 34H", "hello: mov b, c", "jz hello", "jnc trello"].iter().map(|&x| {String::from(x)}).collect()).0,vec![0, 14, 52, 65, 202, 3, 210, 2]);
81+
assert_eq!(generate_assembly_code(vec!["nop","trello: mvi c, 34H", "hello: mov b, c", "jz hello", "jnc trello"].iter().map(|&x| {String::from(x)}).collect()).0,vec![0, 14, 52, 65, 202, 3, 210, 1]);
8882
assert_eq!(generate_assembly_code(vec!["mov a, b".to_string()]).0, vec![120]);
8983
}
9084

0 commit comments

Comments
 (0)