;; This program changes the Zilog 8536 counter/timer so that there is a interrupt ;; on every scanline. The Zilog 8536 counter/timer chip is found in the KC Compact only. ;; ;; This program is designed for KC Compact ONLY and will not run on the CPC ;; or CPC+. ;; ;; (c) Kevin Thacker, 2002. ;; ;; This source is released under the GNU Public License V2. org &8000 ;; disable interrupts di ;; interrupt mode 1 im 1 ;; Z8536 control port ld b,&ee ;; reset Z8536 access state ;; after this, the Z8536 will be waiting for a register index ;; to be written. in a,(c) ;; set counter/timer 3 time constant ;; ;; The timer appears to count HSYNC transitions. Therefore, for a single scanline ;; two transitions are required (low-high, and high-low). ;; set counter/timer 3 time constant to &0002 ;; counter/timer 3 time constant msb register ld a,&1a out (c),a ;; set register to 0 xor a out (c),a ;; counter/timer 3 time constant lsb register ld a,&1b out (c),a ;; set register to 2 ld a,2 out (c),a ;; install a interrupt handler for interrupt mode 1 ld a,&c3 ld hl,interrupt ld (&0038),a ld (&0039),hl ;; reset colour xor a ld (colour),a ;; enable interrupts ei ;; infinite loop; interrupts will be triggered .loop jp loop ;; interrupt handler .interrupt ;; disable interrupts di ;; push registers that we change push bc push af ;; get hardware colour index ld a,(colour) ;; increment inc a ;; ensure it stays in range 0-31 and &1f ;; and store ld (colour),a or &40 ;; select pen 0 ld bc,&7f00 out (c),c ;; set ink for pen 0 out (c),a ;; restore registers that we changed pop af pop bc ;; enable interrupts ei ret ;; stores current hardware colour index (0-31) .colour defb 0