⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 loads08.mas

📁 采用QT设计的S08仿真器程序 带源代码 使用串口方式,成本很低
💻 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 + -