PICで電大版TINYBASIC 準備編その1
最近のエンハンスミッドレンジのPICは内臓RAMの容量が飛躍的に増大しています。
RAMの容量が増大したことを生かすべく電大版TINYBASICをPIC16F18857に移植しました。
プログラムで使用可能な容量は本家の1/10から1/20ですが、それでも使い途がないわけではありません。
何より安く小さく作れます。またPEEK/POKE文を使用してPICの豊富なペリフェラルを操作することができます。
RAMの容量については今後のPICに期待します。
※注意)私のページで紹介する電大版TINYBASICはブルーバックスに掲載された版ではなく、bit誌にソース付きで
掲載された版です。bit誌の版とブルーバックスの版とでは変数の割付けアドレスが一部異なっています。
移植までの手順と考慮すべき点などについてまとめます。
試作したTINYBASIC基板(下) (上:USB-シリアル変換器、TINYBASIC基板に挿して使用)
構成 PIC16F18857+リセット回路+USB-シリアル変換器
使用部品 抵抗2本、ダイオード、プッシュSW、電解コンデンサ、パスコン

実行例1 プログラムエリアのサイズ、乱数、剰余、四則演算

実行例2 POWER OF N

<準備編その1:6803評価ボードの製作>
PICにTINYBASICを移植し比較/デバッグするため、まず電大版TINYBASICが動作する環境を構築しました。
6803評価ボード

回路図

