Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What is going on with this article?
@EasyCording

Z80 グランプリのハゲタカ

はじめに

寝る子は育つというが、随分寝かせたソースコードが、
いまの現代に何を物語るのか?
そこに興味があって、かつコロナ禍で暇だったので、
昔の自作ゲームの掘り起こしから始めてみた。

きっかけ

ゲーム紹介

動画 https://www.youtube.com/watch?v=NR_CV44QEJs&t=1s
GITHUB https://github.com/chanmoto/guranpurino_hagetaka
掲載誌 https://github.com/chanmoto/guranpurino_hagetaka/blob/master/8401%E6%9C%AC%E6%96%87.pdf

ソースコード

今更であるが、BASICはさらりと、そんなものであることを読み取ってもらえたらと思う
(文字化けしているが、これは当時のPC8001のグラフィックキャラが現代のPCに対応していないため)

10 '・封封封封封封封封・
20 '・グランプリ ノ ハゲタカ ・
30 '・  83・10・14・  ・
40 '・ BY M.Tamazawa  ・
50 '・ BASIC & マシンゴ  ・
60 '・&Hd000   &Hd231 ・
70 '・  OLIGINAL No.1 ・
80 '囎封封封封封封封封・
90 WIDTH40,25:CONSOLE,,0,1:PRINTCHR$(12):GOTO 870
100 '㊦㊦・マシンゴ カキコミ ㊦㊦・
110 RESTORE 1220:X=0:L=1220:D=&HD000:PRINT"WRITING MASINE NOW!!":LINE1,1
120 X=0:FORI=0TO15:READ A$:A=VAL("&H"+A$):POKED+I,A:X=X+A:NEXT
130 READ A:IF X<>A THEN BEEP:PRINT"BAD DATA LIST";L:END
140 L=L+10:D=D+&H10:IF D=&HD240 THEN RETURN ELSE GOTO 120
150 '㊦㊦・PUT テイギ ㊦㊦・
160 RESTORE 1090
170 FORI=0TO 7:READ A$:C%(I)=VAL("&H"+A$)+&H5900:NEXT
180 FORI=0TO14:D%(I)=PEEK(&HD223+I)+&H5900
190 E1%(I)=RND(1)*256+&H5900:E2%(I)=RND(I)*256+&HD900:NEXT
200 FORI=0TO29:READA$:F%(I)=VAL("&H"+A$)+&HD900:NEXT
210 RETURN
220 '㊦㊦・セツメイ ㊦㊦・
230 WIDTH80,25:COLOR7,0,1:PRINTCHR$(12)
240 COLOR1:PRINTSPC(15)"   艸㊦・蓍蓍       悃                艸㊦・  "
250 COLOR5:PRINTSPC(15)"  蓍  蓍封・   封封・气 ・           蓍 蓍 蓍 "
260 COLOR4:PRINTSPC(15)"     蓍封封ヴ  ・ 蓍  ・・恤装・    蓍・鈕㊦・"
270 COLOR6:PRINTSPC(15)"    蓍    蓍  蓍 蓍    蓍 ・・・      蓍 蓍蓍 "
280 COLOR2:PRINTSPC(15)"   蓍    蓍€€蓍 蓍    蓍  桾・・ハゲ  蓍 蓍蓍  "
290 LOCATE31,13:PRINT"恤・          恤・
300 LOCATE31,14:PRINT"・紋珥     珥蝟6・
310 LOCATE31,15:PRINT"桾・          桾・
320 PUT@A(37,13)-(41,15),D%
330 COLOR6:LOCATE 27,18:PRINT"タダ コースニ ソッテ 1000Km ツッパシレ。"
340 COLOR5:LOCATE 21,20:PRINT"50Km マイニ クルマト BONUS ガ タサレテ コースガ カワリマス。"
350 COLOR2:LOCATE 28,22:PRINT"PUSH RETURN KEY TO START"
360 IF INKEY$<>CHR$(13) GOTO 360
370 FORI=70TO0STEP-1:BEEP1:PUT@A(I,7)-(I+9,9),F%:BEEP0:NEXT
380 RETURN
390 '㊦㊦・スタート ㊦㊦・
400 FORJ=0TO15:BEEP1:FORI=1TO7:COLORI:LOCATE33,10:PRINT"START!!":NEXT:BEEP0:NEXT:LOCATE30,10:FORI=&HF7D1TO&HF7D8:POKEI,0:NEXT:RETURN
410 '㊦㊦・バクハツ ㊦㊦・
420 AD=PEEK(&HD292)-1:FORI=0TO15
430 PUT@A(AD,20)-(AD+4,22),E1%:BEEP1
440 FORJ=0TOI:NEXT
450 PUT@A(AD,20)-(AD+4,22),E2%:BEEP0:NEXT
460 '㊦㊦・オーバー ㊦㊦・
470 CA=CA-1:IF CA<>0 THEN 480 ELSE GOTO 500
480 LOCATE30,10:COLOR 5:PRINT"   FIGHT !!  "
490 FORI=0TO1000:NEXT:RETURN
500 COLOR2:PRINTCHR$(12):LOCATE0,10
510 LOCATE 18,10:PRINT"艸・ 艸・ ㊦蜃・㊦㊦  艸・ ・ ・㊦㊦ ㊦・"
520 LOCATE 18,11:PRINT"・€€ ・ ・・・・〝€€  ・ ・・ ・〝€€ ・ ・
530 LOCATE 18,12:PRINT"・這 №g ・・・∑粕  ・ ・趺蓍 ∑粕 ㊦・"
540 LOCATE 18,13:PRINT"諛・ ・ ・・・・㊦㊦  諛・  跚  ㊦㊦ ・趺"
550 FORI=0TO2000:NEXT:GOTO 910
560 '㊦㊦・ショキ ガメン ㊦㊦・
570 COLOR4,0,1:PRINTCHR$(12):COLOR7
580 LOCATE0,0:PRINTUSING"SCORE ######";SC*10
590 LOCATE16,0:PRINTUSING"HIGH-SCORE ######";HS*10
600 LOCATE36,0:PRINTUSING"###### Km";KM
610 IFCA>8THENX=8ELSEX=CA
620 FORI=0TOX-1:PUT@A(47+I*4,0)-(50+I*4,1),C%:NEXT
630 LINE(56,12)-(57,94),PSET,4,BF
640 LINE(58+HB*2,12)-(59+HB*2,94),PSET,4,BF
650 COLOR4:RETURN
660 '㊦㊦・チョウセツ ㊦㊦・
670 READ DO,HB,CL$:IF DO=100 GOTO 710
680 POKE &HD0EA,DO:POKE &HD11D,DO:POKE &HD146,DO
690 POKE &HD297,HB:POKE &HD113,VAL("&H"+CL$):POKE &HD29B,0
700 RETURN
710 '㊦㊦・GOAL ㊦㊦・
720 FORJ=1TO3:FORI=1TO7:BEEP1: COLORI
730 LOCATE 21,10:PRINT"艸・ 艸・ 艸・ ・     ㊦・・ ・ ・・
740 LOCATE 21,11:PRINT"・€€ ・ ・・ ・・      ・ ・蜃  ・・
750 LOCATE 21,12:PRINT"・這 ・ ・№g ・      ・ ・諛     "
760 LOCATE 21,13:PRINT"諛・ 諛・ ・ ・㊦㊦   ㊦・・ ・ ・・
770 BEEP0:NEXT:NEXT
780 FORI=0TO1000:NEXT:X=0
790 FORJ=0TO22STEP3:FORI=70TOXSTEP-1
800 PUT@A(I,J)-(I+9,J+2),F%
810 NEXT:X=X+9:NEXT:POKE&HD28C,1:FORI=0TO300:BEEP1:BEEP0:NEXT:GOTO 940
820 '㊦㊦・ボーナス ㊦㊦・
830 COLOR6:LOCATE32,12:PRINT" BONUS CAR "
840 FORI=0TO10:FORJ=0TO40:BEEP1:NEXT:BEEP0:NEXT
850 CA=CA+1:FORI=0TO500:NEXT:   RETURN
860 '㊦㊦・MAIN ㊦㊦・
870 CLEAR50,&HCFFF:IF PEEK(&HD23F)<>&H90 THEN GOSUB 110
880 DIM C%(7),D%(14),E1%(14),E2%(14),F%(29):DEFINT A-Z
890 DEFUSR=&HD000:HS=0:POKE&HD293,RND(1)*256:POKE&HD294,RND(1)*256
900 '㊦㊦・ショキ セッテイ ㊦㊦・
910 KM=0:SC=0:CA=3:GOSUB160:GOSUB230
920 POKE&HD295,0:POKE&HD296,0
930 POKE&HD299,0:POKE&HD29A,0
940 RESTORE:GOSUB 670:GOSUB 570:GOSUB 400:GOTO 970
950 GOSUB 670
960 GOSUB 570
970 A=USR(0):X=PEEK(&HD28C)
980 SC=PEEK(&HD295)+PEEK(&HD296)*256
990 KM=PEEK(&HD299)+PEEK(&HD29A)*256
1000 IF HS<SC THEN HS=SC
1010 IF X=1 THEN GOSUB 420:GOTO 960
1020 IF X=2 THEN GOSUB 820:GOTO 950
1030 '㊦㊦・コース DATA ㊦㊦・
1040 DATA 1,15,ff, 3,15,07, 2,13,ff, 1,13,03, 3,13,7f
1050 DATA 2,13,0f, 1,15,7f, 2,13,03, 3,15,ff, 2,13,7f
1060 DATA 3,13,07, 1,15,3f, 3,13,ff, 2,13,0f, 1,11,ff
1070 DATA 3,11,03, 1,11,3f, 2,11,07, 3,09,ff, 1,09,07 ,100,0,0
1080 '㊦㊦・PUT DATA ㊦㊦・
1090 DATA 4e,ff,e4,00,4e,ff,e4,00
1100 DATA 00,00,00,c8,ee,57,54,15,14,00
1110 DATA 44,d6,6f,ff,5f,55,41,45,51,40
1120 DATA 00,00,00,31,77,dd,4d,95,95,00
1200 '㊦㊦・マシンゴ データー ㊦㊦・
1210 ' &H D000 封封封封封封封封封封封封封封封封封封封封封封
1220 DATA CD,90,D1,CD,0A,D1,CD,9F,D1,CD,E5,D0,CD,0F,D1,CD, 2831
1230 DATA 34,D0,CD,1F,D0,CD,CA,D1,3A,8C,D2,A7,C0,18,E4,3A, 2397
1240 DATA 8D,D2,A7,C8,3A,8E,D2,3D,A7,28,04,32,8E,D2,C9,AF, 2178
1250 DATA 32,8D,D2,C9,3A,91,D2,E6,07,C0,CD,7B,D0,CD,29,D1, 2435
1260 DATA 2A,8F,D2,DB,00,FE,EF,28,1E,FE,BF,28,24,CD,C7,D0, 2310
1270 DATA CD,90,D0,3A,8E,D2,47,C5,06,FF,3E,20,D3,40,10,FE, 2135
1280 DATA AF,D3,40,C1,10,F1,C9,2B,22,8F,D2,21,92,D2,35,18, 1997
1290 DATA DC,23,22,8F,D2,21,92,D2,34,18,D2,2A,8F,D2,11,73, 1844
1300 DATA 00,06,03,C5,06,05,36,00,23,10,FB,C1,19,10,F4,C9, 1252
1310 DATA 2A,8F,D2,11,23,D2,06,03,C5,06,05,1A,77,23,13,10, 1089
1320 DATA FA,C1,D5,11,73,00,19,D1,10,EE,21,b2,Fc,06,03,11, 1765
1330 DATA 75,00,3A,92,D2,77,23,36,59,23,3A,92,D2,C6,05,77, 1599
1340 DATA 23,36,99,19,10,EC,C9,2A,8F,D2,11,73,00,06,03,C5, 1453
1350 DATA 06,05,7E,A7,20,08,23,10,F9,C1,19,10,F2,C9,C1,21, 1547
1360 DATA 8C,D2,36,01,C9,DD,21,80,D2,06,03,2A,93,D2,54,5D, 1783
1370 DATA 19,19,7D,84,67,11,81,00,19,22,93,D2,7E,E6,03,DD, 1552
1375 '&H D100 封封封封封封封封封封封封封封封封封封封封封封・
1380 DATA 77,03,11,04,00,DD,19,10,E2,C9,21,91,D2,34,C9,3A, 1531
1390 DATA 91,D2,E6,3C,C0,DD,21,80,D2,11,04,00,06,03,DD,7E, 1806
1400 DATA 03,DD,77,00,DD,19,10,F6,C9,11,8F,FE,21,17,FE,01, 1777
1410 DATA B0,09,ED,B8,21,6B,F4,06,4A,36,5A,23,10,FB,DD,21, 1770
1420 DATA 80,D2,11,04,00,06,03,DD,7E,00,DD,6E,01,DD,66,02, 1372
1430 DATA FE,01,20,08,7D,FE,6D,28,1A,2B,18,0A,FE,02,20,21, 1247
1440 DATA 7D,FE,A4,28,15,23,DD,75,01,DD,74,02,18,13,DD,19, 1606
1450 DATA 10,D5,C9,3E,02,DD,77,00,18,07,3E,01,DD,77,00,18, 1292
1460 DATA 00,C5,E5,3A,97,D2,47,36,00,23,10,FB,E1,C1,18,DE, 1936
1470 DATA 11,80,D2,21,0F,D2,7E,FE,FF,C8,12,23,13,18,F7,3A, 1849
1480 DATA 91,D2,E6,FF,C0,3A,9B,D2,FE,32,28,18,3C,32,9B,D2, 2298
1490 DATA 11,26,F3,2A,99,D2,23,22,99,D2,CD,E2,D1,36,00,23, 1864
1500 DATA 36,14,12,C9,21,8C,D2,36,02,C9,3A,91,D2,E6,1f,C0, 1799
1510 DATA 11,07,F3,2A,95,D2,23,22,95,D2,CD,E2,D1,13,3E,30, 1865
1520 DATA 12,C9,01,10,27,CD,FE,D1,01,E8,03,CD,FE,D1,01,64, 1948
1530 DATA 00,CD,FE,D1,0E,0A,CD,FE,D1,7D,C6,30,12,C9,C5,37, 2202
1535 '&H D200 封封封封封封封封封封封封封封封封封封封封封封・
1540 DATA 3F,3E,30,ED,42,38,03,3C,18,F9,C1,09,12,13,C9,00, 1308
1550 DATA 86,F4,03,00,86,F4,02,00,86,F4,03,00,01,60,81,FC, 1620
1560 DATA 00,21,FF,E0,4E,FF,E4,0E,40,F6,99,6F,04,77,D2,66, 2096
1570 DATA 2D,77,0,0,0,0,0,0,0,0,0,0,0,0,0,90             , 308

