56
|
1 ;high databank points to ROM, low databank poits to VRAM
|
|
2 ldim 0, db
|
|
3 ldimh $E0, db
|
|
4
|
|
5 ;load address of image in r1
|
|
6 ldim image, r1
|
|
7 ldimh image, r1
|
|
8 ldim 0, r2
|
|
9 ldimh $80, r2
|
|
10 add r2, r1, r1
|
|
11
|
|
12 ;VRAM offset, this allows the 204 pixel display to be centered on 32K point
|
|
13 ldim $80, r3
|
|
14 ldimh 0, r3
|
|
15 ;set display offset register
|
|
16 outi $C, r3
|
|
17
|
|
18 ;zero reg, for use in loads and stores
|
|
19 ldim 0, r0
|
|
20
|
|
21
|
|
22 ;copy palette
|
|
23 ld16 r1, r0, r4
|
|
24 addi 2, r1
|
|
25 mov r4, r5
|
|
26 ldimh 0, r5
|
|
27 outi $E, r5
|
|
28 pal_loop
|
|
29 ld16 r1, r0, r5
|
|
30 addi 2, r1
|
|
31 outi $E, r5
|
|
32 addi -1, r4
|
|
33 bne pal_loop
|
|
34
|
|
35 ;copy first 102 lines
|
|
36 ;r4 = 320 * 102
|
|
37 ldim $80, r4
|
|
38 ldimh $7F, r4
|
|
39 copy_loop:
|
|
40 ld8 r1, r0, r5
|
|
41 str8 r3, r0, r5
|
|
42 addi 1, r1
|
|
43 bcc no_adjust
|
|
44 ;we've hit the end of the upper data bank, adjust it and reset r1 to point to begining of bank
|
|
45 addi 1, db
|
|
46 ldim 0, r1
|
|
47 ldimh $80, r1
|
|
48 no_adjust
|
|
49 addi 1, r3
|
|
50 addi -1, r4
|
|
51 bne copy_loop
|
|
52
|
|
53 ;r4 = 320 * 102
|
|
54 ldim $80, r4
|
|
55 ldimh $7F, r4
|
|
56
|
|
57 ;point lower bank at second half of frame buffer
|
|
58 ldimh $E1, db
|
|
59 ;reset framebuffer pointer
|
|
60 ldim 0, r3
|
|
61 copy_loop2:
|
|
62 ld8 r1, r0, r5
|
|
63 str8 r3, r0, r5
|
|
64 addi 1, r1
|
|
65 bcc no_adjust2
|
|
66 ;we've hit the end of the upper data bank, adjust it and reset r1 to point to begining of bank
|
|
67 addi 1, db
|
|
68 ldim 0, r1
|
|
69 ldimh $80, r1
|
|
70 no_adjust2
|
|
71 addi 1, r3
|
|
72 addi -1, r4
|
|
73 bne copy_loop2
|
|
74
|
|
75 ;enable display/set mode/flip buffer
|
|
76 ldim $A5, r5
|
|
77 ldimh $C4, r5
|
|
78 outi $D, r5
|
|
79
|
|
80 forever:
|
|
81 bra forever
|
|
82
|
|
83 image:
|
|
84 incbin fish.raw |