Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Assembler u. Inline Assembler jsr Fehlermeldung Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Joe - 14.05.2010 19:44)
Joe nutzt:  CC1-M-Unit V1.1, CC1-Station V2.0, Micro, Open-Micro
Hallo OMICRO INLASM / Assembler Experten,

im 2-ten Programm  unten habe ich  ein Baisc-Programm incl. Assemblerteil  das ursprünglich für die MUNIT 1.1 entwickelt wurde auf die OMICRO übertragen. Dieses Programm habe ich anschliessend auf Inline Assembler für die OMICRO übertragen, s.unten 1-tes Prog.
Erst war es naheliegend bei Inline Assembler dabei ebenfalls den jsr Befehl zu nehmen. Leider kam dabei immer die Fehler-Meldung
"Fuer Warten ist die Definition von UPROGBASE erforderlich"
Im gleichen Verzeichnis, in welchem ich diese Programme habe, ist auch die neueste OM.DEF Datei vom 14.04.2010. In dieser Datei findet sich auch die angefragte Definition
define UPROGBASE &hf47e    ' An dieser Adresse beginnt der virtuelle Adress-
                           ' raum des Tokencodes. Diese Definition wird nur
                           ' fuer Assemblerbefehle mit absoluter Adressierung
                           ' benoetigt (JSR, JMP, LDA label,x ...), aber
                           ' nicht fuer die optimaleren relativen Sprung-
                           ' befehle (BRA, BEQ, BRCLR ...). Ausserdem ermoeg-
                           ' licht diese Definition, dass Labels per SYS
                           ' statt GOSUB aufgerufen werden koennen, was beim
                           ' Aufruf von Assemblerroutinen etwas Zeit spart.
Was mache ich ev. falsch, sodass beim Basic Compilieren die erwähnte Fehlermeldung auftritt.
Nachdem es mit jsr nicht funktionierte, habe ich bsr (dank des Hinweises in der OM.DEF Datei) benutzt und damit funktioniert das Programm nun.

Freundliche Grüsse

Joe Fenk
##### Hinweise zum Erlernen von Assembler ####
Gute Links/Hinweise zum erlernen von  Assembler:
1.  ccintern.harlos.de/download_area//AS05-Assembler//ZIP Archiv///as05.zip//ASSEMBLE.txt ==> alle 5 Programmbeispiele sehr empfehlenswert
2. www.wolfgang-back.com/PDF/Assembler.pdf
4. Buch Messen steuern regeln mit dem C-Control BASIC System; Burkhard kainka; S. 167
3. Manual und Databook zu MC68HC908QY4A von Freescale
4. i-tip.de/ProjektHC08/ProjektHC08.html
5. wiesolator.gotdns.org/sites/wieselsworld-online/index.htm
6. und einige Wochen übrige Zeit
 
In letzter Zeit habe ich mich in Assembler sowie Inline Assembler auf der MUNIT1.1 und OMICRO eingearbeitet.
Es gab dabei einige Stolpersteine.
Bei Assembler mit MUNIT:
Fehler 1: Am Ende des Ass-Programms nach dem rts, hatte ich die RETURN Taste vergessen, deshalb nun am Ende von jedem Ass-Programmteil der Hinweis; in der sehr guten Assembler-Anleitung von D. Harlos ist natürlich darauf hingewiesen!
Fehler 2: Doppelpunkt hinter Label vergessen
Bei Inline Assembler mit OMICRO:
Fehler 1: Statt zum Beispiel lda #24 muss man lda 24 ohne "#" eingeben
Fehler 2: Vor einem Label muss das Zeichen "#" eingefügt werden u. nachdem Label darf kein ":" folgen.

######### 1-tes Prog: Inline Assembler Programmteil #####################################################
' * 1_OM_BAC4.BAS als Beispiel fuer ININE ASSEMBLER
' * nun mit subroutine Warteschleife bsr da mit jsr die Fehlermeldung: Fuer warten ist die Definition von UPROGBASE erforderlich
' * Sa. 15.05.2010 von JFenk neu eingegeben und angepasst auf OMICRO
' * Vorlage LEDON.BAS von Wolfgang Backes LEDON1.S19, 31 Sysbytes
' * ohne subroutine  bsr folgt
' * PortA; Bit 3=Port 4 = LED gruen = AUS = ca. 2,5usec; EIN = ca. 3,4usec und
' * PortA; Bit 4=Port 5 = LED rot   = AUS = ca. 3,4usec; EIN = ca. 2,5usec
' * mit subroutine bsr folgt
' * PortA; Bit 3=Port 4 = LED gruen = AUS = ca. 78msec; EIN = ca. 78msec und
' * PortA; Bit 4=Port 5 = LED rot   = AUS = ca. 78msec; EIN = ca. 78msec
' * 126 Basic-Bytes; 0 Sys-Bytes; 0 RAM-Bytes

Print "Rote LED an Port5 u gruene LED an Port 4 werden abwechselnd schnell EIN/AUS geschaltet"

BLINKEN

END

