97 lines
2.2 KiB
ArmAsm
97 lines
2.2 KiB
ArmAsm
; lenser -- BBC Micro viewer (6502), loaded at PAGE (&1900) and *RUN.
|
|
;
|
|
; Sets the screen MODE, programmes the logical->physical palette, then *LOADs the
|
|
; image file "IMG" straight into screen memory, and holds it per the display
|
|
; option. Parameters come from a fixed block the packager fills in (so the code
|
|
; is constant); see build_viewer() in assemble.py.
|
|
;
|
|
; #defines from the wrapper -- WAITMODE (0 forever, 1 key, 2 seconds), WAITSECS, RATE.
|
|
;
|
|
; assembled by bbc/viewer/assemble.py via xa
|
|
|
|
OSWRCH = $FFEE
|
|
OSRDCH = $FFE0
|
|
OSBYTE = $FFF4
|
|
OSCLI = $FFF7
|
|
|
|
* = $1900
|
|
start:
|
|
; ---- VDU 22, mode ----
|
|
lda #22
|
|
jsr OSWRCH
|
|
lda p_mode
|
|
jsr OSWRCH
|
|
|
|
; ---- palette via VDU 19, logical, physical, 0,0,0 for each logical ----
|
|
ldx #0
|
|
palloop:
|
|
cpx p_ncol
|
|
beq paldone
|
|
lda #19
|
|
jsr OSWRCH
|
|
txa
|
|
jsr OSWRCH ; logical colour = X
|
|
lda p_pal,x
|
|
jsr OSWRCH ; physical
|
|
lda #0
|
|
jsr OSWRCH
|
|
jsr OSWRCH
|
|
jsr OSWRCH
|
|
inx
|
|
bne palloop
|
|
paldone:
|
|
|
|
; ---- hide the text cursor (VDU 23,1,0;0;0;0;) ----
|
|
lda #23
|
|
jsr OSWRCH
|
|
lda #1
|
|
jsr OSWRCH
|
|
ldx #8
|
|
curz:
|
|
lda #0
|
|
jsr OSWRCH
|
|
dex
|
|
bne curz
|
|
|
|
; ---- *LOAD the image straight into screen memory ----
|
|
ldx #<cmd
|
|
ldy #>cmd
|
|
jsr OSCLI
|
|
|
|
; ---- hold the picture ----
|
|
#if WAITMODE == 0
|
|
hang:
|
|
jmp hang
|
|
#endif
|
|
#if WAITMODE == 1
|
|
jsr OSRDCH ; block until a key
|
|
rts ; back to BASIC
|
|
#endif
|
|
#if WAITMODE == 2
|
|
lda #<(WAITSECS*RATE)
|
|
sta cnt
|
|
lda #>(WAITSECS*RATE)
|
|
sta cnt+1
|
|
swait:
|
|
lda #19
|
|
jsr OSBYTE ; OSBYTE 19 = wait for vertical sync
|
|
lda cnt
|
|
bne sdec
|
|
dec cnt+1
|
|
sdec:
|
|
dec cnt
|
|
lda cnt
|
|
ora cnt+1
|
|
bne swait
|
|
rts ; back to BASIC
|
|
#endif
|
|
|
|
cnt: .byte 0,0
|
|
|
|
; OSCLI string -- the packager patches in the right screen-base hex
|
|
cmd: .byte "LOAD IMG ", "0000", 13
|
|
|
|
; parameter block -- the packager fills these in
|
|
p_mode: .byte 0
|
|
p_ncol: .byte 0
|
|
p_pal: .byte 0,0,0,0,0,0,0,0
|