2016.12.31
前へ
次へ
ホームページトップへ戻る


16ビットマイコンボードの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
いつか使ってみるつもりで入手してそのまま置いてあった16ビットCPUのことを思い出しました。
AMD社のAM188です。
その名の通り、CPUコアは80188互換の16ビットCPUです。
そのAM188を使った16ビットマイコンボードの製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第3回]


●16ビット版「TK−80」モニタプログラム

前回書きました通り、16ビット版「TK−80」モニタプログラムはすでに作成済みです。
下がそのアセンブルリストです。

2016/11/22  22:17  n16mon0e.txt
[00001]                     ;am188 tk80 monitor
[00002]                     ;16/11/19 11/20 11/21 11/22
[00003]                         ORG=F000
[00004]                     ;
[00005]                     ;
[00006]                     ; 83FF-83F8 7SEGMENT DISPLAY ADDRESS        
[00007]                     ;
[00008]                         DIG=FFF8
[00009]                     ;
[00010]                     ;   RST7=FFCC
[00011]                     ;   RST6=FFC9
[00012]                     ;   RST5=FFC6
[00013]                     ;   RST4=FFC3
[00014]                     ;   RST3=FFC0
[00015]                     ;   RST2=FFBD
[00016]                     ;   RST1=FFBA
[00017]                     ;   SINERMK=FFB8
[00018]                         ;INT TABLE FF80-FFAF
[00019]                     ;
[00020]                         DISP=FFF4
[00021]                         KFLAG=FFF3
[00022]                         BRKCT=FFF2
[00023]                         BRKAD=FFF0
[00024]                         ADRES1=FFEF
[00025]                         ADRES=FFEE
[00026]                         DATA1=FFED
[00027]                         DATA=FFEC
[00028]                         FSAVE=FFEA
[00029]                         ASAVE=FFE8
[00030]                         BSAVE=FFE6
[00031]                         CSAVE=FFE4
[00032]                         DSAVE=FFE2
[00033]                         SISAVE=FFE0
[00034]                         DISAVE=FFDE
[00035]                         SSAVE=FFDC
[00036]                         PSAVE=FFDA
[00037]                         CALLCS=FFD8
[00038]                         CALLPC=FFD6
[00039]                     ;
[00040]                     ;   RST7=$0038
[00041]                     ;   RST6=$83DD
[00042]                     ;   RST5=$83DA
[00043]                     ;   RST4=$83D7
[00044]                     ;   RST3=$83D4
[00045]                     ;   RST2=$83D1
[00046]                     ;
[00047]                         MONSP=FFD0
[00048]                         USRSP=FFC0
[00049]                     ;
[00050]                         TRA=0004
[00051]                         TRC=0006
[00052]                     ;
[00053] F000  EB0490        START0:JMP START1 <F006>
[00054] F003  E92301        BRK:JMP BRENT <F129>
[00055]                     ;
[00056] F006  BAA0FF        START1:MOV DX,FFA0;umcs
[00057] F009  B83FE0            MOV AX,E03F;128k,noready
[00058] F00C  EF                OUT DX,AX
[00059] F00D  BAA2FF            MOV DX,FFA2;lmcs
[00060] F010  B83F1F            MOV AX,1F3F
[00061] F013  EF                OUT DX,AX
[00062] F014  BA70FF            MOV DX,FF70;piomode0
[00063] F017  B80100            MOV AX,0001
[00064] F01A  EF                OUT DX,AX
[00065] F01B  BA72FF            MOV DX,FF72;pdir0
[00066] F01E  B80EFC            MOV AX,FC0E
[00067] F021  EF                OUT DX,AX
[00068] F022  BA78FF            MOV DX,FF78;pdir1
[00069] F025  B8FEFF            MOV AX,FFFE;pacs active
[00070] F028  EF                OUT DX,AX
[00071] F029  BAA8FF            MOV DX,FFA8;mpcs
[00072] F02C  B8B880            MOV AX,80B8
[00073] F02F  EF                OUT DX,AX
[00074] F030  BAA4FF            MOV DX,FFA4;pacs
[00075] F033  B87608            MOV AX,0876;i/o base address=8000
[00076] F036  EF                OUT DX,AX
[00077] F037  BA8380            MOV DX,8083;**** 82c55
[00078] F03A  B080              MOV AL,80;**** all port out
[00079] F03C  EE                OUT DX,AL;****
[00080] F03D  B800F0            MOV AX,F000
[00081] F040  8EC8              MOV CS,AX
[00082]                     ;   MOV AX,CS;
[00083]                     ;   MOV DX,8080;
[00084]                     ;   OUT DX,AX;
[00085]                     ;
[00086]                     ;monitor start
[00087]                     ;
[00088] F042  B0FF          MONST:MOV AL,FF
[00089] F044  BA9880            MOV DX,8098
[00090] F047  EE                OUT DX,AL
[00091] F048  BFD6FF            MOV DI,*CALLPC
[00092] F04B  B322              MOV BL,22;34
[00093] F04D  32C0              XOR AL,AL
[00094] F04F  8805          MONST2:MOV [DI],AL
[00095] F051  47                INC DI
[00096] F052  FECB              DEC BL
[00097] F054  75F9              JNZ MONST2 <F04F>
[00098] F056  B8C0FF            MOV AX,USRSP
[00099] F059  A3DCFF            MOV [SSAVE],AX
[00100] F05C  B803F0            MOV AX,*BRK
[00101] F05F  A30400            MOV [TRA],AX
[00102] F062  B800F0            MOV AX,F000
[00103] F065  A30600            MOV [TRC],AX
[00104]                     ;
[00105]                     ; MONITOR START
[00106]                     ;
[00107] F068  BCD0FF        START:MOV SP,MONSP
[00108] F06B  E81F01            CALL SEGCG <F18D>
[00109] F06E  E8E501        START2:CALL LEDDP <F256>
[00110] F071  E86101            CALL KEYIN <F1D5>
[00111] F074  8AD8              MOV BL,AL
[00112] F076  2410              AND AL,10
[00113] F078  7411              JZ DIGIT <F08B>
[00114] F07A  80E30F            AND BL,0F
[00115] F07D  8AFB              MOV BH,BL
[00116] F07F  02DB              ADD BL,BL
[00117] F081  02DF              ADD BL,BH
[00118] F083  B700              MOV BH,00
[00119] F085  81C39CF0          ADD BX,TABL
[00120] F089  FFE3              JMP BX
[00121]                     ;
[00122] F08B  E8F000        DIGIT:CALL SHIFT <F17E>
[00123] F08E  A0ECFF            MOV AL,[*DATA]
[00124] F091  0AC3              OR AL,BL
[00125] F093  A2ECFF            MOV [*DATA],AL
[00126] F096  E8CF00            CALL RGDSP <F168>
[00127] F099  EBCD90            JMP START <F068>
[00128]                     ;
[00129] F09C  EB5290        TABL:JMP GOTO <F0F0>
[00130] F09F  EB5590            JMP RESRG <F0F6>
[00131] F0A2  EB1090            JMP *ADSET <F0B4>
[00132] F0A5  EB3290            JMP *ADDCX <F0D9>
[00133] F0A8  EB1190            JMP *ADINX <F0BB>
[00134] F0AB  EB3790            JMP MEMW <F0E4>
[00135] F0AE  E9B500            JMP SDATA <F166>
[00136] F0B1  E9B300            JMP LDATA <F167>
[00137]                     ;
[00138]                     ; ADDRESS SET
[00139]                     ;
[00140] F0B4  8B36ECFF      ADSET:MOV SI,[*DATA]
[00141] F0B8  EB0690            JMP ADINX2 <F0C0>
[00142]                     ;
[00143]                     ; MEMORY READ & ADDRESS INCREMENT
[00144]                     ;
[00145] F0BB  8B36EEFF      ADINX:MOV SI,[*ADRES]
[00146] F0BF  46                INC SI
[00147] F0C0  E80A00        ADINX2:CALL MEMR <F0CD>
[00148] F0C3  8936EEFF      ADSTR:MOV [*ADRES],SI
[00149] F0C7  E89E00            CALL RGDSP <F168>
[00150] F0CA  EB9C90            JMP START <F068>
[00151]                     ;
[00152] F0CD  A0ECFF        MEMR:MOV AL,[*DATA]
[00153] F0D0  A2EDFF            MOV [*DATA1],AL
[00154] F0D3  8A04              MOV AL,[SI]
[00155] F0D5  A2ECFF            MOV [*DATA],AL
[00156] F0D8  C3                RET
[00157]                     ;
[00158]                     ; MEMORY READ & ADDRESS DECREMENT
[00159]                     ;
[00160] F0D9  8B36EEFF      ADDCX:MOV SI,[*ADRES]
[00161] F0DD  4E                DEC SI
[00162] F0DE  E8ECFF            CALL MEMR <F0CD>
[00163] F0E1  EBE090            JMP ADSTR <F0C3>
[00164]                     ;
[00165]                     ; MEMORY WRITE
[00166]                     ;
[00167] F0E4  8B36EEFF      MEMW:MOV SI,[*ADRES]
[00168] F0E8  A0ECFF            MOV AL,[*DATA]
[00169] F0EB  8804              MOV [SI],AL
[00170] F0ED  EBCC90            JMP ADINX <F0BB>
[00171]                     ;
[00172]                     ;
[00173]                     ; MONITOR TO USER CONTROL ROUTINE
[00174]                     ;
[00175] F0F0  A1EEFF        GOTO:MOV AX,[*ADRES]
[00176] F0F3  A3DAFF            MOV [PSAVE],AX
[00177]                     ; REGISTER RESTORE
[00178]                     ;
[00179] F0F6  8B26DCFF      RESRG:MOV SP,[SSAVE]
[00180] F0FA  8B1EE6FF          MOV BX,[*BSAVE]
[00181] F0FE  8B0EE4FF          MOV CX,[*CSAVE]
[00182] F102  8B36E0FF          MOV SI,[*SISAVE]
[00183] F106  8B3EDEFF          MOV DI,[*DISAVE]
[00184] F10A  BA9480            MOV DX,8094;trap switch check
[00185] F10D  EC                IN AL,DX
[00186] F10E  2480              AND AL,80
[00187] F110  A1EAFF            MOV AX,[*FSAVE]
[00188] F113  7503              JNZ NOSTEP <F118>
[00189] F115  80CC01            OR AH,01;trap on
[00190] F118  50            NOSTEP:PUSH AX;push FR
[00191] F119  B80000            MOV AX,0000
[00192] F11C  50                PUSH AX;CS
[00193] F11D  A1DAFF            MOV AX,[PSAVE]
[00194] F120  50                PUSH AX
[00195] F121  A1E8FF            MOV AX,[*ASAVE]
[00196] F124  8B16E2FF          MOV DX,[*DSAVE]
[00197] F128  CF                IRET
[00198]                     ;
[00199]                     ;break entry
[00200] F129  A3E8FF        BRENT:MOV [*ASAVE],AX
[00201] F12C  891EE6FF          MOV [*BSAVE],BX
[00202] F130  890EE4FF          MOV [*CSAVE],CX
[00203] F134  8916E2FF          MOV [*DSAVE],DX
[00204] F138  893EDEFF          MOV [*DISAVE],DI
[00205] F13C  8936E0FF          MOV [*SISAVE],SI
[00206] F140  58                POP AX;PC
[00207] F141  A3DAFF            MOV [PSAVE],AX
[00208] F144  58                POP AX;CS
[00209] F145  A3D8FF            MOV [*CALLCS],AX
[00210] F148  58                POP AX
[00211] F149  A3EAFF            MOV [*FSAVE],AX
[00212] F14C  8BC4              MOV AX,SP
[00213] F14E  A3DCFF            MOV [SSAVE],AX
[00214] F151  BCD0FF            MOV SP,MONSP
[00215] F154  A1DAFF            MOV AX,[PSAVE]
[00216] F157  A3EEFF            MOV [*ADRES],AX
[00217] F15A  A1E8FF            MOV AX,[*ASAVE]
[00218] F15D  A3ECFF            MOV [*DATA],AX
[00219] F160  E80500        ADDSP:CALL RGDSP <F168>
[00220] F163  E902FF            JMP START <F068>
[00221]                     ;
[00222] F166  90            SDATA:NOP
[00223]                     ;
[00224] F167  90            LDATA:NOP
[00225]                     ;
[00226]                     ;;; SUBROUTINE
[00227]                     ;
[00228]                     ;move ADDRES,DATA to DISP &
[00229]                     ;segment change & LED display
[00230] F168  BEEFFF        RGDSP:MOV SI,*ADRES1
[00231] F16B  BFF4FF            MOV DI,*DISP
[00232] F16E  B304              MOV BL,04
[00233] F170  8A04          RGDSP2:MOV AL,[SI]
[00234] F172  8805              MOV [DI],AL
[00235] F174  4E                DEC SI
[00236] F175  47                INC DI
[00237] F176  FECB              DEC BL
[00238] F178  75F6              JNZ RGDSP2 <F170>
[00239] F17A  E81000            CALL SEGCG <F18D>
[00240] F17D  C3                RET
[00241]                     ;
[00242]                     ;DATA shift left(4bit)
[00243]                     ;
[00244] F17E  A1ECFF        SHIFT:MOV AX,[*DATA]
[00245] F181  03C0              ADD AX,AX
[00246] F183  03C0              ADD AX,AX
[00247] F185  03C0              ADD AX,AX
[00248] F187  03C0              ADD AX,AX
[00249] F189  A3ECFF            MOV [*DATA],AX
[00250] F18C  C3                RET
[00251]                     ;
[00252]                     ; SEGMENT CONVERT SUB
[00253]                     ;
[00254] F18D  BEF4FF        SEGCG:MOV SI,*DISP
[00255] F190  BFF8FF            MOV DI,*DIG
[00256] F193  B104              MOV CL,04
[00257] F195  8A1C          SEGCG2:MOV BL,[SI];high 4bit
[00258] F197  D0CB              ROR BL
[00259] F199  D0CB              ROR BL
[00260] F19B  D0CB              ROR BL
[00261] F19D  D0CB              ROR BL
[00262] F19F  80E30F            AND BL,0F
[00263] F1A2  B700              MOV BH,00
[00264] F1A4  81C3C5F1          ADD BX,SEGD
[00265] F1A8  2E                CS:
[00266] F1A9  8A07              MOV AL,[BX]
[00267] F1AB  8805              MOV [DI],AL
[00268] F1AD  47                INC DI
[00269] F1AE  8A1C              MOV BL,[SI];low 4bit
[00270] F1B0  80E30F            AND BL,0F
[00271] F1B3  B700              MOV BH,00
[00272] F1B5  81C3C5F1          ADD BX,SEGD
[00273]                     ;   MOV DX,8080;****
[00274]                     ;   MOV AX,CS;****
[00275]                     ;   OUT DX,AX;****
[00276] F1B9  2E                CS:
[00277] F1BA  8A07              MOV AL,[BX]
[00278] F1BC  8805              MOV [DI],AL
[00279]                     ;   MOV DX,8082;****
[00280]                     ;   OUT DX,AL;****
[00281] F1BE  46                INC SI
[00282] F1BF  47                INC DI
[00283] F1C0  FEC9              DEC CL
[00284] F1C2  75D1              JNZ SEGCG2 <F195>
[00285] F1C4  C3                RET
[00286]                     ;
[00287]                     ; SEGMENT DATA
[00288]                     ;
[00289] F1C5  5C            SEGD:DB 5C
[00290] F1C6  06                DB 06
[00291] F1C7  5B                DB 5B
[00292] F1C8  4F                DB 4F
[00293] F1C9  66                DB 66
[00294] F1CA  6D                DB 6D
[00295] F1CB  7D                DB 7D
[00296] F1CC  27                DB 27
[00297] F1CD  7F                DB 7F
[00298] F1CE  6F                DB 6F
[00299] F1CF  77                DB 77
[00300] F1D0  7C                DB 7C
[00301] F1D1  39                DB 39
[00302] F1D2  5E                DB 5E
[00303] F1D3  79                DB 79
[00304] F1D4  71                DB 71
[00305]                     ;
[00306]                     ; KEY INPUT
[00307]                     ;
[00308] F1D5  E80C00        KEYIN:CALL INPUT <F1E4>
[00309] F1D8  8AD8              MOV BL,AL
[00310] F1DA  A0F3FF            MOV AL,[KFLAG]
[00311] F1DD  0AC0              OR AL,AL
[00312] F1DF  74F4              JZ KEYIN <F1D5>
[00313] F1E1  8AC3              MOV AL,BL
[00314] F1E3  C3                RET
[00315]                     ;
[00316]                     ; KEY INPUT SUB
[00317]                     ;
[00318] F1E4  E82400        INPUT:CALL KEY <F20B>
[00319] F1E7  FEC0              INC AL
[00320] F1E9  741B              JZ NOKEY <F206>
[00321] F1EB  E85100        INPUT2:CALL D1 <F23F>
[00322] F1EE  E81A00            CALL KEY <F20B>
[00323] F1F1  8AD8              MOV BL,AL
[00324] F1F3  FEC0              INC AL
[00325] F1F5  740F              JZ NOKEY <F206>
[00326] F1F7  A0F3FF            MOV AL,[KFLAG]
[00327] F1FA  0AC0              OR AL,AL
[00328] F1FC  75ED              JNZ INPUT2 <F1EB>
[00329] F1FE  FEC8              DEC AL
[00330] F200  A2F3FF        INPUT3:MOV [KFLAG],AL
[00331] F203  8AC3              MOV AL,BL
[00332] F205  C3                RET
[00333] F206  B3FF          NOKEY:MOV BL,FF
[00334] F208  EBF690            JMP INPUT3 <F200>
[00335]                     ;
[00336]                     ; KEY SCAN & CONVERT HEX DATA SUB
[00337]                     ;
[00338] F20B  BA9C80        KEY:MOV DX,809C
[00339] F20E  B100              MOV CL,00
[00340] F210  B300              MOV BL,00
[00341] F212  B0F6              MOV AL,F6
[00342] F214  EE                OUT DX,AL
[00343] F215  EC                IN AL,DX
[00344] F216  34FF              XOR AL,FF
[00345] F218  7517              JNZ KEYI <F231>
[00346] F21A  B308              MOV BL,08
[00347] F21C  B0F5              MOV AL,F5
[00348] F21E  EE                OUT DX,AL
[00349] F21F  EC                IN AL,DX
[00350] F220  34FF              XOR AL,FF
[00351] F222  750D              JNZ KEYI <F231>
[00352] F224  B310              MOV BL,10
[00353] F226  B0F3              MOV AL,F3
[00354] F228  EE                OUT DX,AL
[00355] F229  EC                IN AL,DX
[00356] F22A  34FF              XOR AL,FF
[00357] F22C  7503              JNZ KEYI <F231>
[00358] F22E  FEC8              DEC AL
[00359] F230  C3                RET
[00360] F231  D0C8          KEYI:ROR AL
[00361] F233  7205              JC KEYI2 <F23A>
[00362] F235  FEC1              INC CL
[00363] F237  EBF890            JMP KEYI <F231>
[00364] F23A  8AC1          KEYI2:MOV AL,CL
[00365] F23C  0AC3              OR AL,BL
[00366] F23E  C3                RET
[00367]                     ;
[00368]                     ;CHATTERING TIMER
[00369]                     ;
[00370] F23F  B524          D1:MOV CH,24;=36 ck=4 125.2*36=4507.2microsec
[00371] F241  B19C          D1_2:MOV CL,9C;=156 ck=4  4+8*156=1252 1252*0.1=125.2microsec
[00372] F243  FEC9          D1_3:DEC CL;       ck=2
[00373] F245  75FC              JNZ D1_3; ck=6 <F243>
[00374] F247  FECD              DEC CH;    ck=2    
[00375] F249  75F6              JNZ D1_2; ck=6 <F241>
[00376] F24B  C3                RET;      ck=6
[00377] F24C  B548          D2:MOV CH,48;=72  125.2*72=9014.4microsec
[00378] F24E  EBF190            JMP D1_2 <F241>
[00379] F251  B5D8          D3:MOV CH,D8;=216 125.2*216=27043.2microsec
[00380] F253  EBEC90            JMP D1_2 <F241>
[00381]                     ;;;
[00382]                     ;
[00383] F256  56            LEDDP:PUSH SI
[00384] F257  52                PUSH DX
[00385] F258  53                PUSH BX
[00386] F259  51                PUSH CX
[00387] F25A  BEF8FF            MOV SI,*DIG
[00388] F25D  B308              MOV BL,08
[00389] F25F  B700              MOV BH,00
[00390] F261  E80C00        LEDDP2:CALL LEDDPS <F270>
[00391] F264  46                INC SI
[00392] F265  FEC7              INC BH
[00393] F267  FECB              DEC BL
[00394] F269  75F6              JNZ LEDDP2 <F261>
[00395] F26B  59                POP CX
[00396] F26C  5B                POP BX
[00397] F26D  5A                POP DX
[00398] F26E  5E                POP SI
[00399] F26F  C3                RET
[00400]                     ;
[00401] F270  BA8880        LEDDPS:MOV DX,8088
[00402] F273  B00E              MOV AL,0E
[00403] F275  EE                OUT DX,AL;busy
[00404] F276  8A04              MOV AL,[SI]
[00405] F278  B28C              MOV DL,8C
[00406] F27A  EE                OUT DX,AL
[00407] F27B  8AC7              MOV AL,BH
[00408] F27D  B288              MOV DL,88;adrs set
[00409] F27F  EE                OUT DX,AL
[00410] F280  B502              MOV CH,02
[00411] F282  E8BCFF            CALL D1_2;0.5msec wait <F241>
[00412] F285  B00E              MOV AL,0E
[00413] F287  EE                OUT DX,AL
[00414] F288  C3                RET
[00415]                     ;   
[00416]                         ORG=FFF0
[00417] FFF0  E90DF0            JMP START0 <F000>
[00418]                     ;
F000-FFF2
ADDCX        =F0D9  ADDSP        =F160  ADINX        =F0BB  ADINX2       =F0C0  
ADRES        =FFEE  ADRES1       =FFEF  ADSET        =F0B4  ADSTR        =F0C3  
ASAVE        =FFE8  BRENT        =F129  BRK          =F003  BRKAD        =FFF0  
BRKCT        =FFF2  BSAVE        =FFE6  CALLCS       =FFD8  CALLPC       =FFD6  
CSAVE        =FFE4  D1           =F23F  D1_2         =F241  D1_3         =F243  
D2           =F24C  D3           =F251  DATA         =FFEC  DATA1        =FFED  
DIG          =FFF8  DIGIT        =F08B  DISAVE       =FFDE  DISP         =FFF4  
DSAVE        =FFE2  FSAVE        =FFEA  GOTO         =F0F0  INPUT        =F1E4  
INPUT2       =F1EB  INPUT3       =F200  KEY          =F20B  KEYI         =F231  
KEYI2        =F23A  KEYIN        =F1D5  KFLAG        =FFF3  LDATA        =F167  
LEDDP        =F256  LEDDP2       =F261  LEDDPS       =F270  MEMR         =F0CD  
MEMW         =F0E4  MONSP        =FFD0  MONST        =F042  MONST2       =F04F  
NOKEY        =F206  NOSTEP       =F118  PSAVE        =FFDA  RESRG        =F0F6  
RGDSP        =F168  RGDSP2       =F170  SDATA        =F166  SEGCG        =F18D  
SEGCG2       =F195  SEGD         =F1C5  SHIFT        =F17E  SISAVE       =FFE0  
SSAVE        =FFDC  START        =F068  START0       =F000  START1       =F006  
START2       =F06E  TABL         =F09C  TRA          =0004  TRC          =0006  
USRSP        =FFC0  

