&F800番地から&F83B番地までが液晶の左12桁、
&F868番地から&F87B番地までが液晶の右4桁の
VRAMになっている(右4桁については、画面の右へいくほど若番)。
そこで、例えば2桁目の左上のドットを黒くするには、
BASICで「POKE &F805,1」
を実行すればよい。書き込む値を2にすると、
上から2つめのドットが黒くなる。
書き込む値を4にすると、上から3つめのドットが黒くなる。
書き込む値を127にすると縦1列が黒くなる。
ただし、BASICの命令実行中はLCDがOFFになるため、
実際に表示を目で見る場合には、POKE命令を実行した後に、
LCDをONにするBIOSを呼び出す「CALL &11E0」を
実行する必要がある。
また、プログラムが終了してしまうと、
ユーザが表示したものを全部消して、
コマンドプロンプトが表示されてしまうため、
LCDをONにした後に別の処理を行うか、
空のループで時間稼ぎをして、
プログラムがすぐに終わってしまわないように
する必要がある。
BASICの実行中はVRAMがBASICの処理のための
ワークエリアとして使用されるため、
左端には意味不明なドットが表示されることがある。
あまり左端の桁は使用しない方がよい。
(全部アセンブラで組んでいる場合は別)
@BASICで2桁目から山田と表示してみる
(スクロール可:スマホの方)
10 PRINT ""
20 POKE &F805,124,64,127,64,124,127,73,127,73,127
30 CALL &11E0
40 FOR A=0 TO 99:NEXT A
Aアセンブラで2桁目から山田と表示してみる
(スクロール可:スマホの方)
ORG $C100
LIDP $F800 ;DP←$F800
LII 59 ;I←59(…5×12−1)
LIA 0 ;A←0
FILD ;(DP)〜(DP+I)←A(…左12桁のクリア)
LIDP $F868 ;DP←$F868
LII 19 ;I←19(…5×4−1)
FILD ;(DP)〜(DP+I)←A(…右4桁のクリア)
LIB $00 ;FONTのアドレスの上位(一度アセンブル後、改めて設定※)
LIA $00 ;FONTのアドレスの下位(一度アセンブル後、改めて設定※)
CAL $11F1 ;X←BA−1(…BIOSの機能呼出し)
LIB $F8 ;B←$F8
LIA $05 ;A←$05
CAL $11F5 ;Y←BA−1(…BIOSの機能呼出し)
LIA 9 ;A←9
PUSH ;スタックにAの値を入れる
TRAN: IXL ;X←X+1,A←(X)
IYS ;Y←Y+1,(Y)←A
LOOP TRAN ;スタックの値+1回ループ
CAL $11E0 ;LCDをON(…BIOSの機能呼出し)
LIA $FF ;A←$FF
PUSH ;スタックにAの値を入れる
PUSH ;スタックにAの値を入れる
WWLP: WAIT $FF ;時間待ち
LOOP WWLP
LOOP WWLP
RTN
FONT: DB 124,64,127,64,124 ;山
DB 127,73,127,73,127 ;田
※一度アセンブルしてFONTの配置されるアドレスを確定後、改めてその値をセットし、再度アセンブルする。