home *** CD-ROM | disk | FTP | other *** search
/ Commodore Disk User Volume 4 #2 / Commodore_Disk_User_Vol.4_2_1990_-.d64 / irqv1.4.asm < prev    next >
Encoding:
Assembly Source File  |  1990-01-01  |  5.2 KB  |  260 lines

  1. E
  2. _*********************************************************
  3. _*                                                       *
  4. _*       MODULE NAME : irq.asm                           *
  5. _*                                                       *
  6. _*                mAINTENANCE LOG                        *
  7. _*                ---------------                        *
  8. _*                                                       *
  9. _*   DATE      TIME                     ACTION           *
  10. _*   ----      ----                     ------           *
  11. _* 24/02/89    22:35                  INITIAL CODING     *
  12. _* 28/03/89    16:35   FIX BUGS, MOVE ZERO PAGE ADD.     *
  13. _* 03/04/89    22:30   CHANGE BRACKETS, FIX ASS BUGS     *
  14. _* 06/04/89    23:00        MOVE ZERO PAGE DEFINITIONS   *
  15. _* 22/04/89    10:00   RESET RASTER INTERRUPT            *
  16. _* 19/05/89    18:00   mOVE THE LOCNEXT LOGIC TO TABLE   *
  17. _* 22/05/89    17:30    SLIGHT MOD TO brk ROUTINE        *
  18. _* 22/05/89    18:45   UPDATE FOR NEW STORAGE METHODS    *
  19. _* 18/06/89    18:45   iNFORMATION LEFT IN STACK         *
  20. _* 04/07/89    19:00   PAGE 0 AND PAGE 1 IN ANY RAM      *
  21. _*********************************************************
  22.  
  23.  
  24. _ tHIS IS THE irq ROUTINE.
  25. _ FIRST GOES TO $FF17 THEN SETS THE CONFIG REGISTER
  26. _ TO $00 SO THIS LOGIC HAD BETTER BE AVAILABLE TO THIS CONFIGERATION
  27.  
  28.  
  29.  
  30. _ mEMORY LOCATIONS REQUIRED BY irq AND brk VECTORS
  31.  
  32. PROGRUNDB 0_ NUMBER OF PROGRAMS RUNNING
  33.  
  34.  
  35. IRQEQU *
  36.  NMIFLAG_ STOP ANY USER INTERRUPTS AT THIS POINT
  37.  VICIRQ_ RESET RASTER INTERRUPT
  38.  #1
  39.  ONIRQ1
  40. {CBM-P} VICIRQ
  41.  
  42. _ cHECK TO SEE IF ANY PROGRAMS ARE RUNNING
  43. _ 0 OR 1 PROGRAM RUNNING, THEN JUST RETURN
  44. _ CANNOT CHANGE PAGE 0 OR PAGE 1 YET, SO ANY ADDRESSES USED HERE CANNOT
  45. _ BE IN PAGE ZERO OR PAGE 1
  46.  
  47. ONIRQ1EQU *
  48.  PROGRUN
  49.            #2
  50.  GETNEXT
  51.  EXITIRQ
  52.  
  53. GETNEXT   EQU *
  54.  #OSP0HI
  55. {CBM-P} PAGE0HI
  56.            #OSP0LOW
  57. {CBM-P} PAGE0LOW_ GET OPERATING SYSTEM ZERO PAGE
  58.  
  59. _ nOW SAVE THE STACK REGISTER
  60.  
  61. {CBM-H}
  62. {CBM-J}
  63.  #REGSP
  64. {CBM-P} [CURRENT],Y_ SAVE STACK POINTER
  65.  
  66. _ SET PAGE 1 AREA SO THAT THE STACK CAN BE USED
  67. _ MOVING THE STACK EFFECTIVELY SAVES THE PROGRAMS INFORMATION
  68.  
  69.  #OSP1HI
  70. {CBM-P} PAGE1HI
  71.  #OSP1LOW
  72. {CBM-P} PAGE1LOW
  73.  
  74. _ nOW WE GET THE NEXT PROGRAM TO RUN
  75.  
  76. NEXTPROG  EQU *
  77.            LOCNEXT
  78.  
  79. _ nOW WE ARE READY TO RETURN TO A NEW PROGRAM
  80. _ iF NO PROGRAM IS RUNNING THEN WE DON'T HAVE
  81. _ TO WORRY ABOUT RESETTING PAGE 0 AND PAGE 1 AREAS
  82.  
  83. _ RESTORE ALL REGISTERS FOR PROGRAM 
  84. _ BY RESTORE PROGRAM'S STACK READY FOR AN rti
  85.  
  86.  #ONERAM                   _ REGISTER WORKS OFF VALUE 
  87.  [CURRENT],Y               _ NOT A CONFIGURATION THEREFORE
  88. {CBM-P} PAGE1HI_ VALUE ALREADY VALID.
  89.  #ONEOFF
  90.  [CURRENT],Y
  91. {CBM-P} PAGE1LOW
  92.  
  93. _ RESTORE THE STACK POINTER
  94.  
  95.            #REGSP
  96.  [CURRENT],Y
  97.           {CBM-R}
  98. {CBM-L}
  99.  
  100. _ NOW RETURN THE PAGE ZERO TO THE PROGRAM
  101.  
  102.  #ZERORAM
  103.  [CURRENT],Y
  104. {CBM-P} PAGE0HI_ 0 OR 1 ARE VALID HERE
  105.  #ZEROOFF
  106.  [CURRENT],Y
  107. {CBM-P} PAGE0LOW
  108.  
  109. _ NOW WE ARE IN CONFIG $00 SO i CAN RETURN TO THE irq
  110. _ ROUTINE. THE STACK IS NOW SETUP TO RETURN TO THE NEW
  111. _ PROGRAM. SO ON THE rti THE SYSTEM RETURNS TO A DIFF PROG
  112.  
  113. EXITIRQ   EQU *
  114.  NMIFLAG
  115.            IRQRET
  116.  
  117. _ pROCESS A brk INTERRUPT. nOTE THAT FOR THE TIME BEING THIS ROUTINE
  118. _ JUST TERMINATES A PROGRAM. iT COULD BE USED TO CHECK a,x AND y AND
  119. _ THUS PROCESS REQUESTS FROM PROGRAMS TO THE OPERATING SYSTEM.
  120.  
  121.  
  122. BRKEQU *
  123.  NMIFLAG
  124.  
  125. _ PULL OFF THE RUBBISH (NOT NECESSARY HOWEVER) 
  126.  
  127. {CBM-G}
  128. {CBM-G}
  129. {CBM-G}
  130. {CBM-G}
  131. {CBM-G}
  132. {CBM-G}
  133. {CBM-G}
  134.  
  135. _ RESTORE PAGE 0 AND PAGE 1. CANNOT BE A SUBROUTINE AS THE jsr USES
  136. _ THE STACK AND CHANGING WHERE THE STACK IS WILL CAUSE A CRASH
  137.  
  138.  #OSP0HI
  139. {CBM-P} PAGE0HI
  140.  #OSP1HI            
  141. {CBM-P} PAGE1HI           
  142.  
  143. _ nO UPDATE TO THE REGISTER UNTIL LOW IS WRITTEN, SO HI MUST BE WRITTEN 
  144. _ FIRST.
  145.  
  146.  #OSP0LOW
  147. {CBM-P} PAGE0LOW
  148.  #OSP1LOW            
  149. {CBM-P} PAGE1LOW            
  150.  #FLAG
  151.  #NOPROG
  152. {CBM-P} [CURRENT],Y_ CLEAR ENTRY IN TABLE
  153.  
  154. _ pROGRAM REMOVED SO FREE THE STORAGE
  155.  
  156.  
  157. _
  158. _ fREE THE PROGRAM AREA.
  159. _
  160.  
  161.  #RAMPRG
  162.  [TABPNTR],Y
  163. {CBM-P} RAMUSED
  164.  #STRTADD
  165.  [TABPNTR],Y
  166. {CBM-P} STARTRAM
  167.  
  168.  [TABPNTR],Y
  169. {CBM-P} STARTRAM+1
  170.  #ENDADD
  171.  [TABPNTR],Y
  172. {CBM-P} ENDRAM
  173.  
  174.  [TABPNTR],Y
  175. {CBM-P} ENDRAM+1
  176.  FRESTOR_ FREE PROGRAM AREA
  177.  IRQZERO
  178. ERRORIRQEQU *
  179.  #13
  180.  DISPMESS_ DISPLAY MESSAGE, BUT CONTINUE WITH THE
  181.  IRQALL_ USUAL brk ROUTINE.
  182.  
  183.  
  184. _
  185. _ fREE THE PAGE 0 AREA.
  186. _
  187.  
  188. IRQZEROEQU *
  189.  #ZERORAM
  190.  [TABPNTR],Y
  191. {CBM-P} RAMUSED
  192.  #ZEROOFF
  193.  [TABPNTR],Y
  194. {CBM-P} STARTRAM+1
  195. {CBM-P} ENDRAM+1
  196.  #0
  197. {CBM-P} STARTRAM
  198.  #PAGEND
  199. {CBM-P} ENDRAM
  200.  FRESTOR
  201.  IRQONE
  202.  ERRORIRQ
  203.  
  204. _
  205. _ fREE THE PAGE ONE AREA.
  206. _
  207.  
  208. IRQONEEQU *
  209.  #ONERAM
  210.  [TABPNTR],Y
  211. {CBM-P} RAMUSED
  212.  #ONEOFF
  213.  [TABPNTR],Y
  214. {CBM-P} STARTRAM+1
  215. {CBM-P} ENDRAM+1
  216.  #0
  217. {CBM-P} STARTRAM
  218.  #PAGEND
  219. {CBM-P} ENDRAM
  220.  FRESTOR
  221.  IRQALL
  222.  ERRORIRQ
  223.  
  224. IRQALLEQU *
  225.  
  226.  PROGRUN
  227.  DFLTPRG
  228.            NEXTPROG_ FIND PROGRAM IN THE TABLE TO RUN
  229.  
  230. _ wE NOW HAVE NO PROGRAMS RUNNING, SO WE MUST SET UP TO RETURN
  231. _ TO THE DEFAULT LOOP.
  232. _ tHE BANK DOESN'T HAVE TO BE SET AS IF WE ARE RUNNING HERE, SO THE
  233. _ PROGRAM WE WANT WILL BE RETURNED TO.
  234. _ dON'T NEED TO SET UP a,x OR y EITHER
  235.  
  236. DFLTPRGEQU *
  237.  #<INITEXT1_ GET HIGH BYTE OF ADDRESS TO RETURN TO
  238. {CBM-T}
  239.  #>INITEXT1
  240. {CBM-T}
  241.  #0_ STATUS FLAG = 0
  242. {CBM-T}
  243. {CBM-T}
  244. {CBM-T}
  245. {CBM-T}
  246.  #CONFIG
  247. {CBM-T}
  248.  
  249. _ oN RETURN OF THE INTERRUPT, wE RETURN TO THE BANK THAT WE ARE CURRENTLY
  250. _ IN WITH A CLEARED STATUS FLAG, JUST RETURN TO THE LOOPING PROGRAM WITH
  251. _ THE SYSTEM PAGE 0 AND PAGE 1 IN PLACE.
  252. _
  253.  
  254.  EXITIRQ _ RETURN INTERRUPT TO DEFAULT PROGRAM
  255.  
  256.  
  257. iend
  258.  
  259.