Ver Mensaje Individual
Antiguo 28/07/2007, 04:14   #8
vishero 
ZFU-4788-02
 
Fecha de ingreso: 27/dic/2002
Mensajes: 1.146
vishero es realmente agradablevishero es realmente agradablevishero es realmente agradablevishero es realmente agradable
Hex v2.5 Final (27.07.2007) para el Pic 16F84 y 16F84A by Vinix:
(no contiene HOT-CODE)

SL35_SO_FB_WDT_V2_5.HEX
Código:
:020000040000FA
:020000001928BD
:080008009800030E99000108A5
:100010009A0064001714971081018316C430810080
:1000200083128B10190E8300980E180E0B168B1767
:1000300009006400AA131F3085008316850083120F
:10004000813086008316860083128316C4308100B7
:10005000831286140611061606136400A501861B7A
:10006000A5174922861B482864008B130508A600A3
:1000700026189828A6189B2826199E280608803935
:100080002506031D2D2806180616061C0612342800
:1000900064000B309300D7309500970196019A01C8
:1000A000A301A4016400060880392506031D2D283C
:1000B0000B168B176400171C5E286E28050807397D
:1000C000A60026181429A618172926191A29060881
:1000D00080392506031D2D2864005B289714971886
:1000E0006F2864001A081502031C77287928161453
:1000F0007A281610930B7D288128960D971464009A
:100100006F28640000309300640083121308890094
:100110008316081483120808940016081406031D99
:1001200092281D29930A22301306031D842848288B
:100130001E30A800A1282830A800A1282A30A80035
:10014000A128291CA428AE28F730900006126D22A1
:100150000616D620F520D6202914B828F7309000AE
:1001600006126D220616D620D620D6202910B828D1
:100170000830A700A81FD328D620A80DA70BBA289F
:10018000003090006D22003090006D220030900011
:100190006D22003090006D22003090006D22003002
:1001A00090006D223428F520A80DBE281C30900048
:1001B0006D22F930900006126D2200000000000050
:1001C000000000000000000000000000000000002F
:1001D000000000000000000000000000000000001F
:1001E000000000000000061608006A3090006D2232
:1001F000F930900006126D2200000000000000009F
:1002000000000000000000000000000000000000EE
:1002100000000000000000000000000000000000DE
:100220000000000006160800003093001D290D3064
:1002300093001D29113093001D298616640021307A
:1002400013060319752AAA1B772A1308A200A30113
:1002500064003E2264002308A400AA1F3929C73085
:10026000A40703300318013E8A002408C7239B001B
:100270004229CB30A40702300318013E8A0024082B
:10028000CB229B00A30AA40164002308A400AA1F98
:100290005329C730A40703300318013E8A002408FD
:1002A000C7239C005C29CB30A40702300318013E11
:1002B0008A002408CB229C00A30AA401640023081E
:1002C000A400AA1F6D29C730A40703300318013EFC
:1002D0008A002408C7239D007629CB30A40702306A
:1002E0000318013E8A002408CB229D00A30AA40122
:1002F00064002308A400AA1F8729C730A40703307D
:100300000318013E8A002408C7239E009029CB30A1
:10031000A40702300318013E8A002408CB229E0065
:10032000A30AA40164002308A400AA1FA129C730BE
:10033000A40703300318013E8A002408C7239F0046
:10034000AA29CB30A40702300318013E8A002408F2
:10035000CB229F00A30AA40164002308A400AA1FC3
:10036000BB29C730A40703300318013E8A002408C4
:10037000C723A000C429CB30A40702300318013ED4
:100380008A002408CB22A000A30AA4016400230849
:10039000A400AA1FD629C730A40703300318013EC2
:1003A0008A002408C723A100AA13DF29CB30A407A1
:1003B00002300318013E8A002408CB22A100A401C8
:1003C00064000822E6211422861248280730930090
:1003D00030220830930030221B08930030221C0882
:1003E000930030221D08930030221E089300302213
:1003F0001F08930030222008930030220130930020
:10040000302221089300302201309300302208006E
:100410000612003090006D22D73090006D22061633
:10042000753090006D2208000616053093000030EC
:1004300090006D22930B172A7D3090006D220612DA
:10044000013090006D22E13090006D220616BD3023
:1004500090006D220612E93090006D220616080009
:100460000612E93090006D220616F23090006D22DF
:10047000930B302AD03090006D2208000030220605
:100480000319472A2308073EA300A20B422AA30A06
:10049000080014309100861B512A05309200061383
:1004A000542A033092000617861008309300110D6D
:1004B0000318861591006922930B572A0830930080
:1004C000120D0318861592006922930B602A861478
:1004D0000800061506118611080009309400940BD7
:1004E0006F2A6400900F6D2A0800AA17482864003C
:1004F000163013060319992A1730130603199C2A7C
:10050000183013060319A02A193013060319A42A58
:100510001A3013060319A82A1B3013060319AC2A34
:100520001C3013060319B02A1D3013060319B42A10
:10053000482800309300B72A013093006400B72A9E
:10054000023093006400B72A033093006400B72A96
:10055000043093006400B72A053093006400B72A82
:10056000063093006400B72A073093006400252901
:0A05960082000334023405340234FD
:1005A000023401340134023401340334063401349A
:1005B0000234013402340134023401340634033489
:1005C000013404340234043401340234023401347A
:1005D0000434043402340134023401340234023469
:1005E0000134013402340734023401340234033458
:1005F0000134053401340334013403340534023446
:100600000234013401340234033403340434023438
:100610000134023401340234063403340134013429
:100620000134023408340234013401340134013419
:100630000234053401340434013401340334013408
:1006400002340134013401340934013401340234F8
:1006500001340234073402340134013402340434E6
:1006600005340134013402340134023402340134DB
:1006700006340334013401340634043401340134C3
:1006800001340234013403340134013405340434B8
:1006900001340134023401340134013401340934A9
:1006A0000134033401340134013404340534013499
:1006B0000234023401340134053404340134033487
:1006C0000134023404340334023401340234093472
:1006D0000134013401340134013403340734023469
:1006E0000134013401340134023401340934013459
:1006F0000134013401340434063401340234013449
:100700000134013402340234073402340134013438
:100710000134033401340634033401340134013428
:100720000234013401340934013401340134053414
:100730000534013401340234013401340234033409
:1007400006340134023401340134033402340134F8
:1007500004340234033401340A34013401340134E2
:1007600001340134013402340234043403340234D9
:04077000013402341A
:02078E008200E7
:1007900002340134013404340534013402340234A7
:1007A0000134053404340134013402340334013497
:1007B0000434023403340134023404340434023483
:1007C0000134023401340234043401340134043479
:1007D0000134043401340434013405340134033465
:1007E0000134013402340234023405340234023458
:1007F0000134023402340434033402340134023448
:02400E00F53F7C
:104200001E00100022001900140032001A002600BF
:104210002000300027002F0037002800210029004F
:1042200031002A0023001B002E00180035002D004D
:1042300025001D0034002C0024001C003300360033
:104240002B001F00560049004E0049005800200076
:0842500032003000300037009D
:00000001FF
Se acuerdan cuando posteabamos los hex para las PIC1...
Que tiempos aquellos!!!...

Código fuente de la v2.4, el de la v2.5 no estaba:
(Solo como verificación del contenido del HEX)

SL35_SO_FB_WDT_V2_4.asm
Código:
; Init Sequenzer für PCM1742 DAC in SL35 und SL35/1CI
; FB Code Swaper für Comag an Truman Software auf SL35 und SL35/1CI
; Abfrage ob Truman Firmware oder Orginal Firmware benutzt werden soll
; Orginal Fernbedienung von Comag auf Truman Firmware
; SOFTWARE VERSION 2.04
;
; 26.06.2007 by VINIX
; 27.06.2007 Abfrage ob Truman FIRMWARE oder COMAG Firmware benutzt wird hinzugefügt,Sound INIT "professionalisiert" ;-)
; 28.06.2007 FB Emulator COMAG FB auf Truman FIRMWARE hinzugefügt
; 02.07.2007 Emulator Implementiert
; 06.07.2007 Interrupt Versuch RB0, Hardware Modifiziert
; 07.07.2007 Tabelle Vervollständigt und Optimiert
; 08.07.2007 IR Indikator bleibt in der Software / war Urrsprünglich nur zum Test Eingebaut / ist aber auch so nützlich 
; 09.07.2007 Mode Abfrage zur Laufzeit 
; 10.07.2007 WDT Implementiert (soll ein "Hängen" der FB bei längerer Nichtbenutzung Verhindern)
;			 Hintergrund ist die Empfindlichkeit des IR Empfängers. Dieser Reagiert auf alle Impulse, dadurch kann es
;			 Vorkommen das die Software in der Datenempfangs Routine, die Interruptgesteuert ist, "Gefangen" ist.
;			 Sollte das Passieren so wird der WDT nach ca. 10 - 20 mS nicht mehr gelöscht und dieser Löst dann ein
;			 RESET aus und der Controller begint wieder von Vorne.
; 14.07.2007 Tabelleadressberechnung verbessert
; 20.07.2007 Fronttastatur Funktion über FB EMU zum Portpin Sparen für den TRUMAN und den COMAG Mode Eingebaut  


