uPD72001のシリアル送信部分をチェックします
.386 = 000C COM_B equ 0ch = 0008 PORT_B equ 08h = 0020 DIO equ 20h 0000 code segment assume cs:code,ds:code,es:code,ss:code 0000 org 0000h 0000 B0 05 SIOINI: MOV AL,05H ;18h 0002 E6 0C OUT COM_B,AL ;チャンネルBのリセット [CR0B] 0004 90 NOP ;WAIT 0005 90 NOP ;****** 割込みモードの設定 [CR2B] 0006 B0 40 MOV AL,040H ;02h ポインタ=2 0008 E6 0C OUT COM_B,AL 000A B0 00 MOV AL,000H ;00h ノンベクタ,固定ベクタ,TypeA-1 000C E6 0C OUT COM_B,AL ;TxA>RxB,Both_INT ;****** 調歩同期モードの設定 [CR4B] 000E B0 80 MOV AL,080H ;04h ポインタ=4 0010 E6 0C OUT COM_B,AL 0012 B0 88 MOV AL,088H ;44h ×16,ストップBit=1 0014 E6 0C OUT COM_B,AL ;パリティー無し ;****** E/S割込みの設定 [CR11B] 0016 B0 64 MOV AL,064H ;0bh ポインタ=11 0018 E6 0C OUT COM_B,AL 001A B0 00 MOV AL,000H ;00h 全てのE/S割込み禁止 001C E6 0C OUT COM_B,AL ;****** 受信ボーレート設定 [CR12B] 001E B0 84 MOV AL,084H ;0ch ポインタ=12 0020 E6 0C OUT COM_B,AL 0022 B0 20 MOV AL,020H ;01h RxBRG時定数の設定 0024 E6 0C OUT COM_B,AL 0026 B0 01 MOV AL,001H ;10h 9600BPS時=16(010H) 0028 E6 0C OUT COM_B,AL ;Lowバイトをセット 002A B0 00 MOV AL,000H ;00h 002C E6 0C OUT COM_B,AL ;Highバイトをセット 002E E4 0C IN AL,COM_B ;ダミーリード ;****** 送信ボーレート設定 [CR12B] 0030 B0 84 MOV AL,084H ;0ch ポインタ=12 0032 E6 0C OUT COM_B,AL 0034 B0 40 MOV AL,040H ;02h TxBRG時定数の設定 0036 E6 0C OUT COM_B,AL 0038 B0 01 MOV AL,001H ;10h 9600BPS時=16(010H) 003A E6 0C OUT COM_B,AL ;Lowバイトをセット 003C B0 00 MOV AL,000H ;00h 003E E6 0C OUT COM_B,AL ;Highバイトをセット 0040 E4 0C IN AL,COM_B ;ダミーリード ;****** 送受信用クロック源の選択 [CR15B] 0042 B0 E4 MOV AL,0e4H ;0fh ポインタ=15 0044 E6 0C OUT COM_B,AL 0046 B0 C9 MOV AL,0c9H ;56h BRG Clockを選択 0048 E6 0C OUT COM_B,AL ;****** ボーレートイネーブル、テストモードの選択 [CR14B] 004A B0 C4 MOV AL,0c4H ;0eh ポインタ=14 004C E6 0C OUT COM_B,AL 004E B0 E0 MOV AL,0e0H ;07h BRG源にSystem Clockを選択 0050 E6 0C OUT COM_B,AL ;Rx,Tx BRGイネーブル ;****** 受信制御レジスタの設定 [CR3B] 0052 B0 60 MOV AL,060H ;03h ポインタ=3 0054 E6 0C OUT COM_B,AL 0056 B0 38 MOV AL,038H ;c1h 8Bitキャラクタ,Auto_Enable禁止 0058 E6 0C OUT COM_B,AL ;受信Enable ;****** 送信制御レジスタの設定 [CR5B] 005A B0 A0 MOV AL,0a0H ;05h ポインタ=5 005C E6 0C OUT COM_B,AL 005E B0 5E MOV AL,5eH ;0eah 8Bitキャラクタ,DTR=RTS=0 0060 E6 0C OUT COM_B,AL ;送信Enable ;****** 送受信割込みのイネーブル [CR1B] 0062 B0 20 MOV AL,020H ;01h ポインタ=1 0064 E6 0C OUT COM_B,AL 0066 B0 41 MOV AL,041H ;12h All RxINT-1 Enable 0068 E6 0C OUT COM_B,AL ;TxINT Enable ;****** LOOP ***************************** 006A B0 00 WAIT0: MOV AL,00H ;00h ポインタ=0 006C E6 0C OUT COM_B,AL 006E E4 0C IN AL,COM_B ;SR0 0070 24 80 AND AL,80H ;04h 送信バッファエンプティチェック 0072 74 F6 JZ WAIT0 0074 8A C3 MOV AL,BL 0076 E6 08 OUT PORT_B,AL ;送信バッファセット 0078 E6 20 OUT DIO,AL ;パラレルLED出力 007A FE C3 INC BL 007C EB EC JMP WAIT0 007E code ends end
出力されたリストファイルからコード部分を抜き出して4列に並び替え。
この1列を1個のROMに焼きます
この1列を1個のROMに焼きます
//ROM0データ: B0 90 E6 E6 E6 E6 E6 E6 E6 E6 E6 E6 B0 B0 B0 B0 E4 E6 E6 E6 E6 E6 E6 E6 E6 E6 E6 E6 24 8A E6 EB //ROM1データ: 05 90 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 84 40 01 00 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 80 C3 20 EC //ROM2データ: E6 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 E4 E6 E6 E6 E6 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 B0 E4 74 E6 FE 00 //ROM3データ: 0C 40 00 80 88 64 00 84 20 01 00 0C 0C 0C 0C 0C E4 C9 C4 E0 60 38 A0 5E 20 41 00 0C F6 08 C3 00