BST Quelltext in PASM --> CMP a,b

Allgemeine Themen rund um den Propeller Mikrocontroller und Elektronik
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

BST Quelltext in PASM --> CMP a,b

Beitrag von PIC18F2550 »

Irgend was verstehe ich jetzt nicht.

Das wird nichts

Code: Alles auswählen

            mov     tmp1, cd          'Test
            cmp     cd, tmp1    wc, wz
if_z        jmp     #m003             ' temp1=1=Daten
     .....
cd        long  %00000000_00000000_00000_010_00000000
hier ist alles OK

Code: Alles auswählen

            cmp     cd, cd    wc, wz
if_z        jmp     #m003             ' temp1=1=Daten
     .....
cd        long  %00000000_00000000_00000_010_00000000
Warum sind die beiden Routinen nicht in ihren Ergebnis gleich? :shock: :oops:
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
yeti
Beiträge: 2300
Registriert: Fr 27. Aug 2010, 14:48
Wohnort: Wrong Planet
Kontaktdaten:

Re: BST Quelltext in PASM --> CMP a,b

Beitrag von yeti »

Hmmmmm...

Ich bin noch zu unterkoffeiniert für "cogstart" und Co, hab daher FlexSpins Inline-Assembler freiwillig zwangsverpflichtet und das ganze Programm einmal für LMM-PASM und einmal gen Cog-PASM gebacken. Und statt bedingtem Sprung hab ich bedingte "mov"-Befehle bemüht, um den Flag-Zustand in Spin-Variablen umzubetten.

Code: Alles auswählen

$ cat pic.spin
con
  _clkmode = xtal1+pll16x
  _clkfreq = 80_000_000

obj
  ser : "spin/FullDuplexSerial"

pub main
  ser.start(31,30,0,115200)

  moo1
  moo2

  waitcnt(_clkfreq+cnt)
  ser.stop
  cogstop(0)

pub moo1 | cd, tmp1, z, c
  z := c := 0
  cd := %00000000_00000000_00000_010_00000000
  asm
            mov     tmp1, cd          'Test
            cmp     cd, tmp1    wc, wz
if_c        mov     c, #1
if_z        mov     z, #1
  endasm
  ser.str(string("moo1",13, 10, 13, 10))
  ser.str(string("c == "))
  ser.tx(48+c)
  ser.str(string(13, 10, "z == "))
  ser.tx(48+z)
  ser.str(string(13, 10, 13, 10))

pub moo2 | cd, z, c
  z := c := 0
  cd := %00000000_00000000_00000_010_00000000
  asm
            cmp     cd, cd    wc, wz
if_c        mov     c, #1
if_z        mov     z, #1
  endasm
  ser.str(string("moo2",13, 10, 13, 10))
  ser.str(string("c == "))
  ser.tx(48+c)
  ser.str(string(13, 10, "z == "))
  ser.tx(48+z)
  ser.str(string(13, 10, 13, 10))
Kompilert und durchsimuliert für LMM:

Code: Alles auswählen

$ fastspin pic.spin -o pic.lmm.binary
Propeller Spin/PASM Compiler 'FastSpin' (c) 2011-2019 Total Spectrum Software Inc.
Version 3.9.22 Compiled on: Mar  5 2019
pic.spin
|-FullDuplexSerial.spin
pic.lmm.pasm
Done.
Program size is 2216 bytes
$ spinsim -b pic.lmm.binary
moo1

c == 0
z == 1

moo2

c == 0
z == 1

...und für "echtes" Cog-PASM:

Code: Alles auswählen

$ fastspin pic.spin -o pic.cog.binary --code=cog
Propeller Spin/PASM Compiler 'FastSpin' (c) 2011-2019 Total Spectrum Software Inc.
Version 3.9.22 Compiled on: Mar  5 2019
pic.spin
|-FullDuplexSerial.spin
pic.cog.pasm
Done.
Program size is 1560 bytes
$ spinsim -b pic.cog.binary
moo1

c == 0
z == 1

moo2

c == 0
z == 1

...also beide Male kommt, was ich erwarte: "c == 0" und "z == 1"...
Brauch ich mehr Koffein?
Was überseh' ich?

