SRAMが使えるAVRマイコンは決められている。
今回使用したのは、入手しやすい ATmega64である。

ヒューズビットは ATmega64 は16Mのクリスタルを使用するため、
Fuse Lo=FF; Hi=D9  JTAG=1  Fポートを使うに設定
; Ex=FF ATmega103 互換モーキャンセルに設定

.include "m64def.inc"                           

.def W = R16
.def W1 = R17
.def W2 = R18
.def W3 = R19
.def W4 = R20
.def W5 = R21
.def W6 = R22
.def W7 = R23
.def CNT = R24
.def CNTr = R25

ポートの定義は下記のように設定しておく

;PORT D control

  .equ  D_set = 0   ;in
  .equ  D_ack = 1   ;in
  .equ  D_out = 2   ;in
  .equ  card_in = 3  
  .equ  KG_ack = 5   ;out
  .equ  KG_buk = 6   ;out

SRAMにデータを転送するため、マクロを組んでおく。
;---------------- macro ----------------------
 ;LDIW
 ; LDIW Z,SRAM
;
.macro LDIW

   ldi @0H,high(@1)
   ldi @0L,low(@1)
.endm
;----------------------------------------------

ATmega64の 初期セットは下記である

.cseg
.org 0x0000

; Address Labels Code Comments

jmp RESET ; Reset Handler
jmp EXT_INT0 ; IRQ0 Handler
jmp EXT_INT1 ; IRQ1 Handler
jmp EXT_INT2 ; IRQ2 Handler
jmp EXT_INT3 ; IRQ3 Handler
jmp EXT_INT4 ; IRQ4 Handler
jmp EXT_INT5 ; IRQ5 Handler
jmp EXT_INT6 ; IRQ6 Handler
jmp EXT_INT7 ; IRQ7 Handler
jmp TIM2_COMP ; Timer2 Compare Handler
jmp TIM2_OVF ; Timer2 Overflow Handler
jmp TIM1_CAPT ; Timer1 Capture Handler
jmp TIM1_COMPA ; Timer1 CompareA Handler
jmp TIM1_COMPB ; Timer1 CompareB Handler
jmp TIM1_OVF ; Timer1 Overflow Handler
jmp TIM0_COMP ; Timer0 Compare Handler
jmp TIM0_OVF ; Timer0 Overflow Handler
jmp SPI_STC ; SPI Transfer Complete Handler
jmp USART0_RXC ; USART0 RX Complete Handler
jmp USART0_DRE ; USART0,UDR Empty Handler
jmp USART0_TXC ; USART0 TX Complete Handler
jmp ADC1 ; ADC Conversion Complete Handler
jmp EE_RDY ; EEPROM Ready Handler
jmp ANA_COMP ; Analog Comparator Handler
jmp TIM1_COMPC ; Timer1 CompareC Handler
jmp TIM3_CAPT ; Timer3 Capture Handler
jmp TIM3_COMPA ; Timer3 CompareA Handler
jmp TIM3_COMPB ; Timer3 CompareB Handler
jmp TIM3_COMPC ; Timer3 CompareC Handler
jmp TIM3_OVF ; Timer3 Overflow Handler
jmp USART1_RXC ; USART1 RX Complete Handler
jmp USART1_DRE ; USART1,UDR Empty Handler
jmp USART1_TXC ; USART1 TX Complete Handler
jmp TWI ; Two-wire Serial Interface Handler
jmp SPM_RDY ; SPM Ready Handler

EXT_INT0:
EXT_INT1:
EXT_INT2:
EXT_INT3:
EXT_INT4:
EXT_INT5:
EXT_INT6:
EXT_INT7:
TIM2_COMP:
TIM2_OVF:
TIM1_CAPT: ;ICPルーチン
   in w1,sreg
   ldi w, 0x00 ;timer1に 0
   out TCNT1H, w ;↑
   out TCNT1L, w ;↑
   inc wariF
   out sreg,w1
   reti ;
