[轉貼]關於傳輸(紅外和串口)

6502 組合語言,是哈電族裡使用的程式語言,也是目前設計 Bin 的唯一方法,有興趣的就進來吧
回覆文章
頭像
sppmg
一級會員
一級會員
文章: 260
註冊時間: 2004-01-10 12:41 PM
來自: 地球ㄉ台灣ㄉ台北
聯繫:

[轉貼]關於傳輸(紅外和串口)

文章 sppmg »

http://www.emsky.net/bbs/dispbbs.asp?bo ... 030&page=1
sppmg註1:若用串口→在$0f00 寫入 10 f0 11 12 00
sppmg註2:BRK $014A是正確的,我先前說的BRK $013C是專用於升級的
sppmg註3:關閉的方法是向$3D寫入03。
sppmg註4:此文位址錯字已修正,除BAS程式部分外,端口狀態均通過NC2000/NC2010測試


首先 調用紅外要先想$0f00 寫入b0 f0 11 00 00 再營運中斷INT $014A
數據出入的端口:$3A 狀態的端口:$3B

使用方法:

10 S$="":POKE 199,0:PRINT "紅外聊天室","(用于無筆紙情況下)","<Y>發話 <Q>退出"
20 INPUT "名字:";NAME$:GRAPH
30 POKE 6160,0:POKE 6161,74:POKE 6162,1:POKE 6163,96
40 DATA 176,240,17,0,0
50 FOR I=3840 TO 3844:READ A:POKE I,A:NEXT
60 CALL 6160:S=0:S$=""
65 IF PEEK(199)=249 THEN POKE 199,0:GOSUB 130
66 IF PEEK(199)=128+ASC ("q") THEN POKE 199,0:TEXT :PRINT "JD SOFT!":END
70 IF PEEK(59)=97 THEN GOTO 71 ELSE GOTO 65
71 IF PEEK(58)=255 THEN GOTO 72 ELSE GOTO 65
72 IF PEEK(59)=97 THEN L=PEEK(58):I=0:S$="":GOTO 90
80 GOTO 65
90 IF PEEK(59)=97 THEN S$=S$+CHR$(PEEK(58)):I=I+1 ELSE D=D+1
100 IF D=5 THEN PRINT "連接失敗!":GOTO 65
110 IF I=L THEN PRINT S$:GOTO 65
120 GOTO 90
130 PRINT "消息(小于";20-LEN(NAME$);"字節)":INPUT "";T$ :S$=NAME$+":"+T$
131 IF LEN(S$)=0 OR LEN(S$)>20 THEN GOTO 130
140 POKE 58,255:POKE 58,LEN(S$)
150 FOR I=1 TO LEN(S$):POKE 58,ASC (MID$(S$,I,1))
155 NEXT
160 RETURN

2台機器,當紅外端口剛剛打開時,會發出信號 #$55(85) 在空閒狀態下 $3B(59)的值為#$60(96)

如何發送數據呢:

A機器與B機器(紅外都已打開)

A機器像$3A寫入255,此時 $3B值從#$60變成了#$61,表示有數據(原因是WQX的IrDa是2個,一輸入一輸出,在機器上挨的近,在數據發送出去的同時,也接受到自己發送的數據)

B機器的$3A變成了255,$3B變成了#$61,但此處指的255意思是CPU從位址$3A讀出的值為255,$3A並不是普通的內存,是IO端口,硬體的設置就這樣,CPU從$3A讀出值后,$3A的值就變化了,CPU不訪問$3A的話$3A的值就不變

如果A機器向$3A寫入了01在寫02 在寫03,那么,B機器讀取第1次值為01,第2次為02,第3次為03,而后$3B的值變回#$60,表示"紅外緩存"已經沒有數據了(但似乎緩存有限,好像也有時間限制)

如希望將$0a $0b $0c $0d $0e $0f 發送到B機器上,那么

在確認A機器與B機器紅外連接完好的情況下

A發送$0a到B,B在確定$3B值變為#$61時,讀取$3A的值,同時$3B自動變回了#$60

B機器在發送一具有特殊代表的數據到$3A,A機器接受到,確認數據已經傳送,繼續傳送下一個

由於紅外有類似緩存的東西,所以傳輸起來非常快,不必像寫nand那樣需要delay時間

基本上數據就是這樣傳輸的

雖然知道"打開紅外"的中斷,但卻怎么也不知道"關閉紅外"的中斷,暈!!!

此中斷與io端口通用與NC2000A/C NC2600C 不能使用于除此3型號外任何型號

BASIC代碼是個簡單的紅外聊天程序,可以n台機器以上聊,由于不想做的太複雜和提高速度,有傳輸字節最高20的限製並且2人以上聊天的話,萬一2人同時在傳輸數據可能將2人的數據都摻在了一起再成A說AAAAA B說BBBBB顯示出來的確是ABABA

經過測試2機器擺在一啟行90度仍可以傳輸,並且用放小鏡子(反光的凹面鏡將15Cm到了45CM(差不多)),可以考慮使用光纖作為紅外傳輸媒體(配合球面鏡),本人並沒實驗過雙機線,不知串口如何使用

未來BASIC遊戲必將是非常側重與彙編、批量法、多人遊戲、型號通用的。所以......大家應該多研究這些對BASIC有很大用途的東西,不要只弄BASIC,也學點彙編,了解些系統中斷與工作原理(至少我不精通)

PS:紅外傳輸時沒有特定對象,比如說3台機器,1台機器的紅外對著另兩台發,那么那兩台會同時受到訊息

錯別字很多,不好意思
好久沒完6502了
也沒時間......
目前除了拼課業就是玩Linux(還說沒時間......)
頭像
sppmg
一級會員
一級會員
文章: 260
註冊時間: 2004-01-10 12:41 PM
來自: 地球ㄉ台灣ㄉ台北
聯繫:

文章 sppmg »

搜尋這些指令(014000~03BFFF),看看其他機型的中斷

AD 00 0F
29 80
C9 80
D0 06


搜到的第一個位址就是程式開頭
NC2000是01874B(BRK $014A)
好久沒完6502了
也沒時間......
目前除了拼課業就是玩Linux(還說沒時間......)
回覆文章