...ich geh jetzt erstmal kühles Früh-O₂ fangen. Das sollt koffeinähnlich gut wirken...
𝖂𝖎𝖗 𝖐𝖔̈𝖓𝖓𝖊𝖓 𝖆𝖑𝖑𝖊𝖘 𝖆𝖚𝖘𝖘𝖊𝖗 𝖎𝖓 𝕱𝖗𝖚̈𝖍𝖑𝖎𝖓𝖌, 𝕾𝖔𝖒𝖒𝖊𝖗, 𝕳𝖊𝖗𝖇𝖘𝖙 𝖚𝖓𝖉 𝖂𝖎𝖓𝖙𝖊𝖗! – 𝕯𝖊𝖚𝖙𝖘𝖈𝖍𝖑𝖆𝖓𝖉.
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"DNA is a four letter word!" — Yeti.
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: BST Quelltext in PASM --> CMP a,b

Beitrag von PIC18F2550 »

... BST ...
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
yeti
Beiträge: 2300
Registriert: Fr 27. Aug 2010, 14:48
Wohnort: Wrong Planet
Kontaktdaten:

Re: BST Quelltext in PASM --> CMP a,b

Beitrag von yeti »

Jetzt mit extravielen JMPs!
Nur heute und in begrenzter Stückzahl!

Code: Alles auswählen

obj
  ser : "spin/FullDuplexSerial"

pub main
  ser.start(31,30,0,115200)

  moo1
  moo2

  waitcnt(_clkfreq+cnt)
  ser.stop
  cogstop(0)

pub moo1 | cd, tmp1, z, c
  z := c := 1
  cd := %00000000_00000000_00000_010_00000000
  asm
            mov     tmp1, cd          'Test
            cmp     cd, tmp1    wc, wz
if_c        jmp     #:c_clear
            mov     c, #0
:c_clear
if_z        jmp     #:z_clear
            mov     z, #0
:z_clear
  endasm
  ser.str(string("moo1",13, 10, 13, 10))
  ser.str(string("c == "))
  ser.tx(48+c)
  ser.str(string(13, 10, "z == "))
  ser.tx(48+z)
  ser.str(string(13, 10, 13, 10))

pub moo2 | cd, z, c
  z := c := 1
  cd := %00000000_00000000_00000_010_00000000
  asm
            cmp     cd, cd    wc, wz
if_c        jmp     #:c_clear
            mov     c, #0
:c_clear
if_z        jmp     #:z_clear
            mov     z, #0
:z_clear
  endasm
  ser.str(string("moo2",13, 10, 13, 10))
  ser.str(string("c == "))
  ser.tx(48+c)
  ser.str(string(13, 10, "z == "))
  ser.tx(48+z)
  ser.str(string(13, 10, 13, 10))

pub moo2 | cd, z, c
  z := c := 1
  cd := %00000000_00000000_00000_010_00000000
  asm
            cmp     cd, cd    wc, wz
if_c        jmp     #:c_is_1
            mov     c, #0
:c_is_1
if_z        jmp     #:z_is_1
            mov     z, #0
:z_is_1
  endasm
  ser.str(string("moo2",13, 10, 13, 10))
  ser.str(string("c == "))
  ser.tx(48+c)
  ser.str(string(13, 10, "z == "))
  ser.tx(48+z)
  ser.str(string(13, 10, 13, 10))
$ fastspin pic-zwo.spin -o pic-zwo.cog.binary --code=cog
Propeller Spin/PASM Compiler 'FastSpin' (c) 2011-2019 Total Spectrum Software Inc.
Version 3.9.22 Compiled on: Mar  5 2019
pic-zwo.spin
|-FullDuplexSerial.spin
pic-zwo.cog.pasm
Done.
Program size is 1560 bytes
$ spinsim -b pic-zwo.cog.binary 
moo1

c == 0
z == 1

moo2

c == 0
z == 1

