home *** CD-ROM | disk | FTP | other *** search
- E
- _*********************************************************
- _* *
- _* MODULE NAME : irq.asm *
- _* *
- _* mAINTENANCE LOG *
- _* --------------- *
- _* *
- _* DATE TIME ACTION *
- _* ---- ---- ------ *
- _* 24/02/89 22:35 INITIAL CODING *
- _* 28/03/89 16:35 FIX BUGS, MOVE ZERO PAGE ADD. *
- _* 03/04/89 22:30 CHANGE BRACKETS, FIX ASS BUGS *
- _* 06/04/89 23:00 MOVE ZERO PAGE DEFINITIONS *
- _* 22/04/89 10:00 RESET RASTER INTERRUPT *
- _* 19/05/89 18:00 mOVE THE LOCNEXT LOGIC TO TABLE *
- _* 22/05/89 17:30 SLIGHT MOD TO brk ROUTINE *
- _* 22/05/89 18:45 UPDATE FOR NEW STORAGE METHODS *
- _* 18/06/89 18:45 iNFORMATION LEFT IN STACK *
- _* 04/07/89 19:00 PAGE 0 AND PAGE 1 IN ANY RAM *
- _*********************************************************
-
-
- _ tHIS IS THE irq ROUTINE.
- _ FIRST GOES TO $FF17 THEN SETS THE CONFIG REGISTER
- _ TO $00 SO THIS LOGIC HAD BETTER BE AVAILABLE TO THIS CONFIGERATION
-
-
-
- _ mEMORY LOCATIONS REQUIRED BY irq AND brk VECTORS
-
- PROGRUNDB 0_ NUMBER OF PROGRAMS RUNNING
-
-
- IRQEQU *
- NMIFLAG_ STOP ANY USER INTERRUPTS AT THIS POINT
- VICIRQ_ RESET RASTER INTERRUPT
- #1
- ONIRQ1
- {CBM-P} VICIRQ
-
- _ cHECK TO SEE IF ANY PROGRAMS ARE RUNNING
- _ 0 OR 1 PROGRAM RUNNING, THEN JUST RETURN
- _ CANNOT CHANGE PAGE 0 OR PAGE 1 YET, SO ANY ADDRESSES USED HERE CANNOT
- _ BE IN PAGE ZERO OR PAGE 1
-
- ONIRQ1EQU *
- PROGRUN
- #2
- GETNEXT
- EXITIRQ
-
- GETNEXT EQU *
- #OSP0HI
- {CBM-P} PAGE0HI
- #OSP0LOW
- {CBM-P} PAGE0LOW_ GET OPERATING SYSTEM ZERO PAGE
-
- _ nOW SAVE THE STACK REGISTER
-
- {CBM-H}
- {CBM-J}
- #REGSP
- {CBM-P} [CURRENT],Y_ SAVE STACK POINTER
-
- _ SET PAGE 1 AREA SO THAT THE STACK CAN BE USED
- _ MOVING THE STACK EFFECTIVELY SAVES THE PROGRAMS INFORMATION
-
- #OSP1HI
- {CBM-P} PAGE1HI
- #OSP1LOW
- {CBM-P} PAGE1LOW
-
- _ nOW WE GET THE NEXT PROGRAM TO RUN
-
- NEXTPROG EQU *
- LOCNEXT
-
- _ nOW WE ARE READY TO RETURN TO A NEW PROGRAM
- _ iF NO PROGRAM IS RUNNING THEN WE DON'T HAVE
- _ TO WORRY ABOUT RESETTING PAGE 0 AND PAGE 1 AREAS
-
- _ RESTORE ALL REGISTERS FOR PROGRAM
- _ BY RESTORE PROGRAM'S STACK READY FOR AN rti
-
- #ONERAM _ REGISTER WORKS OFF VALUE
- [CURRENT],Y _ NOT A CONFIGURATION THEREFORE
- {CBM-P} PAGE1HI_ VALUE ALREADY VALID.
- #ONEOFF
- [CURRENT],Y
- {CBM-P} PAGE1LOW
-
- _ RESTORE THE STACK POINTER
-
- #REGSP
- [CURRENT],Y
- {CBM-R}
- {CBM-L}
-
- _ NOW RETURN THE PAGE ZERO TO THE PROGRAM
-
- #ZERORAM
- [CURRENT],Y
- {CBM-P} PAGE0HI_ 0 OR 1 ARE VALID HERE
- #ZEROOFF
- [CURRENT],Y
- {CBM-P} PAGE0LOW
-
- _ NOW WE ARE IN CONFIG $00 SO i CAN RETURN TO THE irq
- _ ROUTINE. THE STACK IS NOW SETUP TO RETURN TO THE NEW
- _ PROGRAM. SO ON THE rti THE SYSTEM RETURNS TO A DIFF PROG
-
- EXITIRQ EQU *
- NMIFLAG
- IRQRET
-
- _ pROCESS A brk INTERRUPT. nOTE THAT FOR THE TIME BEING THIS ROUTINE
- _ JUST TERMINATES A PROGRAM. iT COULD BE USED TO CHECK a,x AND y AND
- _ THUS PROCESS REQUESTS FROM PROGRAMS TO THE OPERATING SYSTEM.
-
-
- BRKEQU *
- NMIFLAG
-
- _ PULL OFF THE RUBBISH (NOT NECESSARY HOWEVER)
-
- {CBM-G}
- {CBM-G}
- {CBM-G}
- {CBM-G}
- {CBM-G}
- {CBM-G}
- {CBM-G}
-
- _ RESTORE PAGE 0 AND PAGE 1. CANNOT BE A SUBROUTINE AS THE jsr USES
- _ THE STACK AND CHANGING WHERE THE STACK IS WILL CAUSE A CRASH
-
- #OSP0HI
- {CBM-P} PAGE0HI
- #OSP1HI
- {CBM-P} PAGE1HI
-
- _ nO UPDATE TO THE REGISTER UNTIL LOW IS WRITTEN, SO HI MUST BE WRITTEN
- _ FIRST.
-
- #OSP0LOW
- {CBM-P} PAGE0LOW
- #OSP1LOW
- {CBM-P} PAGE1LOW
- #FLAG
- #NOPROG
- {CBM-P} [CURRENT],Y_ CLEAR ENTRY IN TABLE
-
- _ pROGRAM REMOVED SO FREE THE STORAGE
-
-
- _
- _ fREE THE PROGRAM AREA.
- _
-
- #RAMPRG
- [TABPNTR],Y
- {CBM-P} RAMUSED
- #STRTADD
- [TABPNTR],Y
- {CBM-P} STARTRAM
-
- [TABPNTR],Y
- {CBM-P} STARTRAM+1
- #ENDADD
- [TABPNTR],Y
- {CBM-P} ENDRAM
-
- [TABPNTR],Y
- {CBM-P} ENDRAM+1
- FRESTOR_ FREE PROGRAM AREA
- IRQZERO
- ERRORIRQEQU *
- #13
- DISPMESS_ DISPLAY MESSAGE, BUT CONTINUE WITH THE
- IRQALL_ USUAL brk ROUTINE.
-
-
- _
- _ fREE THE PAGE 0 AREA.
- _
-
- IRQZEROEQU *
- #ZERORAM
- [TABPNTR],Y
- {CBM-P} RAMUSED
- #ZEROOFF
- [TABPNTR],Y
- {CBM-P} STARTRAM+1
- {CBM-P} ENDRAM+1
- #0
- {CBM-P} STARTRAM
- #PAGEND
- {CBM-P} ENDRAM
- FRESTOR
- IRQONE
- ERRORIRQ
-
- _
- _ fREE THE PAGE ONE AREA.
- _
-
- IRQONEEQU *
- #ONERAM
- [TABPNTR],Y
- {CBM-P} RAMUSED
- #ONEOFF
- [TABPNTR],Y
- {CBM-P} STARTRAM+1
- {CBM-P} ENDRAM+1
- #0
- {CBM-P} STARTRAM
- #PAGEND
- {CBM-P} ENDRAM
- FRESTOR
- IRQALL
- ERRORIRQ
-
- IRQALLEQU *
-
- PROGRUN
- DFLTPRG
- NEXTPROG_ FIND PROGRAM IN THE TABLE TO RUN
-
- _ wE NOW HAVE NO PROGRAMS RUNNING, SO WE MUST SET UP TO RETURN
- _ TO THE DEFAULT LOOP.
- _ tHE BANK DOESN'T HAVE TO BE SET AS IF WE ARE RUNNING HERE, SO THE
- _ PROGRAM WE WANT WILL BE RETURNED TO.
- _ dON'T NEED TO SET UP a,x OR y EITHER
-
- DFLTPRGEQU *
- #<INITEXT1_ GET HIGH BYTE OF ADDRESS TO RETURN TO
- {CBM-T}
- #>INITEXT1
- {CBM-T}
- #0_ STATUS FLAG = 0
- {CBM-T}
- {CBM-T}
- {CBM-T}
- {CBM-T}
- #CONFIG
- {CBM-T}
-
- _
- _ oN RETURN OF THE INTERRUPT, wE RETURN TO THE BANK THAT WE ARE CURRENTLY
- _ IN WITH A CLEARED STATUS FLAG, JUST RETURN TO THE LOOPING PROGRAM WITH
- _ THE SYSTEM PAGE 0 AND PAGE 1 IN PLACE.
- _
-
- EXITIRQ _ RETURN INTERRUPT TO DEFAULT PROGRAM
-
-
- iend
-
-