]> git.sur5r.net Git - cc65/blob - libsrc/lynx/uploader.s
Fix 32/64-bit int/pointer casts
[cc65] / libsrc / lynx / uploader.s
1         .include        "lynx.inc"
2         .include        "extzp.inc"
3         .interruptor    _UpLoaderIRQ
4         .export         __UPLOADER__: absolute = 1
5
6 load_len=_FileDestAddr
7 load_ptr=_FileFileLen
8 load_ptr2=_FileCurrBlock
9
10 .segment "UPCODE"
11
12 ComLynxReadAndExec:
13         ldy     #4
14 loop0:
15         jsr     read_byte
16         sta     load_len-1,y
17         dey
18         bne     loop0       ; get destination and length
19         tax                 ; lowbyte of length
20
21         lda     load_ptr
22         sta     load_ptr2
23         lda     load_ptr+1
24         sta     load_ptr2+1
25
26 loop1:
27         inx
28         bne     cont1
29         inc     load_len+1
30         bne     cont1
31         jmp     (load_ptr)
32
33 cont1:
34         jsr     read_byte
35         sta     (load_ptr2),y
36         sta     PALETTE         ; feedback ;-)
37         iny
38         bne     loop1
39         inc     load_ptr2+1
40         bra     loop1
41
42 read_byte:
43         bit     SERCTL
44         bvc     read_byte
45         lda     SERDAT
46         rts
47
48 _UpLoaderIRQ:
49         lda     INTSET
50         and     #$10
51         bne     @L0
52         clc
53         rts
54 @L0:
55         lda     SERDAT          ; wait for the start sequence
56         bit     flag            ; already seen $81 ?
57         bpl     again           ; >= 0 => no
58         cmp     #$50            ; "P" ?
59         bne     again           ; not correct, so clear flag
60         sei
61         jmp     ComLynxReadAndExec
62
63 again:
64         stz     flag
65         cmp     #$81
66         bne     exit
67         sta     flag
68 ;
69 ; last action : clear interrupt
70 ;
71 exit:
72         clc
73         rts
74
75 .segment "UPDATA"
76
77 flag:
78         .byte   0
79