復活!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
|