目次
前
次
8049到着
アマチュア無線の知人が、i8049互換のチップをくれました。
さらに、ROMも多数くれました。
場所をとっている部品を処分したかったのかも知れませんが
こちらにとっては、新しい玩具が来たイメージです。
i8048よりも、ROMサイズが増えているので、これまで
容量不足で作成を断念したプログラムを実現できそう。
ROM容量が大きくなれば、モニタプログラムが入るので
Real Time Monitorを新しく設計していきます。
8049のメモリ空間は、以下。
プログラム容量が増えたので、モニタプログラムを
配置する仕様を採用します。
8048と同様に、0Fhまでは割込みのベクトル空間で
固定なので、10hから1FFにモニタプログラムを配置
します。
プログラムの配置は、次のように指定。
SRAMは128バイトとなっているので、16バイトだけを
モニタで使えるようにします。
汎用レジスタ、スタック領域、モニタ領域で合計40バイト
なので、88バイトはユーザーに解放されるように指定。
この仕様では、ソースコードの雛形は、以下となります。
;
; TEST program for 8049 ( PROASM-II )
; Copyright (C) 2019 Kensuke Ooyu
;
INCLUDE 8048.LIB
;****************
; define symbols
;****************
ENTRY equ 0h
E_INT equ 3h
E_TIM equ 7h
;*********************
; define monitor area
;*********************
MONR0 equ 70h
MONR1 equ 71h
MONR2 equ 72h
MONR3 equ 73h
MONR4 equ 74h
MONR5 equ 75h
MONR6 equ 76h
MONR7 equ 77h
MONR8 equ 78h
MONR9 equ 79h
MONRA equ 7Ah
MONRB equ 7Bh
MONRC equ 7Ch
MONRD equ 7Dh
MONRE equ 7Eh
MONRF equ 7Fh
;*******************
; interrupt vectors
;*******************
org ENTRY
jmp START
; external interrupt
org E_INT
retr
; timer interrupt
org E_TIM
retr
org 10h
;**************
; sub routines
;**************
INIT:
;
ret
;**************
; main routine
;**************
org 200h
START:
call INIT
;
MAIN:
;
; ???
;
jmp MAIN
end
次のコードを利用して、動作を確認しました。
;
; TEST program for 8049 ( PROASM-II )
; Copyright (C) 2019 Kensuke Ooyu
;
INCLUDE 8048.LIB
;****************
; define symbols
;****************
ENTRY equ 0h
E_INT equ 3h
E_TIM equ 7h
;*********************
; define monitor area
;*********************
MONR0 equ 70h
MONR1 equ 71h
MONR2 equ 72h
MONR3 equ 73h
MONR4 equ 74h
MONR5 equ 75h
MONR6 equ 76h
MONR7 equ 77h
MONR8 equ 78h
MONR9 equ 79h
MONRA equ 7Ah
MONRB equ 7Bh
MONRC equ 7Ch
MONRD equ 7Dh
MONRE equ 7Eh
MONRF equ 7Fh
;*******************
; interrupt vectors
;*******************
org ENTRY
jmp START
; external interrupt
org E_INT
retr
; timer interrupt
org E_TIM
retr
org 10h
;**************
; sub routines
;**************
INIT:
; disable external interrupt
dis i
; disable timer interrupt
dis tcnti
; initialize I/O
mov a,#0
outl p1,a
outl p2,a
;
ret
WAIT:
; set counter
mov R7,#0
WAITL:
nop
djnz R7,WAITL
;
ret
;**************
; main routine
;**************
org 200h
START:
call INIT
; set code
mov R2,15
;
MAIN:
; get code
mov a,R2
; inverse
xrl a,#0FF
; store
mov R2,a
; impress
out P1,a
; delay
call WAIT
call WAIT
call WAIT
call WAIT
call WAIT
;
jmp MAIN
end
目次
前
次