home *** CD-ROM | disk | FTP | other *** search
- ; Program to show clock interrupts of Z80 System
- ; Written for Z80 Emulator
-
- ; interrupt handling routine must reside at address 0008
- ; to correspond with RST 8 instruction for a clock interrupt in
- ; the Z80 system
-
- ; this interrupt service routine shows some typical aspects of
- ; Z80 interrupt programming:
- ; - the use of EXX to quickly make available an alternate register set
- ; without the overheads of stacking to main store
- ; - the use of B as a counter for a looping instruction
- ; - the use of C (the unused half of BC) to store the port address
-
- INTERRUPT EQU 1000 ; define the start for the main routine
-
- ORG #8
- SERV_INT: EXX ; exchange register sets
- LD HL,INT_MESS ; point to interrupt message
- LD B,25 ; message length
- LD C,1 ; port for output (console screen)
- OTIR ; output the message
- EXX ; get back our first set of registers
- EI ; re-enable interrupts that were disabled
- RETI ; return from interrupt service routine
-
- ; this following routine is a simple loop to continuously display a message
- ; we'll use an alternate format of the OUT instruction just to be different
-
- ORG INTERRUPT
- DISP_MESS:LD HL,STD_MESS ; point to standard message
- LD B,20 ; message length
- LOOP: LD A,(HL) ; get next character
- OUT (1),A ; output character to console screen
- INC HL ; point to next character
- DJNZ LOOP ; repeat until all have been printed
- LD A,R ; get value of refresh register
- ADD A,32 ; offset to get normal ASCII character
- OUT (1),A ; display this value
- LD A,13 ; now define a carriage return
- OUT (1),A ; and display it
- JR DISP_MESS ; just continue forever
-
- INT_MESS: DEFM **
- DEFB 32
- DEFM Servicing
- DEFB 32
- DEFM interrupt
- DEFB 32
- DEFM **
- STD_MESS: DEFM Normal
- DEFB 32
- DEFM processing...
-