• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
Keine Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

BASIC compiler/interpreter for PIC32MX/MZ-80K


Commit MetaInfo

Revision7ebd7151e8ef73c5e7556dbcf66924356aff8948 (tree)
Zeit2019-01-07 09:07:04
AutorKatsumi <kmorimatsu@sour...>
CommiterKatsumi

Log Message

Class C23LC for dip-8 SRAM 23LC512.

Ändern Zusammenfassung

Diff

--- /dev/null
+++ b/mips/classes/C23LC/C23LC.bas
@@ -0,0 +1,126 @@
1+REM C23LC.BAS ver 0.1
2+REM Class C23LC for MachiKania Type M
3+REM using SPI 8-pin SRAM 23LC512
4+
5+FIELD PUBLIC ADDR
6+USEVAR BUFF,NUM
7+
8+REM Constructor. Parameters are:
9+REM 1st: Clock. Default 20000
10+REM 2nd: CS port. Default 0x39
11+
12+METHOD INIT
13+ var i
14+ dim BUFF(1)
15+ REM Initialize SPI module.
16+ if args(0)<1 then
17+ SPI 20000
18+ elseif args(0)<2 then
19+ SPI args(1)
20+ else
21+ SPI args(1),0,8,args(2)
22+ endif
23+ REM Check connection
24+ i=gosub(RD8,0) XOR 0xFF
25+ gosub WR8,i,0
26+ if gosub(RD8,0)!=i then
27+ print "SRAM 23LC512 not connected"
28+ end
29+ endif
30+ gosub WR8,i XOR 0xFF,0
31+ ADDR=0
32+ return
33+
34+REM WR8: Write byte (8 bits)
35+METHOD WR8
36+ NUM=1
37+LABEL WRMAIN
38+ REM Second parameter is address
39+ if 2<=args(0) then ADDR=args(2)
40+ POKE BUFF+2,ADDR>>8
41+ POKE BUFF+3,ADDR
42+ REM First parameter is word to write
43+ BUFF(1)=args(1)
44+ SPIWRITEDATA BUFF+2,NUM+2,0x02
45+ REM Increment address
46+ ADDR=(ADDR+NUM) and 0xffff
47+ REM All done
48+ return
49+
50+REM WR16: Write 16 bit word
51+METHOD WR16
52+ NUM=2
53+ goto WRMAIN
54+
55+REM WR32: Write 32 bit word
56+METHOD WR32
57+ NUM=4
58+ goto WRMAIN
59+
60+REM WRDATA: Write data
61+METHOD WRDATA
62+ REM 1st parameter is buffer
63+ REM 2nd parameter is # of write
64+ REM 3rd parameter is address
65+ if 3<=args(0) then ADDR=args(3)
66+ SPIWRITEDATA args(1),args(2),0x02,ADDR>>8,ADDR
67+ ADDR=(ADDR+args(2)) and 0xffff
68+ return
69+
70+REM WRSTR: Write string
71+METHOD WRSTR
72+ REM 1st parameter is string
73+ REM 2nd parameter is address
74+ if 2<=args(0) then ADDR=args(2)
75+ gosub WRDATA,args(1),len(args$(1))+1
76+ return
77+
78+REM RD8: Read byte (8 bits)
79+METHOD RD8
80+ NUM=1
81+LABEL RDMAIN
82+ REM First parameter is address
83+ if 1<=args(0) then ADDR=args(1)
84+ BUFF(0)=0
85+ SPIREADDATA BUFF,NUM,0x03,ADDR>>8,ADDR
86+ REM Increment address
87+ ADDR=(ADDR+NUM) and 0xffff
88+ REM All done
89+ return BUFF(0)
90+
91+REM RD16: Read 16 bit word
92+METHOD RD16
93+ NUM=2
94+ goto RDMAIN
95+
96+REM RD32: Read 32 bit word
97+METHOD RD32
98+ NUM=4
99+ goto RDMAIN
100+
101+REM RDDATA: Read page
102+METHOD RDDATA
103+ REM 1st parameter is buffer
104+ REM 2nd parameter is # of write
105+ REM 3rd parameter is address
106+ if 3<=args(0) then ADDR=args(3)
107+ SPIREADDATA args(1),args(2),0x03,ADDR>>8,ADDR
108+ ADDR=(ADDR+args(2)) and 0xffff
109+ return
110+
111+REM RDSTR: Read string
112+METHOD RDSTR
113+ var i,T
114+ REM 1st parameter is address
115+ if 1<=args(0) then ADDR=args(1)
116+ REM 2nd parameter is buffer size
117+ REM Default 128 bytes.
118+ if 2<=args(0) then NUM=args(2) else NUM=128
119+ dim T((NUM-1)/4)
120+ SPIREADDATA T,NUM,0x03,ADDR>>8,ADDR
121+ for i=0 to NUM-1
122+ if not(PEEK(T+i)) then break
123+ next
124+ NUM=i+1
125+ ADDR=(ADDR+NUM+1) and 0xffff
126+ return T$
--- /dev/null
+++ b/mips/classes/C23LC/help.txt
@@ -0,0 +1,63 @@
1+<クラス名およびバージョン>
2+C23LC
3+ver 0.1
4+
5+<ファイル名>
6+C23LC.BAS
7+
8+<概要>
9+SRAM 23LC512読み書きの為のクラス。
10+
11+<コンストラクター>
12+第1引数
13+ SPIクロックを、kHz単位で指定する。省略した場合は、20000。
14+第2引数
15+ CS端子にどのポートを使うかを指定する。省略した場合は、0x39(PORTD9)。
16+ MachiKania type Mのhelpファイルを参照。
17+MachiKania type Mのhelpファイル、
18+
19+<パブリックフィールド>
20+ADDR
21+ 次の読み書きを行なうアドレス(16 bits)。
22+
23+<パブリックメソッド>
24+WR8(x[,y])
25+ 1バイト値、xを書き込む。yにアドレスを指定した場合は、指定位置に書き込む。
26+WR16(x[,y])
27+ 16ビット値、xを書き込む。yにアドレスを指定した場合は、指定位置に書き込む。
28+WR32(x[,y])
29+ 32ビット値、xを書き込む。yにアドレスを指定した場合は、指定位置に書き込む。
30+WRSTR(x$[,y])
31+ 文字列、x$を書き込む。yにアドレスを指定した場合は、指定位置に書き込む。
32+WRDATA(x,y[,z])
33+ バッファーxからyバイトを書き込む。zにアドレスを指定した場合は、指定位置に書
34+ き込む。
35+RD8([x])
36+ 1バイト値を読み込み、返す。xにアドレスを指定した場合は、指定位置から読み込
37+ む。
38+RD16([x])
39+ 16ビット値を読み込み、返す。xにアドレスを指定した場合は、指定位置から読み込
40+ む。
41+RD32([x])
42+ 32ビット値を読み込み、返す。xにアドレスを指定した場合は、指定位置から読み込
43+ む。
44+RDSTR([x,[y]])
45+ 文字列(127文字以内)を読み込み、ポインターとして返す。xにアドレスを指定した
46+ 場合は、指定位置から読み込む。yは読み込みバッファーサイズ。省略した場合は、
47+ 128。
48+WRDATA(x,y[,z])
49+ yバイトを読み込み、バッファーxに保存する。zにアドレスを指定した場合は、指定
50+ 位置から読み込む。
51+
52+<使用例>
53+
54+アドレス0に文字列を書き込み、読み出す例。読み出し時の文字列ポインターの扱いに注
55+意。
56+
57+USECLASS C23LC
58+E=NEW(C23LC)
59+T=E.RDSTR():T$=T$
60+PRINT T$
61+CALL E.WRSTR("Hello objective MachiKania!",0)
62+T=E.RDSTR(0):T$=T$
63+PRINT T$