home *** CD-ROM | disk | FTP | other *** search
/ Commodore Disk User Volume 4 #2 / Commodore_Disk_User_Vol.4_2_1990_-.d64 / tabv1.4.asm < prev    next >
Assembly Source File  |  2022-10-26  |  11KB  |  323 lines

  1. E
  2. _*********************************************************
  3. _*                                                       *
  4. _*       MODULE NAME :  tab.asm                          *
  5. _*                                                       *
  6. _*                mAINTENANCE LOG                        *
  7. _*                ---------------                        *
  8. _*                                                       *
  9. _*   DATE      TIME                     ACTION           *
  10. _*   ----      ----                     ------           *
  11. _* 24/02/89    21:55                INITIAL CODING       *
  12. _* 28/03/89    16:25    CHANGE LOCATION ADDRESSES        *
  13. _* 05/04/89    18:30        FIX TABLE BUG AND rts BIT    *
  14. _* 06/04/89    23:00        mOVE ZERO PAGE DEFINITION    *
  15. _* 29/04/89    9:30       CHANGED THE BRACKETS           *
  16. _* 05/05/89    17:40    CORRECTED ENDADD LENGTH BUG      *
  17. _* 19/05/89    18:00    ADDED NEXTLOC LOGIC AND FIXED    *
  18. _*                      LOCNAME BUG                      *
  19. _* 18/06/89    18:45    REMOVE REGISTER AREA             *
  20. _* 04/07/89    18:45    ADDED RAM AREAS FOR PAGE 0 & 1   *
  21. _*********************************************************
  22.  
  23.  
  24. _tABLE dEFINITION
  25.  
  26. FLAG      = 0 _ mODE OF ENTRY IN TABLE
  27. NAME      = FLAG + 1_ pROGRAM NAME
  28. RAMPRG    = NAME + MAXLEN              _ PROGRAM RAM BLOCK ( 0 OR 1 )
  29. STRTADD   = RAMPRG + 1_ PROGRAM START ADDRESS
  30. ENDADD    = STRTADD +2_ PROGRAM END ADDRESS
  31. ZERORAM   = ENDADD + 2_ RAM OF ZERO PAGE
  32. ZEROOFF   = ZERORAM + 1_ ADDRESS OF ZERO PAGE
  33. ONERAM    = ZEROOFF + 1_ RAM OF PAGE ONE
  34. ONEOFF    = ONERAM + 1_ ADDRESS OF PAGE ONE
  35. PRIORITY  = ONEOFF + 1_ PROGRAM PRIORITY
  36. REGSP     = PRIORITY + 1                _ sTACK POINTER
  37. TABLEN    = REGSP + 1
  38.  
  39. _ FLAG MODES 
  40.  
  41. NOPROG    = 0_ FREE ENTRY 
  42. PRGNORUN  = 1_ PROGRAM BUT NOT RUNNING
  43. PRGRUN    = 2_ PROGRAM RUNNING
  44.  
  45.  
  46. _ LOCATIONS USED
  47.  
  48.  
  49. PRGNAMERES 16_ PROGRAM NAME
  50. NAMELENDB 0_ NAME LENGTH
  51.  
  52. _ tO ALLOW FOR MORE PROGRAMS, YOU HAVE TO INCREASE THE AMOUNT OF RESERVED
  53. _ AREA AND DEFINE AN EXACT TABLE END VALUE AS SHOWN BELOW.
  54.  
  55. TABLE     RES 256 _ ENOUGH FOR 8 PROGRAMS
  56. TABEND    = TABLE + TABLEN*8
  57.  
  58. _*********************************************************
  59. _*                                                       *
  60. _*       ROUTINE : settab - INITIALISE PROGRAM TABLE     *
  61. _*                                                       *
  62. _*   ENTRY                                               *
  63. _*   -----                                               *
  64. _*   NONE                                                *
  65. _*.......................................................*
  66. _*   USED                                                *
  67. _*   ----                                                *
  68. _*   a,x                                                 *
  69. _*.......................................................*
  70. _*   EXIT                                                *
  71. _*   ----                                                *
  72. _*   NONE                                                *
  73. _*********************************************************
  74.  
  75.  
  76. SETTABEQU *
  77.  INITTAB_ INITIALISE TABLE SCAN 
  78.  
  79. _ SET ALL FLAGS IN TABLE TO ZERO
  80.  
  81.  #FLAG
  82. INITLOP1  EQU *
  83.  #NOPROG
  84.           {CBM-P} [TABPNTR],Y
  85.  INCLOC_ POINT TO NEXT ENTRY
  86.  CHECKEND
  87.  INITLOP1
  88. {CBM-N}
  89.  
  90.  
  91. _*********************************************************
  92. _*                                                       *
  93. _*       ROUTINE : inittab - INITIALISE TABLE POINTERS   *
  94. _*                 TO START OF THE TABLE                 *
  95. _*   ENTRY                                               *
  96. _*   -----                                               *
  97. _*   NONE                                                *
  98. _*.......................................................*
  99. _*   USED                                                *
  100. _*   ----                                                *
  101. _*   a                                                   *
  102. _*.......................................................*
  103. _*   EXIT                                                *
  104. _*   ----                                                *
  105. _*   tabpntr                                             *
  106. _*********************************************************
  107.  
  108. INITTABEQU *
  109.  #>TABLE
  110. {CBM-P} TABPNTR
  111.  #<TABLE
  112. {CBM-P} TABPNTR+1
  113. {CBM-N}
  114.  
  115. _*********************************************************
  116. _*                                                       *
  117. _*       ROUTINE : checkend - CHECK FOR END OF TABLE IN  *
  118. _*                 TABLE POINTERS                        *
  119. _*   ENTRY                                               *
  120. _*   -----                                               *
  121. _*   tabpntr (2 BYTES)                                   *
  122. _*.......................................................*
  123. _*   USED                                                *
  124. _*   ----                                                *
  125. _*   a                                                   *
  126. _*.......................................................*
  127. _*   EXIT                                                *
  128. _*   ----                                                *
  129. _*   C   0 = NO END, 1 = END                             *
  130. _*********************************************************
  131.                                    
  132.  
  133. CHECKEND  EQU *
  134.  
  135.  TABPNTR+1
  136.            #<TABEND
  137.  EXITCHCK
  138.  TABPNTR
  139.  #>TABEND
  140. EXITCHCK  EQU *
  141. {CBM-N}
  142.  
  143. _*********************************************************
  144. _*                                                       *
  145. _*       ROUTINE : incloc - INCREMENT THE TABLE POINTERS *
  146. _*                                                       *
  147. _*   ENTRY                                               *
  148. _*   -----                                               *
  149. _*   tabpntr                                             *
  150. _*.......................................................*
  151. _*   USED                                                *
  152. _*   ----                                                *
  153. _*   a                                                   *
  154. _*.......................................................*
  155. _*   EXIT                                                *
  156. _*   ----                                                *
  157. _*   tabpntr                                             *
  158. _*********************************************************
  159.                          
  160.  
  161. INCLOC EQU *
  162.  TABPNTR
  163.  
  164.  #TABLEN
  165. {CBM-P} TABPNTR
  166.  TABPNTR+1
  167.  #0
  168. {CBM-P} TABPNTR+1
  169. {CBM-N}
  170.                              
  171. _*********************************************************
  172. _*                                                       *
  173. _*       ROUTINE : locname - LOCATE AN ENTRY IN THE TABLE*
  174. _*                 BASED ON NAME                         *
  175. _*   ENTRY                                               *
  176. _*   -----                                               *
  177. _*   prgname - NAME OF PROGRAM                           *
  178. _*   namelen - LENGTH OF THE NAME IN prgname             *
  179. _*.......................................................*
  180. _*   USED                                                *
  181. _*   ----                                                *
  182. _*   a,x,y                                               *
  183. _*.......................................................*
  184. _*   EXIT                                                *
  185. _*   ----                                                *
  186. _*   C  0=NOT FOUND, 1=FOUND                             *
  187. _*********************************************************
  188.                            
  189. LOCNAMEEQU *
  190.  INITTAB
  191. LOCLOOP2EQU *
  192.  #0
  193.  #FLAG_ SEE IF ENTRY IN TABLE.
  194.  [TABPNTR],Y
  195.  #NOPROG
  196.  NOTIT
  197.  #NAME
  198. LOCLOOP1EQU *
  199.  [TABPNTR],Y
  200.  PRGNAME,X
  201.  NOTIT
  202.  NAMELEN
  203.  FNDIT
  204.  
  205.  
  206.  LOCLOOP1
  207. FNDITEQU *
  208. {CBM-D}_ C=1 MEANS FOUND IT
  209. {CBM-N}
  210.  
  211. NOTITEQU *
  212.  INCLOC
  213.  CHECKEND
  214.  LOCLOOP2
  215.  
  216. NOTFNDEQU *
  217. _ C=0, NAME NOT FOUND
  218. {CBM-N}
  219.  
  220.                              
  221. _*********************************************************
  222. _*                                                       *
  223. _*       ROUTINE : locfree - LOCATE A FREE ENTRY IN THE  *
  224. _*                 TABLE                                 *
  225. _*   ENTRY                                               *
  226. _*   -----                                               *
  227. _*   nONE                                                *
  228. _*.......................................................*
  229. _*   USED                                                *
  230. _*   ----                                                *
  231. _*   a,x,y                                               *
  232. _*.......................................................*
  233. _*   EXIT                                                *
  234. _*   ----                                                *
  235. _*   C  0=FOUND, 1=NOT FOUND                             *
  236. _*********************************************************
  237.                            
  238. LOCFREEEQU *
  239.  INITTAB                     
  240.  #FLAG
  241. FRELOOP1EQU *
  242.  [TABPNTR],Y
  243.  #NOPROG  
  244.  NOTFREE                                         
  245.  
  246. _ C=0 MEANS FOUND IT
  247. {CBM-N}
  248.  
  249. NOTFREEEQU *
  250.  INCLOC
  251.  CHECKEND
  252.  FRELOOP1
  253.  
  254. {CBM-N}_ C=1 HERE
  255.  
  256.  
  257. _*********************************************************
  258. _*                                                       *
  259. _*       ROUTINE : locnext - LOCATE THE NEXT PROGRAM TO  *
  260. _*                 TO RUN. tHIS ROUTINE MUST ALWAYS AN   *
  261. _*                 ENTRY. tHE ROUTINE WILL LOOP IF       *
  262. _*                 CALLED WHEN NO PROGS ARE RUNNING.     *
  263. _*   ENTRY                                               *
  264. _*   -----                                               *
  265. _*   current - cURRENT PROGRAM THAT WAS RUNNING          *
  266. _*.......................................................*
  267. _*   USED                                                *
  268. _*   ----                                                *
  269. _*   a,y                                                 *
  270. _*.......................................................*
  271. _*   EXIT                                                *
  272. _*   ----                                                *
  273. _*   current - NEXT PROGRAM THAT WILL RUN.               *
  274. _*********************************************************
  275.  
  276.  
  277.  
  278. _ LOCATE THE NEXT PROGRAM TO RUN. tHIS ROUTINE MUST ALWAYS RETURN
  279. _ AN ENTRY. tHE ROUTINE MUST NEVER BE RUN IF NO PROGRAMS ARE RUNNING
  280.  
  281. LOCNEXTEQU *
  282.  
  283. _ POINT TO NEXT ENTRY IN THE TABLE
  284.  
  285.            CURRENT
  286.           
  287.            #TABLEN
  288.           {CBM-P} TABPNTR
  289.  CURRENT+1
  290.  #0
  291. {CBM-P} TABPNTR+1
  292.  
  293. LOCCONTEQU *
  294.  
  295.  CHECKEND        _ SEE IF WE MUST START AT THE TOP AGAIN
  296.  NOCHANGE
  297.  
  298. _ POINT TO START OF TABLE AGAIN
  299.  
  300.  INITTAB   
  301.  
  302. NOCHANGE  EQU *
  303.  
  304.  #FLAG          _ GET FLAG ENTRY AND SEE IF PROGRAM IS RUNNING
  305.  [TABPNTR],Y
  306.  #PRGRUN
  307.  NOTLOC
  308.  TABPNTR
  309. {CBM-P} CURRENT
  310.  TABPNTR+1
  311. {CBM-P} CURRENT+1
  312. {CBM-N}
  313.  
  314. NOTLOC    EQU *
  315.  INCLOC         _ POINT TO NEXT ENTRY
  316.  LOCCONT
  317.  
  318.  
  319.  
  320.  
  321. iend
  322.  
  323.