📄 loads08.mas
字号:
#INCLUDE "GT9S08Regs.inc"
;;-------------- carga el loader en RAM ----------
;----------- variables -------------
ORG $00FC
;puestas aqui para hacer feliz al ensamblador
;OJO: NO PISAR $0100 que es el buffer de grabacion
Errores ds 1 ;cantidad de errores
ChgData ds 1 ;copia del valor grabado para verificar
RamPtr ds 2 ;puntero al buffer en RAM
ORG $0100
;----- buffer de datos a grabar ----
FlashDir ds 2 ;poner en 0100 la direccion en FLASH
Buffer ds !16 ;poner en 0102..0111 los datos a grabar
;----------- codigo ----------
ORG $0080
HALT:
;---- se detiene al llegar aqui por el breakpoint ----
while(1){
}
;;---- aca comienza a ejecutar (0082) ----
GrabarFlash:
mov #'0',Errores ;por ahora sin error
ldhx #Buffer ;
sthx RamPtr ;RamPtr= comienzo de los datos
ldhx FlashDir ;HX=FlashDir
do{ ;
lda ,x ;contenido actual de la FLASH
sta COPCTL ;RESET COP
ldhx RamPtr ;
if( a != ,x ){ ;distinto => grabar
lda ,x ;dato a grabar
if( a != #$FF ){ ;ignora grabar $FF
sta ChgData ;salva una copia para verificar grabacion
ldhx FlashDir ;latchea direccion
sta ,x ;y dato a GRABAR
lda #$20 ;
sta FCMD ;comando FLASH = WRITE
lda #$80 ;
sta FSTAT ;clear error y start comando
;--pausa antes de verificar FSTAT (requiere 4 ciclos)
brn $
brn $
;--espera el fin de la operacion
do{ ;
lda FSTAT ;
and #FSTAT_MASK ;
}while( a == 0 ) ;espera fin del comando
if( a != #FSTAT_OK ){ ;error al grabar
inc Errores ;aumenta la cuenta de los errores
}else{ ;
lda ,x ;OK, verifica que sea lo pedido
if( a != (dir) ChgData ){
inc Errores ;aumenta la cuenta de los errores
} ;
} ;
} ;
} ;
;--avanza punteros-- ;
ldhx FlashDir ;FlashDir++
aix #1 ;
sthx FlashDir ;HX=FlashDir
inc RamPtr+1 ;RamPtr++
lda RamPtr+1 ;
}while( a != #Buffer+!16-$100 ) ;repite 16 veces
lda Errores ;listo: carga A con la cantidad de errores
bra HALT ;"0" => OK y termina por breakpoint
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -