h in t zapisi

This commit is contained in:
aljazbrodar. 2026-01-17 18:43:36 +01:00
parent 59a65cf49e
commit 01188ab9a8
2 changed files with 23 additions and 12 deletions

View file

@ -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) {

View file

@ -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)
} }