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
;
|