[2017.1.6追記]
アドレスFFF0にあるJMP START0は誤用でした([第8回]参照)。
[追記ここまで]

急ごしらえですから、後で修正するところが出てくるかもしれません。
リストトップに更新日付がつけてあります。
今から一ヶ月と少し前に作業完了しています。
11月19日〜22日の4日間で作り上げました。

なにしろ初めてさわるCPUでいろいろ約束事をdatasheetで確認しながらの作業でしたから結構大変でした。
8086のプログラムなんて超久しぶりですので、錆付いた頭の活性化のための練習を兼ねて、TK−80モニタプログラムリストを見ながら、それを8086のプログラムに置き換えるという方法で作成しました。

書き上げたソースプログラムを8086のマシン語コードに翻訳する8086アセンブラもずっと昔に自前で作成した自作アセンブラです。
この8086アセンブラも「AM188組立てキット」には付属する予定で考えています。
上のリストを見ていただければわかりますように、16ビットのマシン語プログラムにはアセンブラが必須だと思います。
なにしろJMPやCALLがすべて相対アドレスですから、たとえ短いプログラムでもそれをハンドアセンブルでやるのは困難です。

上のリストでCALLやJMPの後ろに<>で示されているアドレスはアセンブラが算出した絶対番地です。
ジャンプ先などのラベルのアドレスはリストの末尾にまとめて出力されますが、いちいちそこを見なくても楽に飛び先の確認ができるようにという考えでそのようにしてあります。

前回書きましたAM188のスタートアドレスはリストの最後にあります。
アドレスFFF0です。
ここにはプログラムトップへのJMP命令を置いてあります。

AM188は起動するためにいろいろ設定が必要です。
その設定はプログラムの先頭で行なっています。
そのあたりの説明については次回以降で少しずつ書いていくつもりです。

あっという間の一年でした。
年初の意気込みもむなしく、予定の半分もこなせずに終ってしまいました。
今年一年拙文にお付き合いいただき有難うございました。
心より厚く御礼申し上げます。
来年も倍旧のお引き立てを賜りますようお願い申し上げます。

皆様、よいお年をお迎えください。

16ビットマイコンボードの製作[第3回]
2016.12.31upload
2017.1.6追記

前へ
次へ
ホームページトップへ戻る