マシン語の部分

ここからが本題。
当時のパソコンのアセンブラコードについては、何も情報がなく、
当時、中一だった少年には、それはそれは悪魔のような修行であった。
何とかニーモニック表を片手に逆アセンブラして、我流で学んだものである。

                      ;PROG AREA = D000-D267
                      ;PROG SIZE = 0268 (616BYTE)

                        ORG 0D000H

D000 CD90D1   I?N       CALL クルマ描く         ; 車爆発パターン
                      メインループ:
D003 CD0AD1   I.N       CALL CLOCK         ; 車の初期化
D006 CD9FD1   I?N       CALL クリア判定         ; 乱数テーブル 
D009 CDE5D0   IaD       CALL 道の方向を変える         ; ?
D00C CD0FD1   I.N       CALL 道曲がる         ; 道の初期化
D00F CD34D0   I4D       CALL 車の操作         ; 
D012 CD1FD0   I.D       CALL ウェイト         ;
D015 CDCAD1   IEN       CALL 距離         ;
D018 3A8CD2   :?O       LD A,(終了フラグ)       ;
D01B A7       §        AND A               ;
D01C C0       A         RET NZ              ;
D01D 18E4     .a        JR メインループ           ;

                      ウェイト:
D01F 3A8DD2   :?O       LD A,(全速フラグ)       ;
D022 A7       §        AND A               ;
D023 C8       E         RET Z               ;
D024 3A8ED2   :?O       LD A,(初速タイマ)       ;
D027 3D       =         DEC A               ;
D028 A7       §        AND A               ;
D029 2804     (.        JR Z,J0D02FH         ;
D02B 328ED2   2?O       LD (初速タイマ),A       ;
D02E C9       E         RET                 ;

                      J0D02FH:
D02F AF        ̄           XOR A               ;
D030 328DD2   2?O       LD (全速フラグ),A       ;
D033 C9       E         RET                 ;

                      車の操作:
D034 3A91D2   :‘O         LD A,(clock)       ;   D291
D037 E607     a.        AND 007H            ;   00000111 マスク
D039 C0       A         RET NZ              ;
D03A CD7BD0   I{D       CALL 車を消去       ;
D03D CD29D1   I)N       CALL スクロール         ;
D040 2A8FD2   *?O       LD HL,(car-x)      ;
D043 DB00     U.        IN A,(000H)         ;<Key 0/1/2/3 4/5/6/7> 
D045 FEEF     .i        CP 0EFH             ;
D047 281E     (.        JR Z,車を左に移動         ;  left
D049 FEBF     .?        CP 0BFH             ;
D04B 2824     ($        JR Z,車を右に移動         ;  right
                      L0D04DH:
D04D CDC7D0   ICD       CALL 当たり判定         ;
D050 CD90D0   I?D       CALL 車を描く         ;
D053 3A8ED2   :?O       LD A,(初速タイマ)       ;
D056 47       G         LD B,A              ;
                      L0D057H:
D057 C5       A         PUSH BC             ;
D058 06FF     ..        LD B,0FFH           ;
D05A 3E20     >         LD A,020H           ;
D05C D340     O@        OUT (040H),A        ;<-|-|BEEP|-| |Printer> 
                      L0D05EH:
D05E 10FE     ..        DJNZ L0D05EH         ;
D060 AF        ̄           XOR A               ;
D061 D340     O@        OUT (040H),A        ;<-|-|BEEP|-| |Printer> 
D063 C1       A         POP BC              ;
D064 10F1     .n        DJNZ L0D057H         ;
D066 C9       E         RET                 ;

                      車を左に移動:
D067 2B       +         DEC HL              ;  left 
D068 228FD2   "?O       LD (car-x),HL      ;
D06B 2192D2   !’O         LD HL,0D292H        ;
D06E 35       5         DEC (HL)            ;
D06F 18DC     .U        JR L0D04DH           ;

                      車を右に移動:
D071 23       #         INC HL              ;
D072 228FD2   "?O       LD (car-x),HL      ;
D075 2192D2   !’O         LD HL,0D292H        ;
D078 34       4         INC (HL)            ;
D079 18D2     .O        JR L0D04DH           ;

                      車を消去
D07B 2A8FD2   *?O       LD HL,(car-x)      ;
D07E 117300   .s.       LD DE,00073H        ;  改行 増加分  
D081 0603     ..        LD B,003H           ;  縦に3キャラ分
                      L0D083H:
D083 C5       A         PUSH BC             ;
D084 0605     ..        LD B,005H           ;  横に5キャラ分
                      L0D086H:
D086 3600     6.        LD (HL),000H        ;
D088 23       #         INC HL              ;
D089 10FB     ..        DJNZ L0D086H         ;
D08B C1       A         POP BC              ;
D08C 19       .         ADD HL,DE           ;
D08D 10F4     .o        DJNZ L0D083H         ;
D08F C9       E         RET                 ;

                      車を描く:
D090 2A8FD2   *?O       LD HL,(car-x)      ;
D093 1123D2   .#O       LD DE,車データ       ;
D096 0603     ..        LD B,003H           ;
                      L0D098H:
D098 C5       A         PUSH BC             ;
D099 0605     ..        LD B,005H           ;
                      L0D09BH:
D09B 1A       .         LD A,(DE)           ;
D09C 77       w         LD (HL),A           ;
D09D 23       #         INC HL              ;
D09E 13       .         INC DE              ;
D09F 10FA     ..        DJNZ L0D09BH         ;
D0A1 C1       A         POP BC              ;
D0A2 D5       O         PUSH DE             ;
D0A3 117300   .s.       LD DE,00073H        ;
D0A6 19       .         ADD HL,DE           ;
D0A7 D1       N         POP DE              ;
D0A8 10EE     .i        DJNZ L0D098H         ;
D0AA 21B2FC   !2.       LD HL,0FCB2H        ;
D0AD 0603     ..        LD B,003H           ;
D0AF 117500   .u.       LD DE,00075H        ;
                      L0D0B2H:
D0B2 3A92D2   :’O         LD A,(0D292H)       ;
D0B5 77       w         LD (HL),A           ;
D0B6 23       #         INC HL              ;
D0B7 3659     6Y        LD (HL),059H        ;
D0B9 23       #         INC HL              ;
D0BA 3A92D2   :’O         LD A,(0D292H)       ;
D0BD C605     A.        ADD A,005H          ;
D0BF 77       w         LD (HL),A           ;
D0C0 23       #         INC HL              ;
D0C1 3699     6?        LD (HL),099H        ;
D0C3 19       .         ADD HL,DE           ;
D0C4 10EC     .i        DJNZ L0D0B2H         ;
D0C6 C9       E         RET                 ;

                      当たり判定:
D0C7 2A8FD2   *?O       LD HL,(car-x)      ;
D0CA 117300   .s.       LD DE,00073H        ;
D0CD 0603     ..        LD B,003H           ;
                      L0D0CFH:
D0CF C5       A         PUSH BC             ;
D0D0 0605     ..        LD B,005H           ;
                      L0D0D2H:
D0D2 7E       ~         LD A,(HL)           ;
D0D3 A7       §        AND A               ;
D0D4 2008      .        JR NZ,J0D0DEH        ;
D0D6 23       #         INC HL              ;
D0D7 10F9     ..        DJNZ L0D0D2H         ;
D0D9 C1       A         POP BC              ;
D0DA 19       .         ADD HL,DE           ;
D0DB 10F2     .o        DJNZ L0D0CFH         ;
D0DD C9       E         RET                 ;

                      J0D0DEH:
D0DE C1       A         POP BC              ;
D0DF 218CD2   !?O       LD HL,終了フラグ        ;
D0E2 3601     6.        LD (HL),001H        ;
D0E4 C9       E         RET                 ;

                      道の方向を変える:
D0E5 DD2180D2 Y!?O      LD IX,道の配列        ;   
D0E9 0603     ..        LD B,003H           ;  道
                      L0D0EBH:
D0EB 2A93D2   *“O         LD HL,(0D293H)      ;  D293
D0EE 54       T         LD D,H              ;   
D0EF 5D       ]         LD E,L              ;
D0F0 19       .         ADD HL,DE           ;  *2
D0F1 19       .         ADD HL,DE           ;  *3 
D0F2 7D       }         LD A,L              ;
D0F3 84       ?         ADD A,H             ;
D0F4 67       g         LD H,A              ;
D0F5 118100   .?.       LD DE,00081H        ;
D0F8 19       .         ADD HL,DE           ;
D0F9 2293D2   "“O         LD (0D293H),HL      ;  D293
D0FC 7E       ~         LD A,(HL)           ;
D0FD E603     a.        AND 003H            ;
D0FF DD7703   Yw.       LD (IX+003H),A      ;  乱数 方向
D102 110400   ...       LD DE,00004H        ;
D105 DD19     Y.        ADD IX,DE           ;
D107 10E2     .a        DJNZ L0D0EBH         ;
D109 C9       E         RET                 ;

                      CLOCK:
D10A 2191D2   !‘O         LD HL,clock        ;  clock  メインCLOCK
D10D 34       4         INC (HL)            ;
D10E C9       E         RET                 ;

                      道曲がる:
D10F 3A91D2   :‘O         LD A,(clock)       ;
D112 E63C     a<        AND 03CH            ;  メインCLOCK  3C 
D114 C0       A         RET NZ              ;
D115 DD2180D2 Y!?O      LD IX,道の配列        ;  IX D280
D119 110400   ...       LD DE,00004H        ;  DE 4
D11C 0603     ..        LD B,003H           ;  B  3   道の数
                      L0D11EH:
D11E DD7E03   Y~.       LD A,(IX+003H)      ;  D283
D121 DD7700   Yw.       LD (IX+000H),A      ;  D280
D124 DD19     Y.        ADD IX,DE           ;  IX=IX+4
D126 10F6     .o        DJNZ L0D11EH        ;  道のx
D128 C9       E         RET                 ;

                      スクロール:
D129 118FFE   .?.       LD DE,0FE8FH        ;スクロール
D12C 2117FE   !..       LD HL,0FE17H        ;
D12F 01B009   .°.      LD BC,009B0H        ;
D132 EDB8     i,          LDDR                ;ブロック転送
D134 216BF4   !ko       LD HL,0F46BH        ;
D137 064A     .J        LD B,04AH           ;1行分
                      L0D139H:
D139 365A     6Z        LD (HL),05AH        ;芝生を描く
D13B 23       #         INC HL              ;
D13C 10FB     ..        DJNZ L0D139H         ;
D13E DD2180D2 Y!?O      LD IX,道の配列        ;
D142 110400   ...       LD DE,00004H        ;
D145 0603     ..        LD B,003H           ;
                      L0D147H:
D147 DD7E00   Y~.       LD A,(IX+000H)      ; 道の方向
D14A DD6E01   Yn.       LD L,(IX+001H)      ; HL アドレス
D14D DD6602   Yf.       LD H,(IX+002H)      ;
D150 FE01     ..        CP 001H             ; 左方向か? 
D152 2008      .        JR NZ,J0D15CH       ;
D154 7D       }         LD A,L              ; 
D155 FE6D     .m        CP 06DH             ; 右端
D157 281A     (.        JR Z,道の反転1         ;
D159 2B       +         DEC HL              ; 道を左に移動
D15A 180A     ..        JR J0D166H           ;

                      J0D15CH:
D15C FE02     ..        CP 002H             ; 右方向か?
D15E 2021      !        JR NZ,J0D181H        ;
D160 7D       }         LD A,L              ;
D161 FEA4     .?        CP 0A4H             ; 
D163 2815     (.        JR Z,道の反転2         ;
D165 23       #         INC HL              ;
                      J0D166H:
D166 DD7501   Yu.       LD (IX+001H),L      ;
D169 DD7402   Yt.       LD (IX+002H),H      ;
D16C 1813     ..        JR J0D181H           ;

                      L0D16EH:
D16E DD19     Y.        ADD IX,DE           ;
D170 10D5     .O        DJNZ L0D147H         ;
D172 C9       E         RET                 ;

                      道の反転1:
D173 3E02     >.        LD A,002H           ;  2:
D175 DD7700   Yw.       LD (IX+000H),A      ;  方向 2
D178 1807     ..        JR J0D181H           ;

                      道の反転2:
D17A 3E01     >.        LD A,001H           ;
D17C DD7700   Yw.       LD (IX+000H),A      ;
D17F 1800     ..        JR J0D181H           ;

                      J0D181H:
D181 C5       A         PUSH BC             ;
D182 E5       a         PUSH HL             ;
D183 3A97D2   :?O       LD A,(道幅)       ; 
D186 47       G         LD B,A              ;
                      L0D187H:
D187 3600     6.        LD (HL),000H        ;   道を書く
D189 23       #         INC HL              ;
D18A 10FB     ..        DJNZ L0D187H         ;
D18C E1       a         POP HL              ;
D18D C1       A         POP BC              ;
D18E 18DE     .T        JR L0D16EH           ;

                      クルマ描く:                       D20F -> D280   FF になるまで転送する
D190 1180D2   .?O       LD DE,道の配列        ;
D193 210FD2   !.O       LD HL,W0D20FH        ;
                      L0D196H:
D196 7E       ~         LD A,(HL)           ;
D197 FEFF     ..        CP 0FFH             ;
D199 C8       E         RET Z               ;
D19A 12       .         LD (DE),A           ;
D19B 23       #         INC HL              ;
D19C 13       .         INC DE              ;
D19D 18F7     .÷       JR L0D196H           ;

                      クリア判定:
D19F 3A91D2   :‘O         LD A,(clock)       ;    D291 が FFでないとRET
D1A2 E6FF     a.        AND 0FFH            ;
D1A4 C0       A         RET NZ              ;
D1A5 3A9BD2   :?O       LD A,(0D29BH)       ;    D29B 32H か?
D1A8 FE32     .2        CP 032H             ;
D1AA 2818     (.        JR Z,J0D1C4H         ;
D1AC 3C       <         INC A               ;    A=1+1 
D1AD 329BD2   2?O       LD (0D29BH),A       ;    D29BH にいれる 
D1B0 1126F3   .&o       LD DE,0F326H        ;    F326
D1B3 2A99D2   *?O       LD HL,(0D299H)      ;    D299H +1
D1B6 23       #         INC HL              ;
D1B7 2299D2   "?O       LD (0D299H),HL      ;
D1BA CDE2D1   IaN       CALL 距離表示        ;    D1E2 へ
D1BD 3600     6.        LD (HL),000H        ;    
D1BF 23       #         INC HL              ;
D1C0 3614     6.        LD (HL),014H        ;
D1C2 12       .         LD (DE),A           ;
D1C3 C9       E         RET                 ;

                      J0D1C4H:
D1C4 218CD2   !?O       LD HL,終了フラグ        ;    D28C
D1C7 3602     6.        LD (HL),002H        ;
D1C9 C9       E         RET                 ;    2をいれる  

                      距離:
D1CA 3A91D2   :‘O         LD A,(clock)       ;
D1CD E61F     a.        AND 01FH            ;
D1CF C0       A         RET NZ              ;
D1D0 1107F3   ..o       LD DE,0F307H        ;
D1D3 2A95D2   *?O       LD HL,(0D295H)      ;
D1D6 23       #         INC HL              ;
D1D7 2295D2   "?O       LD (0D295H),HL      ;
D1DA CDE2D1   IaN       CALL 距離表示         ;
D1DD 13       .         INC DE              ;
D1DE 3E30     >0        LD A,030H           ;
D1E0 12       .         LD (DE),A           ;
D1E1 C9       E         RET                 ;

                      距離表示:
D1E2 011027   ..'       LD BC,02710H        ;
D1E5 CDFED1   I.N       CALL 10進数表示         ;
D1E8 01E803   .e.       LD BC,003E8H        ;
D1EB CDFED1   I.N       CALL 10進数表示         ;
D1EE 016400   .d.       LD BC,00064H        ;
D1F1 CDFED1   I.N       CALL 10進数表示         ;
D1F4 0E0A     ..        LD C,00AH           ;
D1F6 CDFED1   I.N       CALL 10進数表示         ;
D1F9 7D       }         LD A,L              ;
D1FA C630     A0        ADD A,030H          ;
D1FC 12       .         LD (DE),A           ;
D1FD C9       E         RET                 ;

                      10進数表示:
D1FE C5       A         PUSH BC             ;
D1FF 37       7         SCF                 ;
D200 3F       ?         CCF                 ;
D201 3E30     >0        LD A,030H           ;
                      L0D203H:
D203 ED42     iB        SBC HL,BC           ;
D205 3803     8.        JR C,J0D20AH         ;
D207 3C       <         INC A               ;
D208 18F9     ..        JR L0D203H           ;

                      J0D20AH:
D20A C1       A         POP BC              ;
D20B 09       .         ADD HL,BC           ;
D20C 12       .         LD (DE),A           ;
D20D 13       .         INC DE              ;
D20E C9       E         RET                 ;

                      W0D20FH:
D20F 00 86 F4 03 00 86 F4 02 00
D218 86 F4 03 00 01 60 81 FC 00 21 
D222 FF  
                      W0D223H:
D223 E0 4E FF E4 0E 40 F6 99   
D22B 6F 04 77 D2 66 2D 77 00
D233 00 00 00 00 00 00 00 00
D23B 00 00 00 00 90 FF FF FF
D243 FF FF FF FF FF 

あとがき

このゲームは自分のゲーム作家としての、初デビュー作であったが、
当時のPCゲームは、その後のファミリーコンピューターの出現により
ほぼ駆逐されてしまった。

今となっては、そのようなことを振り返ることも、老害のたわごとかもしれないが、
いつの時代も、その時の最先端技術を学んで、使いこなすことが
どれほど大切かということを、やはり学ばなければいけないと思う。

2
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
EasyCording
昔、PC8001でゲームプログラミングやってました。最近はFXのシステムトレード開発や、趣味の語学学習と、ブログ書いたりしています。NASを使って自宅でWEBアプリなんかも作っています。めんどくさがりなので、QIITAでも偉そうな記事は書けません。究極のアナログ人間です。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
2
Help us understand the problem. What is going on with this article?