;; program 1
org &8000
;; disable interrupts
di
;; unlock asic to gain access to asic registers
ld b,&bc
ld hl,sequence
ld e,17
.seq
ld a,(hl)
out (c),a
inc hl
dec e
jr nz,seq
;; page-in asic registers
ld bc,&7fb8
out (c),c
;; set z80 interrupt mode 0
im 0
;; set 8-bit interrupt vector (bits 7..3).
;; bit 0 = automatically clear interrupts
ld a,0
ld (&6805),a
;; page-out asic registers
ld bc,&7fa8
out (c),c
;; enable interrupts
ei
;; wait for next interrupt
halt ;; the halt instruction will wait for a interrupt-request. When this is received, the
;; program counter is advanced to the next instruction before the interrupt is executed.
;; So after "halt" has been executed, the program counter will be pointing
;; to the "LD D,E" instruction.
;; a "dummy" instruction
ld d,e
di ;; disable interrupts so we can change interrupt mode safely
im 1 ;; set Z80 interrupt mode 1 (see comment for "BRK" below)
brk ;; this is a special instruction provided by the Maxam assembler/dissassembler/monitor
;; when executed a dump of the register values is displayed. This instruction assembles
;; to a RST 30H. This instruction uses the Amstrad firmware to execute, and the Amstrad
;; firmware requires interrupt mode 1.
;; 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