Add loader.s

This commit is contained in:
John Lorentzson 2025-07-11 10:21:03 +02:00
parent 0734b19746
commit 1ebf191797

112
wip-duuqnd/loader.s Normal file
View file

@ -0,0 +1,112 @@
;;; -*- Mode: asm; indent-tabs-mode: t; tab-width: 8 -*-
CLKMASK = %00000010
CTRL2 = $DC00
coldstart:
lda #$0
sta $400
waitstart:
lda $dc01
and #$01
bne waitstart
lda #$00
sta $d020
teststart:
jsr check_for_load_start
jmp $c000
beq teststart
bcs @error
jmp $c000
@error:
lda #0
sta $0400
rts
check_for_load_start:
lda #CLKMASK
bit CTRL2
bne start
lda #$00
rts
start:
sei
ldx #$02
stx $d020
ldy #$00
jmp new_byte
wait_for_bit_start:
lda #CLKMASK
@loop:
bit CTRL2
beq @loop
lda #CLKMASK
bit CTRL2
beq error
lda CTRL2
lsr
ror BYTE
bcc wait_for_bit_end
txa ; get the zero flag from X
beq @normal
dex
lda BYTE
sta LEN,x
txa
bne @notdone
;; Computing stop address
clc
lda LEN
adc z:progdest
sta stop
lda LEN+1
adc z:progdest+1
sta stop+1
jmp @notdone
@normal:
;; Byte finished, storing
lda BYTE
sta (progdest), y
inc z:progdest
bne @noinchi
inc z:progdest+1
@noinchi:
;; Comparing progdest against stop address
lda z:progdest
cmp stop
bne @notdone
lda z:progdest+1
cmp stop+1
bne @notdone
jmp done
@notdone:
new_byte:
lda #%10000000
sta BYTE
wait_for_bit_end:
lda #CLKMASK
@loop:
bit CTRL2
bne @loop
jmp wait_for_bit_start
done:
lda #$01
cli
clc
rts
error:
;; TODO
cli
sec
rts
BYTE = $400
LEN = $402
progdest = $fe
stop: .word $0000
loaded: .byte 0