INFO - FAQ - CC2-Forum - CCPro-Forum |
|
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 |