axxで、8048のハンドリングです。
パターンファイル
8048の命令をフルカバーしています。
8048.axx
ADD A,\@R!n :: n>1;5 :: n|0x60
ADD A,#!d :: d>0xFF;1 :: 0x03,d
ADD A ,R!n :: n > 7 ; 5 :: n | 0x68
ADDC A,\@R!n :: n>1;5 :: n|0x70
ADDC A,R!n :: n>7;5 :: n|0x78
ADDC A,\#!d :: d>0xFF;1 :: 0x13,d
ANL A,\@R!n :: n>7;5 :: n|0x58
ANL A,R!n :: n>1;5 :: n|0x50
ANL A,\#!d :: d>0xFF;1 :: 0x5,d
ANL BUS,\#!d :: d>0xFF;1 :: 0x98,d
ANL P!c,\#!d :: c!=1&&c!=2;6,d>0xFF;1 :: (c|0x98),d
ANLD P!c,A :: c<4||c>7;6 :: (c&3)|0x9C
CALL !a :: a>0xFFF;2 :: (((a&0x7FF)>>3)&0xE0)|0x14,a
CPL A :: 0x37
CLR A :: 0x27
CLR C :: 0x97
CLR F!f :: f>1;7 :: (f<<5)|0x85
DB !d :: d
DA A :: 0x37
DEC A :: 0x07
DEC R!n :: n>7;5 :: n|0xC8
DIS I :: 0x15
DIS TCNTI :: 0x35
DJNZ R!n,!a :: n|0xE8,a
EN I :: 0x05
EN TCNTI :: 0x25
ENT0 CLK :: 0x75
IN A,P!c :: c<1||c>2;6 :: c|0x08
INC A :: 0x17
INC \@R!n :: n>1;5 :: n|0x10
INC R!n :: n>7;5 :: n|0x18
INS A,BUS :: 0x08
JB!n !a :: n>7;5 :: (0x20*n)+0x12,a
JC !a :: 0xF6,a
JF0 !a :: 0xB6,a
JF1 !a :: 0x76,a
JNC !a :: 0xE6,a
JNI !a :: 0x86,a
JNT0 !a :: 0x26,a
JNT1 !a :: 0x46,a
JNZ !a :: 0x96,a
JTF !a :: 0x16,a
JT0 !a :: 0x36,a
JT1 !a :: 0x56,a
JZ !a :: 0xC6,a
JMPP \@A :: 0xB3
JMP !a :: a>0xFFF;2 :: (((a&0x7FF)>>3)&0xE0)|4,a
MOV A,PSW :: 0xC7
MOV PSW,A :: 0xD7
MOV A,T :: 0x42
MOV A,\@R!n :: n>1;5 :: n|0xF0
MOV A,R!n :: n>7;5 :: n|0xF8
MOV A,\#!d :: d>0xFF;1 :: 0x23,d
MOV \@R!n,A :: n>1;5 :: n|0xA0
MOV \@R!n,\#!d :: n>7;5,d>0xFF;1 :: n|0xB0,d
MOV R!n,A :: n>7;5 :: n|0xA8
MOV R!n,\#!d :: n>7;5,d>0xFF;1 :: n|0xB8,d
MOV T,A :: 0x62
MOVD P!c,A :: (c&3)|0x3C
MOVD A,P!c :: (c&3)|0x0C
MOVP A,\@A :: 0xA3
MOVP3 A,\@A :: 0xE3
MOVX A,\@R!n :: n>1;5 :: n|0x80
MOVX \@R!n,A :: n>1;5 :: n|0x90
NOP :: 0x00
ORL A,R!n :: n>7;5 :: n|0x48
ORL A,\@R!n :: n>1;5 :: n|0x40
ORL A,\#!d :: d>0xFF;1 :: 0x43,d
ORL BUS,\#!d :: d>0xFF;1 :: 0x88,d
ORL P!c,\#!d :: c<1||c>2;5 :: c|0x88,d
ORLD P!c,A :: c<4||c>7;6 :: (c&3)|0x8C
OUTL BUS,A :: 0x02
OUTL P!c,A :: c<1||c>2;6 :: c|0x38
RET :: 0x83
RETR :: 0x93
RL A :: 0xE7
RLC A :: 0xF7
RR A :: 0x77
RRC A :: 0x67
SEL MB0 :: 0xE5
SEL MB1 :: 0xF5
SEL RB0 :: 0xC5
SEL RB1 :: 0xD5
STOP TCNT :: 0x65
STRT CNT :: 0x45
STRT T :: 0x55
SWAP A :: 0x47
SWAP R!n :: 0x28|n
HALT :: 0x01
XCH A,\@R!n :: n>1;5 :: n|0x20
XCH A,R!n :: n>7;5 :: n|0x28
XCHD A,\@R!n :: n>1;5 :: n|0x30
XRL A,\@R!n :: n>1;1 :: n|0xD0
XRL A,R!n :: n>7;5 :: n|0xD8
XRL A,\#!d :: d>0xFF;1 :: 0xD3,d
プログラム
8048hw.s
.org 0x0000 ; プログラム開始アドレス
; 文字列の定義
TABLE:
DB 0x48 ; 'H'
DB 0x45 ; 'E'
DB 0x4C ; 'L'
DB 0x4C ; 'L'
DB 0x4F ; 'O'
DB 0x20 ; ' '
DB 0x57 ; 'W'
DB 0x4F ; 'O'
DB 0x52 ; 'R'
DB 0x4C ; 'L'
DB 0x44 ; 'D'
START:
MOV R0, #TABLE ; R0に文字列テーブルのアドレスをロード
MOV R1, #11 ; 表示する文字数(11文字)
DISPLAY_LOOP:
MOV A, @R0 ; R0が指すアドレスの値をAにロード
OUTL P1, A ; P1ポートにAの値を出力
CALL DELAY ; 適切なディレイを挿入
INC R0 ; R0をインクリメント(次の文字へ)
DJNZ R1, DISPLAY_LOOP ; R1をデクリメントし、0でなければループ
RET
DELAY:
; 適切な遅延ルーチンをここに実装
; 例として単純なループを使用
MOV R2, #0xFF
DELAY_LOOP:
MOV A,PSW
DJNZ R2, DELAY_LOOP
RET
アセンブル
0000000000000000 8048hw.s 1 .org 0x0000 ; プログラム開始アドレス
0000000000000000 8048hw.s 2
0000000000000000 8048hw.s 3 ; 文字列の定義
0000000000000000 8048hw.s 4 TABLE:
0000000000000000 8048hw.s 5 DB 0x48 ; 'H' 0x48
0000000000000001 8048hw.s 6 DB 0x45 ; 'E' 0x45
0000000000000002 8048hw.s 7 DB 0x4C ; 'L' 0x4c
0000000000000003 8048hw.s 8 DB 0x4C ; 'L' 0x4c
0000000000000004 8048hw.s 9 DB 0x4F ; 'O' 0x4f
0000000000000005 8048hw.s 10 DB 0x20 ; ' ' 0x20
0000000000000006 8048hw.s 11 DB 0x57 ; 'W' 0x57
0000000000000007 8048hw.s 12 DB 0x4F ; 'O' 0x4f
0000000000000008 8048hw.s 13 DB 0x52 ; 'R' 0x52
0000000000000009 8048hw.s 14 DB 0x4C ; 'L' 0x4c
000000000000000a 8048hw.s 15 DB 0x44 ; 'D' 0x44
000000000000000b 8048hw.s 16
000000000000000b 8048hw.s 17
000000000000000b 8048hw.s 18 START:
000000000000000b 8048hw.s 19 MOV R0, #TABLE ; R0に文字列テーブルのアドレスをロード 0xb8 0x00
000000000000000d 8048hw.s 20 MOV R1, #11 ; 表示する文字数(11文字) 0xb9 0x0b
000000000000000f 8048hw.s 21
000000000000000f 8048hw.s 22 DISPLAY_LOOP:
000000000000000f 8048hw.s 23 MOV A, @R0 ; R0が指すアドレスの値をAにロード 0xf0
0000000000000010 8048hw.s 24 OUTL P1, A ; P1ポートにAの値を出力 0x39
0000000000000011 8048hw.s 25 CALL DELAY ; 適切なディレイを挿入 0x14 0x17
0000000000000013 8048hw.s 26 INC R0 ; R0をインクリメント(次の文字へ) 0x18
0000000000000014 8048hw.s 27 DJNZ R1, DISPLAY_LOOP ; R1をデクリメントし、0でなければループ 0xe9 0x0f
0000000000000016 8048hw.s 28
0000000000000016 8048hw.s 29 RET 0x83
0000000000000017 8048hw.s 30
0000000000000017 8048hw.s 31 DELAY:
0000000000000017 8048hw.s 32 ; 適切な遅延ルーチンをここに実装
0000000000000017 8048hw.s 33 ; 例として単純なループを使用
0000000000000017 8048hw.s 34 MOV R2, #0xFF 0xba 0xff
0000000000000019 8048hw.s 35 DELAY_LOOP:
0000000000000019 8048hw.s 36 MOV A,PSW 0xc7
000000000000001a 8048hw.s 37 DJNZ R2, DELAY_LOOP 0xea 0x19
000000000000001c 8048hw.s 38 RET 0x83