67 lines
1.6 KiB
ArmAsm
67 lines
1.6 KiB
ArmAsm
; lenser -- Atari 16K cartridge loader ($8000-$BFFF).
|
|
;
|
|
; Reuses the disk viewer unchanged. The disk viewer "stub" (origin $2000, which
|
|
; begins with the 6-byte boot header and contains cont + the display list) and
|
|
; the picture data (origin $4000) are stored back-to-back in the cartridge ROM
|
|
; after this loader. We copy the stub to $2000 and the data to $4000, then jump
|
|
; to cont ($2006) -- exactly the state a disk boot would have produced.
|
|
;
|
|
; #defines set by viewer/assemble.py --
|
|
; STUB_PAGES / DATA_PAGES 256-byte page counts to copy
|
|
; STUB_LEN exact stub length (data follows it in ROM)
|
|
;
|
|
; assembled by atari/viewer/assemble.py via xa
|
|
|
|
* = $8000
|
|
|
|
S = $80
|
|
D = $82
|
|
|
|
entry:
|
|
; ---- copy the viewer stub to $2000 ----
|
|
lda #<stubsrc
|
|
sta S
|
|
lda #>stubsrc
|
|
sta S+1
|
|
lda #$00
|
|
sta D
|
|
lda #$20
|
|
sta D+1
|
|
ldx #STUB_PAGES
|
|
ldy #$00
|
|
sc:
|
|
lda (S),y
|
|
sta (D),y
|
|
iny
|
|
bne sc
|
|
inc S+1
|
|
inc D+1
|
|
dex
|
|
bne sc
|
|
|
|
; ---- copy the picture data to $4000 ----
|
|
lda #<datasrc
|
|
sta S
|
|
lda #>datasrc
|
|
sta S+1
|
|
lda #$00
|
|
sta D
|
|
lda #$40
|
|
sta D+1
|
|
ldx #DATA_PAGES
|
|
ldy #$00
|
|
dc:
|
|
lda (S),y
|
|
sta (D),y
|
|
iny
|
|
bne dc
|
|
inc S+1
|
|
inc D+1
|
|
dex
|
|
bne dc
|
|
|
|
jmp $2006 ; enter the disk viewer (cont)
|
|
|
|
stubsrc:
|
|
; viewer stub + picture data appended here by the packager
|
|
datasrc = stubsrc + STUB_LEN
|