4 ; Originally by Bastian Schick
5 ; http://www.geocities.com/SiliconValley/Byte/4242/lynx/
7 ; Ported to cc65 (http://www.cc65.org) by
8 ; Shawn Jefferson, June 2004
12 ; void install_uploader(unsigned char divider);
14 ; Installs an interrupt handler that hooks the comlynx rx/tx interrupts to
15 ; allow upload of code to the lynx from another computer via the comlynx
16 ; cable. divider values are in lynx.h
18 ; Loader is installed under the mikey chip at $FE00.
22 .export _lynx_install_uploader
27 ; ------------------------------------------------------------------------
29 .segment "EXTZP": zeropage
38 ; ------------------------------------------------------------------------
39 ; The following code will get moved to $FE00 when installing the uploader.
49 bne loop0 ; get destination and length
50 tax ; lowbyte of length
65 sta PALETTE ; feedback ;-)
82 ; ------------------------------------------------------------------------
86 _lynx_install_uploader:
88 ldx #.sizeof(Loader)-1 ; put Loader in the right place
89 loop: lda Loader,x ; x is length of loader
95 ; install serial-irq vector
101 jsr _install_irq ; set vector
105 jsr popa ; get divider
107 lda #%00011000 ; Baudrate = 1MHz/16/(divider+1)
110 ; set ComLynx parameters
112 lda #%00011101 ; even par
122 ; enable Rx-interrupt
129 ; ------------------------------------------------------------------------
133 lda SERDAT ; wait for the start sequence
134 bit flag ; already seen $81 ?
135 bpl again ; >= 0 => no
137 bne again ; not correct, so clear flag
145 ; last action : clear interrupt