.equ RS_RCV 0xFFDE .equ LCD 0xFFE0 .equ RAM 0x0100 .equ RE 0x4552 .equ EOT 0x0004 // End of transmission .org 0 _start: ldi r0, #RE ldi r1, #0x0001 ldi r6, #RS_RCV // warten auf Kennung RE // als ER emfpangen! wait: ld r3,(r6) sub r3, r3, r0 jz r3, r5, #init jmp r5, #wait init: ld r0,(r6) // startadresse ldi r3, #0xFFFF sub r3, r3, r0 jz r3, r5, #data // bei daten-file programmstart verhindern jmp r5, #load_seg // programm laden data: ldi r0, #_start load_seg: ld r2,(r6) // start des segment ldi r7, #EOT sub r4, r7, r2 jz r4, r5, #run // start programm ld r3,(r6) // segmentlänge load_loop: ld r7,(r6) st r7,(r2) add r2, r2, r1 // RAM++ sub r3, r3, r1 // length -- jz r3, r5, #load_seg // if segment loaded wait for next jmp r5, #load_loop run: jmp r0