PICで電大版TINYBASIC 準備編その2
<準備編その2:LILBUGの改造とROM焼き>
まず、LILBUGがゼロページのRAMを使用しないように改造します。
LILBUGのリストファイルを見ると変数のアクセスには6800のDirect命令がたくさん使用されています。
ゼロページのRAMを使用しないということは「RAMへのアクセスにDirect命令が使用できない」ということなので、
改造によるコードサイズの増加は避けられません。
コードが増大するとBRA/BSR命令が相対ジャンプ範囲を超え、これらをJMP/JSR命令に変更する必要を生じます。
以下にLILBUGの開始アドレスを$F800から$F700に変更した場合のソースの変更箇所を示します。
LILBUGのソースはこちらのページの
SBC6303ルーズキット
https://www.switch-science.com/catalog/3834/
SBC6303データパックに収められているLILBUG.ASMを使用しました。
すでに9600ボーのシリアル通信に対応済みです。(電脳伝説 鈴木さんに感謝)
◎LILBUG.ASMの変更 使用RAMの開始アドレスを$80 -> $180に変更
*************** RAM STORAGE ***************
LOWRAM EQU $180 USED FOR STK OVFLOW CHK
ORG $1CF
STACK RMB 1 STK PNTR WILL RUN UP TOWARD USER CODE
SPC
元の値は$80と$CF
VECPTR RMB 2 VECTOR TABLE POINTER
IFEQ VDG
ORG $B00
ENDC
IFNE VDG
ORG $F700
ENDC
元の値は$F800
* HEX VALIDITY CHK
JSR VALIN
BMI MAIN <ADR>/ VALID?
LDX #MEM01 ENTER MEMORY ROUTINE
JMP MAIN08 SET UP FOR RTN
* A CONTAINS FIRST INPUT CHARACTER
元の命令はBRA
M.NMI TSX TRANSFER STK PNTR
LDS #STACK
JSR MOVSTK SAVE USER REGS
JSR RBRK REMOVE BRKPNT
元の命令はBRS
SHOW8 LDAB #HS.ON
JSR IO2
LDX #BBLK+1 GET TRANSFER PACKET
LDAB #HS.DTA
JSR IO
PULX RETRIEVE MEM/EX PNTR
STX PNTR
LDAB #HS.OFF
JSR IO2
CLRA CLEAR CC FOR RETURN
RTS
SPC
元の命令はBSR
* DUMMY IS AN RTI
SPC
ORG $FFD5
* USE ADR ON STK TO OBTAIN INDEX
* USE INDEX TO GET CORRECT VECTOR
* ROUTINE ADR FROM VECTOR TABLE.
元の値は$FFD6
◎以上を考慮し、TINYBASIC側の定数は以下のようになります。
<変更前>
UMTOP EQU $0980
UMBTM EQU $7FFF
BRKCHK EQU $8004
STACK EQU $A047
SUBBTM EQU $A04A
SUBSTK EQU $A080
INEEE EQU $E1AC
OUTEEE EQU $E1D1
RESET EQU $E0D0
ORG $0100
<変更後>
UMTOP EQU $0A80 -->BASICプログラム収納開始アドレス
UMBTM EQU $7FFF
STACK EQU $0147 -->TINYBASICが使用するスタック
SUBBTM EQU $014A -->TINYBASICが使用するスタック
SUBSTK EQU $0180 -->TINYBASICが使用するスタック
INEEE EQU $F706 -->1文字入力サブルーチン(LILBUG)
OUTEEE EQU $F709 -->1文字出力サブルーチン(LILBUG)
BRKCHK EQU $F792 -->受信ステータス検出サブルーチン(LILBUG)
RESET EQU $F71E -->LILBUGのリセットアドレス
ORG $0200 -->TINYBASICの開始アドレス
そして、こんな感じ

◎メモリマップ 2018.06.19訂正 下図の$0980は$0A80の誤り,BASICプログラム本体はBASICインタープリタの誤り

