56 lines
1.7 KiB
NASM
56 lines
1.7 KiB
NASM
PORTD equ 08h
|
|
DDRD equ 09h
|
|
SPCR equ 28h
|
|
BAUD equ 2Bh
|
|
SCCR1 equ 2Ch
|
|
SCCR2 equ 2Dh
|
|
SCSR equ 2Eh
|
|
SCDAT equ 2Fh
|
|
PPROG equ 3Bh
|
|
TEST1 equ 3Eh
|
|
CONFIG equ 3Fh
|
|
EEPSTR equ 0F800h ; start of EEPROM
|
|
EEPEND equ 0FFFFh ; end of EEPROM
|
|
org 0BF40h
|
|
BEGIN equ *
|
|
lds 00FFh ; initialize the stack
|
|
ldx 1000h ; initialize x register for indexed access
|
|
bset ix,SPCR,20h ; put port D in wire or mode
|
|
ldaa 0A2h ; initialize SCI & restart baud divider chain
|
|
staa ix,BAUD
|
|
ldaa 0Ch ; receiver & transmitter enabled
|
|
staa ix,SCCR2
|
|
bset ix,SCCR2,01h ; send break to signal start of download
|
|
clrbrk:
|
|
brset ix,PORTD,01h,clrbrk ; clear break as soon as start bit detected
|
|
bclr ix,SCCR2,01h ; clear break
|
|
waitchar1:
|
|
brclr ix,SCSR,20h,waitchar1 ; wait for RDRF
|
|
ldaa ix,SCDAT ; read data
|
|
bne NOTZERO ; if data==00h (break or 00) jump to EEPROM
|
|
jmp EEPSTR ; jump to EEPROM
|
|
NOTZERO equ *
|
|
cmpa 055h ; if data==55h skip download (ie) test mode
|
|
beq STAR
|
|
cmpa 0FFh ; if data=0FFh then /16 is correct baud rate
|
|
beq BAUDOK
|
|
bset ix,BAUD,033h ; otherwise change to /104 (/13 &/8) 1200 @ 2MHZ
|
|
BAUDOK equ * ; start the download
|
|
ldy 0000h ; initialize pointer
|
|
BK2 equ * ; read in program and place in RAM
|
|
waitchar2:
|
|
brclr ix,SCSR,20h,waitchar2 ; wait for RDRF
|
|
ldaa ix,SCDAT ;
|
|
staa iy,00h
|
|
staa ix,SCDAT ; handshake
|
|
iny
|
|
cpy 0100h
|
|
bne BK2
|
|
STAR equ * ; start user program
|
|
jmp [0000h]
|
|
|
|
|
|
|
|
|
|
|