復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第454回]
●イニシャルプログラムローダー(IPL)
今回はE−80ミニコンのIPL(Initial Program Loader)について説明をします。
IPLはE−80ミニコンのようにRAMが主体であるようなボードにシステムプログラムをロードするためのプログラムです。
IPLは普通はROMに書かれていることが多いのですが、短いプログラムですから、E−80ではPICに書き込んでそれをRAMに転送するように考えました。
PIC内蔵のプログラムをRAMに転送するのですから、PICのプログラムも一種のイニシャルプログラムローダーであるとも言えます。
下はそのIPLのアセンブルリストです。
このプログラムは前半部分(0000〜000E)と後半部分(FF80〜FFEA)に分かれています。
結構長いプログラムになってしまいました。
前回は128バイトもあれば十分です、と書きましたがほぼぎりぎりのところまで使ってしまっています。
2013/5/31 9:30 picldr2a.txt END=FFEA ; E-80 initial loader in PIC16F886 ;12/11/27 11/28 12/3 12/6 12/8 ;12/12 12/13 12/14 ;13/01/18 1/19 ;5/26 ; ORG $0000 ; 0000 210E00 LD HL,DTTOP 0003 1180FF LD DE,LDRTOP 0006 016A00 LD BC,$006A 0009 EDB0 LDIR 000B C380FF JP LDRTOP 000E 00 DTTOP:NOP; ; ORG $FF80 ; FF80 310000 LDRTOP:LD SP,$0000 FF83 3E88 LD A,88 FF85 D3FB OUT (FB),A FF87 3EFF LD A,FF FF89 D3FA OUT (FA),A FF8B 3E30 LD A,30 FF8D ED DB ED FF8E 39 DB 39 FF8F 36 DB 36;refresh off FF90 ED DB ED FF91 39 DB 39 FF92 32 DB 32;memory wait off FF93 3E80 LD A,80 FF95 ED DB ED FF96 39 DB 39 FF97 3A DB 3A;memory bank set FF98 CDC3FF CALL LDSUB FF9B 6F LD L,A FF9C CDC3FF CALL LDSUB FF9F 67 LD H,A;HL=load top address FFA0 CDC3FF CALL LDSUB FFA3 5F LD E,A FFA4 CDC3FF CALL LDSUB FFA7 57 LD D,A;DE=load end address FFA8 CDC3FF CALL LDSUB FFAB 4F LD C,A FFAC CDC3FF CALL LDSUB FFAF 47 LD B,A;BC=JP address after loaded FFB0 C5 PUSH BC FFB1 13 INC DE FFB2 EB EX DE,HL FFB3 B7 OR A FFB4 ED52 SBC HL,DE FFB6 EB EX DE,HL;DE=load bytes ; FFB7 CDC3FF LOOP:CALL LDSUB FFBA 77 LD (HL),A FFBB 23 INC HL FFBC 1B DEC DE FFBD 7A LD A,D FFBE B3 OR E FFBF 20F6 JR NZ,LOOP FFC1 E1 POP HL FFC2 E9 JP (HL) ; ;load subroutine FFC3 3E04 LDSUB:LD A,04;bit2=L,bit3=H,bit0-4 are INVERT FFC5 D3FE OUT (FE),A FFC7 DBFE LP1:IN A,(FE) FFC9 E6C0 AND C0 FFCB 2812 JR Z,LP3;no data FFCD FE80 CP 80 FFCF 20F6 JR NZ,LP1 FFD1 DBFC IN A,(FC) FFD3 F5 PUSH AF FFD4 AF XOR A FFD5 D3FE OUT (FE),A FFD7 DBFE LP2:IN A,(FE) FFD9 E640 AND 40 FFDB 28FA JR Z,LP2 FFDD F1 POP AF FFDE C9 RET FFDF AF LP3:XOR A;bit2=H,bit3=H FFE0 D3FE OUT (FE),A FFE2 DBFE LP4:IN A,(FE) FFE4 E640 AND 40 FFE6 28FA JR Z,LP4 FFE8 18D9 JR LDSUB FFEA 00 LDREND:NOP ; DTTOP =000E LDREND =FFEA LDRTOP =FF80 LDSUB =FFC3 LOOP =FFB7 LP1 =FFC7 LP2 =FFD7 LP3 =FFDF LP4 =FFE2 |