; PORTBELEGUNG des PIC 16F84:
; ===========================
; Hardware Version 2_4
;
; RA 0 = POWER				(EINGANG)
; RA 1 = UP					(EINGANG)
; RA 2 = DOWN 				(EINGANG)
; RA 3 = NC					(EINGANG)
; RA 4 = NC					(EINGANG)
;
; RB 0 = IR_IN				(EINGANG)    INTERRUPT EINGANG !
; RB 1 = ML/15 Data Latch	(AUSGANG)	  
; RB 2 = MC/14 CLOCK		(AUSGANG)  
; RB 3 = MD/13 DATA			(AUSGANG)  
; RB 4 = FBC_OUT	 		(AUSGANG)
; RB 5 = LED IR AKTIV		(AUSGANG)	
; RB 6 = LED C/T			(AUSGANG)
; RB 7 = Truman Enable		(EINGANG)   / Hinzugefügt um bei FB EMU implementation eine Möglichkeit zu haben die
;										/ Orginal Firmware wieder Benutzen zu können ohne den Verlust der FB Funktion
;										/ wenn die Versorgungsspannung vom Pic genommen würde.


	TITLE	"SL35_FB.ASM"
	include "p16f84.inc"
	LIST	P=16F84
        __CONFIG _CP_OFF & _WDT_ON & _XT_OSC & _PWRTE_ON

     
; Fileregister Definieren für Konastanten und Variablen
; =====================================================
VERKO	EQU	0x10				; Speicher der Verzögerungsdurchläufe	
FDIX	EQU	0x11				; First out / MSB also Register Index
LDDX	EQU 0x12				; Last out / LSB also Register Data
ZWI		EQU	0x13				; Zwischenspeicher für Vergleichsroutine usw.
ZWI2	EQU	0x14				; Zwischenspeicher 2 für Vergleichsroutine usw.
ENT		EQU	0x15				; Entscheidungszahl
IRIN1	EQU	0x16				; Speicher für das 16 Bit LSB Empfangsbyte
FIRST	EQU 0x17				; Interrupt Durchlauf Flag's
W_TEMP	EQU	0x18				; TEMPFILE Work
STA_TMP	EQU	0x19				; TEMPFILE Status
ZEIT	EQU 0x1A				; TMR0 Speicher nach Interrupt
TCA1	EQU 0x1B				; Truman Code Ausgabe 1'te Byte
TCA2	EQU 0x1C				; Truman Code Ausgabe 2'te Byte
TCA3	EQU 0x1D				; Truman Code Ausgabe 3'te Byte
TCA4	EQU 0x1E				; Truman Code Ausgabe 4'te Byte
TCA5	EQU 0x1F				; Truman Code Ausgabe 5'te Byte
TCA6	EQU 0x20				; Truman Code Ausgabe 6'te Byte
TCA8	EQU 0x21				; Truman Code Ausgabe 8'te Byte
MULTI	EQU	0x22				; Multiplikator
ERGEB	EQU 0x23				; Tabellen Index Comag
VV		EQU	0x24				; Tabellensprungadresse aus Comag Index und Truman Code Table 
ITE		EQU	0x25				; INIT TEST Register / Mode Umschaltung
FRONTP	EQU	0x26				; Frontpanel Abfrage
SCHI	EQU	0x27				; SCHLEIFENZÄHLER COMAG
IHCS	EQU	0x28				; COMAG TASTENSPEICHER
WETA	EQU	0x29				; COMAG Zwischenspeicher für den Wechsel der Präambel im Comag FB / Frontpanel Mode

		ORG	0					; RESET VECTOR (Hauptprogramm)
		GOTO	HAUPTPROGRAMM	 

; ################################################################################################################################

; INTERRUPT SERVICE ROUTINEN (werden Aufgerufen sobald eine Interrupt Kondition erfüllt wurde)
; ============================================================================================
        ORG	4					; Start der Interrupt Routine

; PUSH (Retten von System Registern vor dem Interrupt)
; ====================================================
		MOVWF	W_TEMP			; Work FR Sichern 
		SWAPF	STATUS, W		; STATUS ins W Register 
		MOVWF	STA_TMP			; STATUS im Temporary File Speichern 

; Hier wird Abgefragt welche Quelle den Interrupr Ausgelöst hat:
; ==============================================================
; In diesem Programm wird nur der INT am RB0 Benutzt, deshalb frei

; Register für die Spätere Verarbeitung Sichern:
; ==============================================
		MOVF	TMR0,W			; Timerwert sichern PRIORITÄT, die Größe ist equivalent des Bitzustandes Kurz = 0 / Lang = 1
		MOVWF	ZEIT			; Zeit bis zum Auslösen des Interrupt Speichern

; Watchdog Löschen wenn Interrupr Ausgelöst wird:
; ===============================================
		CLRWDT					; Watchdog Löschen

; Startimpuls Flag setzen:
; ========================
		BSF		FIRST,0			; Schleifenflag setzen, wenn 0 dann ist das der Start des FB Telegramm (Startimpuls)

; Daten Flag	Löschen:
; ======================
		BCF		FIRST,1			; Flag Löschen	

; TMR0 Löschen:
; =============
		CLRF	TMR0			; TMR0 0

; TMR0 Neu Starten, da nach einem Schreibzugriff /CLRF ist auch Schreiben/ der Vorteiler Automatisch auf 1:2 Gesetzt wird:
; ========================================================================================================================
		BSF		STATUS,RP0		; Page Select 0
		MOVLW	B'11000100'		; Option Register laden mit: Pullup AUS / INT bei 0->1 / RTCC auf INTERN / Prescaler 1:32
		MOVWF	OPTION_REG		; In das Option Register schreiben 
		BCF		STATUS,RP0		; Page Select 1

; Löschen des Interrupt Flags für RB0
; ===================================
		BCF		INTCON,INTF		; Interrupt Flag Löschen (WICHTIG, da sonst sofort nach RETFIE wieder ein INT Ausgelöst wird)

; POP (Zurückschreiben von System Registern nach dem Interrupt)
; =============================================================
		SWAPF	STA_TMP, W		; STATUS in das W
		MOVWF	STATUS			; STATUS Restaurieren
		SWAPF	W_TEMP,F		; Nibble Tauschen und im FR speichern
		SWAPF	W_TEMP,W		; Nibbles Tauschen im W Register Speichern
		BSF		INTCON,INTE		; RB-0 Interrupt Einschalten 
		BSF		INTCON,GIE		; Generell Interrupt Enable 
		RETFIE					; Rücksprung vom Interrupt 

; #################################################################################################################################

; Hier Startet das HAUPTPROGRAMM
; ==============================
HAUPTPROGRAMM:
; Watchdog Löschen:
; =================
		CLRWDT					; Watchdog Löschen
		
; Port A initialisieren und Tris Register setzten
; ===============================================
; 			  1 = EINGANG
;             0 = AUSGANG
;             BIT 76543210
		MOVLW	B'00011111'		; APORT PIN 0 - 4 Eingang
		MOVWF	PORTA			; an den PORT Anlegen
		BSF		STATUS,RP0		; Page Select ausführen 1
		MOVWF	TRISA			; ins Tris Register übernehmen
		BCF		STATUS,RP0		; Page select wieder auf 0

; Port B initialisieren und Tris Register setzten
; ===============================================
; 			  1 = EINGANG
;             0 = AUSGANG
;             BIT 76543210
		MOVLW	B'10000001'		; BPORT Pin 0 und 7 Ausgang, 1 - 6 Ausgang
		MOVWF	PORTB			; an den PortB legen
		BSF		STATUS,RP0		; Page select ausführen 1
		MOVWF	TRISB			; PortB lesen und ins TRIS Register schreiben
		BCF		STATUS,RP0		; Page select wieder auf 0
		
; TMR0 und Prescaler definieren
; =============================
; Bit Value		TMR0 Rate  t/count bei 4 MHz
; ------------------------------------------
; 		000		1:2		  		2 uS
;		001		1:4		  		4 uS
;		010		1:8		  		8 uS
;		011		1:16	 		16 uS
;		100		1:32	 		32 uS
;		101		1:64	 		64 uS
;		110		1:128			128 uS
;		111		1:256			256 uS

		BSF		STATUS,RP0		; Page Select 0
		MOVLW	B'11000100'		; Option Register laden mit: Pullup AUS / INT bei Wechsel von 0->1 / RTCC auf INTERN / Prescaler 1:32
		MOVWF	OPTION_REG		; In das Option Register schreiben 
		BCF		STATUS,RP0		; Page Select 1

; Portpins für den PCM1742 Labeln:
; ================================
; ACHTUNG HARDWARE GEÄNDERT WEGEN INTERRUPT EINGANG IR AUF RB0:
; =============================================================
#DEFINE ML		PORTB,1			; PCM 1742KE Latch 
#DEFINE MC		PORTB,2			; PCM 1742KE Clock 
#DEFINE MD		PORTB,3			; PCM 1742KE Data

; Portpins für den IR Empfänger und Fernbedienung Ausgang COMAG Labeln:
; =====================================================================
#DEFINE IR		PORTB,0			; Infrarot FB Eingangssignal von der Frontplatine
#DEFINE FBC		PORTB,4			; FB Ausgang zum ALI vom Emulator

; Portpins für den IR Indikator LED Labeln:
; =========================================
#DEFINE LEDI	PORTB,5			; LED IR Indikator (Blinkt bei Empfang von der Fernbedienung)  

; Portpins für den Wahlschalter Firmware und Anzeige LED Labeln:
; ==============================================================
#DEFINE LED		PORTB,6			; LED AUS = COMAG Firmware / LED AN = Truman Firmware  
#DEFINE TB		PORTB,7			; Schalter Eingang Comag oder Truman Firmware