Ich denk, die LMM-Variante kann entfallen...
𝖂𝖎𝖗 𝖐𝖔̈𝖓𝖓𝖊𝖓 𝖆𝖑𝖑𝖊𝖘 𝖆𝖚𝖘𝖘𝖊𝖗 𝖎𝖓 𝕱𝖗𝖚̈𝖍𝖑𝖎𝖓𝖌, 𝕾𝖔𝖒𝖒𝖊𝖗, 𝕳𝖊𝖗𝖇𝖘𝖙 𝖚𝖓𝖉 𝖂𝖎𝖓𝖙𝖊𝖗! – 𝕯𝖊𝖚𝖙𝖘𝖈𝖍𝖑𝖆𝖓𝖉.
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"DNA is a four letter word!" — Yeti.
Benutzeravatar
yeti
Beiträge: 2300
Registriert: Fr 27. Aug 2010, 14:48
Wohnort: Wrong Planet
Kontaktdaten:

Re: BST Quelltext in PASM --> CMP a,b

Beitrag von yeti »

PIC18F2550 hat geschrieben:... BST ...
Ich dachte PASM ist PASM...

Für Gehampel mit DAT-Block und "cogstart" hab ich noch nicht genug Koffein im Blut...
:-P
𝖂𝖎𝖗 𝖐𝖔̈𝖓𝖓𝖊𝖓 𝖆𝖑𝖑𝖊𝖘 𝖆𝖚𝖘𝖘𝖊𝖗 𝖎𝖓 𝕱𝖗𝖚̈𝖍𝖑𝖎𝖓𝖌, 𝕾𝖔𝖒𝖒𝖊𝖗, 𝕳𝖊𝖗𝖇𝖘𝖙 𝖚𝖓𝖉 𝖂𝖎𝖓𝖙𝖊𝖗! – 𝕯𝖊𝖚𝖙𝖘𝖈𝖍𝖑𝖆𝖓𝖉.
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"DNA is a four letter word!" — Yeti.
Benutzeravatar
yeti
Beiträge: 2300
Registriert: Fr 27. Aug 2010, 14:48
Wohnort: Wrong Planet
Kontaktdaten:

Re: BST Quelltext in PASM --> CMP a,b

Beitrag von yeti »

Und nun zur Ziehung der Lotto-Flags:

Code: Alles auswählen

$ cat pic-dry.spin 
con
  _clkmode = xtal1+pll16x
  _clkfreq = 80_000_000

obj
  ser : "FullDuplexSerial.spin"

pub main | banane

  ser.start(31,30,0,115200)

  banane := cognew(@moo, 0)

  waitcnt(_clkfreq+cnt)

  ser.str(string("moo1 z: "))
  ser.dec(moo1_z)
  ser.str(string(13,10))

  ser.str(string(13,10))

  ser.str(string("moo2 z: "))
  ser.dec(moo2_z)
  ser.str(string(13,10))

  waitcnt(_clkfreq+cnt)
  ser.stop
  cogstop(banane)
  cogstop(0)

dat
		org

cd		long	%00000000_00000000_00000_010_00000000

moo1_z		long	1

tmp1		long	0

moo2_z		long	1

moo

		mov	tmp1, cd
		cmp	cd, tmp1 wz

	if_z	jmp	#moo1_z_is_1
		mov     moo1_z, #0
moo1_z_is_1


		cmp	cd, cd wz

	if_z	jmp	#moo2_z_is_1
		mov	moo2_z, #0
moo2_z_is_1

moo_ret
		ret
$ /opt/bst/bin/bstc -L /opt/parallax.spin.src/spin -b pic-dry.spin
Brads Spin Tool Compiler v0.15.3 - Copyright 2008,2009 All rights reserved
Compiled for i386 Linux at 08:17:46 on 2009/07/20
Loading Object pic-dry
Loading Object FullDuplexSerial.spin
Program size is 880 longs
Compiled 210 Lines of Code in 0.008 Seconds
$ spinsim -b pic-dry.binary 
moo1 z: 1

moo2 z: 1
...wie immer: Ohne Gewähr!

Edit 20100308-0250-GMT: Und dieses Testprogramm ist tatsächlich Mist!
Wer den Fehler sieht, darf sich ihn ausdrucken, grell textmarkern und an den Spiegel im Bad nageln. ;-)