TIM1_COMPA:
TIM1_COMPB:
TIM1_OVF:
TIM0_COMP:
TIM0_OVF:
SPI_STC:
USART0_RXC:
USART0_DRE:
USART0_TXC:
ADC1:
EE_RDY:
ANA_COMP:
TIM1_COMPC:
TIM3_CAPT:
TIM3_COMPA:
TIM3_COMPB:
TIM3_COMPC:
TIM3_OVF:
USART1_RXC:
USART1_DRE:
USART1_TXC:
TWI:
SPM_RDY:
RETI
;

RAMエンドは 01FFに設定している
RESET:
   LDI w,0xFF      ;RAMEND=01FF
   OUT SPL,w
   LDI w,0x01
   OUT SPH,w

タイマー設定 TICIE=1 TOIE1=1 ICPの割り込みを許可する
ICPを使用しない場合にはいらない
分周比 は1に設定している

;--------- TIMER --------------------
; 0.1uS

   ldi w,0x00              ;WGM11=1 ICR1=top
   out TCCR1A,w ;
   ldi w,1 ;
   out TCCR1B,w ;クロック分周比 1
   ldi w,0b0010_0100 ;
   out TIMSK,w            ;TICIE1=1,TOIE1=1ICPで割り込み許可


メモリ設定は下記のように行う。
;--------- MEMORY set ---------------
;
   LDI w,0x00 ;
   OUT PORTC,w     ;adress =-->OUT
   LDI w,0xFF        ;PB7-PB0 =IN
   OUT DDRC,w      ;メモリーアドレス

   ldi w,0x80     ; SRE=1, SRW10=1 wait=1
   out MCUCR,w   ;増設外部メモリーset 内部IOなのでOUT命令
   ldi w,0        ; A14-A8
   sts XMCRB,w    ;外部メモリー使用ポート
   ldi w,0x0A      ; SRW00=1,SRW01=0 wait=1
   sts XMCRA,w    ;メモリーウェイト=1 SRL0-SRL2=0


以上で設定終了である
サンプルプログラム
ーーーーーーーーーーーーーーーーーーーーーーーーーー
RAMのデータをクリア(00)にするプログラムである


; RD データ クリア
;
RD_CLS:
   ldiw Z,RD1L
   ldi cnt,6
   ldi cntr,210
   ldi w,0
   RD_cls1:
   ST Z+,w ;510*2 =1020
   ST Z+,w
   dec cntr
   brne RD_cls1
   dec cnt
   brne RD_cls1
ret



;-------データ ----------------------------------
.dseg
.org 0x0300

Xziku: .byte 1 ;GLCD X軸データ 0〜127
Yziku: .byte 1 ;GLCD Y軸データ 0〜63
caradat: .byte 1 ;cata D0-D7 data
YLcara: .byte 1 ;Y=1-192000
YHcara: .byte 1 ; 4B00
YLcara_buf: .byte 1 ;Y=1-192000
YHcara_buf: .byte 1 ; 4B00

locaX: .byte 1 ;キャラ 表示座標 
locaY: .byte 1 ;X=0-80 (2バイトずつ)
;Y=0-30

dotY: .byte 1 ;dot Y=0-240
dotXL: .byte 1 ;dot X=0-320
dotXH: .byte 1 ;dot X=0-320

ーーーーーーーーーーーーーー
; SRAM領域である
.org 0x1100


RD1L: .byte 600
RD2L: .byte 600
Gdat3: .byte 39
Gdat4: .byte 39
Gdat5: .byte 39
Gdat6: .byte 39
Gdat7: .byte 39
Gdat8: .byte 39
Gdat9: .byte 39
Gdat10: .byte 39
Gdat11: .byte 39
Gdat12: .byte 39
Gdat13: .byte 39
Gdat14: .byte 39
Gdat15: .byte 39
Gdat16: .byte 39
Gdat17: .byte 39

;=============================================================


KG057 プログラム