FUNCTION BLINKEN INLASM
 
!      lda 24         ' der AKKU wird mit Dez 24 = BIN 00011000 geladen; damit Port 4 und 5 angesprochen
!      sta $04        ' die Richtung des Ports 4 und 5: Ausgang
#Nochmal:
!      bclr 03,$00     ' bitclear (ausschalten 1000) von Bit 4 im A-port Port4
!      bset 04,$00     ' bitset (einschalten 10000) von Bit 5 im A-port Port5
!      bsr Warten      ' Zeile 22 statt jsr, bsr eingefuegt; jump subroutine = Verzweigung zu Warten: Fehlermeldung: Fuer Warten ist die Definition von UPROGBASE erforderlich
!      bset 03,$00     ' bitset (einschalten) von Bit 4 im A-port Port 4
!      bclr 04,$00     ' bitclear (ausschalten) von Bit 5 im A-port Port 5
!      bsr Warten      ' Zeile 22 stat jsr, bsr eingefuegt; jump subroutine = Verzweigung zu Warten: Fehlermeldung: Fuer Warten ist die Definition von UPROGBASE erforderlich
!      bra Nochmal     ' branch always = Immer zur Label Nochmal
#Warten
!      lda #255         ' der AKKU wird mit $FF geladen
#loop1
!      ldx #255         ' das X-Register wird mit $FF geladen
#loop2
!      decx             ' X wird um eins verkleinert - decrementiert
!      bne loop2        ' branch not equal- wenn nicht 0, dann loop2
!      deca             ' AKKU um eins verkleinern
!      bne loop1        ' branch not equal nach loop1
!      rts              ' return to subroutine - hier nach blinken
                       ' RETURN Taste muss betaetigt sein, sonst funktioniert es nicht
END FUNCTION  

#### 2-tes Prog: ab hier das Programm mit  Assmebler mittels Sys&HFD00  ##
' * 1_OM_BACS.BAS
' * Sa. 15.05.2010 von JFenk neu eingegeben und angepasst auf OMICRO
' * Assembler mit Sys Aufruf; mit Warteschleifen im Assemblerteil
' * Vorlage LEDON.BAS von Wolfgang Backes LEDON1.S19, 31 Sysbytes
' * Schaltzeiten ohne Wartezeiten im Assemblerteil
' * PortA; Bit 3=Port 4 = LED gruen = AUS = ca. 2,5usec; EIN = ca. 3,4usec und
' * PortA; Bit 4=Port 5 = LED rot   = AUS = ca. 3,4usec; EIN = ca. 2,5usec
' * Schaltzeiten mit Wartezeiten im Assemblerteil
' * PortA; Bit 3=Port 4 = LED gruen = AUS = ca. 78msec; EIN = ca. 78msec und
' * PortA; Bit 4=Port 5 = LED rot   = AUS = ca. 78msec; EIN = ca. 78msec
' * 96 Basic-Bytes; 31 Sys-Bytes; 0 RAM-Bytes

Print "Rote LED an Port5 u gruene LED an Port 4 werden abwechselnd schnelle EIN/AUS geschaltet"

SYS &HFD00        ' Assembleraufruf fuer Blinken der LEDs

END

SYSCODE "1_OM_BAC.S19"
### dazu hier der Assmbler Programmteil ###
org $FD00
 
aport equ $00     ; in Register 0 ist der Wert des Byteports A
apdir equ $04     ; in Register 4 wird die Richtung festgelegt

      lda #255         ; der AKKU wird mit Dez 24 = BIN 00011000 geladen
      sta apdir        ; die Richtung des Ports 4 und 5: Ausgang
blinken:
      bclr #03,aport     ; bitclear (ausschalten 1000) von Bit 4 im A-port Port4
      bset #04,aport     ; bitset (einschalten 10000) von Bit 5 im A-port Port5
      jsr pause        ; jump subroutine = Verzweigung zur Pause
      bset #03,aport     ; bitset (einschalten) von Bit 4 im A-port Port 4
      bclr #04,aport     ; bitclear (ausschalten) von Bit 5 im A-port Port 5
      jsr pause        ; jump subroutine = Verzweigung zur Pause
      bra blinken      ; branch always = Immer zur Subroutine blinken
pause:
      lda #255         ; der AKKU wird mit $FF geladen
loop1:
      ldx #255         ; das X-Register wird mit $FF geladen
loop2:
      decx             ; X wird um eins verkleinert - decrementiert
      bne loop2        ; branch not equal- wenn nicht 0, dann loop2
      deca             ; AKKU um eins verkleinern
      bne loop1        ; branch not equal nach loop1
      rts              ; return to subroutine - hier nach blinken
                       ; RETURN Taste muss betaetigt sein, sonst funktioniert es nicht

 Antwort schreiben

Bisherige Antworten:

Re: Assembler u. Inline Assembler jsr Fehlermeldung (von Dietmar - 16.05.2010 20:54)
    Re: Assembler u. Inline Assembler jsr Fehlermeldung (von Joe - 18.05.2010 18:37)