Mit "-Oa" gibt's übrigens gar nix aus. Kein'n Mux!!! Nada!
Mit "-Og" klappts dann wieder...
Mit OpenSpin will's ooch...
Zuletzt geändert von yeti am Fr 8. Mär 2019, 03:50, insgesamt 1-mal geändert.
𝖂𝖎𝖗 𝖐𝖔̈𝖓𝖓𝖊𝖓 𝖆𝖑𝖑𝖊𝖘 𝖆𝖚𝖘𝖘𝖊𝖗 𝖎𝖓 𝕱𝖗𝖚̈𝖍𝖑𝖎𝖓𝖌, 𝕾𝖔𝖒𝖒𝖊𝖗, 𝕳𝖊𝖗𝖇𝖘𝖙 𝖚𝖓𝖉 𝖂𝖎𝖓𝖙𝖊𝖗! – 𝕯𝖊𝖚𝖙𝖘𝖈𝖍𝖑𝖆𝖓𝖉.
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"DNA is a four letter word!" — Yeti.
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: BST Quelltext in PASM --> CMP a,b

Beitrag von PIC18F2550 »

Beim morgendlichen Koffeine schlürfen klopften die "Optionen" an meine Kleinhirnrinde.

Ich denke da sind wir auf dem richtigen Weg.

Werde heute mal Abend mal die Optionen heraus nehmen und mal sehen was BST mir dann an den Kopf wirft.
Zuvor werde ich mal ein Auge in die in die Log-Liste werfen. mal sehen was es mir präsentiert.

Zur not könnte ich noch das SPIN-Tool unter win anwerfen wenn nur das Netzteil vom Schleppi so heiß würde.
Muss ich unbedingt auch mal abändern (20V/6A) :oops:
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: BST Quelltext in PASM --> CMP a,b

Beitrag von PIC18F2550 »

Ich glaub mit tritt BST :shock:

Ich habe das

Code: Alles auswählen

tmp1      res   0
in das geändert

Code: Alles auswählen

tmp1      long  0
und schon geht es!

hat das res eine besondere Bedeutung?
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
kuroneko
Beiträge: 202
Registriert: Sa 22. Okt 2011, 13:05
Wohnort: FN, Germany

Re: BST Quelltext in PASM --> CMP a,b

Beitrag von kuroneko »

Kurze Antwort: ja :)
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: BST Quelltext in PASM --> CMP a,b

Beitrag von PIC18F2550 »

So ich hab die ganzen "res" aus dem DAT Bereich raus geschmissen.
Und schon klappt es mit BST. :)

Code: Alles auswählen

PUB main
  cognew(@m000, 0)

DAT
m000
            waitpeq zero, cs         ' 5     ' Warten bis IRM = inaktiv
            mov     outa, #0
            mov     dira, #0                 ' auf Eingang setzen
            waitpeq cs,   cs         ' 5     ' Warten bis IRM = aktiv
            mov     tmp0, ina
            mov     tmp1, tmp0
            and     tmp0, #$FF
            and     tmp1, mask
            cmp     c3, tmp1    wz
if_z        jmp     #c11
            cmp     c2, tmp1    wz
if_z        jmp     #c10
            cmp     c1, tmp1    wz
if_z        jmp     #c01
            cmp     c0, tmp1    wz
if_z        jmp     #c00
            jmp     #m000
c10 'Status auslesen
            or      dira,   port                 ' auf Ausgang setzen
            mov     outa,   stat
            jmp     #m000
c11 'Daten auslesen
            or      dira,   port                 ' auf Ausgang setzen
            mov     outa,   rdat
            jmp     #m000
c00 'Command schreiben
            mov     stat,   tmp0
            jmp     #m000
c01 'Daten schreiben
            mov     rdat,   tmp0
            jmp     #m000
zero      long  %00000000_00000000_00000_000_00000000
cs        long  %00000000_00000000_00000_001_00000000
mask      long  %00000000_00000000_00000_111_00000000
c0        long  %00000000_00000000_00000_001_00000000
c1        long  %00000000_00000000_00000_011_00000000
c2        long  %00000000_00000000_00000_101_00000000
c3        long  %00000000_00000000_00000_111_00000000
port      long  %00000000_00000000_00000_000_11111111
tmp0      long  0
tmp1      long  0
stat      long  0
comm      long  0
rdat      long  0
wdat      long  0
Dateianhänge
20190307_220155.jpg
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Antworten