楽天市場
[無料でホームページを作成] [通報・削除依頼]

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の開始アドレス


そして、こんな感じ
img_20180617-162147.jpg

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



◎ROM焼きに関して
次に、改造したLILBUGをROMに焼きますが、実はすでに自作のROMライターを処分していたのでした。
作り直そうか思案していたところ、すばらしいページに出会いました。

RealTek8139Cネットワークボード流用ROMライタ4種
http://hp.vector.co.jp/authors/VA012947/util/rt8139.html

作者はまりも(DOSsoft)さん。この方のアイディアは秀逸です。感服しました。
普通はネットワークカード見てROMソケットが付いていてもROMライターに使えるかも?
なんて思いつきませんよ。

ともあれ手元にあったネットワークカードに不足の線を結線し、
書き込みに必要な12Vをパソコンの電源から取ることで無事EPROMに書き込むことができました。

img_20180617-162418.jpg