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 

 FwPutSci, FwPutDez, FwPutBin Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von GeKü - 7.11.2010 18:50)
GeKü nutzt:  Open-Macro
Hallo Dietmar,

alles klar, die X-Register-Rettung muß natürlich vor dem Aufruf Deiner Routine erfolgen, da Du ja X unmittelbar - und offensichtlich (ich habe gepennt..) lädst.

Hier die beiden Hilfsroutinen die sowohl den Binärcode als auch die ASCII-Zahl aus Assembler heraus übergeben. Zumindest die Dezimalausgabe hast Du als Betriebsroutine(und sicher eleganter) in den OM-Programmen stecken - das Rad müßte nicht nochmal erfunden werden.... wenn ich den Einsprung dieser und anderer Betriebsroutinen wüßte....

 '  INCLUDE  "D:\Elektron\OpMicr\ExtPorts\om.def"            ' Definitionen fuer die Open-Mini
 ' INCLUDE  "D:\Elektron\OpMicr\ExtPorts\omid.def"          ' und  Open_Midi
   INCLUDE  "D:\Elektron\OpMicr\OM042010\OMAC.def"          ' bzw. Open_Macro

   DEFINE ab BYTE[1]
 #main

   ? "Muster-Nr:";:Input aB
   ?"aB:";aB

 GOSUB  Ausgab
 GOTO main

  PROC Ausgab INLASM
   ! LDA ab              ' lade ab in den Akku
   ! JSR FWPUTBin
   ! LDA ab
   ! JSR FWPutDEz
   ! RTS
' ----------------------------------------------------------------------------------------------------
'   Subroutine: Dezimalausgabe
' DIV: Divides a 16-bit unsigned dividend contained in the concatenated registers H and A by an ' '  8-bit divisor contained in X. The quotient is placed in A, and the remainder is placed in H. The '   divisor  is left unchanged
'---------------------------------------------------------------------------------------------------
 #FwPutDez    'Wert im Akku als Dezimalzahl im Terminalprogramm ausgeben
  ! PSHH               ' Rette H
  ! PSHX               ' Rette X
   ! LDX #100
   ! JSR CLRH_DIC_ORA
   ! BEQ Zehner         ' wenn Z=1 dann gehe zu Zehner
   ! ADD #"0"           ' Akku + "0" => ASCII "0-9"
    ! PSHX
    ! JSR FwPutSci       ' gibt Ziffer 0-9 aus
   ! PULX
   #Zehner
   ! LDX #10
    ! PSHH               ' H nach
   ! PULA               ' Akku
   ! JSR CLRH_DIC_ORA
   ! BEQ Einer          ' wenn Z=1 dann gehe zu Einer
   ! ADD #"0"           ' Akku + "0" => ASCII "0-9"
    ! PSHX
    ! JSR FwPutSci       ' gibt Ziffer 0-9 aus
   ! PULX
   #Einer
   ! PSHH               ' H nach
   ! PULA               ' Akku
   ! ADD #"0"           ' Akku + "0" => ASCII "0-9"
    ! PSHX
    ! JSR FwPutSci       ' gibt Ziffer 0-9 aus
   ! PULX
   ! JSR LF_CR          ' Zeilenvorschub
  ! PULX               ' Bringe H:X wieder
  ! PULH               ' in alten Zustand
  ! RTS
 '----------------------------------------------------------------------------------------
 '    Subroutine: H löschen, Dividieren, nach Null suchen
 '----------------------------------------------------------------------------------------
   #CLRH_DIC_ORA
   ! CLRH              ' Lösche H, da nur das byte in A
   ! DIV                ' dividiert werden soll mit dem Divisor in X
   ! AND #&B11111111    ' SET Z IF RESULT = 0; AND=> 0 bleibt erhalten
   ! RTS

'--------------------------------------------------------------------------------------------
' Subroutine: Binaerausgabe eines Akku-Wertes, keine Änderung von Registern
'--------------------------------------------------------------------------------------------
 #FwPutBin    'Wert im Akku als Binaerzahl im Terminalprogramm ausgeben mit LF&CR
   ! PSHX                     ' X retten
    ! PSHA                     ' Akku retten
    ! LDA #"&"
    ! JSR FwPutSci             ' OMAC-Def-Datei
    ! LDA #"B"                 ' "&B" ausgeben
    ! JSR FwPutSci             '
   ! PULA                     ' Akku restaurieren
   ! LDX #8                   ' Zähler
   #FwPUTBin_Loop
    ! PSHX                     ' Rette X vor FwPutSci
    ! ROLA                     ' links Shift, setzt Cary, restauriert A
     ! PSHA                     ' Rette Akku
     ! LDA #0                  ' Setze Akku auf 0 ohne Carry-Änderung
     ! ADC #48                   ' Addiere Carry dazu
     ! JSR FwPutSci             ' gibt Ziffer 0 o. 1 aus
    ! PULA                     ' restauriere Akku
   ! PULX                     ' restauriere X
   ! DBNZX FwPUTBin_Loop
   ! JSR LF_CR                 ' Zeilenvorschub&Zeilenanfang
   #weiter
   ! PULX                     'Bringe X wieder in alten Zustand
   ! RTS
'---------------------------------------------------------------------
'     Zeilenvorschub & Wagenrücklauf (Line Feed & Carriage Return)
'----------------------------------------------------------------------
    #LF_CR
    ! PSHA                     ' Rette Akku
    ! LDA #10                  ' Line Feed
    ! JSR FwPutSci             '
    ! LDA #13                  ' Cariage Return
    ! JSR FwPutSci             '
    ! PULA                     'Bringe A wieder in alten Zustand
    ! RTS


'#########################################################################

INCLUDE "om_fw.pro"


Beste Grüße, GeKü

 Antwort schreiben

Bisherige Antworten: