📄 loads08.asm
字号:
#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 ----
_TLoopLoads1:
bra _TLoopLoads1
;_EndLoads1:
;;;---- 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
_DoTopLoads2:
lda ,x ;contenido actual de la FLASH
sta COPCTL ;RESET COP
ldhx RamPtr ;
cmp ,x
beq _ElseIfLoads3
lda ,x ;dato a grabar
cbeqa #$FF,_ElseIfLoads4
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
_DoTopLoads5:
lda FSTAT ;
and #FSTAT_MASK ;
; tsta
beq _DoTopLoads5
cbeqa #FSTAT_OK,_ElseIfLoads6
inc Errores ;aumenta la cuenta de los errores
; bra _EndIfLoads6
bra _ElseIfLoads3
_ElseIfLoads6:
lda ,x ;OK, verifica que sea lo pedido
cbeq ChgData,_ElseIfLoads7
inc Errores ;aumenta la cuenta de los errores
_ElseIfLoads7:
;_EndIfLoads6:
_ElseIfLoads4:
_ElseIfLoads3:
;--avanza punteros-- ;
ldhx FlashDir ;FlashDir++
aix #1 ;
sthx FlashDir ;HX=FlashDir
inc RamPtr+1 ;RamPtr++
lda RamPtr+1 ;
cmp #Buffer+!16-$100
bne _DoTopLoads2
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 + -