MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!
[第15回]
●MYCPU80自動STEPプログラム(BASIC)
前回でやっとハードウェアの準備が整いましたので、次はいよいよプログラムの作成です。
と言いましても今回は当社のBASIC制御ボードZB28Kを使ってのプログラム作成です。
なにしろ昔ながらの簡単BASICですから即席であっという間に作り上げてしまいました。
下がそのプログラムリストです。
|     10 A=0
    20 OUT $83,$9B
    30 OUT $87,$80
    40 OUT $84,$FF
    50 A%=IN($80)
    60 B%=IN($81)
    70 C%=IN($82)
    80 A15%=BIT(B%,3)
    90 A14%=BIT(B%,2)
   100 A13%=BIT(B%,5)
   110 A12%=BIT(B%,4)
   120 A11%=BIT(B%,7)
   130 A10%=BIT(B%,6)
   140 A9%=BIT(C%,2)
   150 A8%=BIT(C%,3)
   160 A7%=BIT(C%,0)
   170 A6%=BIT(C%,1)
   180 A5%=BIT(C%,5)
   190 A4%=BIT(C%,4)
   200 A3%=BIT(C%,7)
   210 A2%=BIT(C%,6)
   220 A1%=BIT(B%,1)
   230 A0%=BIT(B%,0)
   240 D7%=BIT(A%,1)
   250 D6%=BIT(A%,0)
   260 D5%=BIT(A%,3)
   270 D4%=BIT(A%,2)
   280 D3%=BIT(A%,6)
   290 D2%=BIT(A%,7)
   300 D1%=BIT(A%,4)
   310 D0%=BIT(A%,5)
   320 AH%=A15%*128+A14%*64+A13%*32+A12%*16+A11%*8+A10%*4+A9%*2+A8%
   330 AL%=A7%*128+A6%*64+A5%*32+A4%*16+A3%*8+A2%*4+A1%*2+A0%
   340 D%=D7%*128+D6%*64+D5%*32+D4%*16+D3%*8+D2%*4+D1%*2+D0%
   350 PRINT HEX$(AH%,2);HEX$(AL%,2);" ";HEX$(D%,2)
   360 OUT $84,0
   370 GOTO 40
 | 
| >R. 0000 C3 FFF9 CF FFFD F2 0001 3B 0001 3B 0002 00 0002 00 FFFF FF FFFF FF FFFF FF FFFF FF 003B 21 003B 21 FFFF FD FFFB FF 003C EC 003C EC 003D FF 003D FF 003E 06 003E 06 FFFD F2 FFF9 CF 003F 0C 003F 0C 0040 AF 0040 AF FFFB FF FFFF FD FFFF FF FFFF FF FFFF FF FFFF FF FFFF FF FFFF FF 0041 77 0041 77 FFF9 CF FFFD FE FFEC 00 FFEC 00 0042 23 0042 23 FFFF FD FFFB FF FFFF FF FFFF FF FFFF FF FFFF FF 0043 05 0043 05 FFFD F2 FFF9 CF FFFF FF FFFF FF FFFF FF FFFF FF 0044 C2 0044 C2 FFFB FF FFFF FD 0045 41 0045 41 0046 00 0046 00 FFFF FF FFFF FF FFFF FF FFFF FF 0041 77 0041 77 FFF8 FF FFFC FE FFED 00 FFED 00 0042 23 0042 23 FFFF FC FFFA 57 FFFF FF FFFF FF FFFF FF FFFF FF 0043 05 0043 05 FFFD FE FFF8 FF FFFF FF FFFF FF FFFF FF FFFF FF 0044 C2 0044 C2 FFFA 57 FFFE FC 0045 41 0045 41 0046 00 0046 00 FFFF FF FFFF FF FFFF FF FFFF FF 0041 77 0041 77 : : : : 004D C3 004D C3 FFFC FE FFF8 FF 004E 51 004E 51 004F 00 004F 00 FFFF FF FFFF FF FFFF FF FFFF FF 0051 3E 0051 3E FFF9 CF FFFD F2 0052 F7 0052 F7 0053 D3 0053 D3 FFFF FD FFFB FF 0054 98 0054 98 0098 F7 0098 F7 0055 31 0055 31 FFFD F2 FFF9 CF 0056 D1 0056 D1 0057 FF 0057 FF 0058 CD 0058 CD FFFB FF FFFF FD 0059 C0 0059 C0 005A 01 005A 01 FFFF FF FFFF FF FFD0 00 -----(1) FFD0 00 FFCF 5B -----(2) FFCF 5B FFFF FF FFFF FF FFFF FF FFFF FF 01C0 21 01C0 21 FFFF FD FFFA 57 01C1 F4 01C1 F4 01C2 FF 01C2 FF 01C3 11 01C3 11 FFFD F2 FFF8 FF 01C4 F8 01C4 F8 01C5 FF 01C5 FF 01C6 01 01C6 01 FFFB 57 FFFE FC : : : : 01E5 C2 01E5 C2 FFFC FE FFF8 FF 01E6 C9 01E6 C9 01E7 01 01E7 01 01E8 C9 ----(3) 01E8 C9 FFFA 57 FFFE F2 FFCF B7 ----(4) FFCF B7 FFD0 00 ----(5) FFD0 00 00B7 C9 ----(6) 00B7 C9 FFF8 FF FFFC FF FFD1 2A ----(7) FFD1 2A FFD2 FB ----(8) FFD2 FB FB2A FF ----(9) FB2A FF FFFE FC FFFA 57 FFD2 FB FFD2 FB FFD1 2B break in 360 | 
| 
2009/6/5  17:51  TK80MON4.TXT
END=02F3
              ;;; TK80 MONITOR PROGRAM FOR MC80
              ; 09/5/28 09/6/1 6/3 6/5
              ;
                ORG $0000
              ;
                USRSP=$FFC7
              ;
                MONSP=$FFD1
                RST2=$FFD1
                RST3=$FFD4
                RST4=$FFD7
                RST5=$FFDA
                RST6=$FFDD
                PSAVE=$FFE0
                SSAVE=$FFE2
                LSAVE=$FFE4
                HSAVE=$FFE5
                ESAVE=$FFE6
                DSAVE=$FFE7
                CSAVE=$FFE8
                BSAVE=$FFE9
                FSAVE=$FFEA
                DATA=$FFEC
                DATA1=$FFED
                ADRES=$FFEE
                ADRES1=$FFEF
                BRKAD=$FFF0
                BRKCT=$FFF2
                KFLAG=$FFF3
                DISP=$FFF4
                DIG=$FFF8
              ; 
              
