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