h in t zapisi
This commit is contained in:
parent
59a65cf49e
commit
01188ab9a8
2 changed files with 23 additions and 12 deletions
|
|
@ -713,9 +713,11 @@ func drugi_prehod(AST *[]ukaz) {
|
|||
case *format_F3_m: if st, err := strconv.Atoi(val.naslov); err == nil {
|
||||
if val.n && !val.i {
|
||||
if st >= -2048 && st <= 2047 {
|
||||
val.p = true
|
||||
val.odmik = st - (val.lc + val.velikost) //naslov - PC
|
||||
} else if bazno_dovoljeno && st >= 0 && st <= 4095 {
|
||||
val.odmik = st - bazno_naslov
|
||||
val.b = true
|
||||
} else {
|
||||
val.odmik = st
|
||||
}
|
||||
|
|
@ -723,8 +725,10 @@ func drugi_prehod(AST *[]ukaz) {
|
|||
val.odmik = st
|
||||
} else if val.n && val.i {
|
||||
if st >= -2048 && st <= 2047 {
|
||||
val.p = true
|
||||
val.odmik = st - (val.lc + val.velikost) //naslov - PC
|
||||
} else if bazno_dovoljeno && st >= 0 && st <= 4095 {
|
||||
val.b = true
|
||||
val.odmik = st - bazno_naslov
|
||||
} else {
|
||||
val.odmik = st
|
||||
|
|
@ -734,8 +738,10 @@ func drugi_prehod(AST *[]ukaz) {
|
|||
naslov := simbolna_tabela[val.naslov]
|
||||
if val.n && !val.i {
|
||||
if naslov >= -2048 && naslov <= 2047 {
|
||||
val.p = true
|
||||
val.odmik = naslov - (val.lc + val.velikost) //naslov - PC
|
||||
} else if bazno_dovoljeno && naslov >= 0 && naslov <= 4095 {
|
||||
val.b = true
|
||||
val.odmik = naslov - bazno_naslov
|
||||
} else {
|
||||
val.odmik = naslov
|
||||
|
|
@ -744,9 +750,11 @@ func drugi_prehod(AST *[]ukaz) {
|
|||
val.odmik = naslov
|
||||
} else if val.n && val.i {
|
||||
if naslov >= -2048 && naslov <= 2047 {
|
||||
val.p = true
|
||||
val.odmik = naslov - (val.lc + val.velikost) //naslov - PC
|
||||
//fmt.Printf("pc %x\n", val.odmik)
|
||||
} else if bazno_dovoljeno && naslov >= 0 && naslov <= 4095 {
|
||||
val.b = true
|
||||
val.odmik = naslov - bazno_naslov
|
||||
//fmt.Printf("bazno %x\n", val.odmik)
|
||||
} else {
|
||||
|
|
@ -797,11 +805,11 @@ func generacija(AST *[]ukaz) {
|
|||
for _, el := range *AST {
|
||||
temp := ""
|
||||
switch val := el.(type) {
|
||||
case *format_F1: temp= fmt.Sprintf("%s%4x", temp, val.opcode)
|
||||
case *format_F2_n: temp = fmt.Sprintf("%s%2x%x%x", temp, val.opcode, val.n, 0)
|
||||
case *format_F2_r: temp = fmt.Sprintf("%s%2x%x%x", temp, val.opcode, register_map[val.r1], 0)
|
||||
case *format_F2_rn: temp = fmt.Sprintf("%s%2x%x%x", temp, val.opcode, val.r1, val.n)
|
||||
case *format_F2_rr: temp = fmt.Sprintf("%s%2x%x%x", temp, val.opcode, register_map[val.r1], register_map[val.r2])
|
||||
case *format_F1: temp= fmt.Sprintf("%s%02x", temp, val.opcode)
|
||||
case *format_F2_n: temp = fmt.Sprintf("%s%02x%x%x", temp, val.opcode, val.n, 0)
|
||||
case *format_F2_r: temp = fmt.Sprintf("%s%02x%x%x", temp, val.opcode, register_map[val.r1], 0)
|
||||
case *format_F2_rn: temp = fmt.Sprintf("%s%02x%x%x", temp, val.opcode, val.r1, val.n)
|
||||
case *format_F2_rr: temp = fmt.Sprintf("%s%02x%x%x", temp, val.opcode, register_map[val.r1], register_map[val.r2])
|
||||
case *format_F3_m: n := 0
|
||||
i := 0
|
||||
x := 0
|
||||
|
|
@ -826,8 +834,8 @@ func generacija(AST *[]ukaz) {
|
|||
if val.e {
|
||||
e = 1
|
||||
}
|
||||
temp = fmt.Sprintf("%s%2x%2x%2x", temp, val.opcode + (n << 1) + i, (x << 7) + (b << 6) + (p << 5) + (e << 4) +
|
||||
(val.odmik & (0xF << 8)), val.odmik & 0xFF)
|
||||
temp = fmt.Sprintf("%s%02x%02x%02x", temp, val.opcode + (n << 1) + i, (x << 7) + (b << 6) + (p << 5) + (e << 4) +
|
||||
((val.odmik >> 8) & 0xF), val.odmik & 0xFF)
|
||||
case *format_F4_m: n := 0
|
||||
i := 0
|
||||
x := 0
|
||||
|
|
@ -852,15 +860,15 @@ func generacija(AST *[]ukaz) {
|
|||
if val.e {
|
||||
e = 1
|
||||
}
|
||||
temp = fmt.Sprintf("%s%2x%2x%2x%2x", temp, val.opcode + (n << 1) + i, (x << 7) + (b << 6) + (p << 5) + (e << 4) +
|
||||
(val.odmik & (0xF << 16)), val.odmik & (0xFF << 8), val.odmik & 0xFF)
|
||||
temp = fmt.Sprintf("%s%02x%02x%02x%02x", temp, val.opcode + (n << 1) + i, (x << 7) + (b << 6) + (p << 5) + (e << 4) +
|
||||
((val.odmik >> 16) & 0xF), (val.odmik >> 8) & 0xFF, val.odmik & 0xFF)
|
||||
case *format_D: continue
|
||||
case *format_D_n: if val.ime == "START" || val.ime == "END" {
|
||||
continue
|
||||
}
|
||||
case *format_M_r: continue
|
||||
case *format_M_i: vr, _ := strconv.Atoi(val.operand)
|
||||
temp = fmt.Sprintf("%s%3x", temp, vr)
|
||||
temp = fmt.Sprintf("%s%06x", temp, vr)
|
||||
}
|
||||
if line_len + el.Velikost() <= 30 {
|
||||
line_len += el.Velikost()
|
||||
|
|
@ -872,6 +880,7 @@ func generacija(AST *[]ukaz) {
|
|||
line_addr = el.GetAddr()
|
||||
}
|
||||
}
|
||||
fmt.Printf("T: %x, %x, %s\n", line_addr, line_len, line)
|
||||
}
|
||||
|
||||
func izpis(AST *[]ukaz) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue