Хороший тест - в моем драконе крышняк сносит при попытке шагнуть :) Каюсь, вчера попробовал только переход в в область 96КБ и там шагал... Сегодня добавил прерывания - начинаются косяки...
Тест слегка модифицировал под м128. Вот что еще работоспособно:
<asm>
.nolist
.include "m128def.inc"
.list
.dseg
txtbuf: .byte 96
foo:
.cseg
.org 0
reset:
ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
c0k:
rcall clrtxt
ldi ZL,low(d0k*2)
ldi ZH,high(d0k*2)
ldi r16,byte3(d0k*2)
out RAMPZ,r16
call readtxt
nop
; jmp c16k
jmp c64k
d0k: .db "0k passed, ",0
clrtxt:
ldi XL,low(foo)
ldi XH,high(foo)
clr r16
clt_l:
st -X,r16
cpi XL,low(txtbuf)
brne clt_l
ret
readtxt:
elpm r16,Z+
cpi r16,0
breq rtxt_rt
st X+,r16
rjmp readtxt
rtxt_rt:
ret
.org 16384/2
c16k:
ldi ZL,low(d16k*2)
ldi ZH,high(d16k*2)
ldi r16,byte3(d16k*2)
out RAMPZ,r16
call readtxt
nop
jmp c32k
d16k: .db "16k passed, ",0
.org 32768/2
c32k:
ldi ZL,low(d32k*2)
ldi ZH,high(d32k*2)
ldi r16,byte3(d32k*2)
out RAMPZ,r16
call readtxt
nop
jmp c48k
d32k: .db "32k passed, ",0
.org (32768+16384)/2
c48k:
ldi ZL,low(d48k*2)
ldi ZH,high(d48k*2)
ldi r16,byte3(d48k*2)
out RAMPZ,r16
call readtxt
nop
; jmp c64k
jmp c0k
d48k: .db "48k passed, ",0
.org (65536-10)/2 ; !!!!!!! Если здесь вместо 10 подставить 4, дракон начинает вылетать...
c64k:
ldi ZL,low(d64k*2)
ldi ZH,high(d64k*2)
ldi r16,byte3(d64k*2)
out RAMPZ,r16
call readtxt
nop
; jmp c128k
; jmp c0k
jmp c16k
d64k: .db "64k passed, ",0
;.org (131072-128)/2
;c128k:
; ldi ZL,low(d128k*2)
; ldi ZH,high(d128k*2)
; ldi r16,byte3(d128k*2)
; out RAMPZ,r16
;
; call readtxt
; nop
; jmp c0k
;
;d128k: .db "128k passed, ",0
.exit
</asm>
Соображения:
Думается незря в MKII стоИт 512Кб памяти ( картинка там ->
http://electronix. …hp?showtopic=3327&st=0)
Аффтары видимо "в лоб" (для ускорения?) при начале отладки прописывают в этой памяти существующие в программе адреса переходов, точек останова и пр...
Посему в студии и заблокировали 32768 - "порог безглючности" :)
Но все-равно есть "отверстие" - можно попытаться исправить ситуацию - просто припаять K6R4008, ибо все на плате дракона для этого разведено ;) Цена вопроса - $4-5 за микросхему памяти. Если'б была под руками, прямо сейчас-бы попробовал...
Во всяком случае и так уже хорошо - шить "жирные кристаллы" можно, отлаживать мелкие тоже. Попробовал интенсивно погонять отладку в m162, дабы проверить доскональнее - работает...
PS: Руки чешутся проверить, но но K6R4008, увы, у меня нет :(
PPS: Если эти соображения верны, то поддержки толстых кристаллов думаю ждать не стОит. Старых - тоже (из маркетинговых соображений).
Так что надо попытаться-таки заменить память...