0000 C33B00     JMP MONST
              ;
                ORG $0008
0008 C35100     JMP START
              ;
                ORG $0010
0010 C3D1FF     JMP RST2
              ;
                ORG $0018
0018 C3D4FF     JMP RST3
              ;
                ORG $0020
0020 C3D7FF     JMP RST4
              ;
                ORG $0028
0028 C3DAFF     JMP RST5
              ;
                ORG $0030
0030 C3DDFF     JMP RST6
              ;
                ORG $0038
0038 C35101     JMP BRENT
              ;
              ; INITIALIZE ROUTINE
              ;
003B 21ECFF   MONST:LXI H,DATA
003E 060C       MVI B,0C
0040 AF         XRA A
0041 77       MONST2:MOV M,A
0042 23         INX H
0043 05         DCR B
0044 C24100     JNZ MONST2
0047 21C7FF     LXI H,USRSP
004A 22E2FF     SHLD SSAVE
004D C35100     JMP START
0050 00         NOP
              ;
              ; MONITOR START
              ;
0051 3EF7     START:MVI A,F7
0053 D398       OUT 98;PIC reset
0055 31D1FF     LXI SP,MONSP
0058 CDC001     CALL SEGCG
005B CD1602     CALL KEYIN
005E 47         MOV B,A
005F E610       ANI 10
0061 CA8400     JZ DIGIT | 
| 
              ;
              ; SEGMENT CONVERT SUB
              ;
01C0 21F4FF   SEGCG:LXI H,DISP
01C3 11F8FF     LXI D,DIG
01C6 01E901     LXI B,SEGD
01C9 7E       SEGCG2:MOV A,M
01CA 23         INX H
01CB E5         PUSH H
01CC F5         PUSH PSW
01CD E6F0       ANI F0
01CF 0F         RRC
01D0 0F         RRC
01D1 0F         RRC
01D2 0F         RRC
01D3 2600       MVI H,00
01D5 6F         MOV L,A
01D6 09         DAD B
01D7 7E         MOV A,M
01D8 12         STAX D
01D9 13         INX D
01DA F1         POP PSW
01DB E60F       ANI 0F
01DD 2600       MVI H,00
01DF 6F         MOV L,A
01E0 09         DAD B
01E1 7E         MOV A,M
01E2 12         STAX D
01E3 E1         POP H
01E4 1C         INR E
01E5 C2C901     JNZ SEGCG2
01E8 C9         RET
              ;
              ; SEGMENT DATA
              ;
01E9 5C       SEGD:DB 5C
01EA 06         DB 06
01EB 5B         DB 5B
01EC 4F         DB 4F
01ED 66         DB 66
01EE 6D         DB 6D
01EF 7D         DB 7D
01F0 27         DB 27
01F1 7F         DB 7F
01F2 6F         DB 6F
01F3 77         DB 77
01F4 7C         DB 7C
01F5 39         DB 39
01F6 5E         DB 5E
01F7 79         DB 79
01F8 71         DB 71
              ; | 
|               ;
00AD 3AECFF   MEMR:LDA DATA
00B0 32EDFF     STA DATA1
00B3 7E         MOV A,M
00B4 32ECFF     STA DATA
00B7 C9         RET
              ;
              ; MEMORY READ & ADDRESS DECREMENT
              ;
00B8 2AEEFF   ADDCX:LHLD ADRES
00BB 2B         DCX H
00BC CDAD00     CALL MEMR
00BF C3A400     JMP ADSTR
              ; |