; Anweisung für den Compiler / MPASM Microchip 
; ============================================
#DEFINE	TABLELENGTH	d'238'		; Tabellelänge der Codes

; Grundzustände Herstellen, egal ob Truman Firmware oder Comag Firmware:
; ======================================================================
		BSF		ML				; Latch ist aktiv Low, Ruhezustand High
		BCF		MC				; Clock ist aktiv High, Ruhezustand Low
		BSF		FBC				; FBC ist aktiv LOW, Ruhezustand High
		BCF		LED				; LED Ausgeschaltet beim Einschalten des Receivers am Netzschalter

; Grundeinstellung nach dem Einschalten Speichern:
; ================================================
REINIT: CLRWDT					; Watchdog Löschen
		CLRF	ITE				; LÖSCHEN
		BTFSC	TB				; Aktuellen MODE Speichern
		BSF		ITE,7			; 1 Speichern

; PCM 1742 KE Initialisieren:
; ===========================
		CALL	PCMINIT			; SOUNDINI Auswahl des Modes nun in der INIT Routine

; Truman Software Enable Abfragen, um Festzustellen ob die FB Emulation laufen soll oder nur Signale Relayed werden / HIGH = Truman / LOW = SL35:
; ======================================================================================================================================================
		BTFSC	TB				; Zeiter Test ob HIGH, wenn LOW (COMAG Ausgewählt) Überspringe nächste Zeile
		GOTO	FBEMU			; Springe in die Fernbedienungsemulation COMAG FB auf TRUMAN Firmware

; Truman Bit war nicht gesetzt, 		
; COMAG Fernbedienung für COMAG Orginal Firmware bzw. Truman, es werden nur die Eingangszustände auf den Ausgang gelegt:
; ======================================================================================================================
COMAG:	CLRWDT					; Watchdog Löschen
		BCF		INTCON,GIE		; Generell Interrupt Disable (sonst würde ein IR Signal diese Routine Stören)
		MOVF	PORTA,W			; Port A Einlesen
		MOVWF	FRONTP			; Speichern im FR 
		BTFSC	FRONTP,0		; Auf 0 Testen / wenn 0 dann POWER Auslösen
		GOTO	FCPOWER			; Funktion POWER 
		BTFSC	FRONTP,1		; Auf 0 Testen / wenn 0 dann CH UP Auslösen
		GOTO	FCUP			; Funktion UP
		BTFSC	FRONTP,2		; Auf 0 Testen / wenn 0 dann CH DOWN Auslösen
		GOTO	FCDOWN			; Funktion DOWN
		MOVF	PORTB,W			; Gesammten Port B Einlesen
		ANDLW	b'10000000'		; Bit 7 Filtern 
		XORWF	ITE,W			; Neuen Zustand mit Alten Zustand Vergleichen
		BTFSS	STATUS,Z		; Zero Flag = 1 / MODE hat nicht gewechselt, Keine Reinitialisierung Notwendig
		GOTO	REINIT			; Zero Flag = 0 / MODE hat gewechselt, Reinitialisiere			
		BTFSC	IR				; IR Eingang Abfragen, wenn 0 dann nächste Zeile Überspringen
		BSF		FBC				; FB AUSGANG zum COMAG auf High setzen 
		BTFSS	IR				; IR EINGANG Abfragen, wenn 1 dann nächste Zeile Überspringen
		BCF		FBC				; FB AUSGANG zum COMAG auf LOW setzen
		GOTO	COMAG			; Do it Forever / bis zum Nächsten Ausschalten über den Netzschalter