◎ROM焼きに関して
次に、改造したLILBUGをROMに焼きますが、実はすでに自作のROMライターを処分していたのでした。
作り直そうか思案していたところ、すばらしいページに出会いました。
RealTek8139Cネットワークボード流用ROMライタ4種
http://hp.vector.co.jp/authors/VA012947/util/rt8139.html
作者はまりも(DOSsoft)さん。この方のアイディアは秀逸です。感服しました。
普通はネットワークカード見てROMソケットが付いていてもROMライターに使えるかも?
なんて思いつきませんよ。
ともあれ手元にあったネットワークカードに不足の線を結線し、
書き込みに必要な12Vをパソコンの電源から取ることで無事EPROMに書き込むことができました。
まず、LILBUGがゼロページのRAMを使用しないように改造します。
LILBUGのリストファイルを見ると変数のアクセスには6800のDirect命令がたくさん使用されています。
ゼロページのRAMを使用しないということは「RAMへのアクセスにDirect命令が使用できない」ということなので、
改造によるコードサイズの増加は避けられません。
コードが増大するとBRA/BSR命令が相対ジャンプ範囲を超え、これらをJMP/JSR命令に変更する必要を生じます。
以下にLILBUGの開始アドレスを$F800から$F700に変更した場合のソースの変更箇所を示します。
LILBUGのソースはこちらのページの
SBC6303ルーズキット
https://www.switch-science.com/catalog/3834/
SBC6303データパックに収められているLILBUG.ASMを使用しました。
すでに9600ボーのシリアル通信に対応済みです。(電脳伝説 鈴木さんに感謝)
◎LILBUG.ASMの変更 使用RAMの開始アドレスを$80 -> $180に変更
*************** RAM STORAGE ***************
LOWRAM EQU $180 USED FOR STK OVFLOW CHK
ORG $1CF
STACK RMB 1 STK PNTR WILL RUN UP TOWARD USER CODE
SPC
元の値は$80と$CF
VECPTR RMB 2 VECTOR TABLE POINTER
IFEQ VDG
ORG $B00
ENDC
IFNE VDG
ORG $F700
ENDC
元の値は$F800
* HEX VALIDITY CHK
JSR VALIN
BMI MAIN <ADR>/ VALID?
LDX #MEM01 ENTER MEMORY ROUTINE
JMP MAIN08 SET UP FOR RTN
* A CONTAINS FIRST INPUT CHARACTER
元の命令はBRA
M.NMI TSX TRANSFER STK PNTR
LDS #STACK
JSR MOVSTK SAVE USER REGS
JSR RBRK REMOVE BRKPNT
元の命令はBRS
SHOW8 LDAB #HS.ON
JSR IO2
LDX #BBLK+1 GET TRANSFER PACKET
LDAB #HS.DTA
JSR IO
PULX RETRIEVE MEM/EX PNTR
STX PNTR
LDAB #HS.OFF
JSR IO2
CLRA CLEAR CC FOR RETURN
RTS
SPC
元の命令はBSR
* DUMMY IS AN RTI
SPC
ORG $FFD5
* USE ADR ON STK TO OBTAIN INDEX
* USE INDEX TO GET CORRECT VECTOR
* ROUTINE ADR FROM VECTOR TABLE.
元の値は$FFD6
◎以上を考慮し、TINYBASIC側の定数は以下のようになります。
<変更前>
UMTOP EQU $0980
UMBTM EQU $7FFF
BRKCHK EQU $8004
STACK EQU $A047
SUBBTM EQU $A04A
SUBSTK EQU $A080
INEEE EQU $E1AC
OUTEEE EQU $E1D1
RESET EQU $E0D0
ORG $0100
<変更後>
UMTOP EQU $0A80 -->BASICプログラム収納開始アドレス
UMBTM EQU $7FFF
STACK EQU $0147 -->TINYBASICが使用するスタック
SUBBTM EQU $014A -->TINYBASICが使用するスタック
SUBSTK EQU $0180 -->TINYBASICが使用するスタック
INEEE EQU $F706 -->1文字入力サブルーチン(LILBUG)
OUTEEE EQU $F709 -->1文字出力サブルーチン(LILBUG)
BRKCHK EQU $F792 -->受信ステータス検出サブルーチン(LILBUG)
RESET EQU $F71E -->LILBUGのリセットアドレス
ORG $0200 -->TINYBASICの開始アドレス
そして、こんな感じ

◎メモリマップ 2018.06.19訂正 下図の$0980は$0A80の誤り,BASICプログラム本体はBASICインタープリタの誤り

◎ROM焼きに関して
次に、改造したLILBUGをROMに焼きますが、実はすでに自作のROMライターを処分していたのでした。
作り直そうか思案していたところ、すばらしいページに出会いました。
RealTek8139Cネットワークボード流用ROMライタ4種
http://hp.vector.co.jp/authors/VA012947/util/rt8139.html
作者はまりも(DOSsoft)さん。この方のアイディアは秀逸です。感服しました。
普通はネットワークカード見てROMソケットが付いていてもROMライターに使えるかも?
なんて思いつきませんよ。
ともあれ手元にあったネットワークカードに不足の線を結線し、
書き込みに必要な12Vをパソコンの電源から取ることで無事EPROMに書き込むことができました。
- ご質問などはこちらからどうぞ
- ページ更新情報
- 最近嬉しかったこと
- 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