1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
use crate::*;
pub fn parse_directive_bits(
state: &mut asm::parser::State)
-> Result<(), ()>
{
state.asm_state.cur_wordsize = asm::parser::parse_expr_usize_fn(state, |u| match u
{
0 => None,
_ => Some(u)
})?;
Ok(())
}
pub fn parse_directive_res(
state: &mut asm::parser::State)
-> Result<(), ()>
{
let words = asm::parser::parse_expr_usize(state)?;
let bits = words * state.asm_state.cur_wordsize;
let bankdata = state.asm_state.get_bankdata_mut(state.asm_state.cur_bank);
bankdata.reserve(bits);
Ok(())
}
pub fn parse_directive_align(
state: &mut asm::parser::State)
-> Result<(), ()>
{
let wordsize = asm::parser::parse_expr_usize_fn(state, |u| match u
{
0 => None,
_ => Some(u),
})?;
let bankdata = state.asm_state.get_bankdata(state.asm_state.cur_bank);
let skip_bits = bankdata.bits_until_aligned(state.asm_state, wordsize);
let bankdata = state.asm_state.get_bankdata_mut(state.asm_state.cur_bank);
bankdata.reserve(skip_bits);
Ok(())
}
pub fn parse_directive_labelalign(
state: &mut asm::parser::State)
-> Result<(), ()>
{
state.asm_state.cur_labelalign = asm::parser::parse_expr_usize_fn(state, |u| match u
{
0 => None,
_ => Some(u),
})?;
Ok(())
}
pub fn parse_directive_addr(
state: &mut asm::parser::State)
-> Result<(), ()>
{
let (addr, addr_span) = asm::parser::parse_expr_bigint(state)?;
let bankdata = state.asm_state.get_bankdata(state.asm_state.cur_bank);
let skip_bits = bankdata.bits_until_address(
state.asm_state,
addr,
state.report.clone(),
&addr_span)?;
let bankdata = state.asm_state.get_bankdata_mut(state.asm_state.cur_bank);
bankdata.reserve(skip_bits);
Ok(())
}