define A byte define D byte define E byte define Z byte define H byte define T byte define Q byte define L byte define M byte define X byte define QQ byte define SR byte define DFL byte define REG byte define RTR byte define IDH byte define IDL byte define ID word define KH word define KL word define DD byteport[1] define AD byteport[2] define ALE port[ 9] define CS port[10] define RD port[11] define WR port[12] #START BEEP 100,25,10 BEEP 100,25,10 PRINT "CAN-BUS SENDER" DD=0 : ALE=0 : CS=1 : RD=1 : WR=1 GOSUB INITIALE BEEP 400,25,10 'ID 400 'BYTE 0: start: 'D0 VIDEO 0 0=Rückfahr 1=Frei 0 Kanal=0 'D1 VIDEO 1 2=Frei 3=Extern 0 'D2 Monitor 3 0 0=CPU Navi 1=CPU 3 1 M3=3 'D3 Monitor 3 1 2=CPU 1(2) 3=OSD 1 'D4 Osd 0 0=Lokalmod 1=Mixedmod 0 OSD=0 'D5 osd 1 2=Automod 3=Osd aus 0 'D6 Monitor 2 0=CPU 1(2) 1 M2=1 'D7 Monitor 1 0=CPU 1(2) 1 M1=1 #LOOP1 ID=400 : DFL=1 ' 128 64 32 16 8 4 3 1 REG=12+0 : D=&B11001100 : GOSUB C_WR : GOSUB SENDEN : PAUSE 100 REG=12+0 : D=&B11101100 : GOSUB C_WR : GOSUB SENDEN : PAUSE 100 REG=12+0 : D=&B11101101 : GOSUB C_WR : GOSUB SENDEN : PAUSE 100 REG=12+0 : D=&B11101110 : GOSUB C_WR : GOSUB SENDEN : PAUSE 100 REG=12+0 : D=&B11101111 : GOSUB C_WR : GOSUB SENDEN : PAUSE 100 REG=12+0 : D=&B11000000 : GOSUB C_WR : GOSUB SENDEN : PAUSE 100 REG=12+0 : D=&B11000100 : GOSUB C_WR : GOSUB SENDEN : PAUSE 100 REG=12+0 : D=&B11001000 : GOSUB C_WR : GOSUB SENDEN : PAUSE 100 REG=12+0 : D=&B11001100 : GOSUB C_WR : GOSUB SENDEN : PAUSE 100 BEEP 200,25,10 GOTO LOOP1 #SENDEN REG=&H02 : GOSUB C_RD : Q=D AND 4 'PRINT "D=";D ;" Q=";Q IF Q=0 THEN GOTO SENDEN REG=&H0A : D=ID/8 : GOSUB C_WR REG=&H0B : D=(ID-8*(ID/8))*32+DFL : GOSUB C_WR REG=&H01 : D=&H0D : GOSUB C_WR 'D=&H0D Traransmission request 1100 REG=&H02 : GOSUB C_RD : SR=D RETURN ' ' #EMFANGEN REG=&H02 : GOSUB C_RD : SR=D PRINT "STATUS=";SR Q=SR AND 2 : IF Q=2 THEN GOTO CLR_OVERRUN '(2) Q=SR AND 1 : IF Q=0 THEN GOTO EMFANGEN REG=&H14 : GOSUB C_RD : IDH=D*8 REG=&H15 : GOSUB C_RD : IDL=D/32 ID=IDH+IDL IF ID=300 THEN BEEP 100,25,10 ELSE BEEP 500,25,10 PRINT "ID=";ID;" " PRINT "WRTE "; FOR L=0 TO 7 REG=&H16+L : GOSUB C_RD PRINT D" "; NEXT L IF ID=300 THEN GOSUB RRB REG=&H01 : D=&H0C : GOSUB C_WR RETURN ' #RRB REG=&H16+6 : GOSUB C_RD : REG=8 : GOSUB SET REG=&H16+7 : GOSUB C_RD : REG=9 : GOSUB SET RETURN ' #CLR_OVERRUN REG=&H01 : D=8 : GOSUB C_WR GOTO EMFANGEN END #INITIALE REG=&H00 : D=&H01 : GOSUB C_WR REG=&H00 : D=&H01 : GOSUB C_WR #W_R REG=&H00 : GOSUB C_RD : Q=D AND 1 : IF Q<>1 THEN GOTO W_R PRINT "RESET OK" 'Übertragung auf 500 REG=&H1F : D=&H43 : GOSUB C_WR REG=&H04 : D=&H00 : GOSUB C_WR REG=&H05 : D=&HFF : GOSUB C_WR REG=&H06 : D=&H00 : GOSUB C_WR 'BT0 REG=&H07 : D=&H1C : GOSUB C_WR 'BT1 REG=&H08 : D=&H1A : GOSUB C_WR REG=&H01 : D=&H0E : GOSUB C_WR REG=&H00 : D=&H00 : GOSUB C_WR #W_I REG=&H00 : GOSUB C_RD : Q=D AND 1 : IF Q>0 THEN GOTO W_I PRINT "INITIALE OK" RETURN #SCAN DEACT DD : D=0 AD=16*REG + 15 D=DD AD=15 RETURN #SET DD=D AD=16*REG + 15 DD=D AD=15 RETURN #C_WR ALE=1 : CS=1 : RD=1 : WR=1 DD=REG ALE=0 PAUSE 1 CS=0 DD=D WR=0 WR=1 CS=1 ALE=1 RETURN #C_RD ALE=1 : CS=1 : RD=1 : WR=1 DD=REG ALE=0 CS=0 RD=0 DEACT DD D=DD RD=1 CS=1 ALE=1 RETURN