mirror of
https://github.com/cc65/cc65.git
synced 2024-11-06 15:06:07 +00:00
80 lines
1.4 KiB
ArmAsm
80 lines
1.4 KiB
ArmAsm
|
.include "lynx.inc"
|
||
|
.include "extzp.inc"
|
||
|
.interruptor _UpLoaderIRQ
|
||
|
.export __UPLOADER__: absolute = 1
|
||
|
|
||
|
load_len=_FileDestAddr
|
||
|
load_ptr=_FileFileLen
|
||
|
load_ptr2=_FileCurrBlock
|
||
|
|
||
|
.segment "UPCODE"
|
||
|
|
||
|
ComLynxReadAndExec:
|
||
|
ldy #4
|
||
|
loop0:
|
||
|
jsr read_byte
|
||
|
sta load_len-1,y
|
||
|
dey
|
||
|
bne loop0 ; get destination and length
|
||
|
tax ; lowbyte of length
|
||
|
|
||
|
lda load_ptr
|
||
|
sta load_ptr2
|
||
|
lda load_ptr+1
|
||
|
sta load_ptr2+1
|
||
|
|
||
|
loop1:
|
||
|
inx
|
||
|
bne cont1
|
||
|
inc load_len+1
|
||
|
bne cont1
|
||
|
jmp (load_ptr)
|
||
|
|
||
|
cont1:
|
||
|
jsr read_byte
|
||
|
sta (load_ptr2),y
|
||
|
sta PALETTE ; feedback ;-)
|
||
|
iny
|
||
|
bne loop1
|
||
|
inc load_ptr2+1
|
||
|
bra loop1
|
||
|
|
||
|
read_byte:
|
||
|
bit SERCTL
|
||
|
bvc read_byte
|
||
|
lda SERDAT
|
||
|
rts
|
||
|
|
||
|
_UpLoaderIRQ:
|
||
|
lda INTSET
|
||
|
and #$10
|
||
|
bne @L0
|
||
|
clc
|
||
|
rts
|
||
|
@L0:
|
||
|
lda SERDAT ; wait for the start sequence
|
||
|
bit flag ; already seen $81 ?
|
||
|
bpl again ; >= 0 => no
|
||
|
cmp #$50 ; "P" ?
|
||
|
bne again ; not correct, so clear flag
|
||
|
sei
|
||
|
jmp ComLynxReadAndExec
|
||
|
|
||
|
again:
|
||
|
stz flag
|
||
|
cmp #$81
|
||
|
bne exit
|
||
|
sta flag
|
||
|
;
|
||
|
; last action : clear interrupt
|
||
|
;
|
||
|
exit:
|
||
|
clc
|
||
|
rts
|
||
|
|
||
|
.segment "UPDATA"
|
||
|
|
||
|
flag:
|
||
|
.byte 0
|
||
|
|