; #############################################################################################################################
; Ab hier wirds TRICKY ( Tricky... Tricky... Tricky ...its Tricky 
; Schlaflose Nächte, Viereckige Augen, der Penetrante Geruch von durch Lötspitzen verbrannten Fingern, Hurra wir Basteln
; #############################################################################################################################
; IR Empfänger mit Hilfe der Interruptroutine Abfragen und Auswerten:
; ===================================================================
FBEMU:	MOVLW	d'11'			; Anzahl der Bits im Datentelegramm der COMAG Fernbedienung
		MOVWF	ZWI				; Speichere im Zwischenspeicher für die Bit Abzählschleife
		MOVLW	d'215'			; Operationswert für die Ermittlung des Bitzustandes Anhand der Impulslänge
		MOVWF	ENT				; Speichern im FR
		CLRF	FIRST			; Merker für den Startimpuls Löschen

; Auswertungs Register Löschen (alte Werte):
; ==========================================
		CLRF	IRIN1			; Löschen des 'alten' Inhaltes 
		CLRF	ZEIT			; TMR0 Zwischenspeicher Löschen
		CLRF	ERGEB			; Speicher für Comag Index Löschen 
		CLRF	VV				; Adressoffset für den Tabellensprung Löschen
		CLRWDT					; Watchdog Löschen (alle 15 - 18 mS) sonst RESET

; Prüfen ob der Mode gewechselt werden soll:
; ==========================================
		MOVF	PORTB,W			; Gesammten Port B NEU Einlesen
		ANDLW	b'10000000'		; Unrelevante Bit's Ausblenden (Nur Bit 7 Interessant)
		XORWF	ITE,W			; Nun den NEUEN Zustand mit dem ALTEN Vergleichen
		BTFSS	STATUS,Z		; Zero Flag = 1 / MODE hat nicht gewechselt, Keine Reinitialisierung Notwendig
		GOTO	REINIT			; Zero Flag = 0 / MODE hat gewechselt, Reinitialisiere			

; Interrupt Quelle Wählen:
; ========================
		BSF		INTCON,INTE		; RB-0 Interrupt Einschalten 

; Ab jetzt Interrupt Erlauben:
; ============================
		BSF		INTCON,GIE		; Generell Interrupt Enable 
		CLRWDT					; Watchdog Löschen nur zur Sicherheit	
; Startimpuls Filtern (Flag wird in der Interruptroutine gesetzt):     
; ================================================================
STAIMP:	BTFSS	FIRST,0			; Warten auf den ersten Interrupt (Startimpuls)		
		GOTO	MCII			; Zwischendurch das Frontpannel und den Mode Schalter Überprüfen
		GOTO	WWW				; Startimpuls der FB Empfangen, nun zum Datenempfang Springen

; Prüfen ob der Mode gewechselt werden soll:
; ==========================================
MCII:	MOVF	PORTA,W			; Port A Einlesen
		ANDLW	b'00000111'		; Nur RA 0-2 Filtern
		MOVWF	FRONTP			; Speichern im FR 
		BTFSC	FRONTP,0		; Auf 0 Testen / wenn 1 dann POWER Auslösen
		GOTO	FPOWER			; Funktion POWER 
		BTFSC	FRONTP,1		; Auf 0 Testen / wenn 1 dann CH UP Auslösen
		GOTO	FUP				; Funktion UP
		BTFSC	FRONTP,2		; Auf 0 Testen / wenn 1 dann CH DOWN Auslösen
		GOTO	FDOWN			; Funktion DOWN
		MOVF	PORTB,W			; Gesammten Port B NEU Einlesen
		ANDLW	b'10000000'		; Unrelevante Bit's Ausblenden (Nur Bit 7 Interessant)
		XORWF	ITE,W			; Nun den NEUEN Zustand mit dem ALTEN Vergleichen
		BTFSS	STATUS,Z		; Zero Flag = 1 / MODE hat nicht gewechselt, Keine Reinitialisierung Notwendig
		GOTO	REINIT			; Zero Flag = 0 / MODE hat gewechselt, Reinitialisiere		
		GOTO	STAIMP			; Nein, der Erste Interrupt ist noch nicht Aufgetreten, Erneut auf FI Warten
		
; Flag für Datenimpuls setzen:
; ============================
WWW:	BSF		FIRST,1			; STARTIMPULS VORBEI 0000 = Programmstart / 0001 = Startimpuls OK / 0011 = im Datenempfang  			

; Abfrage ob Datenempfang mit Hilfe des 'Datenempfang Flag's':		
; ============================================================
DAIMP:	BTFSC	FIRST,1			; Prüfen ob der nächste Interupt Ausgelöst wurde
		GOTO	DAIMP			; Nein, Warte auf Interrupt
	
; FUZZY LOGIC ZEIT (Impulslänge) Auswerten und Entsprechenden Bitzustand Zuweisen:
; ================================================================================
FLA:	CLRWDT					; Watchdog Löschen
		MOVF	ZEIT,W			; Inhalt TMR0 von Interrupt1 zu Inerrupt2 in das Work kopieren
		SUBWF	ENT,W			; TMR0 - ENT = + XXX (1) oder -XXX (0)  
		BTFSS	STATUS,C		; Carry ist 1 wenn Ergebniss negativ => 0 wurde Empfangen 						
		GOTO	SEIR1			; CARRY = 0 / LANG / Bitzustand ist 1 gehe Zuweisen 
		GOTO	SEIR0			; CARRY = 1 / KURZ / Bitzustand ist 0 gehe Zuweisen

; Empfangenes Bit war eine 1:
; ===========================
SEIR1:	BSF		IRIN1,0			; LSB Bit 0 auf 1 Setzen
		GOTO	FER				; Weiter zum Prüfen ob weitere Bit's Empfangen werden müßen

; Empfangenes Bit war eine 0:
;============================
SEIR0:	BCF		IRIN1,0			; LSB Bit 0 auf 0 Setzen 

; Prüfen ob alle 11 Bit's Empfangen wurden:
; =========================================
FER:	DECFSZ	ZWI,F			; Bitzähler -1
		GOTO	WEITER			; Noch nicht alle Bit's Empfangen
		GOTO	AUWEIA			; Alle 11 Bit's Empfangen nun zur Auswertung und Codewandlung gehen

; Schieben der FR NACH Bitzähler:		
; ===============================
WEITER:	RLF		IRIN1,F			; Nach Links Schieben für den Empfang des nächsten Bit
		BSF		FIRST,1			; Datenempfang Flag wieder setzen, wurde im Interrupt gelöscht  			
		CLRWDT					; Watchdog Löschen
		GOTO	DAIMP			; Zurück zur Abfrage da noch nicht alle Bit's Empfangen wurden


; Alle 11 Bits sind nun in den Registern IRIN1 und IRIN2, nun an die Auswertung
; =============================================================================
; IRIN2 enthält nur einen Indikator für das Wechseln der Codefunktion:
; z.B.: Als 1'stes 'POWER' Taste Gedrückt IRN2 = 0000 0111 danach als 2'tes 'OK' Taste Gedrückt IRN2 = 0000 0101
; Dies wird hier nicht Gebraucht und deshalb braucht man das IRIN2 eigentlich nicht.
; DANKE an KOSOVO für den Hinweis 

; FB COMAG Code wird aus dem EEPROM geholt und in einer Zählschleife Vergleichen.
; Stimmt der Empfangene Code mit einem COMAG Code dann addiere Zählerinhalt zum PC und hole Ausgabedaten im Trumanformat
; Wenn der Empfangene Code <> COMAG Code dann Ignorieren und erneut zur IR Abfrage Wechseln
; ACHTUNG: Wer 'TURBO ZAPPER' ist, der sollte sich eine Truman FB Kaufen, dies ist eine NOTLÖSUNG !
; Auch bitte keine Kritik das ab und zu die FB nicht Reagiert, siehe Oben.

; Wer es besser machen kann, sollte das Tun (!) und mir eine Kopie des Source Senden, ich Lernen gerne auch noch dazu.


; CODEVERGLEICH COMAG FERNBEDIENUNG:
; ==================================
AUWEIA:	CLRWDT					; Watchdog Löschen
		MOVLW	d'00'			; Lade den Schleifenzähler mit der Ersten Adresse für das EEPROM
		MOVWF	ZWI				; Speichere im Schleifenzähler

; Daten aus dem EEPROM Holen:
; ===========================
LOS:	CLRWDT					; Watchdog Löschen
		BCF		STATUS,RP0		; Bank select 0
		MOVF	ZWI,W			; EEPROM Speicherstelle die Gelesen werden soll in das W Kopieren
		MOVWF	EEADR			; In das EEPROM Adressregister Schreiben
		BSF		STATUS,RP0		; Bank select 1
		BSF		EECON1,RD		; EEprom Lesen
		BCF		STATUS,RP0		; Bank select 0
		MOVF	EEDATA,W		; Lade WORK mit Bitmuster für die Taste XXX aus dem EEprom
		MOVWF	ZWI2			; Speichere im Zwischenspeicher
		
; Hier findet der Vergleich Statt:
; ================================
		MOVF	IRIN1,W			; Lade W mit IRIN1 zum Vergleichen
		XORWF	ZWI2,W			; Exclusiv Oder Verknüpfen und Ergebniss im W speichern
		BTFSS	STATUS,Z		; Sind beide Wert identisch so wird das Zero Flag gesetzt / Überspringe nächste Zeile 
		GOTO	LNT				; Der Vergleich war negativ, Lade nächste Bitfolge aus dem EEPROM 
		GOTO	AUTRUFO			; Vergleich war positiv, Aktueller Wert in ZWI ist nun der INDEX für die Tabelle CODE TRUMAN Format

; Nächster Tastencode aus dem EEprom Holen:
; =========================================
LNT:	INCF	ZWI,F			; Schleifenzähler +1 (Index +1)
		MOVLW	d'33'			; Max 34 Befehle Vergleichen ( 0 - 33 )
		XORWF	ZWI,W			; Exclusiv ODER mit Work 
		BTFSS	STATUS,Z		; Sind beide Wert identisch so wird das Zero Flag gesetzt / Überspringe nächste Zeile
		GOTO	LOS				; Hole den nächsten Wert aus dem EEPROM
		
; Kein Zeichen aus dem EEprom stimmt mit dem Empfangenen Zeichen Überein, gehe zurück zur FB Abfrage
; ==================================================================================================
		GOTO	FBEMU			; FB erneut Abfragen

; Frontpannel Auslöse Routine für den COMAG MODE:
; ===============================================

; POWER TASTE Manuel Ausgelöst:
; =============================
FCPOWER:MOVLW	d'30'			; EEprom Speicherinhalt direkt Eingeben
		MOVWF	IHCS			; IM FR Speichern	
		GOTO	COMAAA			; Ausgabe Aufrufen 

; UP TASTE
; ========
FCUP:	MOVLW	d'40'			; EEprom Speicherinhalt direkt Eingeben
		MOVWF	IHCS			; IM FR Speichern	
		GOTO	COMAAA			; Ausgabe Aufrufen

; DOWN TASTE
; ==========
FCDOWN:	MOVLW	d'42'			; EEprom Speicherinhalt direkt Eingeben
		MOVWF	IHCS			; IM FR Speichern	
		GOTO	COMAAA			; Ausgabe Aufrufen

; Hier wird der zur Taste gehörende FB Code an den IR Eingang im COMAG Format Ausgegeben:
; ======================================================================================= 
COMAAA: BTFSS	WETA,0			; Wechsel Taste Speicher / Präambelwechsel wie Orginal
		GOTO	FIRS			; 101
		GOTO	LAST			; 111

FIRS:	MOVLW	d'247'			; Verzögerungszeit für 300 uS
		MOVWF	VERKO			; Speichere in der Verzögerungskonstante
		BCF		FBC				; LOW IMPULS von 300 uS (Start Impuls)
		CALL	VERZO			; Verzögerung Abarbeiten
		BSF		FBC				; HIGH Zustand Wiederherstellen
		CALL	COEI			; 1 Ausgeben
		CALL	CONU			; 0 Ausgeben
		CALL	COEI			; 1 Ausgeben
		BSF		WETA,0			; wechsel merker
		GOTO	COSI			; weiter

LAST:	MOVLW	d'247'			; Verzögerungszeit für 300 uS
		MOVWF	VERKO			; Speichere in der Verzögerungskonstante
		BCF		FBC				; LOW IMPULS von 300 uS (Start Impuls)
		CALL	VERZO			; Verzögerung Abarbeiten
		BSF		FBC				; HIGH Zustand Wiederherstellen
		CALL	COEI			; 1 Ausgeben
		CALL	COEI			; 1 Ausgeben
		CALL	COEI			; 1 Ausgeben
		BCF		WETA,0			; wechsel merker
		GOTO	COSI			; weiter

; Präambel gesendet, nun den FB CODE Senden:
; ==========================================
COSI:	MOVLW	d'08'			; 8 BIT Ausgeben
		MOVWF	SCHI			; Speichern im Schleifenregister
PCB:	BTFSS	IHCS,7			; Bitzustand Prüfen
		GOTO	HELO			; LOW AUSGABE
		CALL	COEI			; 1 Ausgeben
		RLF		IHCS,F			; Nach Links Schieben, MSB FIRST
MEW:	DECFSZ	SCHI,F			; 8 Bit fertig ?
		GOTO	PCB				; Prüfe Comag BIT
		MOVLW	d'00'			; Volle Verzögerung 
		MOVWF	VERKO			; Verzögerung
		CALL	VERZO			; Verzögerung
		MOVLW	d'00'			; Verzögerung
		MOVWF	VERKO			; Verzögerung
		CALL	VERZO			; Verzögerung
		MOVLW	d'00'			; Verzögerung
		MOVWF	VERKO			; Verzögerung
		CALL	VERZO			; Verzögerung
		MOVLW	d'00'			; Verzögerung
		MOVWF	VERKO			; Verzögerung
		CALL	VERZO			; Verzögerung
		MOVLW	d'00'			; Verzögerung
		MOVWF	VERKO			; Verzögerung
		CALL	VERZO			; Verzögerung
		MOVLW	d'00'			; Verzögerung
		MOVWF	VERKO			; Verzögerung
		CALL	VERZO			; Verzögerung
		GOTO	COMAG			; zurück zur Comag Routine

HELO:	CALL	CONU			; Null Ausgeben
		RLF		IHCS,F			; Nach Links Schieben
		GOTO 	MEW				; Zurück zum Bitzähler

; CODE Ausgabe im Comag Mode für Frontpanel Tasten im FB Format:
; ==============================================================

; COMAG EINS
COEI:	MOVLW	d'28'			; Verzögerungszeit für 1 = 7,3 mS
		MOVWF	VERKO			; Speichere in der Verzögerungskonstante
		CALL	VERZO			; Verzögerung Abarbeiten
		MOVLW	d'249'			; Verzögerungszeit für 300 uS
		MOVWF	VERKO			; Speichere in der Verzögerungskonstante
		BCF		FBC				; LOW IMPULS von 300 uS
		CALL	VERZO			; Verzögerung Abarbeiten
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		BSF		FBC				; HIGH Zustand Wiederherstellen
		RETURN					; Zurück zum Aufrufenden Programmteil
		
; COMAG NULL
CONU:	MOVLW	d'106'	
		MOVWF	VERKO			; Speichere in der Verzögerungskonstante
		CALL	VERZO			; Verzögerung Abarbeiten
		MOVLW	d'249'			; Verzögerungszeit für 300 uS
		MOVWF	VERKO			; Speichere in der Verzögerungskonstante
		BCF		FBC				; LOW IMPULS von 300 uS
		CALL	VERZO			; Verzögerung Abarbeiten
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		NOP						; Feinjustierung der Zeit auf 1 uS Genau
		BSF		FBC				; HIGH Zustand Wiederherstellen
		RETURN					; Zurück zum Aufrufenden Programmteil

; Frontpannel Auslöse Routine für den TRUMAN MODE:
; ================================================

; POWER TASTE Manuel Ausgelöst:
; =============================
FPOWER:	MOVLW	d'00'			; EEprom Speicherstelle direkt Auswählen
		MOVWF	ZWI				; IM FR Speichern	
		GOTO	AUTRUFO			; Ausgabe Aufrufen 

; UP TASTE
; ========
FUP:	MOVLW	d'13'			; EEprom Speicherstelle direkt Auswählen
		MOVWF	ZWI				; IM FR Speichern	
		GOTO	AUTRUFO			; Ausgabe Aufrufen

; DOWN TASTE
; ==========
FDOWN:	MOVLW	d'17'			; EEprom Speicherstelle direkt Auswählen
		MOVWF	ZWI				; IM FR Speichern	
		GOTO	AUTRUFO			; Ausgabe Aufrufen

; Mit Hilfe des Schleifenzählers ist nun die Funktion Adressierbar, hier wird mit Hilfe des ZWI der zu Sendene TRUMAN Code 
; aus einer Tabelle geholt und auf den IR Eingang des COMAG Ausgegeben
; ======================================================================================================================== 
AUTRUFO:BSF		LEDI			; Erreichen dieser Position mit LED Anzeigen (Kann später auch al FB Indikator benutzt werden)
		MOVF	ZWI,W			; Lade Aktuelle Position des Schleifendurchlaufs (0 - 33)
		MOVWF	MULTI			; Multiplikator
		CLRF	ERGEB			; Ergebnis der letzten Adressoffset Berechnung für das Tabellenlesen Löschen
		CLRWDT					; Watchdog Löschen
; Berechne die Startadresse für ein Lesen aus der CODE Tabelle Equivalent zum Ermittelten Comag CODE Index:
; =========================================================================================================
		CALL	AOERM			; Tabellen Offset Berechnen (pro Index + 7 Stellen)
		CLRWDT					; Watchdog Löschen

; Hier findet der Eigentliche Sprung in die Tabelle statt:
; ========================================================
; 1'te Speicherstelle Auslesen
; ============================
		MOVF	ERGEB,W			; Tabellen Offset über das W Register nach VV
		MOVWF	VV				; Kopieren um den Orginal Inhalt von ERGEB nicht zu Verändern
		MOVLW	LOW	TABLE		; Lade untere Adresse der Tabelle
		ADDWF	VV,F			; Addiere Offset mit Tabellenadresse
		MOVLW	HIGH TABLE		; Lade obere Adresse der Tabelle
		BTFSC	STATUS,C		; Prüfe ob die Obere Adresse in der 2'ten Bank ist
		ADDLW	d'01'			; JA, Addiere 1 zum Program Counter Latch
		MOVWF	PCLATH			; Speichere im PCL
		MOVF	VV,W			; Kopiere Offset ins Work
		CALL	TABLE			; Hole Byte aus der Tabelle von Position VV und kehre mit DATA XX im W zurück
		MOVWF	TCA1			; 1'te Byte für die Spätere Verarbeitung in der Senderoutine Speichern
		INCF	ERGEB,F			; Erhöhe Adresse um eins (es müßen ja 7 Bytes gelesen werden)
		CLRF	VV				; Lösche die Alte Berechnung des Sprungadresse
		CLRWDT					; Watchdog Löschen

; 2'te Speicherstelle Auslesen
; ============================
		MOVF	ERGEB,W			; Tabellen Offset über das W Register nach VV
		MOVWF	VV				; Kopieren um den Orginal Inhalt von ERGEB nicht zu Verändern
		MOVLW	LOW	TABLE		; Lade untere Adresse der Tabelle
		ADDWF	VV,F			; Addiere Offset mit Tabellenadresse
		MOVLW	HIGH TABLE		; Lade obere Adresse der Tabelle
		BTFSC	STATUS,C		; Prüfe ob die Obere Adresse in der 2'ten Bank ist
		ADDLW	d'01'			; JA, Addiere 1 zum Program Counter Latch
		MOVWF	PCLATH			; Speichere im PCL
		MOVF	VV,W			; Kopiere Offset ins Work
		CALL	TABLE			; Hole Byte aus der Tabelle von Position VV und kehre mit DATA XX im W zurück
		MOVWF	TCA2			; 2'te Byte für die Spätere Verarbeitung in der Senderoutine Speichern 
		INCF	ERGEB,F			; Erhöhe Adresse um eins (es müßen ja 7 Bytes gelesen werden)
		CLRF	VV				; Lösche die Alte Berechnung des Sprungadresse
		CLRWDT					; Watchdog Löschen

; 3'te Speicherstelle Auslesen
; ============================
		MOVF	ERGEB,W			; Tabellen Offset über das W Register nach VV
		MOVWF	VV				; Kopieren um den Orginal Inhalt von ERGEB nicht zu Verändern
		MOVLW	LOW	TABLE		; Lade untere Adresse der Tabelle
		ADDWF	VV,F			; Addiere Offset mit Tabellenadresse
		MOVLW	HIGH TABLE		; Lade obere Adresse der Tabelle
		BTFSC	STATUS,C		; Prüfe ob die Obere Adresse in der 2'ten Bank ist
		ADDLW	d'01'			; JA, Addiere 1 zum Program Counter Latch
		MOVWF	PCLATH			; Speichere im PCL
		MOVF	VV,W			; Kopiere Offset ins Work
		CALL	TABLE			; Hole Byte aus der Tabelle von Position VV und kehre mit DATA XX im W zurück
		MOVWF	TCA3			; 3'te Byte für die Spätere Verarbeitung in der Senderoutine Speichern
		INCF	ERGEB,F			; Erhöhe Adresse um eins (es müßen ja 7 Bytes gelesen werden)
		CLRF	VV				; Lösche die Alte Berechnung des Sprungadresse
		CLRWDT					; Watchdog Löschen

; 4'te Speicherstelle Auslesen
; ============================
		MOVF	ERGEB,W			; Tabellen Offset über das W Register nach VV
		MOVWF	VV				; Kopieren um den Orginal Inhalt von ERGEB nicht zu Verändern
		MOVLW	LOW	TABLE		; Lade untere Adresse der Tabelle
		ADDWF	VV,F			; Addiere Offset mit Tabellenadresse
		MOVLW	HIGH TABLE		; Lade obere Adresse der Tabelle
		BTFSC	STATUS,C		; Prüfe ob die Obere Adresse in der 2'ten Bank ist
		ADDLW	d'01'			; JA, Addiere 1 zum Program Counter Latch
		MOVWF	PCLATH			; Speichere im PCL
		MOVF	VV,W			; Kopiere Offset ins Work
		CALL	TABLE			; Hole Byte aus der Tabelle von Position VV und kehre mit DATA XX im W zurück
		MOVWF	TCA4			; 4'te Byte für die Spätere Verarbeitung in der Senderoutine Speichern
		INCF	ERGEB,F			; Erhöhe Adresse um eins (es müßen ja 7 Bytes gelesen werden)
		CLRF	VV				; Lösche die Alte Berechnung des Sprungadresse
		CLRWDT					; Watchdog Löschen

; 5'te Speicherstelle Auslesen
; ============================
		MOVF	ERGEB,W			; Tabellen Offset über das W Register nach VV
		MOVWF	VV				; Kopieren um den Orginal Inhalt von ERGEB nicht zu Verändern
		MOVLW	LOW	TABLE		; Lade untere Adresse der Tabelle
		ADDWF	VV,F			; Addiere Offset mit Tabellenadresse
		MOVLW	HIGH TABLE		; Lade obere Adresse der Tabelle
		BTFSC	STATUS,C		; Prüfe ob die Obere Adresse in der 2'ten Bank ist
		ADDLW	d'01'			; JA, Addiere 1 zum Program Counter Latch
		MOVWF	PCLATH			; Speichere im PCL
		MOVF	VV,W			; Kopiere Offset ins Work
		CALL	TABLE			; Hole Byte aus der Tabelle von Position VV und kehre mit DATA XX im W zurück
		MOVWF	TCA5			; 5'te Byte für die Spätere Verarbeitung in der Senderoutine Speichern
		INCF	ERGEB,F			; Erhöhe Adresse um eins (es müßen ja 7 Bytes gelesen werden)
		CLRF	VV				; Lösche die Alte Berechnung des Sprungadresse
		CLRWDT					; Watchdog Löschen

; 6'te Speicherstelle Auslesen
; ============================
		MOVF	ERGEB,W			; Tabellen Offset über das W Register nach VV
		MOVWF	VV				; Kopieren um den Orginal Inhalt von ERGEB nicht zu Verändern
		MOVLW	LOW	TABLE		; Lade untere Adresse der Tabelle
		ADDWF	VV,F			; Addiere Offset mit Tabellenadresse
		MOVLW	HIGH TABLE		; Lade obere Adresse der Tabelle
		BTFSC	STATUS,C		; Prüfe ob die Obere Adresse in der 2'ten Bank ist
		ADDLW	d'01'			; JA, Addiere 1 zum Program Counter Latch
		MOVWF	PCLATH			; Speichere im PCL
		MOVF	VV,W			; Kopiere Offset ins Work
		CALL	TABLE			; Hole Byte aus der Tabelle von Position VV und kehre mit DATA XX im W zurück
		MOVWF	TCA6			; 6'te Byte für die Spätere Verarbeitung in der Senderoutine Speichern
		INCF	ERGEB,F			; Erhöhe Adresse um eins (es müßen ja 7 Bytes gelesen werden)
		CLRF	VV				; Lösche die Alte Berechnung des Sprungadresse
		CLRWDT					; Watchdog Löschen

; 7'te Speicherstelle Auslesen
; ============================
		MOVF	ERGEB,W			; Tabellen Offset über das W Register nach VV
		MOVWF	VV				; Kopieren um den Orginal Inhalt von ERGEB nicht zu Verändern
		MOVLW	LOW	TABLE		; Lade untere Adresse der Tabelle
		ADDWF	VV,F			; Addiere Offset mit Tabellenadresse
		MOVLW	HIGH TABLE		; Lade obere Adresse der Tabelle
		BTFSC	STATUS,C		; Prüfe ob die Obere Adresse in der 2'ten Bank ist
		ADDLW	d'01'			; JA, Addiere 1 zum Program Counter Latch
		MOVWF	PCLATH			; Speichere im PCL
		MOVF	VV,W			; Kopiere Offset ins Work
		CALL	TABLE			; Hole Byte aus der Tabelle von Position VV und kehre mit DATA XX im W zurück
		MOVWF	TCA8			; 7'te Byte für die Spätere Verarbeitung in der Senderoutine Speichern
		CLRF	VV				; Lösche die Alte Berechnung des Sprungadresse
		CLRWDT					; Watchdog Löschen

; Ausgabe zum IR Eingang der COMAG Hardware:
; ==========================================
		CALL	TRUSTA			; Truman IR Startsequenz Ausgeben
		CALL	CODAUS			; Truman CODE Ausgeben 
		CALL	TRUSTO			; Truman Stopsequenz Ausgeben
		BCF		LEDI			; LED IR Indikator wieder Ausschalten wenn die Aussendung zum COMAG Erfolgt ist

; Alles Erledigt, Frage Fernbedienung erneut ab und Warte auf einen Befehl:
; =========================================================================
		GOTO	FBEMU			; Zurück zum Anfang

; Routine zur Codeausgabe im Truman Format: 
; =========================================
CODAUS: MOVLW	d'7'			; 1. Byte zu Senden (Inhalt 07)	ist ein Statischer Wert, d.h. er ist in jedem Code immer gleich !
		MOVWF	ZWI				; Übergabe an die Ausgabe Routine mit Hilfe unseren Zwischenspeichers
		CALL	BYAUS			; Bytes Ausgeben auf FBC
		MOVLW	d'8'			; 2. Byte Senden (Inhalt = 08) ist ein Statischer Wert, d.h. er ist in jedem Code immer gleich !
		MOVWF	ZWI				; Übergabe an die Ausgabe Routine mit Hilfe unseren Zwischenspeichers
		CALL	BYAUS			; Bytes Ausgeben auf FBC
		MOVF	TCA1,W			; 3. Byte Senden, (Inhalt = XX) wurde aus der Tabelle Gelesen
		MOVWF	ZWI				; Übergabe an die Ausgabe Routine mit Hilfe unseren Zwischenspeichers
		CALL	BYAUS			; Bytes Ausgeben auf FBC
		MOVF	TCA2,W			; 4. Byte Senden, (Inhalt = XX) wurde aus der Tabelle Gelesen
		MOVWF	ZWI				; Übergabe an die Ausgabe Routine mit Hilfe unseren Zwischenspeichers
		CALL	BYAUS			; Bytes Ausgeben auf FBC
		MOVF	TCA3,W			; 5. Byte Senden, (Inhalt = XX) wurde aus der Tabelle Gelesen
		MOVWF	ZWI				; Übergabe an die Ausgabe Routine mit Hilfe unseren Zwischenspeichers
		CALL	BYAUS			; Bytes Ausgeben auf FBC
		MOVF	TCA4,W			; 6. Byte Senden, (Inhalt = XX) wurde aus der Tabelle Gelesen
		MOVWF	ZWI				; Übergabe an die Ausgabe Routine mit Hilfe unseren Zwischenspeichers
		CALL	BYAUS			; Bytes Ausgeben auf FBC
		MOVF	TCA5,W			; 7. Byte Senden, (Inhalt = XX) wurde aus der Tabelle Gelesen
		MOVWF	ZWI				; Übergabe an die Ausgabe Routine mit Hilfe unseren Zwischenspeichers
		CALL	BYAUS			; Bytes Ausgeben auf FBC
		MOVF	TCA6,W			; 8. Byte Senden, (Inhalt = XX) wurde aus der Tabelle Gelesen
		MOVWF	ZWI				; Übergabe an die Ausgabe Routine mit Hilfe unseren Zwischenspeichers
		CALL	BYAUS			; Bytes Ausgeben auf FBC
		MOVLW	d'1'			; 9. Byte zu Senden (Inhalt 01)	ist ein Statischer Wert, d.h. er ist in jedem Code immer gleich !
		MOVWF	ZWI				; Übergabe an die Ausgabe Routine mit Hilfe unseren Zwischenspeichers
		CALL	BYAUS			; Bytes Ausgeben auf FBC
		MOVF	TCA8,W			; 10. Byte Senden, (Inhalt = XX) wurde aus der Tabelle Gelesen 
		MOVWF	ZWI				; Übergabe an die Ausgabe Routine mit Hilfe unseren Zwischenspeichers
		CALL	BYAUS			; Bytes Ausgeben auf FBC
		MOVLW	d'1'			; 11. Byte zu Senden (Inhalt 01)	ist ein Statischer Wert, d.h. er ist in jedem Code immer gleich !
		MOVWF	ZWI				; Übergabe an die Ausgabe Routine mit Hilfe unseren Zwischenspeichers
		CALL	BYAUS			; Bytes Ausgeben auf FBC
		RETURN

; Startsequenz im Trumanformat: Low für 9,1 mS gefolgt von High für 4,4 mS
; ======================================================================== 
TRUSTA:	BCF		FBC				; FB Ausgang zum Receiver auf Low setzen
		MOVLW	d'00'			; Vorladen mit 0 ist nicht Stabil, da wir auf ZERO Flag testen, deshalb mit 1 Vorladen
		MOVWF	VERKO			; In das FR für die Verzögerungszeit Kopieren
		CALL	VERZO			; Verzögerungsroutine Aufrufen
		MOVLW	d'215'			; Vorladen 928 uS
		MOVWF	VERKO			; In das FR für die Verzögerungszeit Kopieren
		CALL	VERZO			; Verzögerungsroutine Aufrufen
		BSF		FBC				; FB Ausgang zum Receiver auf High setzen
		MOVLW	d'117'			; Vorladen für 4,4 mS
		MOVWF	VERKO			; In das FR für die Verzögerungszeit Kopieren
		CALL	VERZO			; Verzögerungsroutine Aufrufen
		RETURN					; Zurück zum Aufrufenden Programmteil

; Stopsequenz im Trumanformat: High für 46,5 mS gefolgt von Low für 9,1 mS danach High für 2,1 mS und Low für 700 uS.
; ===================================================================================================================
TRUSTO: BSF		FBC				; FB Ausgang zum Receiver auf High setzen
		MOVLW	d'05'			; Durchlaufschleifenzähler Laden
		MOVWF	ZWI				; im Zwischregister speichern
GACK:	MOVLW	d'00'			; Vorladen mit 8,61 mS 
		MOVWF	VERKO			; In das FR für die Verzögerungszeit Kopieren 
		CALL	VERZO			; Verzögerungsroutine Aufrufen
		DECFSZ	ZWI,F			; Schleifenzähler -1, auf 0 Testen und bei 0 nächste Zeile Überspringen
		GOTO	GACK			; Schleifenzähler ist noch nicht 0, also nochmal das ganze
		MOVLW	d'125'			; Vorladen 4,16 mS
		MOVWF	VERKO			; In das FR für die Verzögerungszeit Kopieren
		CALL	VERZO			; Verzögerungsroutine Aufrufen
		BCF		FBC				; FB Ausgang zum Receiver auf Low setzen
		MOVLW	d'01'			; Vorladen mit 0 ist nicht Stabil, da wir auf ZERO Flag testen, deshalb mit 1 Vorladen
		MOVWF	VERKO			; In das FR für die Verzögerungszeit Kopieren
		CALL	VERZO			; Verzögerungsroutine Aufrufen
		MOVLW	d'225'			; Vorladen 960 uS  
		MOVWF	VERKO			; In das FR für die Verzögerungszeit Kopieren
		CALL	VERZO			; Verzögerungsroutine Aufrufen
		BSF		FBC				; FB Ausgang zum Receiver auf High setzen
		MOVLW	d'189'			; Vorladen 2,1 mS
		MOVWF	VERKO			; In das FR für die Verzögerungszeit Kopieren
		CALL	VERZO			; Verzögerungsroutine Aufrufen
		BCF		FBC				; FB Ausgang zum Receiver auf Low setzen
		MOVLW	d'233'			; Vorladen 704 uS
		MOVWF	VERKO			; In das FR für die Verzögerungszeit Kopieren
		CALL	VERZO			; Verzögerungsroutine Aufrufen
		BSF		FBC				; Ruhezustand Wiederherstellen
		RETURN					; Zurück

; Byteausgabe im Trumanformat: Low für die Dauer von 700 uS, gefolgt von High für die Dauer von 400 uS LOW
; =======================================================================================================
BYAUS:	BCF		FBC				; FB Ausgang zum Receiver auf LOW setzen
		MOVLW	d'233'			; Vorladen 736 uS 
		MOVWF	VERKO			; In das FR für die Verzögerungszeit Kopieren
		CALL	VERZO			; Verzögerungsroutine Aufrufen
		BSF		FBC				; IR EMU Ausgang auf High 
		MOVLW	d'242'			; Vorladen 416 uS
		MOVWF	VERKO			; In das FR für die Verzögerungszeit Kopieren
		CALL	VERZO			; Verzögerungsroutine Aufrufen
		DECFSZ	ZWI,F			; Bitzähler -1, wenn 0 Überspringe nächste Zeile
		GOTO	BYAUS			; von vorne, noch nicht alle Bit's Übertragen
		MOVLW 	d'208'			; Vorladen 1,536 mS
		MOVWF	VERKO			; In das FR für die Verzögerungszeit Kopieren
		CALL	VERZO			; Verzögerungsroutine Aufrufen
		RETURN					; zurück zum Aufrufenden Programmteil

; Einfache Adressoffset Berechnung:
; =================================
AOERM:	
; Zuerst Prüfen ob der Index 0 ist, dann ist die Startadresse der Tabelle = 1
		MOVLW	d'0'			; Vergleichswert Laden
		XORWF	MULTI,W			; Vergleichen
		BTFSC	STATUS,Z		; Prüfen ob gleich
		GOTO 	WEIA			; Ja Inhalt ist 0, nun nur Ergebniss +1 als Startadresse
LUS:	MOVF	ERGEB,W			; Ergebnis der Adressberechnung ins W Laden
		ADDLW	d'07'			; Ergebnis +7
		MOVWF	ERGEB			; Speicher Ergebnis der Addition zurück in Ergebnis
		DECFSZ	MULTI,F			; Index -1, Wenn Index = 0 dann Überspringe nächste Zeile
		GOTO	LUS				; Index muß weiter Erhöht werden		
WEIA:	INCF	ERGEB,F			; ERGEBNIS = ERGEBNIS +1
		RETURN					; Zurück zum Aufrufenden Programmteil

; NEUE Init Sequenz des PCM DAC mit Wechsel des MODE:
; ===================================================
; Neue Modeumschaltung, läuft jetzt auch ohne Ausschalten am Netzschalter
; PCM 1742 Adress und Daten Register Zuweisen:
; ============================================
PCMINIT:MOVLW	H'14'			; Register 20 (h14) Audio Data Format Control
		MOVWF	FDIX			; im Speicher Ablegen
		BTFSC	TB				; Auswahl Mode Abfragen
		GOTO	TRUSO			; Truman Sound INIT

; COMAG SOUND INIT:
; =================
		MOVLW	H'05'			; B0 / B1 / B2 = 101 FMT SET to 16-24 BIT Std., Left Justified Format
		MOVWF	LDDX			; im Speicher Ablegen
		BCF		LED				; Kontroll Lampe für den COMAG MODE Ausschalten
		GOTO 	GOGO			; Zur Initialisierung gehen

; TRUMAN SOUND INIT:
; ==================
TRUSO:	MOVLW	H'03'			; B0 / B1 / B2 = 011 FMT SET to 16 BIT Std., RSV set to Zero, FLT default 0, RSV set to Zero
		MOVWF	LDDX			; im Speicher Ablegen
		BSF		LED				; Kontroll Lampe für den TRUMAN MODE Einschalten

; PCM Latch auf LOW setzen für Datenübernahme:
; ============================================
GOGO:	BCF		ML				; Latch des PCM auf LOW setzen

; MSB FIRST zuerst das REGISTER INDEX
; ===================================
		MOVLW	h'08'			; Lade Work mit Anzahl der Auszugebenden Bit's (Bitzähler Wert 8)
		MOVWF	ZWI				; speichere Zwischen
		
NNF1:	RLF		FDIX,W			; Indexbyte nun Bitweise nach Links durch das CARRY Schieben und im W Register speichern
		BTFSC	STATUS,C		; Carry Flag des Status Register prüfen ob eine 0 oder 1 als MD gesendet werden soll
		BSF		MD				; Carry war 1 also setze DATA auf HIGH
		MOVWF	FDIX			; Speichere Inhalt vom W zurück ins FR 
		CALL	AUSGABE			; Gebe auf MD aus
		DECFSZ	ZWI,F			; Bitzähler -1, wenn 0 Überspringe nächste Zeile
		GOTO	NNF1			; Bitzähler ist < 0, noch nicht alle Bits Ausgewertet und gesendet, Schleife 

; MSB FIRST nun das DATAS REGISTER
; ================================
		MOVLW	h'08'			; Lade Work mit Anzahl der Auszugebenden Bit's (Bitzähler Wert 8)
		MOVWF	ZWI				; speichere Zwischen
		
NNF2:	RLF		LDDX,W			; Datenbyte nun Bitweise nach Links durch das CARRY Schieben und im W Register speichern
		BTFSC	STATUS,C		; Carry Flag des Status Register prüfen ob eine 0 oder 1 als MD gesendet werden soll
		BSF		MD				; Setze MD auf HIGH
		MOVWF	LDDX			; Speichere Inhalt vom W zurück ins FR
		CALL	AUSGABE			; Gebe auf MD aus
		DECFSZ	ZWI,F			; Bitzähler -1, wenn 0 Überspringe nächste Zeile
		GOTO	NNF2			; Bitzähler ist < 0, noch nicht alle Bits Ausgewertet und gesendet, Schleife

; Daten sind gesendet, nun Latch des PCM wieder auf HIGH setzen zum Übernehmen der Daten
; ======================================================================================
		BSF		ML				; Latch auf High setzen
		RETURN					; zurück zum Hauptprogramm

; Clock Leitung des PCM High / Low schalten
; =========================================
AUSGABE:BSF		MC				; Clock High
		BCF		MC				; Clock Low	
		BCF		MD				; MD zuücksetzen
		RETURN

; NEUE VERZÖGERUNGS ROUTINE OHNE TMR0 (32 uS pro Teiler / Kalibrierbar in der ersten Zeile)
; =========================================================================================
VERZO:	MOVLW	d'09'			; Lade aktuellen Wert des Timers (24 +8 uS bei 4 MHz)			
		MOVWF	ZWI2			; Speichere im 2'ten Zwischenspeicher				
VER1:	DECFSZ	ZWI2,F			; Inhalt von ZWI2 -1, wenn Null Überspringe die nächste Zeile		
		GOTO	VER1			; Weiter Verzögern 
		CLRWDT					; Watchdog Löschen
		INCFSZ	VERKO,F			; Inhalt von VERKO +1, wenn Null Überspringe nächste Zeile		
		GOTO 	VERZO			; Nochmaliger Durchlauf der Verzögerungsroutine
		RETURN					; Zuück zum Aufrufenden Programmteil 				

; Speicherort in Ram / für den Compiler
; =====================================
	ORG	0x2D9

; Tabelle der TRUMAN Codes von 1 - 34 Korospondiert mit dem im EEPROM gespeicherten COMAG Codes:
; ==============================================================================================
TABLE:	MOVWF	PCL									
		DT	d'3', d'2', d'5', d'2', d'2', d'1', d'1'	; TRUMAN CODE 1		POWER
		DT	d'2', d'1', d'3', d'6', d'1', d'2', d'1'	; TRUMAN CODE 2		ROT
		DT	d'2', d'1', d'2', d'1', d'6', d'3', d'1'	; TRUMAN CODE 3		GRÜN
		DT	d'4', d'2', d'4', d'1', d'2', d'2', d'1'	; TRUMAN CODE 4		GELB
		DT	d'4', d'4', d'2', d'1', d'2', d'1', d'2'	; TRUMAN CODE 5		BLAU
		DT	d'2', d'1', d'1', d'2', d'7', d'2', d'1'	; TRUMAN CODE 6		SAT
		DT	d'2', d'3', d'1', d'5', d'1', d'3', d'1'	; TRUMAN CODE 7		TV/SAT
		DT	d'3', d'5', d'2', d'2', d'1', d'1', d'2'	; TRUMAN CODE 8		EPG
		DT	d'3', d'3', d'4', d'2', d'1', d'2', d'1'	; TRUMAN CODE 9		WEIß
		DT	d'2', d'6', d'3', d'1', d'1', d'1', d'2'	; TRUMAN CODE 10	EXIT
		DT	d'8', d'2', d'1', d'1', d'1', d'1', d'2'	; TRUMAN CODE 11	MENU
		DT	d'5', d'1', d'4', d'1', d'1', d'3', d'1'	; TRUMAN CODE 12	P/N
		DT	d'2', d'1', d'1', d'1', d'9', d'1', d'1'	; TRUMAN CODE 13	MUTE
		DT	d'2', d'1', d'2', d'7', d'2', d'1', d'1'	; TRUMAN CODE 14	CH UP
		DT	d'2', d'4', d'5', d'1', d'1', d'2', d'1'	; TRUMAN CODE 15	V-
		DT	d'2', d'2', d'1', d'6', d'3', d'1', d'1'	; TRUMAN CODE 16	OK
		DT	d'6', d'4', d'1', d'1', d'1', d'2', d'1'	; TRUMAN CODE 17	V+
		DT	d'3', d'1', d'1', d'5', d'4', d'1', d'1'	; TRUMAN CODE 18	CH DOWN
		DT	d'2', d'1', d'1', d'1', d'1', d'9', d'1'	; TRUMAN CODE 19	P+
		DT	d'3', d'1', d'1', d'1', d'4', d'5', d'1'	; TRUMAN CODE 20	P-
		DT	d'2', d'2', d'1', d'1', d'5', d'4', d'1'	; TRUMAN CODE 21	RECALL
		DT	d'3', d'1', d'2', d'4', d'3', d'2', d'1'	; TRUMAN CODE 22	FAV
		DT	d'2', d'9', d'1', d'1', d'1', d'1', d'1'	; TRUMAN CODE 23	1
		DT	d'3', d'7', d'2', d'1', d'1', d'1', d'1'	; TRUMAN CODE 24	2
		DT	d'2', d'1', d'9', d'1', d'1', d'1', d'1'	; TRUMAN CODE 25	3
		DT	d'4', d'6', d'1', d'2', d'1', d'1', d'1'	; TRUMAN CODE 26	4
		DT	d'2', d'2', d'7', d'2', d'1', d'1', d'1'	; TRUMAN CODE 27	5
		DT	d'3', d'1', d'6', d'3', d'1', d'1', d'1'	; TRUMAN CODE 28	6
		DT	d'2', d'1', d'1', d'9', d'1', d'1', d'1'	; TRUMAN CODE 29	7
		DT	d'5', d'5', d'1', d'1', d'2', d'1', d'1'	; TRUMAN CODE 30	8
		DT	d'2', d'3', d'6', d'1', d'2', d'1', d'1'	; TRUMAN CODE 31	9
		DT	d'3', d'2', d'1', d'4', d'2', d'3', d'1'	; TRUMAN CODE 32	INFO
		DT	d'10', d'1', d'1', d'1', d'1', d'1', d'1'	; TRUMAN CODE 33	0
		DT	d'2', d'2', d'4', d'3', d'2', d'1', d'2'	; TRUMAN CODE 34	SHIFT (ex. PAUSE)

; Über Shift "PAUSE" und Tast XX Erreichbar				; TRUMAN    / COMAG
; ==========================================================================
		DT  d'2', d'1', d'1', d'4', d'5', d'1', d'2'	; F1		/ 1
		DT  d'2', d'1', d'5', d'4', d'1', d'1', d'2'	; F2		/ 2
		DT  d'3', d'1', d'4', d'2', d'3', d'1', d'2'	; HELP		/ 3
		DT	d'4', d'4', d'2', d'1', d'2', d'1', d'2'	; BLAU		/ 4
		DT  d'4', d'1', d'1', d'4', d'1', d'4', d'1'	; LUPE		/ 5
		DT	d'4', d'1', d'5', d'1', d'3', d'1', d'1'	; UHF		/ 6
		DT  d'2', d'2',	d'2', d'5', d'2', d'2', d'1'	; TV/RADIO	/ 7
		DT	d'2', d'2', d'4', d'3', d'2', d'1', d'2'	; PAUSE 	/ PAUSE


; Erste Adresse der EEprom Speichertabelle für die COMAG CODES:
; =============================================================
	ORG h'2100'		

; Maximal 64 Bytes können im internen EEprom des 16F84 gespeichert werden		    I I I I I I   I  
; EEPROM Daten  COMAG CODE		  FUNKTION 				COMAG	TRUMAN			7 8 X X X X X X 1 X 1		GETESTET
; ==========================================================================================================================
		DE		b'00011110'		; POWER Taste			OK		POWER			7 8 3 2 5 2 2 1 1 1 1		OK
		DE		b'00010000'		; ROT					OK		ROT				7 8 2 1 3 6 1 2 1 1 1		OK
		DE		b'00100010'		; GRÜN					OK		GRÜN			7 8 2 1 2 1 6 3 1 1 1		OK
		DE		b'00011001'		; GELB					OK		GELB			7 8 4 2 4 1 2 2 1 1 1		OK
		DE		b'00010100'		; BLAU					OK		BLAU			7 8 4 4 2 1 2 1 1 2 1		OK
		DE		b'00110010'		; AUDIO Taste			<==>	SAT				7 8 2 1 1 2 7 2 1 1 1		??
		DE		b'00011010'		; TIMER Taste			<==>	TV/SAT			7 8 2 3 1 5 1 3 1 1 1		??
		DE		b'00100110'		; EPG Taste				OK		EPG				7 8 3 5 2 2 1 1 1 2 1		OK
		DE		b'00100000'		; TEXT Taste			OK		WEIß			7 8 3 3 4 2 1 2 1 1 1		OK
		DE		b'00110000'		; EXIT Taste 			OK		EXIT			7 8 2 6 3 1 1 1 1 2 1		OK
		DE		b'00100111'		; MENU Taste			OK		MENU			7 8 8 2 1 1 1 1 1 2 1		OK
		DE		b'00101111'		; M/P Taste				<==>	P/N				7 8 5 1 4 1 1 3 1 1 1		??
		DE		b'00110111'		; MUTE Taste			OK		MUTE			7 8 2 1 1 1 9 1 1 1 1		OK
		DE		b'00101000'		; CH UP Taste			OK		CH UP			7 8 2 1 2 7 2 1 1 1 1		OK
		DE		b'00100001'		; V- Taste				OK		V-				7 8 6 4 1 1 1 2 1 1 1		OK
		DE		b'00101001'		; OK Taste				OK		OK				7 8 2 2 1 6 3 1 1 1 1		OK
		DE		b'00110001'		; V+ Taste				OK		V+				7 8 2 4 5 1 1 2 1 1 1		OK
		DE		b'00101010'		; CH DOWN Taste			OK		CH DOWN			7 8 3 1 1 5 4 1 1 1 1		OK
		DE		b'00100011'		; P+ Taste				OK		P+				7 8 2 1 1 1 1 9 1 1 1		OK
		DE		b'00011011'		; P- Taste				OK		P-				7 8 3 1 1 1 4 5 1 1 1		OK
		DE		b'00101110'		; RECALL Taste			OK		RECALL			7 8 2 2 1 1 5 4 1 1 1		OK
		DE		b'00011000'		; FAV Taste				OK		FAV				7 8 3 1 2 4 3 2 1 1 1		OK
		DE		b'00110101'		; 1						OK		1				7 8	2 9 1 1 1 1 1 1 1		OK
		DE		b'00101101'		; 2						OK		2				7 8 3 7 2 1 1 1 1 1 1		OK
		DE		b'00100101'		; 3						OK		3				7 8 2 1 9 1 1 1 1 1 1		OK
		DE		b'00011101'		; 4						OK		4				7 8 4 6 1 2 1 1 1 1 1		OK
		DE		b'00110100'		; 5						OK		5				7 8 2 2 7 2 1 1 1 1 1		OK
		DE		b'00101100'		; 6						OK		6				7 8 3 1 6 3 1 1 1 1 1		OK
		DE		b'00100100'		; 7						OK		7				7 8 2 1 1 9 1 1 1 1 1		OK
		DE		b'00011100'		; 8						OK		8				7 8 5 5 1 1 2 1 1 1 1		OK
		DE		b'00110011'		; 9						OK		9				7 8 2 3 6 1 2 1 1 1 1		OK
		DE		b'00110110'		; INFO Taste			OK		INFO			7 8 3 2 1 4 2 3 1 1 1		OK
		DE		b'00101011'		; 0						OK		0			   7 8 10 1 1 1 1 1 1 1 1		OK
		DE		b'00011111'		; PAUSE Taste			OK		PAUSE			7 8 2 2 4 3 2 1 1 2 1		??
		DE   	"VINIX 2007"

; Diese Tasten sind nicht Verfügbar !
; ===================================
;
;		BEI COMAG  KEINE TASTE VORHANDEN		UHF								7 8 4 1 5 1 3 1 1 1 1		wird nicht gebraucht
;		BEI COMAG  KEINE TASTE VORHANDEN		F1								7 8 2 1 1 4 5 1 1 2 1		???? Wofür
;		BEI COMAG  KEINE TASTE VORHANDEN		F2								7 8 2 1 5 4 1 1 1 2 1		???? Wofür
;		BEI COMAG  KEINE TASTE VORHANDEN		HELP							7 8 3 1 4 2 3 1 1 2 1		???? ?????
;		BEI COMAG  KEINE TASTE VORHANDEN		TV/RADIO						7 8 2 2 2 5 2 2 1 1 1		wäre schön
;		BEI COMAG  KEINE TASTE VORHANDEN		LUPE							7 8 4 1 1 4 1 4 1 1 1		???? ?????

		END

sl2

Lanza, si esto no se puede, a la papelera....

Última edición por vishero; 28/07/2007 a las 17:47.
vishero está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir