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 {
|
case *format_F3_m: if st, err := strconv.Atoi(val.naslov); err == nil {
|
||||||
if val.n && !val.i {
|
if val.n && !val.i {
|
||||||
if st >= -2048 && st <= 2047 {
|
if st >= -2048 && st <= 2047 {
|
||||||
|
val.p = true
|
||||||
val.odmik = st - (val.lc + val.velikost) //naslov - PC
|
val.odmik = st - (val.lc + val.velikost) //naslov - PC
|
||||||
} else if bazno_dovoljeno && st >= 0 && st <= 4095 {
|
} else if bazno_dovoljeno && st >= 0 && st <= 4095 {
|
||||||
val.odmik = st - bazno_naslov
|
val.odmik = st - bazno_naslov
|
||||||
|
val.b = true
|
||||||
} else {
|
} else {
|
||||||
val.odmik = st
|
val.odmik = st
|
||||||
}
|
}
|
||||||
|
|
@ -723,8 +725,10 @@ func drugi_prehod(AST *[]ukaz) {
|
||||||
val.odmik = st
|
val.odmik = st
|
||||||
} else if val.n && val.i {
|
} else if val.n && val.i {
|
||||||
if st >= -2048 && st <= 2047 {
|
if st >= -2048 && st <= 2047 {
|
||||||
|
val.p = true
|
||||||
val.odmik = st - (val.lc + val.velikost) //naslov - PC
|
val.odmik = st - (val.lc + val.velikost) //naslov - PC
|
||||||
} else if bazno_dovoljeno && st >= 0 && st <= 4095 {
|
} else if bazno_dovoljeno && st >= 0 && st <= 4095 {
|
||||||
|
val.b = true
|
||||||
val.odmik = st - bazno_naslov
|
val.odmik = st - bazno_naslov
|
||||||
} else {
|
} else {
|
||||||
val.odmik = st
|
val.odmik = st
|
||||||
|
|
@ -734,8 +738,10 @@ func drugi_prehod(AST *[]ukaz) {
|
||||||
naslov := simbolna_tabela[val.naslov]
|
naslov := simbolna_tabela[val.naslov]
|
||||||
if val.n && !val.i {
|
if val.n && !val.i {
|
||||||
if naslov >= -2048 && naslov <= 2047 {
|
if naslov >= -2048 && naslov <= 2047 {
|
||||||
|
val.p = true
|
||||||
val.odmik = naslov - (val.lc + val.velikost) //naslov - PC
|
val.odmik = naslov - (val.lc + val.velikost) //naslov - PC
|
||||||
} else if bazno_dovoljeno && naslov >= 0 && naslov <= 4095 {
|
} else if bazno_dovoljeno && naslov >= 0 && naslov <= 4095 {
|
||||||
|
val.b = true
|
||||||
val.odmik = naslov - bazno_naslov
|
val.odmik = naslov - bazno_naslov
|
||||||
} else {
|
} else {
|
||||||
val.odmik = naslov
|
val.odmik = naslov
|
||||||
|
|
@ -744,9 +750,11 @@ func drugi_prehod(AST *[]ukaz) {
|
||||||
val.odmik = naslov
|
val.odmik = naslov
|
||||||
} else if val.n && val.i {
|
} else if val.n && val.i {
|
||||||
if naslov >= -2048 && naslov <= 2047 {
|
if naslov >= -2048 && naslov <= 2047 {
|
||||||
|
val.p = true
|
||||||
val.odmik = naslov - (val.lc + val.velikost) //naslov - PC
|
val.odmik = naslov - (val.lc + val.velikost) //naslov - PC
|
||||||
//fmt.Printf("pc %x\n", val.odmik)
|
//fmt.Printf("pc %x\n", val.odmik)
|
||||||
} else if bazno_dovoljeno && naslov >= 0 && naslov <= 4095 {
|
} else if bazno_dovoljeno && naslov >= 0 && naslov <= 4095 {
|
||||||
|
val.b = true
|
||||||
val.odmik = naslov - bazno_naslov
|
val.odmik = naslov - bazno_naslov
|
||||||
//fmt.Printf("bazno %x\n", val.odmik)
|
//fmt.Printf("bazno %x\n", val.odmik)
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -797,11 +805,11 @@ func generacija(AST *[]ukaz) {
|
||||||
for _, el := range *AST {
|
for _, el := range *AST {
|
||||||
temp := ""
|
temp := ""
|
||||||
switch val := el.(type) {
|
switch val := el.(type) {
|
||||||
case *format_F1: temp= fmt.Sprintf("%s%4x", temp, val.opcode)
|
case *format_F1: temp= fmt.Sprintf("%s%02x", temp, val.opcode)
|
||||||
case *format_F2_n: temp = fmt.Sprintf("%s%2x%x%x", temp, val.opcode, val.n, 0)
|
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%2x%x%x", temp, val.opcode, register_map[val.r1], 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%2x%x%x", temp, val.opcode, val.r1, val.n)
|
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%2x%x%x", temp, val.opcode, register_map[val.r1], register_map[val.r2])
|
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
|
case *format_F3_m: n := 0
|
||||||
i := 0
|
i := 0
|
||||||
x := 0
|
x := 0
|
||||||
|
|
@ -826,8 +834,8 @@ func generacija(AST *[]ukaz) {
|
||||||
if val.e {
|
if val.e {
|
||||||
e = 1
|
e = 1
|
||||||
}
|
}
|
||||||
temp = fmt.Sprintf("%s%2x%2x%2x", temp, val.opcode + (n << 1) + i, (x << 7) + (b << 6) + (p << 5) + (e << 4) +
|
temp = fmt.Sprintf("%s%02x%02x%02x", temp, val.opcode + (n << 1) + i, (x << 7) + (b << 6) + (p << 5) + (e << 4) +
|
||||||
(val.odmik & (0xF << 8)), val.odmik & 0xFF)
|
((val.odmik >> 8) & 0xF), val.odmik & 0xFF)
|
||||||
case *format_F4_m: n := 0
|
case *format_F4_m: n := 0
|
||||||
i := 0
|
i := 0
|
||||||
x := 0
|
x := 0
|
||||||
|
|
@ -852,15 +860,15 @@ func generacija(AST *[]ukaz) {
|
||||||
if val.e {
|
if val.e {
|
||||||
e = 1
|
e = 1
|
||||||
}
|
}
|
||||||
temp = fmt.Sprintf("%s%2x%2x%2x%2x", temp, val.opcode + (n << 1) + i, (x << 7) + (b << 6) + (p << 5) + (e << 4) +
|
temp = fmt.Sprintf("%s%02x%02x%02x%02x", 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)
|
((val.odmik >> 16) & 0xF), (val.odmik >> 8) & 0xFF, val.odmik & 0xFF)
|
||||||
case *format_D: continue
|
case *format_D: continue
|
||||||
case *format_D_n: if val.ime == "START" || val.ime == "END" {
|
case *format_D_n: if val.ime == "START" || val.ime == "END" {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
case *format_M_r: continue
|
case *format_M_r: continue
|
||||||
case *format_M_i: vr, _ := strconv.Atoi(val.operand)
|
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 {
|
if line_len + el.Velikost() <= 30 {
|
||||||
line_len += el.Velikost()
|
line_len += el.Velikost()
|
||||||
|
|
@ -872,6 +880,7 @@ func generacija(AST *[]ukaz) {
|
||||||
line_addr = el.GetAddr()
|
line_addr = el.GetAddr()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
fmt.Printf("T: %x, %x, %s\n", line_addr, line_len, line)
|
||||||
}
|
}
|
||||||
|
|
||||||
func izpis(AST *[]ukaz) {
|
func izpis(AST *[]ukaz) {
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,8 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
test := 65 + ((true ? 1 : 0) << 1) + ((true ? 1 : 0) << 0)
|
line := ""
|
||||||
fmt.Println(test)
|
line = fmt.Sprintf("%s%02x", line, 15)
|
||||||
|
line = fmt.Sprintf("%s%02x", line, 14)
|
||||||
|
fmt.Println(line)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue