Код HTML:
EXT_INT1: ; VG75 DMA Cycle Emulator
push r16
in r16,SREG
push r16
push ZH
push ZL
push r18
push r17
cbi PORTA,vg75_dac
lds ZH,dma_p ;Это указатель в видеобуфере
lds ZL,dma_p+1
dma_int4: sbis PIND,PD1 ;это проверяется сигнал DRQ
rjmp dma_int3
ld r16,Z+
sbrs r16,7 ;бит 7 это признак, что мы наткнулись на атрибут
rjmp dma_data
cp old_attr,r16 ;в old_attr сохраняется значение предыдущих атрибутов
breq dma_dat1
mov old_attr,r16
dma_data: out PORTC,r16
cbi PORTA,vg75_wr
dma_dat1: cpi ZL,low(screen+s_buf_size)
ldi r16,high(screen+s_buf_size)
cpc ZH,r16
sbi PORTA,vg75_wr
brne dma_int4
ldi ZL,0x80 ;сюда мы попадем когда видеобуфер закончится и начнем заново
mov old_attr,ZL
ldi ZL,low(screen) ;screen это начало видеобуфера
ldi ZH,high(screen)
rjmp dma_int4
dma_int3: sbi PORTA,vg75_dac
sts dma_p,ZH
sts dma_p+1,ZL
pop r17
pop r18
pop ZL
pop ZH
pop r16
out SREG,r16
pop r16
reti