手元に6803がありましたので、6803の評価ボードを製作しました。
6803の場合、ROMにLILBUGを搭載することで、TINYBASIC作動中のレジスタ・メモリ値の確認が行えます。
回路を簡素化するため、アドレスデコードを行わず、A15の信号線でRAMとROMを切り替える仕様です。
($0000から$7FFFにRAM、$8000から$FFFFにROMを配置)
300milの62256を持ち合わせていなかったのでRAMは62256の倍の容量の62512を使用しました。
(62512のA15のピンをHレベルに固定し、容量の半分を使用しています。)
以上6803での環境は整いましたが、TINYBASICを走らせるにはいくつか工夫が必要でした。
6803評価ボードで電大版TINYBASICを作動させるための留意点
①6803は6800に比べて、使用できるゼロページRAMが少ない。
電大版TINYBASICは元々6800とMIKBUGの組み合わせで動作することを前提に
設計されており、かつMIKBUGは6800のゼロページRAMを使用しない仕様です。
このため電大版TINYBASICでは6800のゼロページRAM(256バイト)のうち230
バイト($1A-$FF)を使用していますが、6803ではゼロページRAMが229バイトしか
存在しません。($04,$05,$06,$07,$0F,$20-$FF)
②LILBUGはワークエリア/スタックとして6803のゼロページRAMを使用するため
電大版TINYBASICの使用するゼロページRAMと重なる。
③シリアル入出力方法の違い
電大版TINYBASICは元々MC6850を用いたシリアル入出力を前提に設計されており、
受信ステータスを直接MC6850から読み込んでいます。(送受信データのやりとりはMIKBUGのサブルーチンを介する。)
一方6803では,受信ステータスのチェックもLILBUGのサブルーチンを介して行うことができます。
<変更1>
以上①の点を踏まえて以下のようにソースを変更しました。(変更箇所は赤字で表示)
変数Vは$1Aから$04へ
変数Wは$1Cから$06へ
変数RAMENDはユーザRAMの上限値がストアされるが、その後は値の参照に使用されるだけなので廃止。
変数RAMENDのアドレスに変数RNDを配置
変更前
ORG $001A
V RMB 2
W RMB 2
RND RMB 2
Z RMB 2
LN RMB 2
PRSTRT RMB 2
PREND RMB 2
RAMEND RMB 2
SUBSP RMB 2
FORSP RMB 2
変更後
ORG $0004
V RMB 2
W RMB 2
ORG $0020
Z RMB 2
LN RMB 2
PRSTRT RMB 2
PREND RMB 2
;RAMEND RMB 2
RND RMB 2
SUBSP RMB 2
FORSP RMB 2
変更前
MEMTST INX
LDAB 1,X
STAA 1,X
LDAA 1,X
STAB 1,X
CMPA #$AA
BEQ MEMTST
STX RAMEND
NEW BSR INIT1
SIZE LDAA RAMEND+1
LDAB RAMEND
SUBA PREND+1
SBCB PREND
RTS
ARRAY JSR FACT
JSR POP
BITB #$C0
BNE ERR11
SEC
ROLA
ROLB
ADDA PREND+1
ADCB PREND
CMPB RAMEND
BNE L649
CMPA RAMEND+1
L649 BCC ERR11
CLC
RTS
変更後
MEMTST INX
LDAB 1,X
STAA 1,X
LDAA 1,X
STAB 1,X
CMPA #$AA
BEQ MEMTST
; STX RAMEND
NEW BSR INIT1
SIZE LDAA #$FF
LDAB #$7F
SUBA PREND+1
SBCB PREND
RTS
ARRAY JSR FACT
JSR POP
BITB #$C0
BNE ERR11
SEC
ROLA
ROLB
ADDA PREND+1
ADCB PREND
CMPB #$7F
BNE L649
CMPA #$FF
L649 BCC ERR11
CLC
RTS
<変更2>
以上③の点を踏まえて以下のようにソースを変更しました。
LILBUGのCIDTAルーチンでは受信完了か否かをチェックして受信未完了ならCフラグをクリアして戻る。
受信完了なら受信データをAレジスタに書き込み戻る。次行でINサブルーチンに飛び、内部で再受信するので
再受信しないようIN+3のアドレスにサブルーチンコールする。
変更前
INEEE EQU $E1AC
OUTEEE EQU $E1D1
BRKCHK EQU $8004
変更後
INEEE EQU $F706 <--- LILBUGの1文字入力ルーチンINCHNPのアドレス
OUTEEE EQU $F709 <--- LILBUGの1文字出力ルーチンOUTCHのアドレス
BRKCHK EQU $F792 <--- LILBUGの1文字入力ルーチンCIDTAのアドレス
変更前
BREAK PSHA
LDAA BRKCHK
BMI BR5
BSR IN
BR5 PULA
BR6 RTS
変更後
BREAK PSHA
JSR BRKCHK
BCC BR5
BSR IN+3
BR5 PULA
BR6 RTS
②に関する変更は準備編その2で解説します。
- ご質問などはこちらからどうぞ
- ページ更新情報
- 最近嬉しかったこと
- 1kワードのTINYBASIC STM32L010F4
- やってくれたな!!店長よ
- 東大版TINYBASIC (STM32)
- 1kワードのTINYBASIC STM32版 その2
- 1kワードのTINYBASIC STM32版 その1
- 1kワードのTINYBASIC その8
- 1kワードのTINYBASIC その7
- 1kワードのTINYBASIC その6
- 1kワードのTINYBASIC その5
- 1kワードのTINYBASIC その4
- 1kワードのTINYBASIC その3
- 1kワードのTINYBASIC その2
- 1kワードのTINYBASIC その1
- 電大版TINYBASIC for PIC ミニマムお試し版5
- 電大版TINYBASIC for PIC ミニマムお試し版4
- 電大版TINYBASIC for PIC ミニマムお試し版3
- 電大版TINYBASIC for PIC ミニマムお試し版2
- 電大版TINYBASIC for PIC ミニマムお試し版
- PICで電大版TINYBASIC 実装編その5
- PICで電大版TINYBASIC 実装編その4
- PICで電大版TINYBASIC 実装編その3
- PICで電大版TINYBASIC 実装編その2
- PICで電大版TINYBASIC 実装編その1
- PICで電大版TINYBASIC 準備編その2
- PICで電大版TINYBASIC 準備編その1
- PIC18F24K42をPICKIT2で焼くTIPS その2
- PIC18F24K42をPICKIT2で焼くTIPS
- PIC16F18313ブートローダー書き込み器の製作
- PIC16F18857をPICKIT2で焼くその2
- PIC16F18857をPICKIT2で焼く
- PIC16F18313をPICKIT2で焼くその2
- PIC16F18313をPICKIT2で焼く
- PIC16F5XX USBIO
- HVT-BT200の予約制御
- 再考 PIC16F57 USBIO
- PIC16F5X USBIO
- 続12 8ピンPICでUSB PIC16F18313 HID-シリアルアダプター
- ucontrol.com.arに接続できない
- 続続 LPC1114 USBブートローダー
- 続PIC10F200 電子サイコロ
- PIC10F200 電子サイコロ
- LPC1114 8ch簡易ロジックアナライザー USB版
- 続 LPC1114 USBブートローダー
- LPC1114 8ch簡易ロジックアナライザー
- LPC1114 USBブートローダー
- LPC1114でUSB
- 続LPC810でUSB
- LPC810でUSB
- USB_NCO
- USB出力の周波数カウンター
- HIDアダプターについてのまとめ その2
- HIDアダプターについてのまとめ
- 極小ブートローダー まとめ
- 極小ブートローダー ATTiny 其の2
- 極小ブートローダー PIC10F322 其の6
- 極小ブートローダー PIC10F322 其の5
- 極小ブートローダー PIC10F322 其の4
- 極小ブートローダー PIC10F322 其の3
- 極小ブートローダー ATTiny13A
- 極小ブートローダー PIC10F322 其の2
- 極小ブートローダー PIC10F322
- 続11 8ピンPICでUSB PIC16F57_USBIO (その3)
- 続10 8ピンPICでUSB PIC16F505_USBIO (その2)
- 続9 8ピンPICでUSB PIC16F57_USBIO (その2)
- 続8 8ピンPICでUSB PIC16F505_USBIO
- 続7 8ピンPICでUSB PIC16F57_USBIO
- 続6 8ピンPICでUSB PIC16F570_USBIO
- 続5 8ピンPICでUSB PIC12F615_USBIO
- 続4 8ピンPICでUSB 16FUSBの改良版
- 続続続8ピンPICでUSB -30MHz+ソフトシリアル-
- 続続8ピンPICでUSB -16FUSBを30MHzで動かす-
- 続8ピンPICでUSB -ターミナルソフトからの操作-
- 8ピンPICでUSB -16FUSBの移植-
- 番外 MSP430 タイニーブートローダー
- 番外 C8051 タイニーブートローダー
- 続続続 Tiny AVR/PIC Bootloader+
- 続続 Tiny AVR/PIC Bootloader+
- 続 Tiny AVR/PIC Bootloader+
- Tiny AVR/PIC Bootloader+
- 番外 続ATTINY13A OSCCAL の簡易校正
- 番外 ATTINY13A OSCCAL の簡易校正
- 番外 続ATTINY13A ソフトシリアル
- 番外 ATTINY13A ソフトシリアル
- 番外 続Arduinoからタイニーブートローダーを使用する
- 番外 Arduinoからタイニーブートローダーを使用する
- 番外 LPC1114FN28/102 アセンブラサンプル
- 番外 LPC810 タイニーブートローダーの自己書き換え
- 番外 LPC810 EEPROM エミュレーション
- 番外 LPC810 タイニーブートローダー
- 番外 LPC810でアセンブラ
- 続続続PIC10F322 ソフトシリアル一考察
- 続続PIC10F322 ソフトシリアル一考察
- 続PIC10F322 ソフトシリアル一考察
- PIC10F322 ソフトシリアル一考察
- 84ワードのPICブートローダー
- 続PIC10F322 Ring-DDS
- Tinybldの自己更新プログラム
- プログラム領域をROMのように使う
- PIC10F322 256ビットプログラム発振器
- PIC18F EEPROM エミュレーション Jタイプ
- PIC18F EEPROM エミュレーション
- PIC16F EEPROM エミュレーション
- PIC10F322専用 周波数カウンター
- PIC18F Jタイプ ブートローダー
- PICの制約を取り除く
- 番外 ATTINY2313A用ブートローダー
- 続番外 ATTINY13A用ブートローダー
- 番外 ATTINY13A用ブートローダー
- 続PIC10F322 フラッシュメモリの操作
- PIC10F322 フラッシュメモリの操作
- PIC10F322 PIC_WAIT
- ビット列の並び替え その2
- ビット列の並び替え その1
- 故障した温水便座を使えるようにする
- PIC10F322 RA3を出力ポートとして使用
- PIC10F322 周波数カウンタ Part2
- PIC10F322 AN592準拠 周波数カウンタ
- PIC10F322 Ring-DDS
- microchipのAN592に関する一考察
- PIC10F322 3-ch リモコンライン切り替え器
- PIC10F322 4-SW リモコン送信器
- PIC10F322 二相発振器
- PIC_DELAY
- 続PIC_WAIT
- PIC_WAIT
- ご質問などはこちらからどうぞ
- ページ更新情報
- 最近嬉しかったこと
- 1kワードのTINYBASIC STM32L010F4
- やってくれたな!!店長よ
- 東大版TINYBASIC (STM32)
- 1kワードのTINYBASIC STM32版 その2
- 1kワードのTINYBASIC STM32版 その1
- 1kワードのTINYBASIC その8
- 1kワードのTINYBASIC その7
- 1kワードのTINYBASIC その6
- 1kワードのTINYBASIC その5
- 1kワードのTINYBASIC その4
- 1kワードのTINYBASIC その3
- 1kワードのTINYBASIC その2
- 1kワードのTINYBASIC その1
- 電大版TINYBASIC for PIC ミニマムお試し版5
- 電大版TINYBASIC for PIC ミニマムお試し版4
- 電大版TINYBASIC for PIC ミニマムお試し版3
- 電大版TINYBASIC for PIC ミニマムお試し版2
- 電大版TINYBASIC for PIC ミニマムお試し版
- PICで電大版TINYBASIC 実装編その5
- PICで電大版TINYBASIC 実装編その4
- PICで電大版TINYBASIC 実装編その3
- PICで電大版TINYBASIC 実装編その2
- PICで電大版TINYBASIC 実装編その1
- PICで電大版TINYBASIC 準備編その2
- PICで電大版TINYBASIC 準備編その1
- PIC18F24K42をPICKIT2で焼くTIPS その2
- PIC18F24K42をPICKIT2で焼くTIPS
- PIC16F18313ブートローダー書き込み器の製作
- PIC16F18857をPICKIT2で焼くその2
- PIC16F18857をPICKIT2で焼く
- PIC16F18313をPICKIT2で焼くその2
- PIC16F18313をPICKIT2で焼く
- PIC16F5XX USBIO
- HVT-BT200の予約制御
- 再考 PIC16F57 USBIO
- PIC16F5X USBIO
- 続12 8ピンPICでUSB PIC16F18313 HID-シリアルアダプター
- ucontrol.com.arに接続できない
- 続続 LPC1114 USBブートローダー
- 続PIC10F200 電子サイコロ
- PIC10F200 電子サイコロ
- LPC1114 8ch簡易ロジックアナライザー USB版
- 続 LPC1114 USBブートローダー
- LPC1114 8ch簡易ロジックアナライザー
- LPC1114 USBブートローダー
- LPC1114でUSB
- 続LPC810でUSB
- LPC810でUSB
- USB_NCO
- USB出力の周波数カウンター
- HIDアダプターについてのまとめ その2
- HIDアダプターについてのまとめ
- 極小ブートローダー まとめ
- 極小ブートローダー ATTiny 其の2
- 極小ブートローダー PIC10F322 其の6
- 極小ブートローダー PIC10F322 其の5
- 極小ブートローダー PIC10F322 其の4
- 極小ブートローダー PIC10F322 其の3
- 極小ブートローダー ATTiny13A
- 極小ブートローダー PIC10F322 其の2
- 極小ブートローダー PIC10F322
- 続11 8ピンPICでUSB PIC16F57_USBIO (その3)
- 続10 8ピンPICでUSB PIC16F505_USBIO (その2)
- 続9 8ピンPICでUSB PIC16F57_USBIO (その2)
- 続8 8ピンPICでUSB PIC16F505_USBIO
- 続7 8ピンPICでUSB PIC16F57_USBIO
- 続6 8ピンPICでUSB PIC16F570_USBIO
- 続5 8ピンPICでUSB PIC12F615_USBIO
- 続4 8ピンPICでUSB 16FUSBの改良版
- 続続続8ピンPICでUSB -30MHz+ソフトシリアル-
- 続続8ピンPICでUSB -16FUSBを30MHzで動かす-
- 続8ピンPICでUSB -ターミナルソフトからの操作-
- 8ピンPICでUSB -16FUSBの移植-
- 番外 MSP430 タイニーブートローダー
- 番外 C8051 タイニーブートローダー
- 続続続 Tiny AVR/PIC Bootloader+
- 続続 Tiny AVR/PIC Bootloader+
- 続 Tiny AVR/PIC Bootloader+
- Tiny AVR/PIC Bootloader+
- 番外 続ATTINY13A OSCCAL の簡易校正
- 番外 ATTINY13A OSCCAL の簡易校正
- 番外 続ATTINY13A ソフトシリアル
- 番外 ATTINY13A ソフトシリアル
- 番外 続Arduinoからタイニーブートローダーを使用する
- 番外 Arduinoからタイニーブートローダーを使用する
- 番外 LPC1114FN28/102 アセンブラサンプル
- 番外 LPC810 タイニーブートローダーの自己書き換え
- 番外 LPC810 EEPROM エミュレーション
- 番外 LPC810 タイニーブートローダー
- 番外 LPC810でアセンブラ
- 続続続PIC10F322 ソフトシリアル一考察
- 続続PIC10F322 ソフトシリアル一考察
- 続PIC10F322 ソフトシリアル一考察
- PIC10F322 ソフトシリアル一考察
- 84ワードのPICブートローダー
- 続PIC10F322 Ring-DDS
- Tinybldの自己更新プログラム
- プログラム領域をROMのように使う
- PIC10F322 256ビットプログラム発振器
- PIC18F EEPROM エミュレーション Jタイプ
- PIC18F EEPROM エミュレーション
- PIC16F EEPROM エミュレーション
- PIC10F322専用 周波数カウンター
- PIC18F Jタイプ ブートローダー
- PICの制約を取り除く
- 番外 ATTINY2313A用ブートローダー
- 続番外 ATTINY13A用ブートローダー
- 番外 ATTINY13A用ブートローダー
- 続PIC10F322 フラッシュメモリの操作
- PIC10F322 フラッシュメモリの操作
- PIC10F322 PIC_WAIT
- ビット列の並び替え その2
- ビット列の並び替え その1
- 故障した温水便座を使えるようにする
- PIC10F322 RA3を出力ポートとして使用
- PIC10F322 周波数カウンタ Part2
- PIC10F322 AN592準拠 周波数カウンタ
- PIC10F322 Ring-DDS
- microchipのAN592に関する一考察
- PIC10F322 3-ch リモコンライン切り替え器
- PIC10F322 4-SW リモコン送信器
- PIC10F322 二相発振器
- PIC_DELAY
- 続PIC_WAIT
- PIC_WAIT