Programming:CPC Plus Screen Splitting

From CPCWiki - THE Amstrad CPC encyclopedia!
Revision as of 11:01, 12 March 2007 by Octoate (Talk | contribs) (added category)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

From the The Unofficial Amstrad WWW Resource:

;; This example shows how to split the screen using the CPC+
;; If you want to do the same effect on the CPC, then you will
;; need to use the "rupture"/"vertical splitting" technique.
;;
;; This example is designed for CPC+ only and will
;; not work on CPC or KC Compact.
;;
;;;; This example will compile with the MAXAM assembler
;; or the built-in assembler of WinAPE32.


;; NOTE - For this example to work, the code must not
;; be in the range &4000-&7fff inclusive. The ASIC registers
;; are paged into this range, and the code would not be
;; visible to the CPU if it was also in this range.
org &8000


;;--------------------------------------------------
;; STEP 1 - Unlock CPC+ additional features
;; unlock asic to gain access to asic registers

di
ld b,&bc
ld hl,sequence
ld e,17
.seq 
ld a,(hl)
out (c),a
inc hl
dec e
jr nz,seq
ei


;;---------------------------------------------------
;; STEP 2 - Set display start address for display before split

;; this address corresponds to a start of &c000
ld hl,&3000

;; set display start address (high)
ld bc,&bc0c
out (c),c
inc b
out (c),h

;; set display start address (low)
ld bc,&bc0d
out (c),c
inc b
out (c),l

;;---------------------------------------------------
;; STEP 3 - Set display start address for display after split
;;
;; - The split is refreshed by the ASIC, so as soon as it has been initialised
;;   it will remain active until it is disabled (by writing 0 as the scan-line for the split)
;;   No extra CPU time is required to maintain the split.
;;
;; - The split address is defined the same as the CRTC display start address
;;
;; - The split address is in the same order as the CRTC display start address 
;;   (high byte followed by low byte)

;; page-in asic registers to &4000-&7fff
ld bc,&7fb8
out (c),c

;; set scan-line that split will activate on
ld a,100
ld (&6801),a

;; set screen address of split:
;; this address corresponds to start of &4000
ld hl,&1000

ld a,h
ld (&6802),a
ld a,l
ld (&6803),a

;; page-out asic registers
ld bc,&7fa0
out (c),c

;;----------------------------------------------------

ret

;;----------------------------------------------------------
;; this is the sequence to unlock the ASIC extra features
.sequence
defb &ff,&00,&ff,&77,&b3,&51,&a8,&d4,&62,&39,&9c,&46,&2b,&15,&8a,&cd,&ee