;;
;; (c) Kevin Thacker 2001,2002
;;
;; This source is released under the GNU Public License v2.

org &8000
nolist

.scr_set_mode equ &bc0e

;;----------------------------------------
;; set the screen mode

ld a,1
call scr_set_mode

;;----------------------------------------
;; expand the visible display so that the whole raster can be seen

ld bc,&bc01
out (c),c
ld bc,&bd00+48
out (c),c
ld bc,&bc02
out (c),c
ld bc,&bd00+48
out (c),c

;;----------------------------------------
;; initialise interrupts
;;
;; setup a dummy interrupt handler

di						;; disable interrupts
im 1					;; interrupt mode 1
ld hl,&c9fb				;; C9:FB corresponds to the instructions EI:RET
ld (&0038),hl			;; write instructions to interrupt vector
ei						;; enable interrupts

;;----------------------------------------
;; set the border colour to black

ld bc,&7f10
out (c),c
ld bc,&7f54
out (c),c

;;----------------------------------------
;; the main loop which displays the raster

.main_loop
;;----------------------------------------
;; wait for the start of the vsync

ld b,&f5
.ml1
in a,(c)
rra
jr nc,ml1

;;----------------------------------------
;; use halt to delay until the position we want
;; on the display

halt

halt

halt

halt

;;------------------------------------
;; delay so that the first colour change is invisible (it occurs
;; during the horizontal flyback)
defs 28

;;------------------------------------
;; select the pen index to change the colour of
ld bc,&7f00
out (c),c

;;------------------------------------
;; change the colours
             
ld hl,raster_colours	  ;; table of colours for all split rasters

ld e,7                    ;; number of complete scanlines that the split rasters
                          ;; cover

.rl
inc b
outi                      ;; [5] set colour for split raster 1                 
defs 4						;; delay a little (controls the width of the split raster)

inc b
outi                      ;; [5] set colour for split raster 2
defs 4

inc b
outi                      ;; [5] set colour for split raster 3
defs 4

inc b
outi                      ;; [5] set colour for split raster 4
defs 4

inc b
outi                      ;; [5] set colour for split raster 5
defs 4

;; delay so that the colour change for raster 1 is aligned with
;; the previous colour change for raster 1.

defs 64-50-1-3

;; loop for next line of each of the split raster's

dec e                     ;; [1]
jp nz,rl                  ;; [3]

;;------------------------------------
;; reset the pen back to black

ld bc,&7f54
out (c),c

;;------------------------------------
;; and loop again to refresh the raster

jp main_loop

;;------------------------------------
;; raster 1 is made of blues
;; raster 2 is made of reds
;; raster 3 is made of greens
;; raster 4 is made of yellows
;; raster 5 is made of purples

;; These bytes are in a format ready to be sent direct
;; to the hardware.
;;
.raster_colours
defb &44                  ;; raster 1 line 1
defb &5c                  ;; raster 2 line 1
defb &56                  ;; raster 3 line 1
defb &5e                  ;; raster 4 line 1
defb &58                  ;; raster 5 line 1
defb &55                  ;; raster 1 line 2
defb &4c                  ;; raster 2 line 2
defb &52                  ;; raster 3 line 2
defb &4a                  ;; raster 4 line 2
defb &45                  ;; raster 5 line 2
defb &57                  ;; raster 1 line 3
defb &4e                  ;; raster 2 line 3
defb &59                  ;; raster 3 line 3
defb &43                  ;; raster 4 line 3
defb &4f                  ;; raster 5 line 3
defb &4b                  ;; raster 1 line 4
defb &4b                  ;; raster 2 line 4
defb &4b                  ;; raster 3 line 4
defb &4b                  ;; raster 4 line 4
defb &4b                  ;; raster 5 line 4
defb &57                  ;; raster 1 line 5
defb &4e                  ;; raster 2 line 5
defb &59                  ;; raster 3 line 5
defb &43                  ;; raster 4 line 5
defb &4f                  ;; raster 5 line 5
defb &55                  ;; raster 1 line 6
defb &4c                  ;; raster 2 line 6
defb &52                  ;; raster 3 line 6
defb &4a                  ;; raster 4 line 6
defb &45                  ;; raster 5 line 6
defb &44                  ;; raster 1 line 7
defb &5c                  ;; raster 2 line 7
defb &56                  ;; raster 3 line 7
defb &5e                  ;; raster 4 line 7
defb &58                  ;; raster 5 line 7