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 >
Wrap
Assembly Source File
|
2022-10-26
|
11KB
|
323 lines
E
_*********************************************************
_* *
_* MODULE NAME : tab.asm *
_* *
_* mAINTENANCE LOG *
_* --------------- *
_* *
_* DATE TIME ACTION *
_* ---- ---- ------ *
_* 24/02/89 21:55 INITIAL CODING *
_* 28/03/89 16:25 CHANGE LOCATION ADDRESSES *
_* 05/04/89 18:30 FIX TABLE BUG AND rts BIT *
_* 06/04/89 23:00 mOVE ZERO PAGE DEFINITION *
_* 29/04/89 9:30 CHANGED THE BRACKETS *
_* 05/05/89 17:40 CORRECTED ENDADD LENGTH BUG *
_* 19/05/89 18:00 ADDED NEXTLOC LOGIC AND FIXED *
_* LOCNAME BUG *
_* 18/06/89 18:45 REMOVE REGISTER AREA *
_* 04/07/89 18:45 ADDED RAM AREAS FOR PAGE 0 & 1 *
_*********************************************************
_tABLE dEFINITION
FLAG = 0 _ mODE OF ENTRY IN TABLE
NAME = FLAG + 1_ pROGRAM NAME
RAMPRG = NAME + MAXLEN _ PROGRAM RAM BLOCK ( 0 OR 1 )
STRTADD = RAMPRG + 1_ PROGRAM START ADDRESS
ENDADD = STRTADD +2_ PROGRAM END ADDRESS
ZERORAM = ENDADD + 2_ RAM OF ZERO PAGE
ZEROOFF = ZERORAM + 1_ ADDRESS OF ZERO PAGE
ONERAM = ZEROOFF + 1_ RAM OF PAGE ONE
ONEOFF = ONERAM + 1_ ADDRESS OF PAGE ONE
PRIORITY = ONEOFF + 1_ PROGRAM PRIORITY
REGSP = PRIORITY + 1 _ sTACK POINTER
TABLEN = REGSP + 1
_ FLAG MODES
NOPROG = 0_ FREE ENTRY
PRGNORUN = 1_ PROGRAM BUT NOT RUNNING
PRGRUN = 2_ PROGRAM RUNNING
_ LOCATIONS USED
PRGNAMERES 16_ PROGRAM NAME
NAMELENDB 0_ NAME LENGTH
_ tO ALLOW FOR MORE PROGRAMS, YOU HAVE TO INCREASE THE AMOUNT OF RESERVED
_ AREA AND DEFINE AN EXACT TABLE END VALUE AS SHOWN BELOW.
TABLE RES 256 _ ENOUGH FOR 8 PROGRAMS
TABEND = TABLE + TABLEN*8
_*********************************************************
_* *
_* ROUTINE : settab - INITIALISE PROGRAM TABLE *
_* *
_* ENTRY *
_* ----- *
_* NONE *
_*.......................................................*
_* USED *
_* ---- *
_* a,x *
_*.......................................................*
_* EXIT *
_* ---- *
_* NONE *
_*********************************************************
SETTABEQU *
INITTAB_ INITIALISE TABLE SCAN
_ SET ALL FLAGS IN TABLE TO ZERO
#FLAG
INITLOP1 EQU *
#NOPROG
{CBM-P} [TABPNTR],Y
INCLOC_ POINT TO NEXT ENTRY
CHECKEND
INITLOP1
{CBM-N}
_*********************************************************
_* *
_* ROUTINE : inittab - INITIALISE TABLE POINTERS *
_* TO START OF THE TABLE *
_* ENTRY *
_* ----- *
_* NONE *
_*.......................................................*
_* USED *
_* ---- *
_* a *
_*.......................................................*
_* EXIT *
_* ---- *
_* tabpntr *
_*********************************************************
INITTABEQU *
#>TABLE
{CBM-P} TABPNTR
#<TABLE
{CBM-P} TABPNTR+1
{CBM-N}
_*********************************************************
_* *
_* ROUTINE : checkend - CHECK FOR END OF TABLE IN *
_* TABLE POINTERS *
_* ENTRY *
_* ----- *
_* tabpntr (2 BYTES) *
_*.......................................................*
_* USED *
_* ---- *
_* a *
_*.......................................................*
_* EXIT *
_* ---- *
_* C 0 = NO END, 1 = END *
_*********************************************************
CHECKEND EQU *
TABPNTR+1
#<TABEND
EXITCHCK
TABPNTR
#>TABEND
EXITCHCK EQU *
{CBM-N}
_*********************************************************
_* *
_* ROUTINE : incloc - INCREMENT THE TABLE POINTERS *
_* *
_* ENTRY *
_* ----- *
_* tabpntr *
_*.......................................................*
_* USED *
_* ---- *
_* a *
_*.......................................................*
_* EXIT *
_* ---- *
_* tabpntr *
_*********************************************************
INCLOC EQU *
TABPNTR
#TABLEN
{CBM-P} TABPNTR
TABPNTR+1
#0
{CBM-P} TABPNTR+1
{CBM-N}
_*********************************************************
_* *
_* ROUTINE : locname - LOCATE AN ENTRY IN THE TABLE*
_* BASED ON NAME *
_* ENTRY *
_* ----- *
_* prgname - NAME OF PROGRAM *
_* namelen - LENGTH OF THE NAME IN prgname *
_*.......................................................*
_* USED *
_* ---- *
_* a,x,y *
_*.......................................................*
_* EXIT *
_* ---- *
_* C 0=NOT FOUND, 1=FOUND *
_*********************************************************
LOCNAMEEQU *
INITTAB
LOCLOOP2EQU *
#0
#FLAG_ SEE IF ENTRY IN TABLE.
[TABPNTR],Y
#NOPROG
NOTIT
#NAME
LOCLOOP1EQU *
[TABPNTR],Y
PRGNAME,X
NOTIT
NAMELEN
FNDIT
LOCLOOP1
FNDITEQU *
{CBM-D}_ C=1 MEANS FOUND IT
{CBM-N}
NOTITEQU *
INCLOC
CHECKEND
LOCLOOP2
NOTFNDEQU *
_ C=0, NAME NOT FOUND
{CBM-N}
_*********************************************************
_* *
_* ROUTINE : locfree - LOCATE A FREE ENTRY IN THE *
_* TABLE *
_* ENTRY *
_* ----- *
_* nONE *
_*.......................................................*
_* USED *
_* ---- *
_* a,x,y *
_*.......................................................*
_* EXIT *
_* ---- *
_* C 0=FOUND, 1=NOT FOUND *
_*********************************************************
LOCFREEEQU *
INITTAB
#FLAG
FRELOOP1EQU *
[TABPNTR],Y
#NOPROG
NOTFREE
_ C=0 MEANS FOUND IT
{CBM-N}
NOTFREEEQU *
INCLOC
CHECKEND
FRELOOP1
{CBM-N}_ C=1 HERE
_*********************************************************
_* *
_* ROUTINE : locnext - LOCATE THE NEXT PROGRAM TO *
_* TO RUN. tHIS ROUTINE MUST ALWAYS AN *
_* ENTRY. tHE ROUTINE WILL LOOP IF *
_* CALLED WHEN NO PROGS ARE RUNNING. *
_* ENTRY *
_* ----- *
_* current - cURRENT PROGRAM THAT WAS RUNNING *
_*.......................................................*
_* USED *
_* ---- *
_* a,y *
_*.......................................................*
_* EXIT *
_* ---- *
_* current - NEXT PROGRAM THAT WILL RUN. *
_*********************************************************
_ LOCATE THE NEXT PROGRAM TO RUN. tHIS ROUTINE MUST ALWAYS RETURN
_ AN ENTRY. tHE ROUTINE MUST NEVER BE RUN IF NO PROGRAMS ARE RUNNING
LOCNEXTEQU *
_ POINT TO NEXT ENTRY IN THE TABLE
CURRENT
#TABLEN
{CBM-P} TABPNTR
CURRENT+1
#0
{CBM-P} TABPNTR+1
LOCCONTEQU *
CHECKEND _ SEE IF WE MUST START AT THE TOP AGAIN
NOCHANGE
_ POINT TO START OF TABLE AGAIN
INITTAB
NOCHANGE EQU *
#FLAG _ GET FLAG ENTRY AND SEE IF PROGRAM IS RUNNING
[TABPNTR],Y
#PRGRUN
NOTLOC
TABPNTR
{CBM-P} CURRENT
TABPNTR+1
{CBM-P} CURRENT+1
{CBM-N}
NOTLOC EQU *
INCLOC _ POINT TO NEXT ENTRY
LOCCONT
iend