99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0001 Version 2.0 (Weiand 1985) Options : LCSFPF [0001] [0002] *********************************************************** [0003] COPY 'DSK5.MYXB6-A' <0001> <0002> *********************************************************** <0003> TITL 'MYXB6' <0004> *********************************************************** <0005> GROM >C000 <0006> *********************************************************** <0007> TITL 'EQUATES ALCS-359' <0008> *********************************************************** <0009> 2002 FSLOC EQU >2002 Free Start LOCation in ERAM <0010> * Free end must follow it. <0011> 2006 INITF EQU >2006 INIT flag address INIT has be <0012> * called if ERAM (INITF)=>AA55 <0013> * Free end initialized to >4000, (>FFF8 for debugger) <0014> * Free start is initialized to the first useable memory <0015> * location for assembly language code <0016> A040 CPUBAS EQU >A040 Expansion RAM base <0017> *********************************************************** <0018> * GROM ADDRESSES <0019> 6018 CHRTBL EQU >6018 RXB CALL CHRTBL load char set <0020> 6038 MZMSG EQU >6038 Start of message area <0021> AE00 MZSUB EQU >AE00 Module SPRITE branch table ad <0022> *********************************************************** <0023> 6040 MSGFST EQU >6040 <0024> 6065 MSG10 EQU >6065 <0025> 6076 MSG14 EQU >6076 <0026> 6083 MSG16 EQU >6083 <0027> 609C MSG17 EQU >609C <0028> 60AD MSG19 EQU >60AD <0029> 60BB MSG24 EQU >60BB <0030> 60D2 MSG25 EQU >60D2 <0031> 60E4 MSG28 EQU >60E4 <0032> 60F9 MSG34 EQU >60F9 <0033> 6110 MSG36 EQU >6110 <0034> 611C MSG39 EQU >611C <0035> 6128 MSG40 EQU >6128 <0036> 6137 MSG43 EQU >6137 <0037> 6148 MSG44 EQU >6148 <0038> 6159 MSG47 EQU >6159 <0039> 616F MSG48 EQU >616F <0040> 6189 MSG49 EQU >6189 <0041> 6198 MSG51 EQU >6198 <0042> 61AD MSG54 EQU >61AD <0043> 61BE MSG57 EQU >61BE <0044> 61CC MSG60 EQU >61CC <0045> 61DB MSG61 EQU >61DB <0046> 61EB MSG67 EQU >61EB <0047> 61FA MSG69 EQU >61FA <0048> 6215 MSG70 EQU >6215 <0049> 622D MSG74 EQU >622D <0050> 623A MSG78 EQU >623A <0051> 624D MSG79 EQU >624D <0052> 6257 MSG81 EQU >6257 <0053> 626F MSG83 EQU >626F <0054> 627B MSG84 EQU >627B <0055> 6286 MSG97 EQU >6286 <0056> 629B MSG109 EQU >629B <0057> 62A6 MSG130 EQU >62A6 <0058> 62B0 MSG135 EQU >62B0 <0059> 62C5 MSG62 EQU >62C5 <0060> 630A MSGCIS EQU >630A <0061> 6319 MSGCF EQU >6319 <0062> 6324 MSG56 EQU >6324 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0002 EQUATES ALCS-359 <0063> 6372 TOPLEV EQU >6372 RXB PATCH for XBPGM <0064> 63A5 SZNEW EQU >63A5 RXB PATCH for NEW <0065> 63DD TOPL15 EQU >63DD * Return from OLD or SAVE <0066> 6433 TOPL42 EQU >6433 <0067> 6462 TOPL55 EQU >6462 <0068> 64EF ILLST EQU >64EF <0069> 65C9 SZSIZE EQU >65C9 RXB PATCH for SIZE <0070> 66CF EDITLN EQU >66CF * Edit a line into a program <0071> 6A8A READL3 EQU >6A8A <0072> 6D78 G6D78 EQU >6D78 * GKXB ERR routine <0073> 6E0E ERPRNT EQU >6E0E <0074> 6E1B ERPNT5 EQU >6E1B <0075> 6FBA DISO EQU >6FBA <0076> 802A GRMLST EQU >802A <0077> 9800 ALCEND EQU >9800 RXB moved INIT here <0078> A00A ASC EQU >A00A <0079> A01C LNKRTN EQU >A01C <0080> E025 GE025 EQU >E025 RXB PATCH for EA <0081> *********************************************************** <0082> * EQUATES FOR ROUTINES FROM OTHER GROM SECTIONS <0083> <0084> 6014 INITPG EQU >6014 Initialize program space <0085> 6016 SPRINT EQU >6016 Initialize sprites <0086> 601A TOPL10 EQU >601A Return to main and re-init <0087> 601C CHRTAB EQU >601C Load default character set <0088> 601E SZRUN EQU >601E <0089> 6022 KILSYM EQU >6022 KILL SYMBOL TABLE ROUTINE <0090> 602E AUTO1 EQU >602E Get arguments for LIST comman <0091> 6030 TOPL02 EQU >6030 RTN address for failing AUTOL <0092> 6034 GRSUB1 EQU >6034 Read data (2 bytes) from ERAM <0093> 6036 GWSUB EQU >6036 Write a few bytes of data to <0094> 6048 MSGBRK EQU >6048 * BREAKPOINT <0095> 6053 MSGTA EQU >6053 Message "try again" <0096> <0097> 6A74 LLIST EQU >6A74 List a line <0098> 6A76 READLN EQU >6A76 Read a line from keyboard <0099> 6A78 CHKEND EQU >6A78 Check end of statement <0100> 6A7E ENTER EQU >6A7E <0101> 6A80 ENT09 EQU >6A80 <0102> 6A82 WARNZZ EQU >6A82 WARNING MESSAGE ROUTINE <0103> 6A84 ERRZZ EQU >6A84 ERROR MESSAGE ROUTINE <0104> 6A84 ERRZ EQU >6A84 ERRor routine <0105> 6A86 READL1 EQU >6A86 Read a line from keyboard <0106> <0107> 8000 DISPL1 EQU >8000 <0108> 8002 DELET EQU >8002 <0109> 8004 PRINT EQU >8004 <0110> 8006 INPUT EQU >8006 <0111> 8008 OPEN EQU >8008 <0112> 800A CLOSE EQU >800A <0113> 800C RESTOR EQU >800C <0114> 800E NREAD EQU >800E <0115> 8012 CLSALL EQU >8012 <0116> 801C EOF EQU >801C <0117> 801E ACCEPT EQU >801E <0118> 8020 SRDATA EQU >8020 <0119> 8022 REC EQU >8022 <0120> 802C GRSUB2 EQU >802C <0121> 802E GRSUB3 EQU >802E <0122> 8030 LINPUT EQU >8030 <0123> <0124> A012 CONVER EQU >A012 CONVERT WITH WARNING <0125> <0126> 0010 CPL EQU >0010 Call Program Link 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0003 EQUATES ALCS-359 <0127> 0012 RPL EQU >0012 Return Program Link <0128> 0022 GRINT EQU >0022 Greatest integer <0129> 0032 ATNZZ EQU >0032 Arctangent routine <0130> <0131> *********************************************************** <0132> * Equates for routine in MONITOR <0133> 0010 DSR EQU >10 CALL DEVICE SERVICE ROUTINE <0134> 0034 TONE1 EQU >34 ACCEPT TONE <0135> 0036 TONE2 EQU >36 BAD TONE <0136> 0018 CHAR2Z EQU >18 CHARACTER TABLE ADDRESS small <0137> 004A CHAR3Z EQU >4A CHARACTER TABLE ADDRESS <0138> *********************************************************** <0139> * Equates for XMLs <0140> 0000 SYNCHK EQU >00 SYNCHK XML selector <0141> 0001 FILSPC EQU >01 Fill-space utility <0142> 0001 PARCOM EQU >01 PARse to a COMma selector <0143> 0002 CSTRIN EQU >02 Copy-string utility <0144> 0002 RANGE EQU >02 RANGE selector <0145> 0003 SEETWO EQU >03 SEETWO XML selector <0146> 0006 FADD EQU >06 Floating ADD <0147> 0008 FMUL EQU >08 Floating MULtiply <0148> 0009 FDIV EQU >09 Floating DIVide <0149> 000A FCOMP EQU >0A Floating COMPare <0150> 000B SADD EQU >0B Stack ADD <0151> 000C SSUB EQU >0C Stack SUBtract <0152> 0010 CSNUM EQU >10 Convert String to Number <0153> 0012 CFI EQU >12 Convert to two byte integer <0154> 0012 FLTINT EQU >12 Convert floating to integer <0155> 0020 ALSUP EQU >20 XML to user AssembLy SUBrouti <0156> 0070 COMPCT EQU >70 PREFORM A GARBAGE COLLECTION <0157> 0071 GETSTR EQU >71 SYSTEM GET STRING <0158> 0072 MEMCHK EQU >72 MEMORY check routine: VDP <0159> 0073 CNS EQU >73 Convert number to string * Warning - Default changed in 0159 <0160> 0074 PARSE EQU >74 Parse a value <0161> 0075 CONT EQU >75 Continue parsing <0162> 0076 EXECG EQU >76 Execute a XB stmt or program <0163> 0077 VPUSH EQU >77 Push on value stack <0164> 0078 VPOP EQU >78 Pop off value stack <0165> 0079 PGMCHR EQU >79 GET PROGRAM CHARACTER <0166> 007A SYM EQU >7A Find SYMBOL entry <0167> 007B SMB EQU >7B Find symbol table entry <0168> 007C ASSGNV EQU >7C Assign VARIABLE <0169> 007D SCHSYM EQU >7D Search symbol table <0170> 007E SPEED EQU >7E SPEED UP XML <0171> 007F CRUNCH EQU >7F Crunch an input line <0172> 0080 CIF EQU >80 Convert INTEGER to FLOATING P <0173> 0082 RTNB EQU >82 Return <0174> 0083 SCROLL EQU >83 SCROLL THE SCREEN <0175> 0084 IO EQU >84 IO utility (KW table search) <0176> 0085 GREAD EQU >85 READ DATA FROM ERAM <0177> 0086 GWRITE EQU >86 WRITE DATA TO ERAM <0178> 0087 DELREP EQU >87 REMOVE CONTENT FROM VDP/ERAM <0179> 0088 MVDN EQU >88 MOVE DATA IN VDP/ERAM <0180> 0089 MVUP EQU >89 MOVE DATA IN VDP/ERAM <0181> 008A VGWITE EQU >8A MOVE DATA FROM VDP TO ERAM <0182> 008B GVWITE EQU >8B WRITE DATA FROM GRAM TO VRAM <0183> 008C GREAD1 EQU >8C READ DATA FROM ERAM <0184> 008E GDTECT EQU >8E ERAM DETECT&ROM PAGE 1 ENABLE <0185> 008F SCNSMT EQU >8F SCAN STATEMENT FOR PRESCAN <0186> *********************************************************** <0187> <0188> * Temporary workspaces in EDIT <0189> 8300 CPUOFF EQU >8300 CPU RAM OFFSET 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0004 EQUATES ALCS-359 <0190> 8300 VAR0 EQU >8300 TEMPORARY <0191> 8300 SP00 EQU >8300 SPRITE value <0192> 8300 PTFBSL EQU >8300 Ptr to 1st byte in SPEAK list <0193> 8300 PHLEN EQU >8300 PHrom data LENgth <0194> 8301 VARV EQU >8301 TEMPORARY <0195> 8301 PHRADD EQU >8301 PHRom ADDress <0196> 8302 ACCUM EQU >8302 # OF BYTES ACCUMULATOR (4 BYTE <0197> 8302 STPT EQU >8302 TWO BYTES <0198> 8302 MNUM EQU >8302 Ussually a counter <0199> 8302 AAA1 EQU >8302 <0200> 8302 SP02 EQU >8302 SPRITE value <0201> 8302 PTLBSL EQU >8302 Ptr to last byte in SPEAK list <0202> 8302 CHKSUM EQU >8302 Check sum word <0203> 8304 PC EQU >8304 Address in ERAM to load next v <0204> 8304 VARY EQU >8304 <0205> 8304 PABPTR EQU >8304 Pointer to current PAB <0206> 8304 SP04 EQU >8304 SPRITE value <0207> 8304 PTEBSL EQU >8304 Ptr to end byte in SPEAK list <0208> * NOTE: PTEBSL points to the end of the temporary speak lis <0209> * whereas PTLBSL points to the last byte actually use <0210> * i.e. PTFBSL <= PTLBSL <= PTEBSL <0211> 8306 VARY2 EQU >8306 Use in MVDN only <0212> 8306 DFLTLM EQU >8306 Default array limit (10) <0213> 8306 CCPPTR EQU >8306 OFFSET WITHIN RECORED (1) <0214> * or Pointer to current column <0215> 8306 SP06 EQU >8306 SPRITE value <0216> 8306 PTFCIS EQU >8306 Ptr to 1st character in string <0217> 8306 OFFADD EQU >8306 OFFADD of relocatable programs <0218> * loaded into ERAM. <0219> 8307 RECLEN EQU >8307 LENGTH OF CURRENT RECORD (1) <0220> 8308 CCPADR EQU >8308 RAM address of current refs <0221> * or Actual buffer address or c <0222> 8308 VARC EQU >8308 <0223> 8308 CCPADD EQU >8308 RAM address of current color <0224> 8308 CCC1 EQU >8308 <0225> 8308 SPSAL EQU >8308 Location of sprite attribute l <0226> 8308 PTCCIS EQU >8308 Ptr to current character in st <0227> 8308 FRESTA EQU >8308 Start of free memory in ERAM <0228> * the end of the reloacatable progr <0229> * (start of next program) is stored <0230> * in FRESTA once a "0" tag is found <0231> 830A FREEND EQU >830A End of free memory in ERAM - <0232> * points to 1st character of last <0233> * entry into routine name table. <0234> * (must follow FRESTA!!!) <0235> 830A CALIST EQU >830A Call list for resolving refs <0236> 830A RAMPTR EQU >830A Pointer for crunching <0237> 830A STADDR EQU >830A Start address - usually for co <0238> 830A SPTMP EQU >830A Temporary variable <0239> 830A PTLCIS EQU >830A Ptr to last character in strin <0240> 830B VAR2 EQU >830B <0241> 830C BYTES EQU >830C BYTE COUNTER <0242> * or String length for GETSTR <0243> 830C NMPTR EQU >830C Pointer save for pscan <0244> 830C BBB1 EQU >830C <0245> 830C PTFCIP EQU >830C Ptr to 1st character in phrase <0246> 830E BUFPNT EQU >830E I/O buffer pointer <0247> 830E CHSAV EQU >830E <0248> 830E CURINC EQU >830E Increment for auto-num mode <0249> 830E VAR4 EQU >830E <0250> 830E PTCCIP EQU >830E Ptr to current character in ph <0251> 8310 TOPSTK EQU >8310 Top of data stack pointer <0252> 8310 VAR5 EQU >8310 VAR5 through VAR5+3 used in RA <0253> 8310 PTLCIP EQU >8310 Ptr to last character in phras 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0005 EQUATES ALCS-359 <0254> 8310 TAG EQU >8310 TAG FIELD <0255> 8310 OLDS EQU >8310 FLAG BITS <0256> 8310 TBLPTR EQU >8310 Table pointer (CHARPAT) <0257> 8311 FIELD EQU >8311 Value after TAG field, 4 bytes <0258> * (must follow TAG!!!) <0259> 8311 VAR6 EQU >8311 <0260> 8312 LINUM EQU >8312 Used to determine end of scan <0261> 8312 PTFBPH EQU >8312 Ptr to 1st byte in PHrom <0262> 8312 VAR7 EQU >8312 Used in CHARLY <0263> 8312 COUNT EQU >8312 FLAG BITS <0264> 8312 STRPTR EQU >8312 String pointer (CHARPAT) <0265> 8314 NMLEN EQU >8314 Current line for auto-num <0266> 8314 CURLIN EQU >8314 Current line for auto-num <0267> * or Starting line number for L <0268> 8314 PTCCPH EQU >8314 Ptr to current byte in PHrom <0269> 8314 VAR9 EQU >8314 Used in CHARLY <0270> 8314 STORE EQU >8314 FLAG BITS <0271> 8315 INDEXC EQU >8315 Byte index for computing check <0272> 8316 VARB EQU >8316 Source address for XML MVUP <0273> 8316 XFLAG EQU >8316 SCAN FLAG-BITS USED AS BELOW <0274> 8316 PTLCPH EQU >8316 Ptr to last byte in PHrom <0275> 8316 TEMP EQU >8316 FLAG BITS <0276> 8316 DFLAG EQU >8316 Disk/Hard FLAG <0277> 8317 DEVNUM EQU >8317 DEVice NUMber for Hard drive <0278> 8317 DSRFLG EQU >8317 INTERNAL =60, EXTERNAL =0 (1) <0279> 8317 OPTFLG EQU >8317 Option flag byte during OPEN <0280> 8317 FORNET EQU >8317 Nesting level of for/next <0281> 8317 FNUM EQU >8317 Current file number for search <0282> <0283> *********************************************************** <0284> * Permanent workspace variables <0285> 8318 STRSP EQU >8318 String space begining <0286> 831A STREND EQU >831A String space ending <0287> 831C SREF EQU >831C Temporary string pointer <0288> 831E SMTSRT EQU >831E Start of current statement <0289> 8320 VARW EQU >8320 Screen address (CURSOR) <0290> 8322 ERRCOD EQU >8322 Return error code from ALC <0291> 8324 STVSPT EQU >8324 Value-stack base <0292> 8326 RTNG EQU >8326 Return vector from 9900 code <0293> 8328 NUDTAB EQU >8328 Start of NUD table <0294> 832A VARA EQU >832A Ending display location <0295> 832C PGMPTR EQU >832C Program text pointer (TOKEN) <0296> 832E EXTRAM EQU >832E Line number table pointer <0297> 8330 STLN EQU >8330 Start of line number table <0298> 8332 ENLN EQU >8332 End of line number table <0299> 8334 DATA EQU >8334 Data pointer for READ <0300> 8336 LNBUF EQU >8336 Line table pointer for READ <0301> 8338 INTRIN EQU >8338 Add of intrinsic poly constant <0302> 833A SUBTAB EQU >833A Subprogram symbol table <0303> 833C IOSTRT EQU >833C PAB list/Start of I/O chain <0304> 833E SYMTAB EQU >833E Symbol table pointer <0305> 8340 FREPTR EQU >8340 Free space pointer <0306> 8342 CHAT EQU >8342 Current charater/token <0307> 8343 BASE EQU >8343 OPTION BASE value <0308> 8344 PRGFLG EQU >8344 Program/imperative flag <0309> 8345 FLAG EQU >8345 General 8-bit flag <0310> 8346 BUFLEV EQU >8346 Crunch-buffer destruction leve <0311> 8348 LSUBP EQU >8348 Last subprogram block on stack <0312> * FAC EQU >834A Floating-point ACcurmulator <0313> 834A CCHAR EQU >834A Current character <0314> 834B FAC1 EQU FAC+1 <0315> 834B SPLFLG EQU >834B SPelL out phrase FLaG <0316> 834C FAC2 EQU FAC+2 <0317> 834C AAA EQU FAC+2 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0006 EQUATES ALCS-359 <0318> 834C TOTTIM EQU >834C TOTal wait TIMe <0319> * NOTE: DATAD must follow immediately after TOTTIM. The <0320> * routine STDATA is counting on this fact! <0321> 834D FAC3 EQU FAC+3 <0322> 834D DATAAD EQU >834D Speech DATA ADdress <0323> 834E FAC4 EQU FAC+4 <0324> 834E CCC EQU FAC+4 <0325> 834E FFF EQU FAC+4 <0326> 834F FAC5 EQU FAC+5 <0327> 834F PTLCIL EQU >834F Pointer To Last Character In L <0328> 8350 FAC6 EQU FAC+6 <0329> 8350 BBB EQU FAC+6 <0330> 8350 EEE EQU FAC+6 <0331> 8351 FAC7 EQU FAC+7 <0332> 8351 TIMLEN EQU >8351 TIMe LENgth of timing charact <0333> 8352 FAC8 EQU FAC+8 <0334> 8352 PHADDR EQU >8352 PHrom ADDRess <0335> 8353 FAC9 EQU FAC+9 <0336> 8354 FAC10 EQU FAC+10 <0337> 8354 DDD1 EQU FAC+10 <0338> 8354 TEMP1 EQU >8354 TEMPorary CPU location 1 <0339> 8355 FAC11 EQU FAC+11 <0340> 8356 FAC12 EQU FAC+12 <0341> 8356 FFF1 EQU FAC+12 <0342> 8356 TEMP2 EQU >8356 TEMPorary CPU location 2 <0343> 8357 FAC13 EQU FAC+13 <0344> 8358 FAC14 EQU FAC+14 <0345> 8358 EEE1 EQU FAC+14 <0346> 8358 READ EQU >8358 Address of speech peripheral <0347> * READ byte interface <0348> 8359 FAC15 EQU FAC+15 <0349> 835A FAC16 EQU FAC+16 <0350> 835A WRITE EQU >835A Address of speech peripheral <0351> * WRITE byte interface <0352> 835B FAC17 EQU FAC+17 <0353> * ARG EQU >835C Floating-point ARGument <0354> 835D ARG1 EQU ARG+1 <0355> 835D PHDATA EQU >835D PHrom DATA <0356> 835E ARG2 EQU ARG+2 <0357> 835E PTCBED EQU >835E Ptr To Current Byte Ext Data <0358> 835E INDEX EQU >835E Label or program ID - 8 bytes <0359> 835F ARG3 EQU ARG+3 <0360> 8360 ARG4 EQU ARG+4 <0361> 8360 LENCST EQU >8360 LEN of Current ext data STring <0362> 8361 ARG5 EQU ARG+5 <0363> 8362 ARG6 EQU ARG+6 <0364> 8362 LENWST EQU >8362 LEN of Whole ext data STring <0365> 8364 STRLEN EQU >8364 STRing LENgth <0366> 8364 TEMP4 EQU >8364 <0367> 8366 TEMP5 EQU >8366 <0368> * NOTE: BYTE1, BYTE2, and BYTE3 must be in consecutive memo <0369> * locations, and in the following order for SPGET to <0370> * work! <0371> 8366 BYTE1 EQU >8366 BYTE 1 <0372> 8367 BYTE2 EQU >8367 BYTE 2 <0373> 8368 BYTE3 EQU >8368 BYTE 3 <0374> 8368 TEMP6 EQU >8368 <0375> 8369 SPKSTS EQU >8369 SPeaK StaTus <0376> 836C FPERAD EQU >836C Value stack pointer <0377> * VSPTR EQU >836E Value stack pointer <0378> *********************************************************** <0379> * GPL Status Block <0380> 8372 STACK EQU >8372 STACK FOR DATA <0381> 8373 SUBSTK EQU >8373 SUBROUTINE STACK 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0007 EQUATES ALCS-359 <0382> 8374 KEYBD EQU >8374 KEYBOARD SELCTION <0383> 8375 RKEY EQU >8375 KEY CODE <0384> 8375 SIGNZ EQU >8375 <0385> 8376 EXPZ EQU >8376 Exponent in floating-point <0386> 8376 JOYY EQU >8376 JOYSTICK Y POSITION <0387> 8377 JOYX EQU >8377 JOYSTICK X POSITION <0388> 8378 RANDOM EQU >8378 RANDOM NUMBER GENERATOR <0389> 8379 TIMER EQU >8379 TIMING REGISTER <0390> 837A MOTION EQU >837A NUMBER OF MOVING SPRITES <0391> 837B VDPSTS EQU >837B VDP STATUS REGISTER <0392> 837B VDPSTT EQU >837B VDP STATUS REGISTER <0393> 837C ERCODE EQU >837C STATUS REGISTER <0394> 837D CB EQU >837D Character Buffer <0395> *********************************************************** [0004] *********************************************************** [0005] COPY 'DSK5.MYXB6-B' <0001> 8384 RAMTOP EQU >8384 Highest address in ERAM <0002> * = 0 if ERAM not present <0003> 8386 RAMFRE EQU >8386 Free pointer in the ERAM <0004> 8388 RSTK EQU >8388 Subroutine stack base <0005> * (Starts at >8A) <0006> 8389 RAMFLG EQU >8389 ERAM flag <0007> 8389 GRAMFL EQU >8389 GRAM / VDP flag <0008> 83AF STKMIN EQU >83AF Base of data stack <0009> 83BD STKMAX EQU >83BD Top of data stack <0010> 83C2 GKFLAG EQU >83C2 GKXB flag for PEEK/LOAD VDP/GR <0011> 83CE PRTNFN EQU >83CE Sound - previous tone finished <0012> *********************************************************** <0013> * VDP addresses <0014> 02E0 SCRNBS EQU >02E0 Screen base addr for last lin <0015> 02E2 NLNADD EQU >02E2 New LiNe ADDress <0016> 02FE ENDSCR EQU >02FE END of SCReen address <0017> 0300 SPRSAL EQU >0300 Sprite attribute list <0018> 0371 LODFLG EQU >0371 Auto-boot needed flag <0019> 0372 START EQU >0372 Line to start execution at <0020> * Temporary <0021> 0374 NOTONE EQU >0374 NO-TONE for SIZE in ACCEPT us <0022> * in FLMGRS (4 bytes used) <0023> 0376 SYMBOL EQU >0376 Saved symbol table pointer <0024> 0378 ONECHR EQU >0378 Used for CHRZ <0025> 0379 VRMSND EQU >0379 Sound blocks <0026> 0382 SPGMPT EQU >0382 Saved PGMPTR for continue <0027> 0384 SBUFLV EQU >0384 Saved BUFLEV for contiue <0028> 0386 SEXTRM EQU >0386 Saved EXTRAM for continue <0029> 0388 SAVEVP EQU >0388 Saved VSPRT for continue <0030> 038A ERRLN EQU >038A On-error line pointer <0031> 038C BUFSRT EQU >038C Edit recall start addr (VARW) <0032> 038E BUFEND EQU >038E Edit recall end addr (VARA) <0033> 0390 CSNTMP EQU >0390 Use as temporary stored place <0034> * or CSN TEMPORARY FOR FAC12 <0035> 0392 TABSAV EQU >0392 Saved main symbol table ponte <0036> 0394 AUTTMP EQU >0394 AUTOLD TEMPORARY IN SIDE ERRZ <0037> 0396 SLSUBP EQU >0396 Saved LSUBP for continue <0038> 0398 SFLAG EQU >0398 Saved on-warning/break bits <0039> 039A SSTEMP EQU >039A To save subprogram program ta <0040> 039C SSTMP2 EQU >039C Same as above. Used in SUBPRO <0041> 039E MRGPAB EQU >039E MERGEd temporary for pab ptr <0042> 03A0 RNDX2 EQU >03A0 Random number generator seed <0043> 03A5 RNDX1 EQU >03A5 Random number generator seed <0044> 03AA INPUTP EQU >03AA INPUT TEMPORARY FOR PTR TO PR <0045> 03AA SPNUM EQU >03AA Sprite number temporary, also <0046> * in INPUTP in FLMGR <0047> 03AC ACCVRW EQU >03AC Temoporary used in ERRZZ, als <0048> * used in FLMGRS 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0008 EQUATES ALCS-359 <0049> * or temporary for @VARW, @VARA <0050> 03AE ACCVRA EQU >03AE TRY AGAIN <0051> 03B0 VALIDP EQU >03B0 Use as two values passing fro <0052> * or PTR TO STANDARD STRING IN VAL <0053> 03B2 VALIDL EQU >03B2 VALIDATE code to READL1 <0054> * or Length of string in validate <0055> 03B4 SIZCCP EQU >03B4 SIZE TEMPORARY FOR CCPADR <0056> 03B6 SIZREC EQU >03B6 SIZE TEMPORARY FOR RECLEN <0057> * Also used as temporary in RELO <0058> *---------------------------------------------------------- <0059> * Added 6/8/81 for NOPSCAN feature <0060> 03B7 PSCFG EQU >03B7 <0061> *---------------------------------------------------------- <0062> 03B7 ACCTRY EQU >03B7 ACCEPT "TRY AGAIN" FLAG <0063> 03B8 SIZXPT EQU >03B8 Save XPT in SIZE when "try ag <0064> 03B9 SAPROT EQU >03B9 PROTECTION flag in SAVE <0065> 03BA CSNTP1 EQU >03BA CSN TEMPORARY FOR FAC10 <0066> *---------------------------------------------------------- <0067> * Flag 0: 99/4 console, 5/29/81 <0068> * 1: 99/4A console <0069> 03BB CONFLG EQU >03BB <0070> *---------------------------------------------------------- <0071> 03BC OLDTOP EQU >03BC Temporary used in ERRZZ, also <0072> * or Old top of memory for RELOCA <0073> 03BC CPTEMP EQU >03BC CCPPTR, RECLEN temp in INPUT <0074> 03BE NEWTOP EQU >03BE New top of memory for RELOCA <0075> 03C0 VROAZ EQU >03C0 Temporary roll-out area <0076> 0780 SPRVB EQU >0780 Sprite velocity block. <0077> 0820 CRNBUF EQU >0820 CRuNch BUFfer address <0078> 08BE CRNEND EQU >08BE CRuNch buffer END <0079> 08C0 RECBUF EQU >08C0 Edit RECall BUFfer <0080> 0958 VRAMVS EQU >0958 Default base of value stack <0081> <0082> *********************************************************** <0083> * IMMEDITATE VALUES <0084> 0000 NUMBR EQU >00 NUMERIC validate <0085> 0002 LISTZ EQU >02 <0086> 0003 X2 EQU >03 <0087> 0005 OLDZ EQU >05 <0088> 0006 RESEQZ EQU >06 <0089> 0007 SAVEZ EQU >07 <0090> 0008 MERGEZ EQU >08 <0091> 000A DWNARR EQU >0A <0092> 000B UPARR EQU >0B <0093> 000D CHRTN EQU >0D <0094> 0020 BKGD EQU >20 BACKGROUND CHARACTER <0095> 0060 OFFSET EQU >60 OFFSET FOR VIDEO TABLES <0096> 0065 STRVAL EQU >65 Value in accum. is string val <0097> 0065 STRING EQU >65 String ID # for FAC <0098> *********************************************************** <0099> * Editting command equates & keys or symbols <0100> 0002 BREAK EQU >02 Break key <0101> 0003 DLETE EQU >03 Delete key <0102> 0004 INSRT EQU >04 Insert key <0103> 0006 RECALL EQU >06 Edit-buffer recall <0104> 0007 CLRLN EQU >07 Clear-line key <0105> 0008 BACK EQU >08 Back-space key <0106> 0009 FORW EQU >09 Forward-space key <0107> 000A DOWN EQU >0A Down-arrow key <0108> 000B UPMV EQU >0B Up-arrow key <0109> 001C VWIDTH EQU >1C Screen width (PRINT) <0110> 0020 SPACE EQU >20 Space key <0111> 0022 QUOTE EQU >22 " <0112> 0023 NUMBER EQU >23 # 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0009 EQUATES ALCS-359 <0113> 0024 DOLLAR EQU >24 $ <0114> 007E CURSOR EQU >1E+OFFSET CURSOR <0115> 007F EDGECH EQU >1F+OFFSET EDGE character <0116> 002B PLUS EQU >2B + <0117> 002C COMMAT EQU >2C , <0118> 002D MINUS EQU >2D - <0119> 002D HYPEN EQU >2D + <0120> 002E PERIOD EQU >2E . <0121> 0030 ZERO EQU >30 0 <0122> 0039 NINE EQU >39 9 <0123> 003A COLON EQU >3A : <0124> 003B SEMICO EQU >3B ; <0125> 003C LESS EQU >3C < <0126> 003E GREAT EQU >3E > <0127> 0041 A EQU >41 A <0128> 0046 F EQU >46 F <0129> <0130> *********************************************************** <0131> * PAB offset <0132> 0001 FLG EQU 1 FLAG BYTE ENTRY <0133> 0002 BUF EQU 2 BUFFER ENTRY <0134> 0004 LEN EQU 4 RECORD LENGTH ENTRY <0135> 0005 CHRCNT EQU 5 CHARACTER COUNT <0136> 0006 RNM EQU 6 RECORD NUMBER <0137> 0008 SCR EQU 8 SCREEN OFFSET ENTRY <0138> 0009 NLEN EQU 9 NAME LENGTH <0139> 000A PABLEN EQU 10 ACTUAL PAB LENGTH <0140> *********************************************************** <0141> * BASIC TOKEN TABLE <0142> * EQU >80 spare token <0143> 0081 ELSEZ EQU >81 ELSE <0144> 0082 SSEPZ EQU >82 :: <0145> 0083 TREMZ EQU >83 $ <0146> 0084 IFZ EQU >84 IF <0147> 0085 GOZ EQU >85 GO <0148> 0086 GOTOZ EQU >86 GOTO <0149> 0087 GOSUBZ EQU >87 GOSUB <0150> 0088 RETURZ EQU >88 RETURN <0151> 0089 DEFZ EQU >89 DEF <0152> 008A DIMZ EQU >8A DIM <0153> 008B ENDZ EQU >8B END <0154> 008C FORZ EQU >8C FOR <0155> 008D LETZ EQU >8D LET <0156> 008E BREAKZ EQU >8E BREAK <0157> 008F UNBREZ EQU >8F UNBREAK <0158> 0090 TRACEZ EQU >90 TRACE <0159> 0091 UNTRAZ EQU >91 UNTRACE <0160> 0092 INPUTZ EQU >92 INPUT <0161> 0093 DATAZ EQU >93 DATA <0162> 0094 RESTOZ EQU >94 RESTORE <0163> 0095 RANDOZ EQU >95 RANDOMIZE <0164> 0096 NEXTZ EQU >96 NEXT <0165> 0097 READZ EQU >97 READ <0166> 0098 STOPZ EQU >98 STOP <0167> 0099 DELETZ EQU >99 DELETE <0168> 009A REMZ EQU >9A REM <0169> 009B ONZ EQU >9B ON <0170> 009C PRINTZ EQU >9C PRINT <0171> 009D CALLZ EQU >9D CALL <0172> 009E OPTIOZ EQU >9E OPTION <0173> 009F OPENZ EQU >9F OPEN <0174> 00A0 CLOSEZ EQU >A0 CLOSE <0175> 00A1 SUBZ EQU >A1 SUB <0176> 00A2 DISPLZ EQU >A2 DISPLAY 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0010 EQUATES ALCS-359 <0177> 00A3 IMAGEZ EQU >A3 IMAGE <0178> 00A4 ACCEPZ EQU >A4 ACCEPT <0179> 00A5 ERRORZ EQU >A5 ERROR <0180> 00A6 WARNZ EQU >A6 WARNING <0181> 00A7 SUBXTZ EQU >A7 SUBEXIT <0182> 00A8 SUBNDZ EQU >A8 SUBEND <0183> 00A9 RUNZ EQU >A9 RUN <0184> 00AA LINPUZ EQU >AA LINPUT <0185> * EQU >AB spare token (LIBRARY) <0186> * EQU >AC spare token (REAL) <0187> * EQU >AD spare token (INTEGER) <0188> * EQU >AE spare token (SCRATCH) <0189> * EQU >AF spare token <0190> 00B0 THENZ EQU >B0 THEN <0191> 00B1 TOZ EQU >B1 TO <0192> 00B2 STEPZ EQU >B2 STEP <0193> 00B3 COMMAZ EQU >B3 , <0194> 00B4 SEMICZ EQU >B4 ; <0195> 00B5 COLONZ EQU >B5 : <0196> 00B6 RPARZ EQU >B6 ) <0197> 00B7 LPARZ EQU >B7 ( <0198> 00B8 CONCZ EQU >B8 & (CONCATENATE) <0199> * EQU >B9 spare token <0200> 00BA ORZ EQU >BA OR <0201> 00BB ANDZ EQU >BB AND <0202> 00BC XORZ EQU >BC XOR <0203> 00BD NOTZ EQU >BD NOT <0204> 00BE EQUALZ EQU >BE = <0205> 00BF LESSZ EQU >BF < <0206> 00C0 GREATZ EQU >C0 > <0207> 00C1 PLUSZ EQU >C1 + <0208> 00C2 MINUSZ EQU >C2 - <0209> 00C3 MULTZ EQU >C3 * <0210> 00C4 DIVIZ EQU >C4 / <0211> 00C5 CIRCUZ EQU >C5 ^ <0212> * EQU >C6 spare token <0213> 00C7 STRINZ EQU >C7 QUOTED STRING <0214> 00C8 UNQSTZ EQU >C8 UNQUOTED STRING <0215> 00C8 NUMZ EQU >C8 ALSO NUMERICAL STRING <0216> 00C8 NUMCOZ EQU >C8 ALSO UNQUOTED STRING <0217> 00C9 LNZ EQU >C9 LINE NUMBER CONSTANT <0218> 00CA EOFZ EQU >CA EOF <0219> 00CB ABSZ EQU >CB ABS <0220> 00CC ATNZ EQU >CC ATN <0221> 00CD COSZ EQU >CD COS <0222> 00CE EXPZZ EQU >CE EXP <0223> 00CF INTZ EQU >CF INT <0224> 00D0 LOGZ EQU >D0 LOG <0225> 00D1 SGNZZ EQU >D1 SGN <0226> 00D2 SINZ EQU >D2 SIN <0227> 00D3 SQRZ EQU >D3 SQR <0228> 00D4 TANZ EQU >D4 TAN <0229> 00D5 LENZ EQU >D5 LEN <0230> 00D6 CHRZZ EQU >D6 CHR$ <0231> 00D7 RNDZ EQU >D7 RND <0232> 00D8 SEGZZ EQU >D8 SEG$ <0233> 00D9 POSZ EQU >D9 POS <0234> 00DA VALZ EQU >DA VAL <0235> 00DB STRZZ EQU >DB STR$ <0236> 00DC ASCZ EQU >DC ASC <0237> 00DD PIZ EQU >DD PI <0238> 00DE RECZ EQU >DE REC <0239> 00DF MAXZ EQU >DF MAX <0240> 00E0 MINZ EQU >E0 MIN 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0011 EQUATES ALCS-359 <0241> 00E1 RPTZZ EQU >E1 RPT$ <0242> * EQU >E2 unused <0243> * EQU >E2 unused <0244> * EQU >E3 unused <0245> * EQU >E4 unused <0246> * EQU >E5 unused <0247> * EQU >E6 unused <0248> * EQU >E7 unused <0249> 00E8 NUMERZ EQU >E8 NUMERIC <0250> 00E9 DIGITZ EQU >E9 DIGIT <0251> 00EA UALPHZ EQU >EA UALPHA <0252> 00EB SIZEZ EQU >EB SIZE <0253> 00EC ALLZ EQU >EC ALL <0254> 00ED USINGZ EQU >ED USING <0255> 00EE BEEPZ EQU >EE BEEP <0256> 00EF ERASEZ EQU >EF ERASE <0257> 00F0 ATZ EQU >F0 AT <0258> 00F1 BASEZ EQU >F1 BASE <0259> * EQU >F2 spare token (TEMPORARY) <0260> 00F3 VARIAZ EQU >F3 VARIABLE <0261> 00F4 RELATZ EQU >F4 RELATIVE <0262> 00F5 INTERZ EQU >F5 INTERNAL <0263> 00F6 SEQUEZ EQU >F6 SEQUENTIAL <0264> 00F7 OUTPUZ EQU >F7 OUTPUT <0265> 00F8 UPDATZ EQU >F8 UPDATE <0266> 00F9 APPENZ EQU >F9 APPEND <0267> 00FA FIXEDZ EQU >FA FIXED <0268> 00FB PERMAZ EQU >FB PERMANENT <0269> 00FC TABZ EQU >FC TAB <0270> 00FD NUMBEZ EQU >FD # <0271> 00FE VALIDZ EQU >FE VALIDATE <0272> * EQU >FF ILLEGAL VALUE <0273> *********************************************************** <0274> * ASSEMBLY LANGUAGE SUPPORT FOR 99/4 <0275> * <0276> * LOAD, INIT, PEEK, LINK, CHARPAT JDH 08/21/80 <0277> *********************************************************** <0278> * FORMAT FOR LOAD: <0279> * CALL LOAD open load-directive (comma load-directive) <0280> * close <0281> * load-directive = file-name / address (comma data) <0282> * (null / file-name) <0283> * file-name = string-expression <0284> * address = numeric-expression <0285> * data = numeric-expression <0286> * <0287> * FILE TYPE = FIXED 80, DISPLAY , SEQUENTIAL FILE <0288> * <0289> * FUNCTION: <0290> * LOADS ASSEMBLY LANGUAGE CODE INTO EXPANSION RAM <0291> * ADDRESSES: >2000 - >>3FFF RELOCATING <0292> * RELOCATABLE CODE INTO AVAILABLE MEMORY, ABSOLUTE CODE <0293> * IS LOADED <0294> * INTO ITS ABSOLUTE ADDRESS, ENTRY POINTS ARE DEFINED BY <0295> * 'DEF' STATEMENTS, AND ARE LOADED INTO HIGH END OF ERAM <0296> * <0297> * RELOACATABLE OR ABSOLUTE CODE MAY BE STORED ON A FILE <0298> * 9900 OBJECT CODE FORMAT. <0299> * VALID TAGS = 0, 5, 6, 7, 9, A, B, C, F,: <0300> * TAGS 1, 2, I, M, ARE IGNORED <0301> * THE SYMT OPTION IS NOT SUPPORTED. <0302> * ABSOLUTE CODE MAY BE LOADED DIRECTLY FROM PROGRAM <0303> * BY SPECIFYING AN ADDRESS INSTEAD OF A FILE NAME, <0304> * FOLLOWED BY THE DATA TO BE LOADED (WHICH IS PUT IN THE 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0012 EQUATES ALCS-359 <0305> * RANGE 0 to 255 <0306> * THE RANGE OF THE ADDRESS OR DATA IS LIMITED TO <0307> * 32767 to -32768 <0308> * MULTIPLE DIRECT LOADS CAN BE IN THE SAME LOAD COMMAND <0309> * PROVIDED THEY ARE SEPARATED BY EITHER A FILENAME OR A <0310> * NULL STRING. <0311> * <0312> * MVUP WAS USED TO TRANSFER DATA FROM CPU RAM TO ERAM <0313> * SINCE IT WAS NOT KNOWN AT FIRST THAT THE MOVE <0314> * INSTRUCTION COULD TRANSFER FROM CPU RAM TO ERAM <0315> * (PROVIDED THAT >8300 IS SUBTRACTED FROM THE ADDRESSES) <0316> *********************************************************** <0317> ******************* LINKAGE AND HEADER ******************** <0318> C000 AA BYTE >AA <0319> C001 00,00,00 BYTE 0,0,0 <0320> C004 00,00,00 BYTE 0,0,0,0,0,0 C007 00,00,00 <0321> C00A 00,00 DATA 0 <0322> C00C 00,00,00 BYTE 0,0,0,0 C00F 00 <0323> C010 C0,19 LINK1 DATA LINK2 <0324> C012 04,4C,49 STRI 'LINK' C015 4E,4B <0325> C017 C3,25 DATA LINKIT <0326> C019 C0,22 LINK2 DATA LINK3 <0327> C01B 04,4C,4F STRI 'LOAD' C01E 41,44 <0328> C020 C0,40 DATA LOAD <0329> C022 C0,2B LINK3 DATA LINK4 <0330> C024 04,49,4E STRI 'INIT' C027 49,54 <0331> C029 C2,BA DATA INIT <0332> * GKXB new entry point for PEEK <0333> C02B C0,34 LINK4 DATA LINK5 <0334> C02D 04,50,45 STRI 'PEEK' C030 45,4B <0335> C032 C6,3D DATA GKPEEK <0336> * GKXB new subprograms <0337> C034 C5,F0 LINK5 DATA QTON <0338> C036 07,43,48 STRI 'CHARPAT' C039 41,52,50 C03C 41,54 <0339> C03E C4,34 DATA GETCHR <0340> * LOAD - LDP1 - LDP4 - LDP5 <0341> ** CHKSUM is also used as a flag to test if a file has been <0342> ** opened (so that it gets closed) <0343> ** it is initialized to >0001 and will be changed to some <0344> ** other value if a file is used <0345> C040 BF,02,00 LOAD DST >0001,@CHKSUM {INITIALIZE FILE FLAG} C043 01 <0346> * GKXB Change load routine. Delete check for INIT <0347> * add to clear flag bits. <0348> C044 06,C6,14 CALL GKLOAD <0349> C047 D6,42,B7 GC047 CEQ LPARZ,@CHAT SYNTAX ERROR if no "(" <0350> C04A 45,30 BR ERRSY1 <0351> C04C 0F,79 XML PGMCHR Skip over <0352> * MAIN PARESE LOOP * <0353> * Check for file-name or address <0354> C04E 0F,74 LDP1 XML PARSE <0355> C050 B6 BYTE RPARZ * PARSE up to ")" or "," <0356> C051 D6,4C,65 CEQ STRING,@FAC2 Process file name <0357> C054 60,90 BS LDP2 <0358> * Otherwise it is an address <0359> * Convert address to integer, save in @PC 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0013 EQUATES ALCS-359 <0360> C056 0F,12 XML CFI Convert FAC to integer <0361> C058 D6,54,03 CEQ 3,@FAC10 Check for overflow <0362> C05B 65,29 BS ERRN01 <0363> C05D BD,04,4A DST @FAC,@PC Save in ERAM location pointer <0364> * Check for "," if there then data should folow <0365> * else end of load statement, goto LDP5 <0366> C060 D6,42,B3 LDP4 CEQ COMMAZ,@CHAT <0367> C063 40,88 BR LDP5 <0368> * DATA follows or a STRING if no more data <0369> C065 0F,79 XML PGMCHR Skip "," <0370> C067 0F,74 XML PARSE Get data value or string if <0371> * end of data <0372> C069 B6 BYTE RPARZ * Parse up to ")" or "," <0373> C06A D6,4C,65 CEQ STRING,@FAC2 No more data <0374> C06D 60,90 BS LDP2 <0375> * FAC contains a numeric <0376> C06F 0F,12 XML CFI FAC to INTEGER <0377> C071 D6,54,03 CEQ 3,@FAC10 Check for overflow <0378> C074 65,29 BS ERRN01 <0379> * GKXB Code for CPU write moved to LOADDT. Add code to <0380> * check VDP or GRAM bits and write to VDP. <0381> C076 DA,80,C2 CLOG >08,@GKFLAG Check VDP bit C079 08 <0382> C07A 66,8A BS LDGRAM No, check GRAM bit <0383> C07C BC,B0,04 ST @FAC1,V*PC Yes, write to VDP C07F 4B <0384> C080 91,04 DINC @PC Point to next byte <0385> C082 05,C0,60 B LDP4 Continue with LOAD routine <0386> * ????????????????????????????????????????????????????????? <0387> AORG >0088 <0388> * Check for ")" IF there return ELSE SYNTAX ERROR <0389> C088 D6,42,B6 LDP5 CEQ RPARZ,@CHAT Return <0390> C08B 61,E1 BS LDRET <0391> C08D 05,C5,30 B ERRSY1 SYNTAX ERROR <0392> * LDP2 <0393> * Process file name <0394> C090 8E,51 LDP2 CZ @FAC7 Check for null string <0395> C092 61,D2 BS LDNE2 <0396> * GKXB Change 'LOAD FILE' to check for INIT <0397> C094 06,C6,2D CALL GKINIT [0006] *********************************************************** [0007] COPY 'DSK5.MYXB6-C' <0001> *************** LOAD DATA INTO ERAM *********************** <0002> * LOAD FRESTA, FREEND from ERAM <0003> C097 BF,16,20 DST FSLOC,@VARB Source C09A 02 <0004> C09B BF,00,83 DST FRESTA,@VAR0 Destination C09E 08 <0005> C09F BF,5C,00 DST 4,@ARG # of bytes to move C0A2 04 <0006> C0A3 0F,89 XML MVUP Load <0007> * Initialize PC, OFFSET in case of no "0" tag <0008> C0A5 BD,04,08 DST @FRESTA,@PC <0009> C0A8 BD,06,08 DST @FRESTA,@OFFADD Base address for load module <0010> * Read in one record, evaluate the TAG field <0011> * LDRD - LDTG <0012> C0AB BF,02,00 LDRD DST 0,@CHKSUM Clear check sum C0AE 00 <0013> C0AF 06,C2,63 CALL READIT Rear in a record <0014> C0B2 35,00,05 LDTG MOVE 5,V*BUFPNT,@TAG Get TAG & field C0B5 10,B0,0E <0015> C0B8 06,C2,00 CALL LDIPCS Add 5 to BUFPNT, add ASCII <0016> C0BB 05 BYTE 5 * Value of chars. Read to check <0017> * Convert @FIELD to numeric (from ASCII hex value) 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0014 EQUATES ALCS-359 <0018> * Store result: HIGH BYTE to FIELD, LOW BYTE to FIELD+1 <0019> * Convert HIGH BYTE first: @FIELD & @FIELD+1 <0020> * Store result in field <0021> C0BC A6,11,30 SUB >30,@FIELD >30 = "0" <0022> C0BF CE,11,09 CGT 9,@FIELD Subtract ASCII difference <0023> * between "9" and "A" <0024> C0C2 40,C7 BR GC0C7 <0025> C0C4 A6,11,07 SUB 7,@FIELD <0026> C0C7 E2,11,04 GC0C7 SLL 4,@FIELD FIELD=FILED*32 <0027> C0CA A6,12,30 SUB >30,@FIELD+1 <0028> C0CD CE,12,09 CGT 9,@FIELD+1 <0029> C0D0 40,D5 BR GC0D5 <0030> C0D2 A6,12,07 SUB 7,@FIELD+1 <0031> C0D5 A0,11,12 GC0D5 ADD @FIELD+1,@FIELD Add to HIGH BYTE <0032> * Now convert LOW BYTE: @FIELD+2 & @FIELD+3 <0033> * Store result in LOW BYTE of FIELD to FIELD+1 <0034> C0D8 A6,13,30 SUB >30,@FIELD+2 <0035> C0DB CE,13,09 CGT 9,@FIELD+2 <0036> C0DE 40,E3 BR GC0E3 <0037> C0E0 A6,13,07 SUB 7,@FIELD+2 <0038> C0E3 BC,12,13 GC0E3 ST @FIELD+2,@FIELD+1 Store in LOW byte of result <0039> C0E6 E2,12,04 SLL 4,@FIELD+1 FIELD+1 = FIELD+1*32 <0040> C0E9 A6,14,30 SUB >30,@FIELD+3 <0041> C0EC CE,14,09 CGT 9,@FIELD+3 <0042> C0EF 40,F4 BR GC0F4 <0043> C0F1 A6,14,07 SUB 7,@FIELD+3 <0044> C0F4 A0,12,14 GC0F4 ADD @FIELD+3,@FIELD+1 Add to low byte <0045> * Branch to evaluation procedure for TAG <0046> C0F7 A6,10,30 SUB >30,@TAG >30 = "0" <0047> C0FA D2,10,00 CGE 0,@TAG If TAG < "0" ILLEGAL CHAR <0048> C0FD 45,C5 BR ERRUC1 <0049> C0FF CE,10,0A CGT >0A,@TAG TAGS "0" to ":" <0050> C102 61,1C BS GC11C <0051> C104 8A,10 CASE @TAG <0052> C106 41,48 BR TAG0 "0" RELOCATABLE LENGTH <0053> C108 40,B2 BR LDTG IGNORE "1" TAG <0054> C10A 40,B2 BR LDTG IGNORE "2" TAG <0055> C10C 45,C5 BR ERRUC1 No external REF "3" <0056> C10E 45,C5 BR ERRUC1 No external REF "4" <0057> C110 41,5D BR TAG5 "5" relocatable entry DEF <0058> C112 41,60 BR TAG6 "6" Absolute entry DEF <0059> C114 41,92 BR TAG7 "7" check sum <0060> C116 40,B2 BR LDTG "8" ignore check sum <0061> C118 41,9F BR TAG9 "9" Absolute LOAD address <0062> C11A 41,BA BR LDDNE ":" end of file <0063> C11C A6,10,11 GC11C SUB >11,@TAG Subtract offset so <0064> * that "A" is =0 <0065> C11F D2,10,00 CGE 0,@TAG ";" to "@" illegal char <0066> C122 45,C5 BR ERRUC1 <0067> * Skip over "I" tag - 8 char, program ID that follows <0068> C124 D6,10,08 CEQ 8,@TAG <0069> C127 61,56 BS LDTG2 <0070> * Skip over "M" TAG -10 char, program ID that follows <0071> C129 D6,10,0C CEQ 12,@TAG <0072> C12C 41,35 BR LDTG3 <0073> C12E 06,C2,00 CALL LDIPCS <0074> C131 0A BYTE 10 <0075> C132 05,C0,B2 B LDTG <0076> C135 CE,10,05 LDTG3 CGT 5,@TAG TAGS "G" are legal <0077> C138 65,C5 BS ERRUC1 <0078> C13A 8A,10 CASE @TAG <0079> C13C 41,9C BR TAGA "A" RELOCATABLE PROGRAM ADDRE <0080> C13E 41,A8 BR TAGB "B" ABSOLUTE VALUE <0081> C140 41,A5 BR TAGC "C" RELATIVE ADDRESS 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0015 EQUATES ALCS-359 <0082> C142 45,C5 BR ERRUC1 "D" ERROR <0083> C144 45,C5 BR ERRUC1 "E" ERROR - UNDEFINED <0084> C146 40,AB BR LDRD "F" END OF RECORD <0085> * TAG0 to TAGB <0086> * EVALUATE TAG FIELDS <0087> C148 BD,06,08 TAG0 DST @FRESTA,@OFFADD NEW BASE ADDRESS <0088> C14B BD,04,08 DST @FRESTA,@PC NEW PC <0089> C14E A1,08,11 DADD @FIELD,@FRESTA ADD LENGTH TO FIND END OF <0090> * RELOCATABLE PROGRAM WHICH IS <0091> * START OF NEXT PROGRAM <0092> * Make sure we won't run into routine name table now, so we <0093> * don't have to check every time we load a value into ERAM <0094> * routine table must make sure it doesn't run into <0095> * relocatable assembly language code through. <0096> C151 C9,08,0A DCHE @FREEND,@FRESTA OUT OF MEMORY <0097> C154 65,53 BS ERRMF1 <0098> * SKIP OVER PROGRAM ID - 8 BYTES <0099> C156 06,C2,00 LDTG2 CALL LDIPCS <0100> C159 08 BYTE 8 * INC BUFPNT, COMPUTE CHECKSUM <0101> C15A 05,C0,B2 B LDTG <0102> C15D A1,11,06 TAG5 DADD @OFFADD,@FIELD Add starting offset <0103> * TAG6 is an absolute address so do not need to add offset <0104> C160 35,00,06 TAG6 MOVE 6,V*BUFPNT,@INDEX Get symbol name C163 5E,B0,0E <0105> C166 06,C2,00 CALL LDIPCS INC BUPNT, COMPUT CHECKSUM <0106> C169 06 BYTE 6 * We read 6 chars <0107> * Add symbol and its address - stopped in field - to the <0108> * routine entry table. It is put at the end of the table <0109> * (the end of the table is towards the low end of memory) <0110> * Since the table is searched from the end first, if there <0111> * are any duplicate labels the last one entered will have <0112> * precedence over the early one(s). <0113> C16A 97,0A DDECT @FREEND Set to address field <0114> * Load address (stored in field in CPU RAM) into routine <0115> * Name table which is in expansion RAM <0116> C16C BF,16,83 DST FIELD,@VARB Source C16F 11 <0117> C170 BD,00,0A DST @FREEND,@VAR0 Destination <0118> C173 BF,5C,00 DST 2,@ARG # bytes to move C176 02 <0119> C177 0F,89 XML MVUP CPUR RAM to ERAM <0120> * Load symbol into routine name table <0121> C179 A7,0A,00 DSUB 6,@FREEND Set to symbol field C17C 06 <0122> C17D BF,16,83 DST INDEX,@VARB Source C180 5E <0123> C181 BD,00,0A DST @FREEND,@VAR0 Destination <0124> C184 BF,5C,00 DST 6,@ARG Move 6 bytes C187 06 <0125> C188 0F,89 XML MVUP CPU RAM to ERAM <0126> * Check to see if we've run into assembly language code <0127> C18A C9,08,0A DCHE @FREEND,@FRESTA Out of memory <0128> C18D 65,53 BS ERRMF1 <0129> C18F 05,C0,B2 B LDTG If not then continue <0130> *********************************************************** <0131> * ROUTINE NAME TABLE ENTRY <0132> * <0133> * 0 1 2 3 4 5 6 7 <0134> * ----------------------------------- <0135> * FREEND | S | Y | M | B | O | L | ADDRESS | <0136> * (AFTER ENTRY) ----------------------------------- <0137> * FREEND | | | | | | | | <0138> * (BEFORE ENTRY) ----------------------------------- <0139> * 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0016 EQUATES ALCS-359 <0140> * FREEND is initialized to >4000 by INIT, address is at <0141> * a higher memory location then symbol <0142> *********************************************************** <0143> C192 83,11 TAG7 DNEG @FIELD Checksum is 1's compelement <0144> C194 D5,02,11 DCEQ @FIELD,@CHKSUM Check sum error <0145> C197 45,AE BR ERRDE1 <0146> C199 05,C0,B2 B LDTG <0147> C19C A1,11,06 TAGA DADD @OFFADD,@FIELD PC = OFFADD ^ FIELD <0148> * TAG 9 is an absolute address so no need to add offset <0149> C19F BD,04,11 TAG9 DST @FIELD,@PC <0150> C1A2 05,C0,B2 B LDTG <0151> C1A5 A1,11,06 TAGC DADD @OFFADD,@FIELD <0152> * TAG B is an absolute entry so no need to add offset <0153> * Relocatable code is checked to see if it will run into <0154> * is no need to check now. Absolute code can go anywhere. <0155> * <0156> * Load field into expansion RAM using MVUP routine <0157> C1A8 BD,00,04 TAGB DST @PC,@VAR0 Destination <0158> C1AB BF,16,83 DST FIELD,@VARB Source C1AE 11 <0159> C1AF BF,5C,00 DST 2,@ARG Move 2 bytes C1B2 02 <0160> C1B3 0F,89 XML MVUP CPU RAM to ERAM <0161> C1B5 95,04 DINCT @PC We loaded 2 bytes <0162> C1B7 05,C0,B2 B LDTG <0163> ********* END OF LOAD FOR CURRENT FILE ******************** <0164> * <0165> * FRESTA & FREEND are stored in CPU RAM (>8308) <0166> * While loading a file into expansion RAM. <0167> * So if the values of FRESTA or FREEND are to be changed <0168> * then word locations >8308 and >830A must be changed and <0169> * not expansion RAM. <0170> * <0171> * LDDNE - LDNE2 <0172> * <0173> * DONE WITH LOAD <0174> * Put FRESTA, FREEND back into expansion RAM <0175> * If FRESTA is odd then make it even <0176> * so that the next program starts on an even boundry <0177> C1BA DA,09,01 LDDNE CLOG 1,@FRESTA+1 Low byte odd? <0178> C1BD 61,C1 BS GC1C1 <0179> C1BF 91,08 DINC @FRESTA Force to next even boundry <0180> C1C1 BF,16,83 GC1C1 DST FRESTA,@VARB Source C1C4 08 <0181> C1C5 BF,00,20 DST FSLOC,@VAR0 Destination C1C8 02 <0182> C1C9 BF,5C,00 DST 4,@ARG Load 4 bytes C1CC 04 <0183> C1CD 0F,89 XML MVUP CPU RAM to ERAM <0184> C1CF 06,C2,77 CALL CLSIT Close file <0185> * Check for end of load command ")" <0186> C1D2 D6,42,B6 LDNE2 CEQ RPARZ,@CHAT Check for ")" <0187> C1D5 61,E1 BS LDRET <0188> C1D7 D6,42,B3 CEQ COMMAZ,@CHAT Syntax error <0189> C1DA 45,30 BR ERRSY1 <0190> C1DC 0F,79 XML PGMCHR Skip comma <0191> C1DE 05,C0,4E B LDP1 Continue in main loop <0192> *************** LDRET - LDRET2 **************************** <0193> * <0194> * Return to calling routine <0195> C1E1 0F,79 LDRET XML PGMCHR Skip over <0196> * Entry point for INIT <0197> C1E3 06,6A,78 LDRET2 CALL CHKEND Check for end of statement <0198> C1E6 45,30 BR ERRSY1 If not end then syntax error 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0017 EQUATES ALCS-359 <0199> C1E8 06,00,12 CALL RPL Return to caller <0200> ********************** CHKIN ****************************** <0201> * Check for INIT-FLAG = >AA55 <0202> * MOVE ERAM(INITF) to CPU *FAC <0203> C1EB PAGE EQU $ <0204> C1EB BF,00,83 CHKIN DST FAC,@VAR0 Destination C1EE 4A <0205> C1EF BF,16,20 DST INITF,@VARB Source C1F2 06 <0206> C1F3 BF,5C,00 DST 2,@ARG 2 bytes C1F6 02 <0207> C1F7 0F,89 XML MVUP Move it <0208> C1F9 D7,4A,AA DCEQ >AA55,@FAC Syntax error C1FC 55 <0209> C1FD 45,33 BR ERRSYN <0210> * No files have been opened so if there is a syntax error <0211> * goto ERRSYN! <0212> C1FF 00 RTN <0213> *********************** FILE ROUTINES ********************* <0214> *********************************************************** <0215> * INCREMENT BUFFER POINTER by value after call statement <0216> * ADD VALUES READ TO CHECKSUM unless the first character <0217> * is a "7" = >37 , then add only "7" character to checksum <0218> * (other value is the checksum) <0219> * <0220> *************************** LDIPCS ************************ <0221> C200 88,15 LDIPCS FETCH @INDEXC Index = # of bytes read <0222> C202 D6,B0,0E CEQ >37,V*BUFPNT C205 37 <0223> C206 42,13 BR GC213 <0224> C208 A3,02,00 DADD >0037,@CHKSUM Add value of "7" to checksum C20B 37 <0225> C20C A3,0E,00 DADD 5,@BUFPNT 1 for "7", 4 for checksum C20F 05 <0226> C210 05,C2,24 B GC224 <0227> C213 BC,4B,B0 GC213 ST V*BUFPNT,@FAC1 Convert to 2 byte value C216 0E <0228> C217 86,4A CLR @FAC ----------------------------- <0229> C219 A1,02,4A DADD @FAC,@CHKSUM Add char to checksum <0230> C21C 91,0E DINC @BUFPNT <0231> C21E 92,15 DEC @INDEXC Do it index # of times <0232> C220 8E,15 CZ @INDEXC <0233> C222 42,13 BR GC213 <0234> C224 00 GC224 RTN <0235> ********************** OPENIT ***************************** <0236> C225 BD,0C,50 OPENIT DST @FAC6,@BYTES Store actual spec length <0237> C228 A3,0C,00 DADD PABLEN+80,@BYTES Add in the PAB length and C22B 5A <0238> * buffer length <0239> C22C 0F,77 XML VPUSH Push possible temp string <0240> C22E 0F,71 XML GETSTR and try to allocate space <0241> C230 0F,78 XML VPOP Restore original string data <0242> * <0243> * THE FOLLOWING VARIABLES CONTAIN IMPORTANT INFO <0244> * <0245> * FAC4, FAC5 Start address of original device specific <0246> * FAC6, FAC7 Length of original device specifications <0247> * SREF Location of PAB in VDP memory <0248> * BYTES Length of entire PAB including specificat <0249> C232 34,50,E0 MOVE @FAC6,V*FAC4,V@PABLEN(@SREF) C235 0A,1C,B0 C238 4E <0250> C239 86,B0,1C CLR V*SREF Clear the entire PAB <0251> C23C 35,00,09 MOVE PABLEN-1,V*SREF,V@1(@SREF) 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0018 EQUATES ALCS-359 C23F E0,01,1C C242 B0,1C <0252> C244 BC,E0,09 ST @FAC7,V@NLEN(@SREF) Copy specifications length C247 1C,51 <0253> C249 BE,E0,08 ST >60,V@SCR(@SREF) Screen offset C24C 1C,60 <0254> C24E BE,E0,01 ST 4,V@FLG(@SREF) Dis, fix, seq, input C251 1C,04 <0255> C253 A1,50,1C DADD @SREF,@FAC6 Calculate the address of <0256> C256 A3,50,00 DADD PABLEN,@FAC6 the buffer C259 0A <0257> C25A BD,E0,02 DST @FAC6,V@BUF(@SREF) Store buffer address in PAB C25D 1C,50 <0258> C25F 06,C2,7B CALL DSRCAL <0259> C262 00 RTN <0260> *********************************************************** <0261> C263 BD,0E,E0 READIT DST V@BUF(@SREF),@BUFPNT INIT buffer pointer C266 02,1C <0262> C268 BE,B0,1C ST 2,V*SREF C26B 02 <0263> C26C BC,E0,05 ST V@LEN(@SREF),V@CHRCNT(@SREF) C26F 1C,E0,04 C272 1C <0264> C273 06,C2,7B CALL DSRCAL <0265> C276 00 RTN <0266> ************************* CLSIT *************************** <0267> C277 BE,B0,1C CLSIT ST 1,V*SREF Prepare to close C27A 01 <0268> ******************** DSRCAL - DSKERR ********************** <0269> C27B BD,56,1C DSRCAL DST @SREF,@FAC12 Compute start address of spec <0270> C27E A3,56,00 DADD NLEN,@FAC12 Ready to call DSR routine C281 09 <0271> C282 06,00,10 CALL DSR Call DSR thourgh program link <0272> C285 08 BYTE 8 * Type = DSR (8) <0273> C286 62,90 BS DSKERR Couldn't find the DSR <0274> C288 DA,E0,01 CLOG >E0,V@FLG(@SREF) Set condition bit if no error C28B 1C,E0 <0275> C28D 42,90 BR DSKERR <0276> C28F 00 RTN <0277> C290 BD,04,40 DSKERR DST @FREPTR,@PABPTR Set up dummy PAB <0278> C293 A7,04,00 DSUB 6,@PABPTR Make it standard size C296 06 <0279> C297 BD,E0,04 DST V*SREF,V@4(@PABPTR) Store error code C29A 04,B0,1C <0280> C29D 06,C2,A4 CALL CLSNOE Close File <0281> C2A0 06,6A,84 CALL ERRZZ Issue I/O error <0282> C2A3 24 BYTE 36 * <0283> ********************** CLSNOE ***************************** <0284> * Try to close the current file <0285> * Ignore any errors from the closing of the file. <0286> * Since the PAB is not in the normal PAB list <0287> * then we have to close the file in the load routine. <0288> * ERRZZ will close the rest of the files. <0289> * <0290> ** CLOSE IT ONLY IF IT HAS BEEN OPENED <0291> C2A4 D7,02,00 CLSNOE DCEQ 1,@CHKSUM Check file flag C2A7 01 <0292> C2A8 62,B9 BS GC2B9 <0293> C2AA BE,B0,1C ST 1,V*SREF Store close file code C2AD 01 <0294> C2AE BD,56,1C DST @SREF,@FAC12 Compute start address of spec <0295> C2B1 A3,56,00 DADD NLEN,@FAC12 Ready to CALL DSR C2B4 09 <0296> C2B5 06,00,10 CALL DSR CALL DSR through program link 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0019 EQUATES ALCS-359 <0297> C2B8 08 BYTE 8 * "8" is type of DSR <0298> C2B9 00 GC2B9 RTN <0299> *********************************************************** <0300> * INIT JDH 9/02/80 <0301> *********************************************************** <0302> * Check if expansion RAM present <0303> * Load support into expansion RAM from GROM <0304> C2BA 8E,80,84 INIT CZ @RAMTOP If no ERAM, SYNTAX ERROR <0305> C2BD 65,33 BS ERRSYN <0306> ** Load Assembly header, support routines ** <0307> * GKXB Correct INIT routine. <0308> C2BF 31,04,EA MOVE >04EA,G@ALCEND,@>2000 C2C2 8F,9D,00 C2C5 98,00 <0309> C2C7 05,C1,E3 B LDRET2 <0310> *********************************************************** <0311> * PEEK INSTRUCTION JDH 9/04/80 <0312> *********************************************************** <0313> * <0314> * FORMAT: <0315> * CALL PEEK open address (comma numeric-variable) * close <0316> * FUNCTION: <0317> * RETURNS THE VALUE AT address IN ERAM INTO numeric-variab <0318> * IF MORE THAN ONE numeric-variable IS SPECIFIED THEN <0319> * address IS INCREMENTED AND THE VALUE IN ERAM AT THE NEW <0320> * address IS ASSIGNED TO THE NEXT VARIABLE AND SO ON. <0321> * <0322> C2CA D6,42,B7 PEEK CEQ LPARZ,@CHAT Chat = "(" <0323> C2CD 45,33 BR ERRSYN <0324> C2CF 0F,79 XML PGMCHR Skip "(" <0325> C2D1 0F,74 XML PARSE Get value of address <0326> C2D3 B6 BYTE RPARZ <0327> C2D4 D6,4C,65 CEQ STRING,@FAC2 Address MUST BE NUMERIC <0328> C2D7 65,43 BS ERRSNM <0329> C2D9 0F,12 XML CFI Convert FAC to integer <0330> C2DB D6,54,03 CEQ 3,@FAC10 Overflow? <0331> C2DE 65,2C BS ERRNO <0332> C2E0 BD,04,4A DST @FAC,@PC Save peek address <0333> C2E3 D6,42,B3 CEQ COMMAZ,@CHAT CHAT = "," ? <0334> C2E6 45,33 BR ERRSYN <0335> C2E8 0F,79 PEEK2 XML PGMCHR Skip "," <0336> * The following check has been put in SYM, 5/26/81 <0337> * If @CHAT >= >80 then ERRSYN (Don't allow token) <0338> C2EA 0F,7A XML SYM Get symbol name <0339> C2EC 0F,7B XML SMB Get value pointer <0340> C2EE 0F,77 XML VPUSH Save FAC on stack for ASSGNV <0341> C2F0 8E,4C CZ @FAC2 Must be numeric <0342> C2F2 45,43 BR ERRSNM <0343> C2F4 86,4A CLR @FAC <0344> C2F6 35,00,07 MOVE 7,@FAC,@FAC1 Clear FAC C2F9 4B,4A <0345> ** GET PEEK VALUE FROM ERAM INTO @FAC1 <0346> * GKXB Change PEEK routine to read VDP/GRAM. Move CPU read <0347> * code to PEEKDT and add code for bite check and VDP <0348> * read. <0349> C2FB DA,80,C2 CLOG >08,@GKFLAG Check VDP bit C2FE 08 <0350> C2FF 66,A9 BS PKGRAM No, check GROM bit <0351> C301 BC,4B,B0 ST V*PC,@FAC1 Yes, read VDP C304 04 <0352> C305 05,C3,08 B GC308 <0353> * ????????????????????????????????????????????????????????? <0354> AORG >0308 <0355> C308 0F,80 GC308 XML CIF Convert FAC to F.P. value 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0020 EQUATES ALCS-359 <0356> C30A 0F,7C XML ASSGNV Assign to numeric-variable <0357> C30C D6,42,B3 CEQ COMMAZ,@CHAT <0358> C30F 43,16 BR PEEK5 <0359> C311 91,04 DINC @PC INC pointer to next ERAM addr <0360> C313 05,C2,E8 B PEEK2 <0361> * CHECK FOR ")" AND END OF STATEMENT <0362> * IF ALL OK, THEN RETURN TO CALLER <0363> * GETCHR ALSO RETURNS TO HERE <0364> C316 D6,42,B6 PEEK5 CEQ RPARZ,@CHAT <0365> C319 45,33 BR ERRSYN <0366> C31B 0F,79 XML PGMCHR Skip "(" <0367> C31D 06,6A,78 CALL CHKEND <0368> C320 45,33 BR ERRSYN <0369> C322 06,00,12 CALL RPL RETURN TO CALLER [0008] *********************************************************** [0009] COPY 'DSK5.MYXB6-D' <0001> *********************************************************** <0002> * LINK INSTRUCTION : SE Sep 1980 <0003> *********************************************************** <0004> * FORMAT: <0005> * CALL LINK("file-name",parameter1,parameter2,...) <0006> * <0007> * LINK ROUTINE READS THE FILE NAME SPECIFIED BY THE USER A <0008> * SAVE THE ADDRESS OF THE NAME FOR LATER USE. THE FILE WIL <0009> * BE SEARCHED IN UTILITY CODE LATER ON. <0010> * <0011> * PARAMETERS ARE PASSED EITHER BY REFERENCE OR BY VALUE. <0012> * NUMERIC OR STRING VARIABLES AND NUMERIC OR STRING ARRAYS <0013> * ARE PASSED BY REFERENCE AND ALL OTHERS INCLUDING A USER <0014> * DEFINED FUNCTION ARE PASSED BY VALUE. <0015> * <0016> * PARAMETER INFORMATION IS STORED IN CPU >8300 THROUGH >83 <0017> * THAT GIVES A PARAMETER TYPE CODE OF EACH PARAMETER. <0018> * CODE 0 ... Numeric expression <0019> * CODE 1 ... String experession <0020> * CODE 2 ... Numeric variable <0021> * CODE 3 ... String variable <0022> * CODE 4 ... Numeric array <0023> * CODE 5 ... String array <0024> * <0025> * IF A PARAMETER IS PASSED AS A NUMERIC EXPRESSION ITSL <0026> * ACTUAL VALUE GETS PUSHED INTO THE VALUE STACK. IN CASE O <0027> * A STRING EXPRESSION , ITS VALUE STACK CONTAINS AN ID(>65 <0028> * POINTER TO THE VALUE SPACE AND ITS LENGTH. IF A PARAMETE <0029> * GETS PASSED AS A REFERENCE THE PRODUCT OF XML SYM AND XM <0030> * SMB IN THE @FAC AREA GETS PUSHED INTO STACK. <0031> * <0032> * AFTER AN ASSEMBLY LANGUAGE SUBPROGRAM IS EXECUTED LINK <0033> * ROUTINE WILL POP THE STACK TO GET RID OF PARAMETER <0034> * INFORMATION. CONTROL WILL BE TRANSFERED TO THE XB MAIN <0035> * PROGRAM AFTERWARDS. <0036> * <0037> *********************************************************** <0038> * CALL LINK program <0039> *********************************************************** <0040> C325 06,C1,EB LINKIT CALL CHKIN Check if INIT has been called <0041> C328 BD,10,6E DST @VSPTR,@OLDS Save VSPTR for later use <0042> C32B D6,42,B7 CEQ LPARZ,@CHAT Check for "(" <0043> C32E 45,33 BR ERRSYN <0044> C330 0F,79 XML PGMCHR Advance program pointer <0045> C332 0F,74 XML PARSE Get the routine name. <0046> C334 B6 BYTE RPARZ * Read up to ")" <0047> C335 D6,4C,65 CEQ >65,@FAC2 Should be a string <0048> C338 45,9A BR ERRBA 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0021 EQUATES ALCS-359 <0049> C33A 8F,50 DCZ @FAC6 Don't accept null string <0050> C33C 65,9A BS ERRBA <0051> C33E C6,51,06 CH 6,@FAC7 Should be less then 6 char <0052> C341 65,9A BS ERRBA <0053> C343 0F,77 XML VPUSH Push to make it semi-permanen <0054> C345 86,12 CLR @COUNT Initialize parameter counter <0055> *********************************************************** <0056> * PARAMETERS get evaluated here <0057> *********************************************************** <0058> C347 D6,42,B6 PAR01 CEQ RPARZ,@CHAT No arg. So execute it <0059> C34A 64,05 BS EXE01 <0060> C34C D6,42,B3 CEQ COMMAZ,@CHAT Should have a comma <0061> C34F 45,33 BR ERRSYN <0062> C351 BD,22,2C DST @PGMPTR,@ERRCOD Save text pointer <0063> C354 0F,79 XML PGMCHR Get the character <0064> C356 CA,42,80 CHE >80,@CHAT Must be an expression <0065> C359 63,C7 BS VAL01 <0066> * If CHAT = LPARZ then pass by expression <0067> C35B 06,C4,2C CALL CLRFAC Clear FAC entry for SYM <0068> C35E 0F,7A XML SYM Read in the symbol table info <0069> * After XML SYM @FAC area contains a pointer to symbo table <0070> * Below statement checks if it is a UDF. <0071> C360 DA,B0,4A CLOG >40,V*FAC Pass by value C363 40 <0072> C364 43,C7 BR VAL01 <0073> C366 D6,42,B3 CEQ COMMAZ,@CHAT Pass by reference <0074> C369 63,E5 BS REF01 <0075> C36B D6,42,B6 CEQ RPARZ,@CHAT Pass by reference <0076> C36E 63,E5 BS REF01 <0077> C370 D6,42,B7 CEQ LPARZ,@CHAT An array <0078> C373 63,7C BS ARRAY <0079> C375 CA,42,80 CHE >80,@CHAT Pass by value <0080> C378 63,C7 BS VAL01 <0081> C37A 45,33 BR ERRSYN <0082> *********************************************************** <0083> * ARRAY case gets checked here <0084> *********************************************************** <0085> * Should look like A(,,) etc. <0086> * Stack entry for an array will look like <0087> * +--------------+-------+---+-------------+--------------- <0088> * | Pointer to | >00 | | Pointer to | <0089> * | symbol table | or | | dim info in | <0090> * | entry | >65 | | real v.s. | <0091> * +- FAC --------+ FAC2 -+---+- FAC4 ------+- FAC6 -------- <0092> * <0093> C37C 0F,79 ARRAY XML PGMCHR Get the next character <0094> C37E D6,42,B6 CEQ RPARZ,@CHAT Pass by reference <0095> C381 63,8F BS ARRAY2 <0096> C383 D6,42,B3 CEQ COMMAZ,@CHAT More array information <0097> C386 63,7C BS ARRAY <0098> C388 93,2C DDEC @PGMPTR Adjust the pointer <0099> C38A BE,42,B7 ST LPARZ,@CHAT <0100> C38D 43,E5 BR REF01 Pass by reference <0101> * In array cases the symbol table address gets stored at FA <0102> * area, and the pointer to the value space (dimension info) <0103> * goes into FAC4 <0104> C38F 0F,79 ARRAY2 XML PGMCHR Advance the program pointer <0105> C391 DA,B0,4A CLOG >80,V*FAC Test string bit C394 80 <0106> C395 43,9D BR GC39D <0107> C397 BE,90,12 ST 4,*COUNT Numeric array C39A 04 <0108> C39B 43,A1 BR GC3A1 <0109> C39D BE,90,12 GC39D ST 5,*COUNT String array case 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0022 EQUATES ALCS-359 C3A0 05 <0110> * Check if array is being shared. If it is then go back <0111> * through the linkage to get the actuals symbol table <0112> * pointer. Put the pointer to the value space (dimension in <0113> * into FAC4. <0114> C3A1 DA,B0,4A GC3A1 CLOG >20,V*FAC Shared array? C3A4 20 <0115> C3A5 63,BE BS GC3BE <0116> C3A7 35,00,02 MOVE 2,V@6(@FAC),@FAC4 If so, get pointer C3AA 4E,E0,06 C3AD 4A <0117> C3AE DA,EF,FF CLOG >20,V@-6(@FAC4) Shared also? C3B1 FA,4E,20 <0118> C3B4 63,BC BS GC3BC <0119> C3B6 35,00,02 MOVE 2,V*FAC4,@FAC4 Array is not shared C3B9 4E,B0,4E <0120> C3BC 43,C5 GC3BC BR GC3C5 <0121> C3BE BD,4E,4A GC3BE DST @FAC,@FAC4 Array is not shared <0122> C3C1 A3,4E,00 DADD 6,@FAC4 Point to value space C3C4 06 <0123> C3C5 43,FA GC3C5 BR PUSH <0124> *********************************************************** <0125> * VALUE <0126> * Passing the parameter by value <0127> *********************************************************** <0128> C3C7 BD,2C,22 VAL01 DST @ERRCOD,@PGMPTR Restore program pointer <0129> C3CA 0F,79 XML PGMCHR Skip the first character <0130> C3CC BD,16,0C DST @BYTES,@TEMP In case of passing a string <0131> C3CF 0F,74 XML PARSE Parsing up to comma <0132> C3D1 B6 BYTE RPARZ <0133> C3D2 BD,0C,16 DST @TEMP,@BYTES Restore the value in >0C area <0134> * After parsing @FAC area contains its actual numeric value <0135> * in a numeric case, and the following information in a <0136> * string case. <0137> * +----------------+-----+--+------------+----------------- <0138> * | >001C or | >65 | | Pointer to | Length of string <0139> * | value pointer | | | string | string <0140> * | address | | | | <0141> * +- FAC ----------+-FAC2+--+-FAC4 ------+- FAC6 ---------- <0142> * <0143> C3D5 CE,4C,63 CGT >63,@FAC2 If more then 99 then <0144> C3D8 43,E0 BR GC3E0 <0145> C3DA BE,90,12 ST 1,*COUNT Store flag for string express C3DD 01 <0146> C3DE 43,E3 BR GC3E3 <0147> C3E0 86,90,12 GC3E0 CLR *COUNT Otherwise it is a numeric exp <0148> C3E3 43,FA GC3E3 BR PUSH Push into stack <0149> *********************************************************** <0150> * REFERENCE <0151> * Passing the parameter by reference <0152> *********************************************************** <0153> * Variables, array element and whole array passing. <0154> * <0155> * After SMB @FAC entry shold look like; <0156> * +--------------+------+-----+-------------+-------------- <0157> * | Pointer to | >00 | | Pointer to | <0158> * | symbol table | | | value space | <0159> * | entry | | | | <0160> * +-- FAC -------+ FAC2 +-----+- FAC4 ------+- FAC6 ------- <0161> * for numeric case, and <0162> * +--------------+------+-----+-------------+-------------- <0163> * | Pointer to | >65 | | Pointer to | String <0164> * | value space | | | string | length <0165> * | entry | | | | 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0023 EQUATES ALCS-359 <0166> * +- FAC --------+ FAC2 +-----+- FAC4 ------+- FAC6 ------- <0167> * for a string case. <0168> C3E5 0F,7B REF01 XML SMB Get the location <0169> C3E7 CA,42,B8 CHE >B8,@CHAT Pass array expression <0170> C3EA 63,C7 BS VAL01 <0171> C3EC 8E,4C CZ @FAC2 <0172> C3EE 43,F6 BR GC3F6 <0173> C3F0 BE,90,12 ST 2,*COUNT Must be a numeric variable C3F3 02 <0174> C3F4 43,FA BR PUSH <0175> C3F6 BE,90,12 GC3F6 ST 3,*COUNT Must be a string variable C3F9 03 <0176> *********************************************************** <0177> * PUSH routine <0178> * Pushes @FAC entry into a value stack. <0179> *********************************************************** <0180> C3FA 90,12 PUSH INC @COUNT <0181> C3FC CE,12,10 CGT 16,@COUNT Too many parameters <0182> C3FF 65,9A BS ERRBA <0183> C401 0F,77 XML VPUSH <0184> C403 43,47 BR PAR01 Get the next argument. <0185> *********************************************************** <0186> * EXECUTE routine <0187> * Restore file name info transfer control over to ALC <0188> *********************************************************** <0189> C405 BE,4A,20 EXE01 ST >20,@FAC Store blank in the FAC area. <0190> C408 35,00,05 MOVE 5,@FAC,@FAC1 C40B 4B,4A <0191> C40D 35,00,04 MOVE 4,V@12(@OLDS),@STORE Get the file name info C410 14,E0,0C C413 10 <0192> C414 34,16,4A MOVE @STORE+2,V*STORE,@FAC Move to FAC C417 B0,14 <0193> C419 87,22 DCLR @ERRCOD Clear program pointer for <0194> * error code <0195> C41B 0F,20 XML ALSUP Go to CPU at >2000 to execute <0196> C41D 64,C9 BS ERROR Error found <0197> * If no error, start checking s <0198> *********************************************************** <0199> * RETURN to the XB main program. <0200> *********************************************************** <0201> C41F C5,6E,10 NOERR DCH @OLDS,@VSPTR Pop the stack <0202> C422 44,29 BR GC429 <0203> C424 0F,78 XML VPOP Pop the stack <0204> C426 05,C4,1F B NOERR <0205> C429 05,A0,1C GC429 B LNKRTN Check ")" and end of statemen <0206> *********************************************************** <0207> * SUBROUTINES used in this file. <0208> *********************************************************** <0209> C42C 86,4A CLRFAC CLR @FAC <0210> C42E 35,00,07 MOVE 7,@FAC,@FAC1 C431 4B,4A <0211> C433 00 RTN <0212> *********************************************************** <0213> * CHARPAT ROUTINE 99/4A - JDH 10/01/80 <0214> *********************************************************** <0215> * <0216> * FORMAT: <0217> * CALL CHARPAT open (numeric expression, string expression <0218> * <0219> * FUNCTION: <0220> * RETURNS THE CHARACTER DEFINITION PATTERN FOR CHARACTER <0221> * NUMBER INTO <0222> * 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0024 EQUATES ALCS-359 <0223> ******************* GETCHR - GETCHR2*********************** <0224> C434 D6,42,B7 GETCHR CEQ LPARZ,@CHAT <0225> C437 45,33 BR ERRSYN <0226> C439 0F,79 GCHR2 XML PGMCHR <0227> C43B 0F,74 XML PARSE <0228> C43D B6 BYTE RPARZ <0229> C43E D6,4C,65 CEQ STRING,@FAC2 Can't be a string <0230> C441 65,43 BS ERRSNM <0231> C443 0F,12 XML CFI Convert FAC to integer <0232> C445 D6,54,03 CEQ 3,@FAC10 Range 32 to 143 <0233> C448 65,9A BS ERRBA <0234> C44A D3,4A,00 DCGE 30,@FAC 30 C44D 1E <0235> C44E 45,9A BR ERRBA <0236> C450 CF,4A,00 DCGT 159,@FAC 159 C453 9F <0237> C454 65,9A BS ERRBA <0238> C456 E3,4A,00 DSLL 3,@FAC 8 bytes / entry so times 8 C459 03 <0239> C45A BF,10,03 DST >0300,@TBLPTR Base of char table less 32*8 C45D 00 <0240> C45E A1,10,4A DADD @FAC,@TBLPTR Add in arg offset <0241> C461 BF,0C,00 DST 16,@BYTES 16 byte string in string spac C464 10 <0242> C465 0F,71 XML GETSTR <0243> C467 BD,12,1C DST @SREF,@STRPTR Save pointer to string <0244> C46A BE,15,08 ST 8,@INDEXC Loop counter <0245> C46D BC,B0,12 GC46D ST V*TBLPTR,V*STRPTR C470 B0,10 <0246> C472 E6,B0,12 SRL 4,V*STRPTR Get rid of low nibble C475 04 <0247> C476 A2,B0,12 ADD >30,V*STRPTR Add ASCII "0" C479 30 <0248> C47A CE,B0,12 CGT >39,V*STRPTR >39 = ASCII "9" C47D 39 <0249> C47E 44,84 BR GCHR3 <0250> C480 A2,B0,12 ADD 7,V*STRPTR Value "A" to "F" C483 07 <0251> C484 91,12 GCHR3 DINC @STRPTR <0252> C486 BC,B0,12 ST V*TBLPTR,V*STRPTR C489 B0,10 <0253> C48B B2,B0,12 AND >0F,V*STRPTR C48E 0F <0254> C48F A2,B0,12 ADD >30,V*STRPTR Add ASCII "0" C492 30 <0255> C493 CE,B0,12 CGT >39,V*STRPTR C496 39 <0256> C497 44,9D BR GCHR4 <0257> C499 A2,B0,12 ADD 7,V*STRPTR Value "A" to "F" C49C 07 <0258> C49D 91,10 GCHR4 DINC @TBLPTR <0259> C49F 91,12 DINC @STRPTR <0260> C4A1 92,15 DEC @INDEXC <0261> C4A3 8E,15 CZ @INDEXC <0262> C4A5 44,6D BR GC46D <0263> * NOW assign the string just created to the string <0264> * variable following <0265> C4A7 0F,79 XML PGMCHR Skip comma <0266> * The following check has been put in SYM, 5/26/81 <0267> * If CHAT >= >80 then ERRSYN (Do not allow token). <0268> C4A9 0F,7A XML SYM Get symbol table info for next ar <0269> C4AB 0F,7B XML SMB <0270> C4AD 0F,77 XML VPUSH Save on stack for ASSGNV <0271> C4AF D6,4C,65 CEQ STRING,@FAC2 Must be a stirng variable 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0025 EQUATES ALCS-359 <0272> C4B2 45,43 BR ERRSNM <0273> C4B4 BF,4A,00 DST >001C,@FAC Temp string so use SREF as ad C4B7 1C <0274> C4B8 BD,4E,1C DST @SREF,@FAC4 Pointer to string <0275> C4BB BF,50,00 DST 16,@FAC6 String length C4BE 10 <0276> C4BF 0F,7C XML ASSGNV Assign to string variable <0277> C4C1 D6,42,B3 CEQ COMMAZ,@CHAT <0278> C4C4 64,39 BS GCHR2 <0279> C4C6 05,C3,16 B PEEK5 <0280> *********************************************************** <0281> ************** ERROR BRANCH TABLE FOR LINK **************** <0282> *********************************************************** <0283> C4C9 8A,22 ERROR CASE @ERRCOD <0284> C4CB 44,1F BR NOERR <0285> C4CD 44,1F BR NOERR <0286> C4CF 45,2C BR ERRNO 2 Numeric Overflow <0287> C4D1 45,33 BR ERRSYN 3 SYNtax error <0288> C4D3 45,37 BR ERRIBS 4 Illegal after subprogram <0289> C4D5 45,3B BR ERRNQS 5 unmatched quotes <0290> C4D7 45,3F BR ERRNTL 6 Name Too Long <0291> C4D9 45,43 BR ERRSNM 7 String Number Mismatch <0292> C4DB 45,47 BR ERROBE 8 Option Base Error <0293> C4DD 45,4B BR ERRMUV 9 iMproperly Used name <0294> C4DF 45,4F BR ERRIM 10 IMage error <0295> C4E1 45,56 BR ERRMEM 11 MEMory full <0296> C4E3 45,5A BR ERRSO 12 Stack Overflow <0297> C4E5 45,5E BR ERRNWF 13 Next Without For <0298> C4E7 45,62 BR ERRFNN 14 For Next Nesting <0299> C4E9 45,66 BR ERRSNS 15 must be in subprogram <0300> C4EB 45,6A BR ERRRSC 16 Recursive Subprogram Call <0301> C4ED 45,6E BR ERRMS 17 Missing Subend <0302> C4EF 45,72 BR ERRRWG 18 Return Without Gosub <0303> C4F1 45,76 BR ERRST 19 String Truncated <0304> C4F3 45,7A BR ERRBS 20 Bad Subscript <0305> C4F5 45,7E BR ERRSSL 21 Speech String too Long <0306> C4F7 45,82 BR ERRLNF 22 Line Not Found <0307> C4F9 45,86 BR ERRBLN 23 Bad Line Number <0308> C4FB 45,8A BR ERRLTL 24 Line Too Long <0309> C4FD 45,8E BR ERRCC 25 Can't Continue <0310> C4FF 45,92 BR ERRCIP 26 Command Illegal in Program <0311> C501 45,96 BR ERROLP 27 Only Legal in a Program <0312> C503 45,9A BR ERRBA 28 Bad Argument <0313> C505 45,9E BR ERRNPP 29 No Program Present <0314> C507 45,A2 BR ERRBV 30 Bad Value <0315> C509 45,A6 BR ERRIAL 31 Incorrect Argument List <0316> C50B 45,AA BR ERRINP 32 INPut error <0317> C50D 45,B1 BR ERRDAT 33 DATa error <0318> C50F 45,B5 BR ERRFE 34 File Error <0319> C511 44,1F BR NOERR <0320> C513 45,B9 BR ERRIO 36 I/O error <0321> C515 45,BD BR ERRSNF 37 Subprogram Not Found <0322> C517 44,1F BR NOERR <0323> C519 45,C1 BR ERRPV 39 Protected Violation <0324> C51B 45,C8 BR ERRIVN 40 unrecognized Character <0325> C51D 45,CC BR WRNNO 41 Numeric Number Overflow <0326> C51F 45,D2 BR WRNST 42 String Truncated <0327> C521 45,D8 BR WRNNPP 43 No Program Present <0328> C523 45,DE BR WRNINP 44 INPut error <0329> C525 45,E4 BR WRNIO 45 I/O error <0330> C527 45,EA BR WRNLNF 46 Line Not Found <0331> *********************************************************** <0332> **************** ERROR HANDLING SECTION ******************* <0333> *********************************************************** 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0026 EQUATES ALCS-359 <0334> C529 06,C2,A4 ERRN01 CALL CLSNOE * ENTRY FOR LOAD <0335> C52C 06,6A,84 ERRNO CALL ERRZZ * Numeric Overflow <0336> C52F 02 BYTE 2 <0337> C530 06,C2,A4 ERRSY1 CALL CLSNOE * ENTRY FOR LOAD <0338> C533 06,6A,84 ERRSYN CALL ERRZZ * SYNtax error <0339> C536 03 BYTE 3 <0340> C537 06,6A,84 ERRIBS CALL ERRZZ * Illegal after subprogram <0341> C53A 04 BYTE 4 <0342> C53B 06,6A,84 ERRNQS CALL ERRZZ * uNmatched QuoteS <0343> C53E 05 BYTE 5 <0344> C53F 06,6A,84 ERRNTL CALL ERRZZ * Name Too Long <0345> C542 06 BYTE 6 <0346> C543 06,6A,84 ERRSNM CALL ERRZZ * String Number Mismatch <0347> C546 07 BYTE 7 <0348> C547 06,6A,84 ERROBE CALL ERRZZ * Option Base Error <0349> C54A 08 BYTE 8 <0350> C54B 06,6A,84 ERRMUV CALL ERRZZ * Improperly used name <0351> C54E 09 BYTE 9 <0352> C54F 06,6A,84 ERRIM CALL ERRZZ * Image Error <0353> C552 0A BYTE 10 <0354> C553 06,C2,A4 ERRMF1 CALL CLSNOE * ENTRY FOR LOAD <0355> C556 06,6A,84 ERRMEM CALL ERRZZ * MEMory full <0356> C559 0B BYTE 11 <0357> C55A 06,6A,84 ERRSO CALL ERRZZ * Stack Overflow <0358> C55D 0C BYTE 12 <0359> C55E 06,6A,84 ERRNWF CALL ERRZZ * Next Without For <0360> C561 0D BYTE 13 <0361> C562 06,6A,84 ERRFNN CALL ERRZZ * For-Next Nesting <0362> C565 0E BYTE 14 <0363> C566 06,6A,84 ERRSNS CALL ERRZZ * must be in subprogram <0364> C569 0F BYTE 15 <0365> C56A 06,6A,84 ERRRSC CALL ERRZZ * Recursive Subprogram Call <0366> C56D 10 BYTE 16 <0367> C56E 06,6A,84 ERRMS CALL ERRZZ * Missing Subend <0368> C571 11 BYTE 17 <0369> C572 06,6A,84 ERRRWG CALL ERRZZ * Return Without Gosub <0370> C575 12 BYTE 18 <0371> C576 06,6A,84 ERRST CALL ERRZZ * String Truncated <0372> C579 13 BYTE 19 <0373> C57A 06,6A,84 ERRBS CALL ERRZZ * Bad Subscript <0374> C57D 14 BYTE 20 <0375> C57E 06,6A,84 ERRSSL CALL ERRZZ * Speech String too Long <0376> C581 15 BYTE 21 <0377> C582 06,6A,84 ERRLNF CALL ERRZZ * Line Not Found <0378> C585 16 BYTE 22 <0379> C586 06,6A,84 ERRBLN CALL ERRZZ * Bad Line Number <0380> C589 17 BYTE 23 <0381> C58A 06,6A,84 ERRLTL CALL ERRZZ * Line Too Long <0382> C58D 18 BYTE 24 <0383> C58E 06,6A,84 ERRCC CALL ERRZZ * Can't Continue <0384> C591 19 BYTE 25 <0385> C592 06,6A,84 ERRCIP CALL ERRZZ * Command Illegal in Program <0386> C595 1A BYTE 26 <0387> C596 06,6A,84 ERROLP CALL ERRZZ * Only Legal in a Program <0388> C599 1B BYTE 27 <0389> C59A 06,6A,84 ERRBA CALL ERRZZ * Bad Argument <0390> C59D 1C BYTE 28 <0391> C59E 06,6A,84 ERRNPP CALL ERRZZ * No Program Present <0392> C5A1 1D BYTE 29 <0393> C5A2 06,6A,84 ERRBV CALL ERRZZ * Bad Value <0394> C5A5 1E BYTE 30 <0395> C5A6 06,6A,84 ERRIAL CALL ERRZZ * Incorrect Argument List <0396> C5A9 1F BYTE 31 <0397> C5AA 06,6A,84 ERRINP CALL ERRZZ * INPut error 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0027 EQUATES ALCS-359 <0398> C5AD 29 BYTE 41 <0399> C5AE 06,C2,A4 ERRDE1 CALL CLSNOE * ENTRY FOR LOAD <0400> C5B1 06,6A,84 ERRDAT CALL ERRZZ * DATa error / Checksum error <0401> C5B4 21 BYTE 33 <0402> C5B5 06,6A,84 ERRFE CALL ERRZZ * File Error <0403> C5B8 22 BYTE 34 <0404> C5B9 06,6A,84 ERRIO CALL ERRZZ * I/O error <0405> C5BC 24 BYTE 36 <0406> C5BD 06,6A,84 ERRSNF CALL ERRZZ * Subprogram Not Found <0407> C5C0 25 BYTE 37 <0408> C5C1 06,6A,84 ERRPV CALL ERRZZ * Protection Violation <0409> C5C4 27 BYTE 39 <0410> C5C5 06,C2,A4 ERRUC1 CALL CLSNOE * ENTRY FOR LOAD <0411> C5C8 06,6A,84 ERRIVN CALL ERRZZ * Unrecognized character / il <0412> C5CB 28 BYTE 40 <0413> C5CC 06,6A,82 WRNNO CALL WARNZZ * Numeric Overflow <0414> C5CF 02 BYTE 2 <0415> C5D0 44,1F BR NOERR <0416> C5D2 06,6A,82 WRNST CALL WARNZZ * String Truncated <0417> C5D5 13 BYTE 19 <0418> C5D6 44,1F BR NOERR <0419> C5D8 06,6A,82 WRNNPP CALL WARNZZ * No Program Present <0420> C5DB 1D BYTE 29 <0421> C5DC 44,1F BR NOERR <0422> C5DE 06,6A,82 WRNINP CALL WARNZZ * INPut Error <0423> C5E1 20 BYTE 32 <0424> C5E2 44,1F BR NOERR <0425> C5E4 06,6A,82 WRNIO CALL WARNZZ * I/O error <0426> C5E7 23 BYTE 35 <0427> C5E8 44,1F BR NOERR <0428> C5EA 06,6A,82 WRNLNF CALL WARNZZ * Line Not Found <0429> C5ED 26 BYTE 38 <0430> C5EE 44,1F BR NOERR [0010] *********************************************************** [0011] COPY 'DSK5.MYXB6-E' <0001> *********************************************************** <0002> * RXB move INIT code to >9800 <0003> *********************************************************** <0004> * <0005> * CALL QUITON routine <0006> * <0007> C5F0 C6,02 QTON DATA QTOFF <0008> C5F2 06,51,55 STRI 'QUITON' C5F5 49,54,4F C5F8 4E <0009> C5F9 C5,FB DATA QTON1 <0010> C5FB B2,80,C2 QTON1 AND >EF,@GKFLAG Reset QUIT bit C5FE EF <0011> C5FF 05,C1,E3 B LDRET2 Return <0012> * <0013> * CALL QUITOFF routine <0014> * <0015> C602 C6,19 QTOFF DATA POKEV <0016> C604 07,51,55 STRI 'QUITOFF' C607 49,54,4F C60A 46,46 <0017> C60C C6,0E DATA QTOFF1 <0018> C60E B6,80,C2 QTOFF1 OR >10,@GKFLAG Set QUIT bit C611 10 <0019> C612 41,E3 BR LDRET2 Return <0020> * <0021> * Set-up for CALL GKLOAD routine <0022> * <0023> C614 B2,80,C2 GKLOAD AND >F0,@GKFLAG Reset flag bits 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0028 EQUATES ALCS-359 C617 F0 <0024> C618 00 RTN Return <0025> * <0026> * POKEV routine <0027> * <0028> C619 C6,44 POKEV DATA PEEKV <0029> C61B 05,50,4F STRI 'POKEV' C61E 4B,45,56 <0030> C621 C6,23 DATA POV <0031> C623 06,C6,54 POV CALL GKSETV Set VDP bit <0032> C626 BF,02,00 DST 1,@CHKSUM For GKLOAD routine C629 01 <0033> C62A 05,C0,47 B GC047 Goto GKLOAD <0034> * <0035> * Check for CALL GKINIT on 'LOAD FILE' <0036> * <0037> C62D 0F,77 GKINIT XML VPUSH Save FAC <0038> C62F 06,C1,EB CALL CHKIN Check for GKINIT <0039> C632 0F,78 XML VPOP Restore FAC <0040> C634 DA,80,C2 CLOG >C,@GKFLAG Error if POKEG or POKEV C637 0C <0041> C638 45,33 BR ERRSYN <0042> C63A 05,C2,25 B OPENIT Open the file <0043> * <0044> * New entry point for CALL PEEK, <0045> * clears flag bits. <0046> * <0047> C63D B2,80,C2 GKPEEK AND >F0,@GKFLAG C640 F0 <0048> C641 05,C2,CA B PEEK <0049> * <0050> * PEEKV routine <0051> * <0052> C644 C6,66 PEEKV DATA PEEKG <0053> C646 05,50,45 STRI 'PEEKV' C649 45,4B,56 <0054> C64C C6,4E DATA PKV <0055> C64E 06,C6,54 PKV CALL GKSETV Set VDP bit <0056> C651 05,C2,CA B PEEK Use PEEK routine <0057> * <0058> * Set flag bit for VDP read & write <0059> * <0060> C654 B2,80,C2 GKSETV AND >F0,@GKFLAG Reset both bits C657 F0 <0061> C658 B6,80,C2 OR 8,@GKFLAG Set VDP bit C65B 08 <0062> C65C 00 RTN Return <0063> * <0064> * Set flag bit for GROM read & write <0065> * <0066> C65D B2,80,C2 GKSETG AND >F0,@GKFLAG Reset both bits C660 F0 <0067> C661 B6,80,C2 OR 4,@GKFLAG Set GROM bit C664 04 <0068> C665 00 RTN Return <0069> * <0070> * PEEKG routine <0071> * <0072> C666 C6,76 PEEKG DATA POKEG <0073> C668 05,50,45 STRI 'PEEKG' C66B 45,4B,47 <0074> C66E C6,70 DATA PKG <0075> C670 06,C6,5D PKG CALL GKSETG Set flag bit <0076> C673 05,C2,CA B PEEK Use PEEK routine 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0029 EQUATES ALCS-359 <0077> * <0078> * POKEG routine <0079> * <0080> C676 C6,C4 POKEG DATA CATLOG <0081> C678 05,50,4F STRI 'POKEG' C67B 4B,45,47 <0082> C67E C6,80 DATA POG <0083> C680 06,C6,5D POG CALL GKSETG Set flag bit <0084> C683 BF,02,00 DST 1,@CHKSUM For LOAD routine C686 01 <0085> C687 05,C0,47 B GC047 Use LOAD routine <0086> * <0087> * Routine to write to GRAM <0088> * <0089> C68A DA,80,C2 LDGRAM CLOG 4,@GKFLAG Check GROM bit C68D 04 <0090> C68E 66,9C BS LOADDT No, CPU load <0091> C690 2D,00,01 MOVE 1,@FAC1,G@0(@PC) Write to GRAM C693 00,00,04 C696 4B <0092> C697 91,04 DINC @PC Point to next byte <0093> C699 05,C0,60 B LDP4 Continue <0094> * <0095> * Relocated data from GKLOAD routine. <0096> * <0097> C69C 35,00,01 LOADDT MOVE 1,@FAC1,@0(@PC) Read byte C69F CF,7D,00 C6A2 04,4B <0098> C6A4 91,04 DINC @PC INC ERAM address <0099> C6A6 05,C0,60 B LDP4 Continue with next byte <0100> * <0101> * Routine to read GRAM/GROM <0102> * <0103> C6A9 DA,80,C2 PKGRAM CLOG 4,@GKFLAG Check flag C6AC 04 <0104> C6AD 66,B9 BS PEEKDT No, CPU peek <0105> C6AF 33,00,01 MOVE 1,G@0(@PC),@FAC1 Yes, read GRAM C6B2 4B,00,00 C6B5 04 <0106> C6B6 05,C3,08 B GC308 Continue <0107> * <0108> * Relocated data for CPU PEEK <0109> * <0110> C6B9 35,00,01 PEEKDT MOVE 1,@0(@PC),@FAC1 Read byte C6BC 4B,CF,7D C6BF 00,04 <0111> C6C1 05,C3,08 B GC308 Continue <0112> *********************************************************** <0113> * <0114> * Disk catalog routine <0115> * <0116> C6C4 D1,A9 CATLOG DATA POKER <0117> C6C6 03,43,41 STRI 'CAT' CALL CAT(path) C6C9 54 <0118> C6CA C6,CC DATA GKCAT <0119> * <0120> * <0121> * X-BASIC DEVICE CATALOGER <0122> * Accessed with a CALL <0123> * PAB is installed in crunch buffer area <0124> * <0125> * D.C. Warren 12/17/85 <0126> * with modifications by Danny Michael, Jan. 86 <0127> * 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0030 EQUATES ALCS-359 <0128> * <0129> C6CC 06,D1,00 GKCAT CALL GLPARZ Do we have a '(' ? <0130> C6CF 06,D5,41 GKCATA CALL DSKNAM Get path <0131> * <0132> * Set up PAB at V>8C0 <0133> * Put disk information on the screen <0134> * <0135> C6D2 07,80 ALL >80 Clear screen <0136> C6D4 BD,16,50 DST @FAC6,@VARB Get name length <0137> C6D7 BF,0C,00 DST 150,@BYTES Length of CAT PAB use C6DA 96 <0138> C6DB 0F,71 XML GETSTR Get some string space <0139> C6DD 35,00,96 MOVE 150,V@>08C0,V*SREF Save USER PAB area C6E0 B0,1C,A8 C6E3 C0 <0140> C6E4 31,00,09 MOVE 9,G@GKPABD,V@>08C0 Install PAB C6E7 A8,C0,C7 C6EA 65 <0141> C6EB BC,A8,C9 ST @FAC7,V@>08C9 C6EE 51 <0142> C6EF 34,16,A8 MOVE @VARB,V*FAC4,V@>08CA C6F2 CA,B0,4E <0143> * <0144> * Open Device <0145> * <0146> C6F5 06,C7,50 CALL GKDSRL Link to device <0147> * <0148> * Read first record <0149> * <0150> C6F8 BF,A8,C0 DST >020D,V@>08C0 Make PAB a read C6FB 02,0D <0151> C6FD 06,C7,50 GKCAT2 CALL GKDSRL Link to device <0152> * <0153> C700 BE,02,B9 ST >B9,@AAA1 Y with offset <0154> C703 06,C7,6E CALL GKSCRN Set up header <0155> C706 86,01 CLR @VARV For GKSCRL routine <0156> C708 06,C8,0F GKCATL CALL GKTKEY Check for pause or quit <0157> C70B 67,1A BS GKDONE Stop! <0158> C70D 06,C8,25 CALL GKSCRL Scroll the screen <0159> C710 06,C7,50 CALL GKDSRL Read a record <0160> C713 06,C8,4C CALL GKFNAM Print it on screen <0161> C716 67,1A BS GKDONE If finished <0162> C718 47,08 BR GKCATL Loop <0163> C71A 06,C7,40 GKDONE CALL GKCLSF Close file <0164> C71D D6,42,B3 CEQ COMMAZ,@CHAT Comma? <0165> C720 66,CF BS GKCATA Yes, another drive. <0166> C722 D6,42,B6 CEQ RPARZ,@CHAT Last char a ) ? <0167> C725 45,33 BR ERRSYN No, error <0168> C727 0F,79 XML PGMCHR Parse past ')' <0169> C729 06,6A,78 CALL CHKEND SYNTAX error if not end <0170> C72C 45,33 BR ERRSYN . <0171> C72E 06,00,12 CALL RPL Return to X-BASIC <0172> * <0173> * File error <0174> * <0175> C731 BF,04,08 GKERR DST >08C0-4,@PABPTR Fake a BASIC PAB C734 BC <0176> C735 BD,10,A8 DST V@>08C0,@VAR5 Save error C738 C0 <0177> C739 06,C7,40 CALL GKCLSF Close file <0178> C73C 06,6D,78 CALL G6D78 Return through ERR <0179> C73F 24 BYTE 36 * I/O ERROR XX <0180> * <0181> * 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0031 EQUATES ALCS-359 <0182> * Subroutines <0183> * <0184> * <0185> * Close file <0186> * <0187> C740 BF,A8,C0 GKCLSF DST >010D,V@>08C0 A close operation C743 01,0D <0188> C745 06,C7,5C CALL GKDSR Link to device <0189> C748 35,00,96 MOVE 150,V*SREF,V@>08C0 Restore USER PAB area C74B A8,C0,B0 C74E 1C <0190> C74F 00 RTN Return to caller <0191> * <0192> * DSR LINK with error handling <0193> * <0194> C750 06,C7,5C GKDSRL CALL GKDSR <0195> C753 67,31 BS GKERR Branch on no-device <0196> C755 D6,A8,C1 CEQ >0D,V@>08C1 Check for device errors C758 0D <0197> C759 47,31 BR GKERR . <0198> C75B 00 RTN Return to caller <0199> * <0200> * DSR LINK routine <0201> * <0202> C75C BF,56,08 GKDSR DST >08C9,@FAC12 Name length pointer C75F C9 <0203> C760 06,00,10 CALL >10 Call DSR <0204> C763 08 BYTE 8 * DSR call <0205> C764 01 RTNC Return with COND bit <0206> C765 00,0D,09 GKPABD BYTE 0,>D,9,0,0,0,0,0,0 C768 00,00,00 C76B 00,00,00 <0207> * <0208> * Screen - prints initial screen and disk info <0209> * <0210> C76E 08 GKSCRN FMT <0211> C76F FC,60 SCRO >60 <0212> C771 FE,01 ROW 1 <0213> C773 FF,02 COL 2 <0214> C775 09,44,49 HTEX 'DIRECTORY=' C778 52,45,43 C77B 54,4F,52 C77E 59,3D <0215> C780 FE,02 ROW 2 <0216> C782 FF,02 COL 2 <0217> C784 13,46,72 HTEX 'Free= Used=' C787 65,65,3D C78A 20,20,20 C78D 20,20,20 C790 20,20,20 C793 20,55,73 C796 65,64,3D <0218> C799 FE,16 ROW 22 <0219> C79B FF,03 COL 3 <0220> C79D 1B,46,69 HTEX 'Filename Size Type P' C7A0 6C,65,6E C7A3 61,6D,65 C7A6 20,20,53 C7A9 69,7A,65 C7AC 20,20,20 C7AF 20,54,79 C7B2 70,65,20 C7B5 20,20,20 C7B8 20,50 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0032 EQUATES ALCS-359 <0221> C7BA A0 ROW+ 1 <0222> C7BB FF,02 COL 2 <0223> C7BD 1C,2D,2D HTEX '---------- ---- ----------- -' C7C0 2D,2D,2D C7C3 2D,2D,2D C7C6 2D,2D,20 C7C9 2D,2D,2D C7CC 2D,20,2D C7CF 2D,2D,2D C7D2 2D,2D,2D C7D5 2D,2D,2D C7D8 2D,20,2D <0224> C7DB FB FEND <0225> C7DC 06,C9,39 CALL GKDSTR Get string into FAC <0226> C7DF 8E,4B CZ @FAC+1 Skip if zero length <0227> C7E1 67,ED BS GKCAT3 <0228> C7E3 08 FMT <0229> C7E4 FC,60 SCRO >60 <0230> C7E6 FE,01 ROW 1 <0231> C7E8 FF,0D COL 13 <0232> C7EA E9,4C HSTR 10,@FAC+2 <0233> C7EC FB FEND <0234> C7ED A1,10,4A GKCAT3 DADD @FAC,@VAR5 Go to next field <0235> C7F0 A3,10,00 DADD 19,@VAR5 Continue to last field C7F3 13 <0236> C7F4 BF,14,00 DST 73,@VAR9 Set up screen addr C7F7 49 <0237> C7F8 06,C9,13 CALL GKDNUM Display available space <0238> * Display used space <0239> C7FB A7,10,00 DSUB 9,@VAR5 Point to formatted space C7FE 09 <0240> C7FF 35,00,08 MOVE 8,V*VAR5,@ARG Move it to ARG C802 5C,B0,10 <0241> C805 0F,07 XML FSUB Develop used value <0242> C807 BF,14,00 DST 88,@VAR9 Set up screen addr C80A 58 <0243> C80B 06,C9,19 CALL GKDNU1 Display used space <0244> C80E 00 RTN Return <0245> * <0246> * Test for space and FCTN 4 <0247> * <0248> C80F 03 GKTKEY SCAN Scan the keyboard <0249> C810 48,1F BR GKTKE1 Continue if no new key <0250> C812 D6,75,20 CEQ SPACE,@RKEY SPACE key? <0251> C815 48,20 BR GKTKE2 NO! Abort. <0252> C817 03 GKTKE3 SCAN Scan keyboard <0253> C818 48,17 BR GKTKE3 Loop until new key press <0254> C81A D6,75,20 CEQ SPACE,@RKEY SPACE key? <0255> C81D 48,20 BR GKTKE2 NO! Abort. <0256> C81F 00 GKTKE1 RTN Return <0257> C820 86,00 GKTKE2 CLR @VAR0 Clear a byte <0258> C822 8E,00 CZ @VAR0 Set COND bit <0259> C824 01 RTNC Return w/COND <0260> * <0261> * Scroll the screen <0262> * <0263> C825 C6,01,12 GKSCRL CH 18,@VARV Check line counter <0264> C828 68,43 BS GKSCL1 Short scroll <0265> C82A 90,01 INC @VARV Line count +1 <0266> C82C 35,02,80 MOVE >280,V@>80,V@>60 Scroll screen C82F A0,60,A0 C832 80 <0267> C833 BE,A2,E0 GKSCL2 ST SPACE,V@>2E0 Clear last line C836 20 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0033 EQUATES ALCS-359 <0268> C837 A2,A2,E0 ADD >60,V@>2E0 C83A 60 <0269> C83B 35,00,1F MOVE >1F,V@>2E0,V@>2E1 C83E A2,E1,A2 C841 E0 <0270> C842 00 RTN Return <0271> C843 35,02,40 GKSCL1 MOVE >240,V@>C0,V@>A0 C846 A0,A0,A0 C849 C0 <0272> C84A 48,33 BR GKSCL2 <0273> * <0274> * Display one file on screen <0275> * <0276> C84C 06,C9,39 GKFNAM CALL GKDSTR Get string into FAC <0277> C84F 8E,4B CZ @FAC+1 Skip display if zero <0278> C851 68,5D BS GKCAT5 length <0279> C853 08 FMT <0280> C854 FC,60 SCRO >60 Put disk name on screen <0281> C856 FE,17 ROW 23 . <0282> C858 FF,02 COL 02 . <0283> C85A E9,4C HSTR 10,@FAC+2 . <0284> C85C FB FEND . <0285> C85D A1,10,4A GKCAT5 DADD @FAC,@VAR5 Go to next field <0286> C860 A3,10,00 DADD 10,@VAR5 Continue another field C863 0A <0287> C864 8F,B0,10 DCZ V*VAR5 Time to get out if <0288> C867 69,0E BS GKFNA1 zero file size <0289> C869 BF,14,02 DST >2EA,@VAR9 Set up screen address C86C EA <0290> C86D 06,C9,13 CALL GKDNUM Display file length <0291> C870 A7,10,00 DSUB 9,@VAR5 Back a field C873 09 <0292> C874 35,00,08 MOVE 8,V*VAR5,@FAC Move it into FAC C877 4A,B0,10 <0293> C87A 0F,12 XML CFI Convert it to an int. <0294> C87C 8E,4A CZ @FAC Non-negative? <0295> C87E 68,86 BS GKCAT7 YES! File not protected <0296> C880 BE,A2,FE ST 185,V@>02FE Put a 'Y' on screen C883 B9 <0297> C884 83,4A DNEG @FAC Make number positive <0298> C886 92,4B GKCAT7 DEC @FAC+1 Adjust for CASE <0299> C888 8A,4B CASE @FAC+1 Show file type <0300> C88A 48,96 BR GKDF <0301> C88C 48,A8 BR GKDV <0302> C88E 48,BA BR GKIF <0303> C890 48,CC BR GKIV <0304> C892 48,DE BR GKPR <0305> C894 48,EF BR GKDIR <0306> C896 08 GKDF FMT <0307> C897 FC,60 SCRO >60 <0308> C899 FE,17 ROW 23 <0309> C89B FF,12 COL 18 <0310> C89D 06,44,69 HTEX 'Dis/Fix' C8A0 73,2F,46 C8A3 69,78 <0311> C8A5 FB FEND <0312> C8A6 49,02 BR GKCAT6 <0313> C8A8 08 GKDV FMT <0314> C8A9 FC,60 SCRO >60 <0315> C8AB FE,17 ROW 23 <0316> C8AD FF,12 COL 18 <0317> C8AF 06,44,69 HTEX 'Dis/Var' C8B2 73,2F,56 C8B5 61,72 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0034 EQUATES ALCS-359 <0318> C8B7 FB FEND <0319> C8B8 49,02 BR GKCAT6 <0320> C8BA 08 GKIF FMT <0321> C8BB FC,60 SCRO >60 <0322> C8BD FE,17 ROW 23 <0323> C8BF FF,12 COL 18 <0324> C8C1 06,49,6E HTEX 'Int/Fix' C8C4 74,2F,46 C8C7 69,78 <0325> C8C9 FB FEND <0326> C8CA 49,02 BR GKCAT6 <0327> C8CC 08 GKIV FMT <0328> C8CD FC,60 SCRO >60 <0329> C8CF FE,17 ROW 23 <0330> C8D1 FF,12 COL 18 <0331> C8D3 06,49,6E HTEX 'Int/Var' C8D6 74,2F,56 C8D9 61,72 <0332> C8DB FB FEND <0333> C8DC 49,02 BR GKCAT6 <0334> C8DE 08 GKPR FMT <0335> C8DF FC,60 SCRO >60 <0336> C8E1 FE,17 ROW 23 <0337> C8E3 FF,12 COL 18 <0338> C8E5 06,50,72 HTEX 'Program' C8E8 6F,67,72 C8EB 61,6D <0339> C8ED FB FEND <0340> C8EE 00 RTN <0341> C8EF 08 GKDIR FMT <0342> C8F0 FC,60 SCRO >60 <0343> C8F2 FE,17 ROW 23 <0344> C8F4 FF,12 COL 18 <0345> C8F6 08,44,69 HTEX 'Directory' C8F9 72,65,63 C8FC 74,6F,72 C8FF 79 <0346> C900 FB FEND <0347> C901 00 RTN Return <0348> C902 A3,10,00 GKCAT6 DADD 18,@VAR5 Advavce two fields C905 12 <0349> C906 BF,14,02 DST >2F6,@VAR9 Set up screen address C909 F6 <0350> C90A 06,C9,13 CALL GKDNUM Display record length <0351> C90D 00 RTN Return <0352> C90E 86,00 GKFNA1 CLR @VAR0 Clear a byte <0353> C910 8E,00 CZ @VAR0 Set COND bit <0354> C912 01 RTNC Return w/COND <0355> * Display number subroutine <0356> * ENTER: Floating number in FAC for GKDNU1 <0357> * Screen address in VAR9 <0358> * <0359> C913 35,00,08 GKDNUM MOVE 8,V*VAR5,@FAC Move FLP number to FAC C916 4A,B0,10 <0360> C919 86,55 GKDNU1 CLR @FAC+11 Indicate a free format <0361> C91B 0F,73 XML CNS Convert FAC to a string <0362> C91D BF,16,00 DST 7,@VARB Right justify number C920 07 <0363> C921 A4,17,56 SUB @FAC+12,@VARB+1 <0364> C924 A1,14,16 DADD @VARB,@VAR9 <0365> C927 A2,90,55 GKDNU2 ADD >60,*FAC+11 Add offset to string C92A 60 <0366> C92B BC,B0,14 ST *FAC+11,V*VAR9 Put a char on the screen C92E 90,55 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0035 EQUATES ALCS-359 <0367> C930 91,14 DINC @VAR9 Increment screen addr. <0368> C932 90,55 INC @FAC+11 Increment FAC addr. <0369> C934 92,56 DEC @FAC+12 Decrement string length count <0370> C936 49,27 BR GKDNU2 Loop until done <0371> C938 00 RTN Return to caller <0372> * <0373> * Prepare a VDP string for FORMAT statement <0374> * LEAVE: FAC has string length (word) <0375> * FAC+2 has string <0376> * VAR5 pointing to next string in record <0377> * <0378> C939 BF,10,09 GKDSTR DST >0900,@VAR5 Get buffer address C93C 00 <0379> C93D 86,4A CLR @FAC Clear MSB of FAC word <0380> C93F BC,4B,B0 ST V*VAR5,@FAC+1 Store disk name length C942 10 <0381> C943 91,10 DINC @VAR5 Point to string <0382> C945 BE,4C,20 ST >20,@FAC+2 Clear out string space <0383> C948 35,00,09 MOVE 9,@FAC+2,@FAC+3 . C94B 4D,4C <0384> C94D 34,4A,4C MOVE @FAC,V*VAR5,@FAC+2 Move disk name into FAC C950 B0,10 <0385> C952 00 RTN <0386> *********************************************************** [0012] *********************************************************** [0013] COPY 'DSK5.MYXB6-F' <0001> *********************************************************** <0002> AORG >0B00 <0003> *********************************************************** <0004> * BASIC KEYWORD TABLE <0005> * THE TOKEN IS ITS LEFT BINDING POWER <0006> *********************************************************** <0007> CB00 CB,14,CB KEYTAB DATA CHAR1,CHAR2,CHAR3,CHAR4,CHAR5 CB03 35,CB,4E CB06 CB,EB,CC CB09 55 <0008> CB0A CC,A4,CC DATA CHAR6,CHAR7,CHAR8,CHAR9,CHARA CB0D F2,CD,2B CB10 CD,59,CD CB13 64 <0009> CB14 21 CHAR1 TEXT '!' <0010> CB15 83 BYTE TREMZ * ! <0011> CB16 23 TEXT '#' <0012> CB17 FD BYTE NUMBEZ * # <0013> CB18 26 TEXT '&' <0014> CB19 B8 BYTE CONCZ * & <0015> CB1A 28 TEXT '(' <0016> CB1B B7 BYTE LPARZ * ( <0017> CB1C 29 TEXT ')' <0018> CB1D B6 BYTE RPARZ * ) <0019> CB1E 2A TEXT '*' <0020> CB1F C3 BYTE MULTZ * * <0021> CB20 2B TEXT '+' <0022> CB21 C1 BYTE PLUSZ * + <0023> CB22 2C TEXT ',' <0024> CB23 B3 BYTE COMMAZ * , <0025> CB24 2D TEXT '-' <0026> CB25 C2 BYTE MINUSZ * - <0027> CB26 2F TEXT '/' <0028> CB27 C4 BYTE DIVIZ * / <0029> CB28 3A TEXT ':' <0030> CB29 B5 BYTE COLONZ * : <0031> CB2A 3B TEXT ';' <0032> CB2B B4 BYTE SEMICZ * ; 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0036 EQUATES ALCS-359 <0033> CB2C 3C TEXT '<' <0034> CB2D BF BYTE LESSZ * < <0035> CB2E 3D TEXT '=' <0036> CB2F BE BYTE EQUALZ * = <0037> CB30 3E TEXT '>' <0038> CB31 C0 BYTE GREATZ * > <0039> CB32 5E TEXT '^' <0040> CB33 C5 BYTE CIRCUZ * ^ <0041> CB34 FF BYTE >FF <0042> CB35 3A,3A CHAR2 TEXT '::' <0043> CB37 82 BYTE SSEPZ * :: <0044> CB38 41,54 TEXT 'AT' <0045> CB3A F0 BYTE ATZ * AT <0046> CB3B 47,4F TEXT 'GO' <0047> CB3D 85 BYTE GOZ * GO <<<<< RXB MO <0048> CB3E 49,46 TEXT 'IF' <0049> CB40 84 BYTE IFZ * IF <0050> CB41 4F,4E TEXT 'ON' <0051> CB43 9B BYTE ONZ * ON <0052> CB44 4F,52 TEXT 'OR' <0053> CB46 BA BYTE ORZ * OR <0054> CB47 50,49 TEXT 'PI' <0055> CB49 DD BYTE PIZ * PI <0056> CB4A 54,4F TEXT 'TO' <0057> CB4C B1 BYTE TOZ * TO <0058> CB4D FF BYTE >FF <0059> CB4E 41,42,53 CHAR3 TEXT 'ABS' <0060> CB51 CB BYTE ABSZ * ABS <0061> CB52 41,4C,4C TEXT 'ALL' <0062> CB55 EC BYTE ALLZ * ALL <0063> CB56 41,4E,44 TEXT 'AND' <0064> CB59 BB BYTE ANDZ * AND <0065> CB5A 41,53,43 TEXT 'ASC' <0066> CB5D DC BYTE ASCZ * ASC <0067> CB5E 41,54,4E TEXT 'ATN' <0068> CB61 CC BYTE ATNZ * ATN <0069> CB62 42,59,45 TEXT 'BYE' <0070> CB65 03 BYTE >03 * BYE <0071> CB66 43,4F,4E TEXT 'CON' <0072> CB69 01 BYTE >01 * CONtinue <0073> CB6A 43,4F,53 TEXT 'COS' <0074> CB6D CD BYTE COSZ * COS <0075> CB6E 44,45,46 TEXT 'DEF' <0076> CB71 89 BYTE DEFZ * DEF <0077> * GKXB added token <0078> CB72 44,45,4C TEXT 'DEL' <0079> CB75 09 BYTE >09 * DEL <0080> CB76 44,49,4D TEXT 'DIM' <0081> CB79 8A BYTE DIMZ * DIM <0082> CB7A 45,4E,44 TEXT 'END' <0083> CB7D 8B BYTE ENDZ * END <0084> CB7E 45,4F,46 TEXT 'EOF' <0085> CB81 CA BYTE EOFZ * EOF <0086> CB82 45,58,50 TEXT 'EXP' <0087> CB85 CE BYTE EXPZZ * EXP <0088> CB86 46,4F,52 TEXT 'FOR' <0089> CB89 8C BYTE FORZ * FOR <0090> CB8A 49,4E,54 TEXT 'INT' <0091> CB8D CF BYTE INTZ * INT <0092> CB8E 4C,45,4E TEXT 'LEN' <0093> CB91 D5 BYTE LENZ * LEN <0094> CB92 4C,45,54 TEXT 'LET' <0095> CB95 8D BYTE LETZ * LET <0096> CB96 4C,4F,47 TEXT 'LOG' 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0037 EQUATES ALCS-359 <0097> CB99 D0 BYTE LOGZ * LOG <0098> CB9A 4D,41,58 TEXT 'MAX' <0099> CB9D DF BYTE MAXZ * MAX <0100> CB9E 4D,49,4E TEXT 'MIN' <0101> CBA1 E0 BYTE MINZ * MIN <0102> CBA2 4E,45,57 TEXT 'NEW' <0103> CBA5 00 BYTE >00 * NEW <0104> CBA6 4E,4F,54 TEXT 'NOT' <0105> CBA9 BD BYTE NOTZ * NOT <0106> CBAA 4E,55,4D TEXT 'NUM' <0107> CBAD 04 BYTE >04 * NUMber <0108> CBAE 4F,4C,44 TEXT 'OLD' <0109> CBB1 05 BYTE >05 * OLD <0110> CBB2 50,4F,53 TEXT 'POS' <0111> CBB5 D9 BYTE POSZ * POS <0112> CBB6 52,45,43 TEXT 'REC' <0113> CBB9 DE BYTE RECZ * REC <0114> CBBA 52,45,4D TEXT 'REM' <0115> CBBD 9A BYTE REMZ * REMark <0116> CBBE 52,45,53 TEXT 'RES' <0117> CBC1 06 BYTE >06 * RESequence <0118> CBC2 52,4E,44 TEXT 'RND' <0119> CBC5 D7 BYTE RNDZ * RND <0120> CBC6 52,55,4E TEXT 'RUN' <0121> CBC9 A9 BYTE RUNZ * RUN <0122> CBCA 53,47,4E TEXT 'SGN' <0123> CBCD D1 BYTE SGNZZ * SGN <0124> CBCE 53,49,4E TEXT 'SIN' <0125> CBD1 D2 BYTE SINZ * SIN <0126> CBD2 53,51,52 TEXT 'SQR' <0127> CBD5 D3 BYTE SQRZ * SQR <0128> CBD6 53,55,42 TEXT 'SUB' <0129> CBD9 A1 BYTE SUBZ * SUB <0130> CBDA 54,41,42 TEXT 'TAB' <0131> CBDD FC BYTE TABZ * TAB <0132> CBDE 54,41,4E TEXT 'TAN' <0133> CBE1 D4 BYTE TANZ * TAN <0134> CBE2 56,41,4C TEXT 'VAL' <0135> CBE5 DA BYTE VALZ * VAL <0136> CBE6 58,4F,52 TEXT 'XOR' <0137> CBE9 BC BYTE XORZ * XOR <0138> CBEA FF BYTE >FF <0139> CBEB 42,41,53 CHAR4 TEXT 'BASE' CBEE 45 <0140> CBEF F1 BYTE BASEZ * BASE <0141> CBF0 42,45,45 TEXT 'BEEP' CBF3 50 <0142> CBF4 EE BYTE BEEPZ * BEEP <0143> CBF5 43,41,4C TEXT 'CALL' CBF8 4C <0144> CBF9 9D BYTE CALLZ * CALL <0145> CBFA 43,48,52 TEXT 'CHR$' CBFD 24 <0146> CBFE D6 BYTE CHRZZ * CHR$ <0147> * GKXB added token <0148> CBFF 43,4F,50 TEXT 'COPY' CC02 59 <0149> CC03 0A BYTE >0A * COPY <0150> CC04 44,41,54 TEXT 'DATA' CC07 41 <0151> CC08 93 BYTE DATAZ * DATA <0152> CC09 45,4C,53 TEXT 'ELSE' CC0C 45 <0153> CC0D 81 BYTE ELSEZ * ELSE 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0038 EQUATES ALCS-359 <0154> CC0E 47,4F,54 TEXT 'GOTO' CC11 4F <0155> CC12 86 BYTE GOTOZ * GOTO <0156> CC13 4C,49,53 TEXT 'LIST' CC16 54 <0157> CC17 02 BYTE >02 * LIST <0158> * GKXB added token <0159> CC18 4D,4F,56 TEXT 'MOVE' CC1B 45 <0160> CC1C 0B BYTE >0B * MOVE <0161> CC1D 4E,45,58 TEXT 'NEXT' CC20 54 <0162> CC21 96 BYTE NEXTZ * NEXT <0163> CC22 4F,50,45 TEXT 'OPEN' CC25 4E <0164> CC26 9F BYTE OPENZ * OPEN <0165> CC27 52,45,41 TEXT 'READ' CC2A 44 <0166> CC2B 97 BYTE READZ * READ <0167> CC2C 52,50,54 TEXT 'RPT$' CC2F 24 <0168> CC30 E1 BYTE RPTZZ * RPT$ <0169> CC31 53,41,56 TEXT 'SAVE' CC34 45 <0170> CC35 07 BYTE >07 * SAVE <0171> CC36 53,45,47 TEXT 'SEG$' CC39 24 <0172> CC3A D8 BYTE SEGZZ * SEG$ <0173> CC3B 53,49,5A TEXT 'SIZE' CC3E 45 <0174> CC3F EB BYTE SIZEZ * SIZE <0175> CC40 53,54,45 TEXT 'STEP' CC43 50 <0176> CC44 B2 BYTE STEPZ * STEP <0177> CC45 53,54,4F TEXT 'STOP' CC48 50 <0178> CC49 98 BYTE STOPZ * STOP <<<< RXB MOT <0179> CC4A 53,54,52 TEXT 'STR$' CC4D 24 <0180> CC4E DB BYTE STRZZ * STR$ <0181> CC4F 54,48,45 TEXT 'THEN' CC52 4E <0182> CC53 B0 BYTE THENZ * THEN <0183> CC54 FF BYTE >FF <0184> CC55 42,52,45 CHAR5 TEXT 'BREAK' CC58 41,4B <0185> CC5A 8E BYTE BREAKZ * BREAK <0186> CC5B 43,4C,4F TEXT 'CLOSE' CC5E 53,45 <0187> CC60 A0 BYTE CLOSEZ * CLOSE <0188> CC61 44,49,47 TEXT 'DIGIT' CC64 49,54 <0189> CC66 E9 BYTE DIGITZ * DIGIT <0190> CC67 45,52,41 TEXT 'ERASE' CC6A 53,45 <0191> CC6C EF BYTE ERASEZ * ERASE <0192> CC6D 45,52,52 TEXT 'ERROR' CC70 4F,52 <0193> CC72 A5 BYTE ERRORZ * ERROR <0194> CC73 46,49,58 TEXT 'FIXED' CC76 45,44 <0195> CC78 FA BYTE FIXEDZ * FIXED <0196> CC79 47,4F,53 TEXT 'GOSUB' CC7C 55,42 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0039 EQUATES ALCS-359 <0197> CC7E 87 BYTE GOSUBZ * GOSUB <0198> CC7F 49,4D,41 TEXT 'IMAGE' CC82 47,45 <0199> CC84 A3 BYTE IMAGEZ * IMAGE <0200> CC85 49,4E,50 TEXT 'INPUT' CC88 55,54 <0201> CC8A 92 BYTE INPUTZ * INPUT <0202> CC8B 4D,45,52 TEXT 'MERGE' CC8E 47,45 <0203> CC90 08 BYTE >08 * MERGE <0204> CC91 50,52,49 TEXT 'PRINT' CC94 4E,54 <0205> CC96 9C BYTE PRINTZ * PRINT <0206> CC97 54,52,41 TEXT 'TRACE' CC9A 43,45 <0207> CC9C 90 BYTE TRACEZ * TRACE <0208> CC9D 55,53,49 TEXT 'USING' CCA0 4E,47 <0209> CCA2 ED BYTE USINGZ * USING <0210> CCA3 FF BYTE >FF <0211> CCA4 41,43,43 CHAR6 TEXT 'ACCEPT' CCA7 45,50,54 <0212> CCAA A4 BYTE ACCEPZ * ACCEPT <0213> CCAB 41,50,50 TEXT 'APPEND' CCAE 45,4E,44 <0214> CCB1 F9 BYTE APPENZ * APPEND <0215> CCB2 44,45,4C TEXT 'DELETE' CCB5 45,54,45 <0216> CCB8 99 BYTE DELETZ * DELETE <0217> CCB9 4C,49,4E TEXT 'LINPUT' CCBC 50,55,54 <0218> CCBF AA BYTE LINPUZ * LINPUT <0219> CCC0 4E,55,4D TEXT 'NUMBER' CCC3 42,45,52 <0220> CCC6 04 BYTE >04 * NUMBER <0221> CCC7 4F,50,54 TEXT 'OPTION' CCCA 49,4F,4E <0222> CCCD 9E BYTE OPTIOZ * OPTION <0223> CCCE 4F,55,54 TEXT 'OUTPUT' CCD1 50,55,54 <0224> CCD4 F7 BYTE OUTPUZ * OUTPUT <0225> CCD5 52,45,54 TEXT 'RETURN' CCD8 55,52,4E <0226> CCDB 88 BYTE RETURZ * RETURN <0227> CCDC 53,55,42 TEXT 'SUBEND' CCDF 45,4E,44 <0228> CCE2 A8 BYTE SUBNDZ * SUBEND <0229> CCE3 55,41,4C TEXT 'UALPHA' CCE6 50,48,41 <0230> CCE9 EA BYTE UALPHZ * UALPHA <0231> CCEA 55,50,44 TEXT 'UPDATE' CCED 41,54,45 <0232> CCF0 F8 BYTE UPDATZ * UPDATE <0233> CCF1 FF BYTE >FF <0234> CCF2 44,49,53 CHAR7 TEXT 'DISPLAY' CCF5 50,4C,41 CCF8 59 <0235> CCF9 A2 BYTE DISPLZ * DISPLAY <0236> CCFA 4E,55,4D TEXT 'NUMERIC' CCFD 45,52,49 CD00 43 <0237> CD01 E8 BYTE NUMERZ * NUMERIC <0238> CD02 52,45,53 TEXT 'RESTORE' CD05 54,4F,52 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0040 EQUATES ALCS-359 CD08 45 <0239> CD09 94 BYTE RESTOZ * RESTORE <0240> CD0A 53,55,42 TEXT 'SUBEXIT' CD0D 45,58,49 CD10 54 <0241> CD11 A7 BYTE SUBXTZ * SUBEXIT <0242> CD12 55,4E,42 TEXT 'UNBREAK' CD15 52,45,41 CD18 4B <0243> CD19 8F BYTE UNBREZ * UNBREAK <0244> CD1A 55,4E,54 TEXT 'UNTRACE' CD1D 52,41,43 CD20 45 <0245> CD21 91 BYTE UNTRAZ * UNTRACE <0246> CD22 57,41,52 TEXT 'WARNING' CD25 4E,49,4E CD28 47 <0247> CD29 A6 BYTE WARNZ * WARNING <0248> CD2A FF BYTE >FF <0249> CD2B 43,4F,4E CHAR8 TEXT 'CONTINUE' CD2E 54,49,4E CD31 55,45 <0250> CD33 01 BYTE >01 * CONTINUE <0251> CD34 49,4E,54 TEXT 'INTERNAL' CD37 45,52,4E CD3A 41,4C <0252> CD3C F5 BYTE INTERZ * INTERNAL <0253> CD3D 52,45,4C TEXT 'RELATIVE' CD40 41,54,49 CD43 56,45 <0254> CD45 F4 BYTE RELATZ * RELATIVE <0255> CD46 56,41,4C TEXT 'VALIDATE' CD49 49,44,41 CD4C 54,45 <0256> CD4E FE BYTE VALIDZ * VALIDATE <0257> CD4F 56,41,52 TEXT 'VARIABLE' CD52 49,41,42 CD55 4C,45 <0258> CD57 F3 BYTE VARIAZ * VARIABLE <0259> CD58 FF BYTE >FF <0260> CD59 52,41,4E CHAR9 TEXT 'RANDOMIZE' CD5C 44,4F,4D CD5F 49,5A,45 <0261> CD62 95 BYTE RANDOZ * RANDOMIZE <0262> CD63 FF BYTE >FF <0263> CD64 53,45,51 CHARA TEXT 'SEQUENTIAL' CD67 55,45,4E CD6A 54,49,41 CD6D 4C <0264> CD6E F6 BYTE SEQUEZ * SEQUENTIAL <0265> CD6F FF BYTE >FF <0266> * ????????????????????????????????????????????????????????? <0267> AORG >0D76 <0268> CD76 00 BYTE >00 * RXB patch to even out addre <0269> *********************************************************** <0270> * ERRTAB - Error table containing all of the error messages <0271> * error numbers and the severity code for each <0272> * error. The error call number is the data byte <0273> * that must follow the CALL ERRZZ or CALL WARNZZ. <0274> * Messages with severity of zero are system <0275> * messages and not error messages. <0276> * <0277> * Message, Error #, Severity CALL # <0278> *********************************************************** 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0041 EQUATES ALCS-359 <0279> CD77 60,40 ERRTAB DATA MSGFST * "READY" <0280> CD79 00,00 BYTE 0,0 <0281> CD7B 60,48 DATA MSGBRK * "BREAKPOINT" <0282> CD7D 00,00 BYTE 0,0 <0283> CD7F 60,65 DATA MSG10 * "NUMERIC OVERFLOW" <0284> CD81 0A,01 BYTE 10,1 <0285> CD83 60,76 DATA MSG14 * "SYNTAX ERROR" <0286> CD85 0E,09 BYTE 14,9 <0287> CD87 60,83 DATA MSG16 * "ILLEGAL AFTER SUBPROGRAM" <0288> CD89 10,09 BYTE 16,9 <0289> CD8B 60,9C DATA MSG17 * "UNMATCHED QUOTES" <0290> CD8D 11,09 BYTE 17,9 <0291> CD8F 60,AD DATA MSG19 * "NAME TOO LONG" <0292> CD91 13,09 BYTE 19,9 <0293> CD93 60,BB DATA MSG24 * "STRING-NUMBER MISMATCH" <0294> CD95 18,09 BYTE 24,9 <0295> CD97 60,D2 DATA MSG25 * "OPTION BASE ERROR" <0296> CD99 19,09 BYTE 25,9 <0297> CD9B 60,E4 DATA MSG28 * "IMPROPERLY USED NAME" <0298> CD9D 1C,09 BYTE 28,9 <0299> CD9F 61,10 DATA MSG36 * "IMAGE ERROR" <0300> CDA1 24,09 BYTE 36,9 <0301> CDA3 61,1C DATA MSG39 * "MEMORY FULL" <0302> CDA5 27,09 BYTE 39,9 <0303> CDA7 61,28 DATA MSG40 * "STACK OVERFLOW" <0304> CDA9 28,09 BYTE 40,9 <0305> CDAB 61,37 DATA MSG43 * "NEXT WITHOUT FOR" <0306> CDAD 2B,09 BYTE 43,9 <0307> CDAF 61,48 DATA MSG44 * "FOR-NEXT NESTING" <0308> CDB1 2C,09 BYTE 44,9 <0309> CDB3 61,59 DATA MSG47 * "MUST BE IN SUBPROGRAM" <0310> CDB5 2F,09 BYTE 47,9 <0311> CDB7 61,6F DATA MSG48 * "RECURSIVE SUBPROGRAM CALL" <0312> CDB9 30,09 BYTE 48,9 <0313> CDBB 61,89 DATA MSG49 * "MISSING SUBEND" <0314> CDBD 31,09 BYTE 49,9 <0315> CDBF 61,98 DATA MSG51 * "RETURN WITHOUT GOSUB" <0316> CDC1 33,09 BYTE 51,9 <0317> CDC3 61,AD DATA MSG54 * "STRING TRUNCATED" <0318> CDC5 36,01 BYTE 54,1 <0319> CDC7 61,BE DATA MSG57 * "BAD SUBSCRIPT" <0320> CDC9 39,09 BYTE 57,9 <0321> CDCB 63,24 DATA MSG56 * "SPEECH STRING TOO LONG" <0322> CDCD 38,09 BYTE 56,9 <0323> CDCF 61,CC DATA MSG60 * "LINE NOT FOUND" <0324> CDD1 3C,09 BYTE 60,9 <0325> CDD3 61,DB DATA MSG61 * "BAD LINE NUMBER" <0326> CDD5 3D,09 BYTE 61,9 <0327> CDD7 62,C5 DATA MSG62 * "LINE TOO LONG" <0328> CDD9 3E,09 BYTE 62,9 <0329> CDDB 61,EB DATA MSG67 * "CAN'T CONTINUE" <0330> CDDD 43,09 BYTE 67,9 <0331> CDDF 61,FA DATA MSG69 * "COMMAND ILLEGAL IN PROGRAM <0332> CDE1 45,09 BYTE 69,9 <0333> CDE3 62,15 DATA MSG70 * "ONLY LEGAL IN A PROGRAM" <0334> CDE5 46,09 BYTE 70,9 <0335> CDE7 62,2D DATA MSG74 * "BAD ARGUMENT" <0336> CDE9 4A,09 BYTE 74,9 <0337> CDEB 62,3A DATA MSG78 * "NO PROGRAM PRESENT" <0338> CDED 4E,01 BYTE 78,1 <0339> CDEF 62,4D DATA MSG79 * "BAD VALUE" <0340> CDF1 4F,09 BYTE 79,9 <0341> CDF3 62,57 DATA MSG81 * "INCORRECT ARGUMENT LIST" <0342> CDF5 51,09 BYTE 81,9 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0042 EQUATES ALCS-359 <0343> CDF7 62,6F DATA MSG83 * "INPUT ERROR" (WARNING) <0344> CDF9 53,01 BYTE 83,1 <0345> CDFB 62,7B DATA MSG84 * "DATA ERROR" <0346> CDFD 54,09 BYTE 84,9 <0347> CDFF 62,9B DATA MSG109 * "FILE ERROR" <0348> CE01 6D,09 BYTE 109,9 <0349> CE03 62,A6 DATA MSG130 * "I/O ERROR" (WARNING) <0350> CE05 82,01 BYTE 130,1 <0351> CE07 62,A6 DATA MSG130 * "I/O ERROR" <0352> CE09 82,09 BYTE 130,9 <0353> CE0B 62,B0 DATA MSG135 * "SUBPROGRAM NOT FOUND" <0354> CE0D 87,09 BYTE 135,9 <0355> CE0F 61,CC DATA MSG60 * "LINE NOT FOUND" (WARNING) <0356> CE11 3C,01 BYTE 60,1 <0357> CE13 62,86 DATA MSG97 * "PROTECTION VIOLATION" <0358> CE15 61,09 BYTE 97,9 <0359> CE17 60,F9 DATA MSG34 * "UNRECOGNIZED CHARACTER" <0360> CE19 14,09 BYTE 20,9 <0361> * Following message is added 6/24/81 for the INPUT bug. <0362> CE1B 62,6F DATA MSG83 * "INPUT ERROR" <0363> CE1D 53,09 BYTE 83,9 <0364> *********************************************************** <0365> * TRACBK - Is used to trace back the error levels through <0366> * nested function references and subprogram calls. <0367> * It takes care of issuing the trace back info <0368> * messages in these two cases. It leaves the stack <0369> * unchanged except in the case of a prescan error <0370> * occurring in an external subprogram. If any <0371> * messages are issued, it returns with the staus <0372> * set, else reset. <0373> *********************************************************** <0374> CE1F BD,52,6E TRACBK DST @VSPTR,@FAC8 Get a temp stack pointer <0375> CE22 C5,52,24 GCE22 DCH @STVSPT,@FAC8 While not end of stack <0376> CE25 4E,48 BR GCE48 <0377> CE27 D6,E0,02 CEQ >68,V@2(@FAC8) If UDF entry CE2A 52,68 <0378> CE2C 6E,49 BS TRAC05 <0379> CE2E D6,E0,02 CEQ >70,V@2(@FAC8) If temp UDF entry CE31 52,70 <0380> CE33 4E,3B BR GCE3B <0381> CE35 A7,6E,00 DSUB 8,@VSPTR Trash it so DELINK won't CE38 08 <0382> CE39 4E,49 BR TRAC05 mess up the symbol table <0383> CE3B D6,E0,02 GCE3B CEQ >6A,V@2(@FAC8) If subprogram CE3E 52,6A <0384> CE40 6E,F8 BS TRAC50 <0385> CE42 A7,52,00 DSUB 8,@FAC8 Goto next entry on stack CE45 08 <0386> CE46 4E,22 BR GCE22 <0387> CE48 00 GCE48 RTN If no UDF or subprograms acti <0388> * Trace back UDF reference <0389> CE49 86,56 TRAC05 CLR @FAC12 To cheat on ERPRNT <0390> CE4B C0,56,44 EX @PRGFLG,@FAC12 Force line # NOT to be printe <0391> CE4E D6,57,01 CEQ 1,@FAC13 If warning message <0392> CE51 4E,58 BR GCE58 <0393> * Place for the message already set in WRNZZ3 <0394> CE53 06,6E,1B CALL ERPNT5 Don't restore char set <0395> CE56 4E,5B BR GCE5B <0396> CE58 06,6E,0E GCE58 CALL ERPRNT Print the real error messgae <0397> CE5B BC,44,56 GCE5B ST @FAC12,@PRGFLG Restore program/imperative fl <0398> CE5E BD,5C,2C DST @PGMPTR,@ARG Get the place of error for FN <0399> CE61 06,CF,73 CALL FNDLNE Find the line that the error <0400> * is in <0401> CE64 BF,A2,E4 DST >A9AE,V@NLNADD+2 Say 'in' xx 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0043 EQUATES ALCS-359 CE67 A9,AE <0402> CE69 BF,20,02 DST NLNADD+5,@VARW Start place of line number CE6C E7 <0403> CE6D 06,6F,BA CALL DISO Put out the line number <0404> CE70 0F,83 XML SCROLL <0405> CE72 BD,5C,B0 TRAC09 DST V*FAC8,@ARG Save PGMPTR from the entry CE75 52 <0406> CE76 A7,52,00 TRAC10 DSUB 8,@FAC8 Go on to next entry CE79 08 <0407> CE7A C5,52,24 DCH @STVSPT,@FAC8 If not end of stack <0408> CE7D 4E,E2 BR GCEE2 <0409> CE7F D6,E0,02 CEQ >68,V@2(@FAC8) If function entry CE82 52,68 <0410> CE84 4E,C8 BR GCEC8 <0411> CE86 D5,B0,52 DCEQ @ARG,V*FAC8 If recursive CE89 5C <0412> CE8A 4E,B3 BR GCEB3 <0413> CE8C 31,00,0F MOVE 15,G@MSGCIS,V@NLNADD+2 CE8F A2,E4,63 CE92 0A <0414> CE93 0F,83 XML SCROLL * CALLS ITSELF <0415> CE95 A7,52,00 TRAC12 DSUB 8,@FAC8 Goto next entry on stack CE98 08 <0416> CE99 D6,E0,02 GCE99 CEQ >68,V@2(@FAC8) While functions CE9C 52,68 <0417> CE9E 4E,AC BR GCEAC <0418> CEA0 D5,B0,52 DCEQ @ARG,V*FAC8 CEA3 5C <0419> CEA4 4E,72 BR TRAC09 <0420> CEA6 A7,52,00 DSUB 8,@FAC8 Goto next entry on stack CEA9 08 <0421> CEAA 4E,99 BR GCE99 <0422> CEAC CE,E0,02 GCEAC CGT >65,V@2(@FAC8) If string is numeric CEAF 52,65 <0423> CEB1 4E,95 BR TRAC12 <0424> CEB3 31,00,0B GCEB3 MOVE 11,G@MSGCF,V@NLNADD+2 CEB6 A2,E4,63 CEB9 19 <0425> CEBA 06,CF,73 CALL FNDLNE Find the line <0426> CEBD BF,20,02 DST NLNADD+14,@VARW Place to display it CEC0 F0 <0427> CEC1 06,6F,BA CALL DISO Display the line number <0428> CEC4 0F,83 XML SCROLL * CALLED FROM <0429> CEC6 4E,72 BR TRAC09 Go on <0430> * Jump always <0431> CEC8 CA,E0,02 GCEC8 CHE >66,V@2(@FAC8) If not permanent CECB 52,66 <0432> CECD 4E,76 BR TRAC10 <0433> CECF C7,52,09 GCECF DCH VRAMVS,@FAC8 While still not at bottom CED2 58 <0434> CED3 4E,E2 BR GCEE2 <0435> CED5 D6,E0,02 CEQ >6A,V@2(@FAC8) If subprogram CED8 52,6A <0436> CEDA 6F,09 BS TRAC51 <0437> CEDC A7,52,00 DSUB 8,@FAC8 Go down an entry CEDF 08 <0438> CEE0 4E,CF BR GCECF <0439> CEE2 8E,44 GCEE2 CZ @PRGFLG If not imperative <0440> CEE4 6E,F6 BS GCEF6 <0441> CEE6 31,00,0B MOVE 11,G@MSGCF,V@NLNADD+2 CEE9 A2,E4,63 CEEC 19 <0442> CEED BF,20,02 DST NLNADD+14,@VARW Place to display line # CEF0 F0 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0044 EQUATES ALCS-359 <0443> CEF1 06,A0,0A CALL ASC Display it <0444> CEF4 0F,83 XML SCROLL <0445> CEF6 4F,65 GCEF6 BR RTNSET Return with condition set <0446> * Trace back subprogram calls <0447> CEF8 D6,57,01 TRAC50 CEQ 1,@FAC13 If warning message only <0448> CEFB 4F,02 BR GCF02 <0449> CEFD 06,6E,1B CALL ERPNT5 Don't restore char set <0450> CF00 4F,05 BR GCF05 <0451> CF02 06,6E,0E GCF02 CALL ERPRNT Print the real message <0452> CF05 8E,44 GCF05 CZ @PRGFLG <0453> CF07 6F,65 BS RTNSET <0454> CF09 8E,44 TRAC51 CZ @PRGFLG <0455> CF0B 6F,68 BS RETNOS <0456> CF0D BF,A2,E4 DST >A9AE,V@NLNADD+2 Display 'IN' CF10 A9,AE <0457> CF12 BF,56,02 DST NLNADD+6,@FAC12 Display location of name CF15 E8 <0458> CF16 BD,5A,B0 TRAC55 DST V*FAC8,@FAC16 Get S.T. pointer CF19 52 <0459> CF1A 86,54 CLR @FAC10 Need a double length <0460> CF1C BC,55,E0 ST V@1(@FAC16),@FAC10+1 Get the name length CF1F 01,5A <0461> CF21 BD,5A,E0 DST V@4(@FAC16),@FAC16 Get the name pointer CF24 04,5A <0462> CF26 34,54,B0 MOVE @FAC10,V*FAC16,V*FAC12 Display CF29 56,B0,5A <0463> CF2C A2,B0,56 GCF2C ADD OFFSET,V*FAC12 CF2F 60 <0464> CF30 91,56 DINC @FAC12 <0465> CF32 93,54 DDEC @FAC10 <0466> CF34 8F,54 DCZ @FAC10 <0467> CF36 4F,2C BR GCF2C <0468> CF38 0F,83 XML SCROLL Scroll the screen 'CALLED FRO <0469> CF3A 31,00,0B MOVE 11,G@MSGCF,V@NLNADD+2 CF3D A2,E4,63 CF40 19 <0470> CF41 BD,54,52 DST @FAC8,@FAC10 In case at top level <0471> CF44 BD,52,E0 DST V@6(@FAC8),@FAC8 Get LSUBP off stack CF47 06,52 <0472> CF49 8F,52 DCZ @FAC8 If not top level call <0473> CF4B 6F,53 BS GCF53 <0474> CF4D BF,56,02 DST NLNADD+15,@FAC12 Display location of name CF50 F1 <0475> CF51 4F,16 BR TRAC55 <0476> * Now find original number <0477> CF53 BD,5E,EF GCF53 DST V@-6(@FAC10),@ARG2 Get pointer to line number CF56 FF,FA,54 <0478> CF59 06,CF,69 CALL GETLN2 Get the actual line number <0479> CF5C BF,20,02 DST NLNADD+15,@VARW Place to put line number CF5F F1 <0480> CF60 06,6F,BA CALL DISO Display the line number <0481> CF63 0F,83 XML SCROLL Scroll the mess up <0482> * RETURN WITH CONDITION BIT SET <0483> CF65 D4,00,00 RTNSET CEQ @>8300,@>8300 SET CONDITION BIT <0484> CF68 01 RETNOS RTNC <0485> CF69 97,5E GETLN2 DDECT @ARG2 <0486> CF6B 06,80,2C CALL GRSUB2 Read 2 bytes of data from ERA <0487> CF6E 5E BYTE >5E * (use GREAD1) or VDP (>5E=AR <0488> CF6F BD,5E,58 DST @EEE1,@ARG2 Put the result into @ARG2 <0489> CF72 00 RTN <0490> * Given a specific PGMPTR (in ARG) find the line number of <0491> * the line it points into and put the actual line number <0492> * in ARG2 <0493> CF73 BD,60,30 FNDLNE DST @STLN,@ARG4 Get pointer into # buffer 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0045 EQUATES ALCS-359 <0494> CF76 95,60 DINCT @ARG4 Point at the line pointer <0495> CF78 BD,5E,60 DST @ARG4,@ARG2 Get line pointer <0496> CF7B 87,62 DCLR @ARG6 Start with a zero value <0497> CF7D C9,60,32 GCF7D DCHE @ENLN,@ARG4 While in line buffer <0498> CF80 6F,9C BS GCF9C <0499> CF82 06,80,2C CALL GRSUB2 Get the line # from ERAM/VDP <0500> CF85 60 BYTE >60 * @ARG4: Source address on ERAM <0501> CF86 CD,58,5C DCGT @ARG,@EEE1 <0502> CF89 6F,96 BS GCF96 <0503> CF8B C5,58,62 DCH @ARG6,@EEE1 If closer <0504> CF8E 4F,96 BR GCF96 <0505> CF90 BD,5E,60 DST @ARG4,@ARG2 Make it the one <0506> CF93 BD,62,58 DST @EEE1,@ARG6 <0507> CF96 A3,60,00 GCF96 DADD 4,@ARG4 Goto next line in buffer CF99 04 <0508> CF9A 4F,7D BR GCF7D <0509> CF9C 06,CF,69 GCF9C CALL GETLN2 Get the line number <0510> CF9F B2,5E,7F AND >7F,@ARG2 Reset the breakpoint if any <0511> CFA2 00 RTN <0512> *********************************************************** [0014] *********************************************************** [0015] COPY 'DSK5.MYXB6-G' <0001> *********************************************************** <0002> AORG >1000 <0003> *********************************************************** <0004> * EDIT routine - display requested line and edit any change <0005> * in the program segment. <0006> * <0007> * FAC contains the line number just read in <0008> D000 D5,30,32 EDTZZ0 DCEQ @ENLN,@STLN If no program <0009> D003 50,08 BR GD008 <0010> D005 05,64,EF B ILLST <0011> D008 0F,7E GD008 XML SPEED <0012> D00A 03 BYTE SEETWO * Try to find the line (# in FA <0013> D00B 50,AC BR EDTZ08 * LINE NOT FOUND <0014> D00D BE,06,1D EDTZ00 ST 29,@CCPPTR Force new record on first lin <0015> * The entry in the line number table is in EXTRAM <0016> D010 BE,17,60 ST OFFSET,@DSRFLG Set screen output mode <0017> D013 BE,07,1C ST 28,@RECLEN Select standard record length <0018> D016 87,04 DCLR @PABPTR I/O to the screen <0019> D018 8E,80,84 CZ @RAMTOP If ERAM <0020> D01B 70,20 BS GD020 <0021> D01D 06,80,2A CALL GRMLST Prepare to list from ERAM <0022> D020 06,6A,74 GD020 CALL LLIST List the line <0023> * VARW contains the position of the first character followi <0024> * the line number. <0025> D023 C4,06,07 CH @RECLEN,@CCPPTR Exactly at end of line <0026> D026 50,32 BR GD032 <0027> D028 0F,83 XML SCROLL Scroll up one line <0028> D02A A7,20,00 DSUB 32,@VARW And correct both VARW D02D 20 <0029> D02E A7,08,00 DSUB 28,@CCPADR and CCPADR D031 1C <0030> D032 BD,5E,20 GD032 DST @VARW,@ARG2 Set cursor at start position <0031> D035 B2,5F,E0 AND >E0,@ARG3 Back to beginning of line <0032> D038 A3,5E,00 DADD 157,@ARG2 Compute theoretically highest D03B 9D <0033> D03C BD,2A,08 DST @CCPADR,@VARA Use current high position <0034> * as high <0035> D03F C9,5E,2A DCHE @VARA,@ARG2 If > 4 then lines-correct <0036> D042 70,48 BS GD048 <0037> D044 BF,5E,03 DST >031D,@ARG2 Allow for one more line D047 1D <0038> *---------------------------------------------------------- 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0046 EQUATES ALCS-359 <0039> * Fix "You cannot add characters to a line whose number is <0040> * multiple of 256, if that line was reached ty typing <0041> * either an up arrow or a down arrow from a previous <0042> * line" bug, the following line is changed <0043> * CALL READL1 Allow user to make change <0044> D048 06,6A,8A GD048 CALL READL3 Allow user to make change <0045> *---------------------------------------------------------- <0046> D04B 06,D0,AF CALL SAVLIN Save the line for recall <0047> D04E 8E,80,84 CZ @RAMTOP If ERAM exists <0048> D051 70,56 BS GD056 <0049> D053 BD,2E,58 DST @FAC14,@EXTRAM saves EXTRAM in FAC <0050> D056 DA,45,01 GD056 CLOG 1,@FLAG Autonumber <0051> D059 50,79 BR EDTZ01 <0052> D05B D6,75,0B CEQ UPARR,@RKEY Ended in UP arrow <0053> D05E 50,6B BR GD06B <0054> D060 A3,2E,00 DADD 4,@EXTRAM Point at next line to list D063 04 <0055> D064 C5,2E,32 DCH @ENLN,@EXTRAM Doesn't exist <0056> D067 70,79 BS EDTZ01 <0057> D069 50,7E BR EDTZ02 <0058> D06B D6,75,0A GD06B CEQ DWNARR,@RKEY Want next program line <0059> D06E 50,85 BR GD085 <0060> D070 A7,2E,00 DSUB 4,@EXTRAM Point at next line to list D073 04 <0061> D074 C9,2E,30 DCHE @STLN,@EXTRAM Passed high program <0062> D077 70,7E BS EDTZ02 <0063> D079 BE,75,0D EDTZ01 ST CHRTN,@RKEY Set no more editing <0064> D07C 50,85 BR GD085 <0065> D07E 06,80,2E EDTZ02 CALL GRSUB3 Read from ERAM, use GREAD <0066> * or VDP, Reset possible <0067> * breakpoint too <0068> D081 2E BYTE >2E * @EXTRAM: Source address on ER <0069> D082 BD,62,58 DST @EEE1,@ARG6 Save for general use <0070> D085 8E,60 GD085 CZ @ARG4 If current, the line was chan <0071> D087 50,A1 BR GD0A1 <0072> D089 BF,0A,08 DST CRNBUF,@RAMPTR Initialize crunch pointer D08C 20 <0073> D08D 0F,7F XML CRUNCH Crunch the input line <0074> D08F 00 BYTE 0 * Normal crunch mode <0075> D090 8F,22 DCZ @ERRCOD If error <0076> D092 70,97 BS GD097 <0077> D094 05,64,33 B TOPL42 <0078> *---------------------------------------------------------- <0079> * Fix "Illegal line number 0 can be created by editting a <0080> * line" bug, 5/23/81 <0081> * Add the following line, and the label TOPL55 at line <0082> * (TOPL45+9) <0083> D097 8F,4A GD097 DCZ @FAC If line number has <0084> D099 50,9E BR GD09E been deleted - treated as <0085> D09B 05,64,62 B TOPL55 imperative state <0086> *---------------------------------------------------------- <0087> D09E 06,66,CF GD09E CALL EDITLN And edit into program buffer <0088> D0A1 BD,4A,62 GD0A1 DST @ARG6,@FAC Line number for next line <0089> D0A4 D6,75,0D CEQ CHRTN,@RKEY Stop on carriage return <0090> D0A7 50,08 BR GD008 <0091> D0A9 05,63,DD B TOPL15 Don't kill the symbol table <0092> * JUMP ALWAYS <0093> 698C G698C EQU >698C <0094> D0AC 05,69,8C EDTZ08 B G698C LINE NOT FOUND <0095> * Save input line for edit recall <0096> D0AF B2,21,E0 SAVLIN AND >E0,@VARW+1 Correct in case autonumber <0097> D0B2 94,21 INCT @VARW+1 Skip edge characters <0098> D0B4 BD,4A,2A DST @VARA,@FAC Get pointer to end of line <0099> D0B7 A5,4A,20 DSUB @VARW,@FAC Compute length of line 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0047 EQUATES ALCS-359 <0100> D0BA 70,CC BS SAVLN5 If zero, length line <0101> D0BC C7,4A,00 DCH 160,@FAC If line longer then buffer D0BF A0 <0102> D0C0 50,C6 BR GD0C6 <0103> D0C2 BF,4A,00 DST 160,@FAC Default to max buffer size D0C5 A0 <0104> * RXB PATCH CODE FOR USER **** <0105> * GD0C6 MOVE @FAC,V*VARW,V@RECBUF Save line <0106> D0C6 34,4A,B0 GD0C6 MOVE @FAC,V*VARW,V*VARW D0C9 20,B0,20 <0107> D0CC BD,A3,8C SAVLN5 DST @VARW,V@BUFSRT Save pointer to line start D0CF 20 <0108> D0D0 BD,A3,8E DST @VARA,V@BUFEND Save pointer to line end D0D3 2A <0109> D0D4 CB,A3,8C GD0D4 DCHE >0262,V@BUFSRT If try more than 160 D0D7 02,62 <0110> D0D9 70,E7 BS GD0E7 <0111> *---------------------------------------------------------- <0112> * Fix bug "Delete characters while in REDO mode, next REDO <0113> * still may show those deleted characters, 5/26/81 <0114> * Replace following line <0115> * DST >02FE,V@BUFEND Update pointer to line end <0116> D0DB A3,A3,8E DADD 32,V@BUFEND Shift the whole buffer 32 D0DE 00,20 <0117> * down at a time <0118> *---------------------------------------------------------- <0119> D0E0 A3,A3,8C DADD 32,V@BUFSRT Update pointer for 160 chars D0E3 00,20 <0120> D0E5 50,D4 BR GD0D4 <0121> *---------------------------------------------------------- <0122> * Also add following 3 lines for the bug above <0123> D0E7 C7,A3,8E GD0E7 DCH >02FE,V@BUFEND Update pointer to line end D0EA 02,FE <0124> D0EC 50,F3 BR GD0F3 <0125> D0EE BF,A3,8E DST >02FE,V@BUFEND D0F1 02,FE <0126> *---------------------------------------------------------- <0127> D0F3 00 GD0F3 RTN <0128> *********************************************************** <0129> * RXB <0130> ******************************************************* <0131> * AMS BRANCH TABLE FOR AMS ROUTINES * FIXED * <0132> D0F4 52,46 BR AMSMAP * AT * <0133> D0F6 52,61 BR AMSPAS * >D0F4 * <0134> D0F8 52,7B BR AMSOFF * PERMANENTLY * <0135> D0FA 52,94 BR AMSON * ADD TO THE * <0136> D0FC 52,D6 BR SISRON * TABLE IF * <0137> D0FE 53,11 BR SISROF * NEEDED. * <0138> ******************************************************* <0139> D100 D6,42,B7 GLPARZ CEQ LPARZ,@CHAT <0140> D103 45,33 BR ERRSYN <0141> D105 00 RTN <0142> D106 0F,79 STRFCH XML PGMCHR <0143> D108 0F,74 XML PARSE <0144> D10A B6 BYTE >B6 <0145> D10B 00 RTN <0146> D10C 06,D1,06 STRGET CALL STRFCH <0147> D10F D6,4C,65 CEQ >65,@FAC2 <0148> D112 45,43 BR ERRSNM * STRING NUM MISMATCH <0149> D114 00 RTN <0150> D115 06,D1,06 NUMFCH CALL STRFCH <0151> D118 D6,4C,65 CEQ >65,@FAC2 <0152> D11B 65,43 BS ERRSNM * STRING NUM MISMATCH <0153> D11D 00 RTN 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0048 EQUATES ALCS-359 <0154> D11E 0F,12 CFIFCH XML CFI <0155> D120 D6,54,03 CEQ >03,@FAC+10 <0156> D123 65,A2 BS ERRBV * NUMERIC OVERFLOW <0157> D125 00 RTN <0158> D126 06,D1,56 GETNUM CALL SUBLP3 <0159> D129 D6,42,B3 CEQ >B3,@CHAT <0160> D12C 45,33 BR ERRSYN <0161> D12E 00 RTN <0162> D12F 0F,79 NGOOD XML PGMCHR <0163> D131 D6,42,80 CEQ >80,@CHAT <0164> D134 65,33 BS ERRSYN * ? <0165> D136 06,D1,4A CALL SNDER <0166> D139 D6,4C,65 CEQ >65,@FAC2 <0167> D13C 45,9A BR ERRBA * BAD ARGUMENT <0168> D13E BF,4A,00 DST >001C,@FAC D141 1C <0169> D142 BD,4E,1C DST @SREF,@FAC4 <0170> D145 BD,50,0C DST @BYTES,@FAC6 <0171> D148 51,53 BR SNDASS <0172> D14A 0F,7A SNDER XML SYM <0173> D14C 0F,7B XML SMB <0174> D14E 0F,77 XML VPUSH <0175> D150 00 RTN <0176> D151 0F,80 CIFSND XML CIF <0177> D153 0F,7C SNDASS XML ASSGNV <0178> D155 00 RTN <0179> D156 06,D1,15 SUBLP3 CALL NUMFCH <0180> D159 06,D1,1E CALL CFIFCH <0181> D15C 00 RTN <0182> D15D 44,53,4B DSKSUB TEXT 'DSK#.' D160 23,2E <0183> D162 0F,79 DEVNAM XML PGMCHR Advance program pointer <0184> D164 0F,74 XML PARSE Parse to ')' <0185> D166 B6 BYTE RPARZ <0186> D167 D6,4C,65 CEQ >65,@FAC2 Do we have a string? <0187> D16A 71,9B BS DEV1 YES, normal execution <0188> D16C 0F,12 XML CFI Convert FAC to integer <0189> D16E D6,54,03 CEQ >03,@FAC10 OK? <0190> D171 65,A2 BS ERRBV No. <0191> D173 CA,4B,1E CHE 30,@FAC1 ASCII? <0192> D176 71,80 BS DEVASC Yes. <0193> D178 CA,4B,0A CHE 10,@FAC1 Higher then 9? <0194> D17B 65,A2 BS ERRBV No, error <0195> D17D A2,4B,30 ADD 48,@FAC1 Make it ASCII. <0196> D180 BC,54,4B DEVASC ST @FAC1,@TEMP1 Save the number <0197> D183 BF,0C,00 DEV0 DST 5,@BYTES Set up for a string D186 05 <0198> D187 0F,71 XML GETSTR Get string space <0199> D189 31,00,05 MOVE 5,G@DSKSUB,V*SREF Save the string D18C B0,1C,D1 D18F 5D <0200> D190 BC,E0,03 ST @TEMP1,V@3(@SREF) Store the number D193 1C,54 <0201> D195 BD,50,0C DST @BYTES,@FAC6 Copy string length. <0202> D198 BD,4E,1C DST @SREF,@FAC4 Copy string address. <0203> D19B 8F,50 DEV1 DCZ @FAC6 Is it a null string? <0204> D19D 65,9A BS ERRBA YES! Bad Argument <0205> D19F BC,54,B0 ST V*FAC4,@TEMP1 D1A2 4E <0206> D1A3 D6,51,01 CEQ 1,@FAC7 <0207> D1A6 71,83 BS DEV0 <0208> D1A8 00 RTN <0209> *********************************************************** <0210> D1A9 D2,12 POKER DATA BEEP 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0049 EQUATES ALCS-359 <0211> D1AB 05,50,4F STRI 'POKER' CALL POKER(vdpr#,value) D1AE 4B,45,52 <0212> D1B1 D1,B3 DATA $+2 <0213> D1B3 06,D1,00 CALL GLPARZ <0214> D1B6 06,D1,26 POKAGN CALL GETNUM <0215> D1B9 CB,4A,00 DCHE 8,@FAC D1BC 08 <0216> D1BD 65,A2 BS ERRBV <0217> D1BF BC,00,4B ST @FAC1,@VAR0 <0218> D1C2 06,D1,56 CALL SUBLP3 <0219> D1C5 8A,00 CASE @VAR0 <0220> D1C7 52,06 BR PREG0 <0221> D1C9 51,FF BR PREG1 <0222> D1CB 51,F8 BR PREG2 <0223> D1CD 51,F1 BR PREG3 <0224> D1CF 51,EA BR PREG4 <0225> D1D1 51,E3 BR PREG5 <0226> D1D3 51,DC BR PREG6 <0227> D1D5 3D,00,01 MOVE 1,@FAC1,#7 D1D8 07,4B <0228> D1DA 52,0B BR POKEND <0229> D1DC 3D,00,01 PREG6 MOVE 1,@FAC1,#6 D1DF 06,4B <0230> D1E1 52,0B BR POKEND <0231> D1E3 3D,00,01 PREG5 MOVE 1,@FAC1,#5 D1E6 05,4B <0232> D1E8 52,0B BR POKEND <0233> D1EA 3D,00,01 PREG4 MOVE 1,@FAC1,#4 D1ED 04,4B <0234> D1EF 52,0B BR POKEND <0235> D1F1 3D,00,01 PREG3 MOVE 1,@FAC1,#3 D1F4 03,4B <0236> D1F6 52,0B BR POKEND <0237> D1F8 3D,00,01 PREG2 MOVE 1,@FAC1,#2 D1FB 02,4B <0238> D1FD 52,0B BR POKEND <0239> D1FF 3D,00,01 PREG1 MOVE 1,@FAC1,#1 D202 01,4B <0240> D204 52,0B BR POKEND <0241> D206 3D,00,01 PREG0 MOVE 1,@FAC1,#0 D209 00,4B <0242> D20B D6,42,B3 POKEND CEQ COMMAZ,@CHAT <0243> D20E 71,B6 BS POKAGN <0244> D210 43,16 BR PEEK5 <0245> ****************************** <0246> D212 D2,20 BEEP DATA HONK <0247> D214 04,42,45 STRI 'BEEP' CALL BEEP D217 45,50 <0248> D219 D2,1B DATA $+2 <0249> D21B 06,00,34 CALL ACCTON <0250> D21E 41,E3 BR LDRET2 <0251> D220 D2,2E HONK DATA DIRECT <0252> D222 04,48,4F STRI 'HONK' CALL HONK D225 4E,4B <0253> D227 D2,29 DATA $+2 <0254> D229 06,00,36 CALL BADTON <0255> D22C 41,E3 BR LDRET2 <0256> ****************************** <0257> D22E D2,36 DIRECT DATA AMAP <0258> D230 03,44,49 STRI 'DIR' CALL DIR(pathname) D233 52 <0259> D234 C6,CC DATA GKCAT <0260> ****************************** <0261> D236 D2,50 AMAP DATA APASS 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0050 EQUATES ALCS-359 <0262> D238 06,41,4D STRI 'AMSMAP' CALL AMSMAP D23B 53,4D,41 D23E 50 <0263> D23F D2,41 DATA $+2 <0264> D241 06,D2,46 CALL AMSMAP <0265> D244 41,E3 BR LDRET2 <0266> D246 06,D2,9E AMSMAP CALL AMSSUB <0267> D249 BF,14,1D DST >1D01,@STORE D24C 01 <0268> D24D 0F,F0 XML >F0 <0269> D24F 00 RTN <0270> D250 D2,6B APASS DATA ARWOFF <0271> D252 07,41,4D STRI 'AMSPASS' CALL AMSPASS D255 53,50,41 D258 53,53 <0272> D25A D2,5C DATA $+2 <0273> D25C 06,D2,61 CALL AMSPAS <0274> D25F 41,E3 BR LDRET2 <0275> D261 06,D2,9E AMSPAS CALL AMSSUB <0276> D264 BF,14,1E DST >1E01,@STORE D267 01 <0277> D268 0F,F0 XML >F0 <0278> D26A 00 RTN <0279> D26B D2,85 ARWOFF DATA ARWON <0280> D26D 06,41,4D STRI 'AMSOFF' CALL AMSOFF D270 53,4F,46 D273 46 <0281> D274 D2,76 DATA $+2 <0282> D276 06,D2,7B CALL AMSOFF <0283> D279 41,E3 BR LDRET2 <0284> D27B 06,D2,9E AMSOFF CALL AMSSUB <0285> D27E BF,14,1E DST >1E00,@STORE D281 00 <0286> D282 0F,F0 XML >F0 <0287> D284 00 RTN <0288> D285 D2,BD ARWON DATA ISRON <0289> D287 05,41,4D STRI 'AMSON' CALL AMSON D28A 53,4F,4E <0290> D28D D2,8F DATA $+2 <0291> D28F 06,D2,94 CALL AMSON <0292> D292 41,E3 BR LDRET2 <0293> D294 06,D2,9E AMSON CALL AMSSUB <0294> D297 BF,14,1D DST >1D00,@STORE D29A 00 <0295> D29B 0F,F0 XML >F0 <0296> D29D 00 RTN <0297> D29E 31,00,18 AMSSUB MOVE 24,G@AMSCRU,@>8300 D2A1 00,D2,A5 <0298> D2A4 00 RTN <0299> ****************************************************** <0300> * CPU PROGRAM FOR >8300 SCATCH PAD SUBROUTINE AMSCPU * <0301> *********************************************************** <0302> * * AORG >8300 <0303> D2A5 83,02 AMSCRU DATA >8302 * CPUPGM DATA >8302 * First address. <0304> D2A7 04,20 DATA >0420 * BLWP @AMSCPU * Switch contex <0305> D2A9 83,0C DATA >830C * <0306> D2AB 04,E0 DATA >04E0 * CLR @>837C * Clear for GPL <0307> D2AD 83,7C DATA >837C * <0308> D2AF 04,5B DATA >045B * RT * Return to GPL. <0309> ****************************************************** <0310> * * AMS CPU SUBPROGRAM <0311> D2B1 83,4A DATA >834A * AMSCPU DATA >834A <0312> D2B3 83,10 DATA >8310 * DATA AMSCRU <0313> D2B5 02,0C DATA >020C * AMSCRU LI R12,>1E00 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0051 EQUATES ALCS-359 <0314> D2B7 1E,00 DATA >1E00 * <0315> D2B9 1D,00 DATA >1D00 * SBO 0 <0316> D2BB 03,80 DATA >0380 * RTWP <0317> *********************************************************** <0318> * * END <0319> ****************************************************** <0320> D2BD D2,ED ISRON DATA ISROFF <0321> D2BF 05,49,53 STRI 'ISRON' CALL ISRON(variable) D2C2 52,4F,4E <0322> D2C5 D2,C7 DATA $+2 <0323> D2C7 06,D1,00 CALL GLPARZ <0324> D2CA 06,D1,56 CALL SUBLP3 <0325> D2CD 8F,4A DCZ @FAC <0326> D2CF 65,A2 BS ERRBV <0327> D2D1 06,D2,D6 CALL SISRON <0328> D2D4 43,16 BR PEEK5 <0329> D2D6 31,00,0E SISRON MOVE 14,G@GISRON,@>8300 D2D9 00,D2,DF <0330> D2DC 0F,F0 XML >F0 <0331> D2DE 00 RTN <0332> ****************************************************** <0333> * CPU PROGRAM FOR >8300 SCRATCH PAD CPU ISR HOOK ON * <0334> ****************************************************** <0335> * * AORG >8300 <0336> D2DF 83,02 GISRON DATA >8302 * DATA >8302 <0337> D2E1 C8,20 DATA >C820 * MOV @>834A,@>83C4 <0338> D2E3 83,4A DATA >834A * <0339> D2E5 83,C4 DATA >83C4 * <0340> D2E7 04,E0 DATA >04E0 * EXIT CLR @>837C <0341> D2E9 83,7C DATA >837C * <0342> D2EB 04,5B DATA >045B * RT <0343> * * END <0344> ****************************************************** <0345> D2ED D3,3A ISROFF DATA ABANK <0346> D2EF 06,49,53 STRI 'ISROFF' CALL ISROFF(variable) D2F2 52,4F,46 D2F5 46 <0347> D2F6 D2,F8 DATA $+2 <0348> D2F8 06,D1,00 CALL GLPARZ <0349> D2FB 06,D3,11 CALL SISROF <0350> D2FE 0F,79 XML PGMCHR <0351> D300 BD,00,4A DST @FAC,@VAR0 <0352> D303 06,D1,4A CALL SNDER <0353> D306 06,C4,2C CALL CLRFAC <0354> D309 BD,4A,00 DST @VAR0,@FAC <0355> D30C 06,D1,51 CALL CIFSND <0356> D30F 43,16 BR PEEK5 <0357> D311 BD,4E,18 SISROF DST @>8318,@FAC4 <0358> D314 31,00,1A MOVE 26,G@GISROF,@>8300 D317 00,D3,20 <0359> D31A 0F,F0 XML >F0 <0360> D31C BD,18,4E DST @FAC4,@>8318 <0361> D31F 00 RTN <0362> ****************************************************** <0363> * CPU PROGRAM FOR >8300 SCRATCH PAD CPU ISR HOOK OFF * <0364> ****************************************************** <0365> * AORG >8300 <0366> D320 83,02 GISROF DATA >8302 * DATA >8302 <0367> D322 C8,20 DATA >C820 * ISROFF MOV @>83C4,@>83C4 <0368> D324 83,C4 DATA >83C4 * <0369> D326 83,C4 DATA >83C4 * <0370> D328 13,05 DATA >1305 * JEQ NHOOK <0371> D32A C8,20 DATA >C820 * MOV @>83C4,@>834A <0372> D32C 83,C4 DATA >83C4 * 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0052 EQUATES ALCS-359 <0373> D32E 83,4A DATA >834A * <0374> D330 04,E0 DATA >04E0 * NHOOK CLR @>83C4 <0375> D332 83,C4 DATA >83C4 * <0376> D334 04,E0 DATA >04E0 * CLR @>837C <0377> D336 83,7C DATA >837C * <0378> D338 04,5B DATA >045B * RT <0379> * * END <0380> ****************************************************** <0381> D33A D4,02 ABANK DATA AINIT <0382> D33C 07,41,4D STRI 'AMSBANK' CALL AMSBANK(bank-number) D33F 53,42,41 D342 4E,4B <0383> D344 D3,46 DATA $+2 <0384> D346 06,D1,00 CALL GLPARZ * ( ? <0385> D349 06,D1,26 CALL GETNUM * Get low page. <0386> D34C CB,4A,00 DCHE 240,@FAC * Too high? D34F F0 <0387> D350 65,A2 BS ERRBV * ERROR BAD VALUE. <0388> D352 A2,4B,10 ADD 16,@FAC1 * Add 16 to it. <0389> D355 0F,77 XML VPUSH * Save low page. <0390> D357 06,D1,56 CALL SUBLP3 * Get high page. <0391> D35A CB,4A,00 DCHE 240,@FAC * Too high? D35D F0 <0392> D35E 65,A2 BS ERRBV * ERROR BAD VALUE. <0393> D360 A2,4B,10 ADD 16,@FAC1 * Add 16 to it. <0394> D363 BC,5D,4B ST @FAC1,@ARG1 * Save high page. <0395> D366 06,D2,46 CALL AMSMAP * AMSMAP <0396> D369 06,D2,94 CALL AMSON * AMSON <0397> <0398> D36C 0F,78 XML VPOP * Fetch low page. <0399> D36E BC,5C,4B ST @FAC1,@ARG * Save low page. <0400> <0401> D371 BC,4A,8F ST @>4004,@FAC * Save old page. D374 BD,04 <0402> D376 BC,4B,8F ST @>4006,@FAC1 * Save old page 2. D379 BD,06 <0403> <0404> D37B BC,8F,BD ST @ARG,@>4004 * Load new low page. D37E 04,5C <0405> D380 BD,50,8F DST @>2000,@FAC6 * Save new low first bytes. D383 9D,00 <0406> D385 BC,8F,BD ST @ARG,@>4006 * Duplicate new low page. D388 06,5C <0407> D38A BF,8F,9D DST >5555,@>2000 * Write test bytes. D38D 00,55,55 <0408> D390 D7,8F,AD DCEQ >5555,@>3000 * Did it write? D393 00,55,55 <0409> D396 53,CE BR AMSERR * No, ERROR. <0410> D398 BD,8F,9D DST @FAC6,@>2000 * Restore new low bytes. D39B 00,50 <0411> <0412> D39D BC,8F,BD ST @ARG1,@>4004 * Load new high page. D3A0 04,5D <0413> D3A2 BD,50,8F DST @>2000,@FAC6 * Save new high first bytes. D3A5 9D,00 <0414> D3A7 BC,8F,BD ST @ARG1,@>4006 * Duplicate new high page. D3AA 06,5D <0415> D3AC BF,8F,9D DST >9999,@>2000 * Write test bytes. D3AF 00,99,99 <0416> D3B2 D7,8F,AD DCEQ >9999,@>3000 * Did it write? D3B5 00,99,99 <0417> D3B8 53,CE BR AMSERR * No, ERROR. <0418> D3BA BD,8F,9D DST @FAC6,@>2000 * Restore new high bytes. D3BD 00,50 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0053 EQUATES ALCS-359 <0419> <0420> D3BF BC,8F,BD ST @ARG,@>4004 * Load new low page. D3C2 04,5C <0421> D3C4 BC,8F,BD ST @ARG1,@>4006 * Load new high page. D3C7 06,5D <0422> D3C9 06,D2,7B CALL AMSOFF * AMSOFF <0423> D3CC 43,16 BR PEEK5 <0424> ******************************* <0425> D3CE BC,8F,BD AMSERR ST @FAC,@>4004 * Restore old page. D3D1 04,4A <0426> D3D3 BC,8F,BD ST @FAC1,@>4006 * Restore old page 2. D3D6 06,4B <0427> D3D8 06,D2,7B CALL AMSOFF * AMSOFF <0428> D3DB 0F,83 XML SCROLL <0429> D3DD 08 FMT <0430> D3DE FC,60 SCRO >60 <0431> D3E0 FE,17 ROW 23 <0432> D3E2 FF,02 COL 2 <0433> D3E4 19,2A,20 HTEX '* WARNING AMS BANK ERROR *' D3E7 57,41,52 D3EA 4E,49,4E D3ED 47,20,41 D3F0 4D,53,20 D3F3 42,41,4E D3F6 4B,20,45 D3F9 52,52,4F D3FC 52,20,2A <0434> D3FF FB FEND <0435> D400 45,A2 BR ERRBV <0436> ******************************* <0437> D402 D4,2E AINIT DATA CHRALL <0438> D404 07,41,4D STRI 'AMSINIT' CALL AMSINIT D407 53,49,4E D40A 49,54 <0439> D40C D4,0E DATA $+2 <0440> D40E 06,D2,94 CALL AMSON <0441> D411 BF,4A,5F DST >5FFE,@FAC D414 FE <0442> D415 BE,4C,0F ST >0F,@FAC2 <0443> D418 35,00,01 AINITL MOVE 1,@FAC2,@0(@FAC) D41B CF,7D,00 D41E 4A,4C <0444> D420 97,4A DDECT @FAC <0445> D422 92,4C DEC @FAC2 <0446> D424 54,18 BR AINITL <0447> D426 06,D2,7B CALL AMSOFF <0448> D429 06,D2,46 CALL AMSMAP <0449> D42C 41,E3 BR LDRET2 <0450> ******************************* <0451> D42E D4,5A CHRALL DATA USER <0452> D430 0A,43,48 STRI 'CHARSETALL' CALL CHARSETALL D433 41,52,53 D436 45,54,41 D439 4C,4C <0453> D43B D4,3D DATA $+2 <0454> D43D BE,4C,5F ST 95,@FAC2 All 95 charaters <0455> D440 06,60,18 CALL CHRTBL Load RXB character set <0456> D443 BE,A8,0F ST >10,V@>080F Set 1st set to Black on Tran D446 10 <0457> D447 35,00,10 MOVE 16,V@>080F,V@>0810 Ripple the rest D44A A8,10,A8 D44D 0F <0458> D44E 41,E3 BR LDRET2 Return to XB <0459> ******************************* 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0054 EQUATES ALCS-359 <0460> D450 00,14,09 UPAB BYTE 0,>14,>09,>00,80,0,0,0,0,0 D453 00,50,00 D456 00,00,00 D459 00 <0461> D45A D4,87 USER DATA BASIC <0462> D45C 04,55,53 STRI 'USER' CALL USER(path-string) D45F 45,52 <0463> D461 D4,63 DATA $+2 <0464> D463 06,D1,00 CALL GLPARZ <0465> D466 06,D1,0C CALL STRGET <0466> D469 BE,A8,C0 ST >20,V@>08C0 D46C 20 <0467> D46D 35,00,50 MOVE 80,V@>08C0,V@>08C1 D470 A8,C1,A8 D473 C0 <0468> D474 31,00,0A MOVE 10,G@UPAB,V@>08C0 D477 A8,C0,D4 D47A 50 <0469> D47B BC,A8,C9 ST @FAC7,V@>08C9 D47E 51 <0470> D47F 34,50,A8 MOVE @FAC6,V*FAC4,V@>08CA D482 CA,B0,4E <0471> D485 43,16 BR PEEK5 <0472> ************************** <0473> D487 D4,97 BASIC DATA BSAVE <0474> D489 05,42,41 STRI 'BASIC' CALL BASIC D48C 53,49,43 <0475> D48F D4,91 DATA $+2 <0476> D491 06,80,12 CALL CLSALL <0477> 216F GBASIC EQU >216F <0478> D494 05,21,6F B GBASIC [0016] *********************************************************** [0017] COPY 'DSK5.MYXB6-H' <0001> ************************** <0002> D497 D4,B7 BSAVE DATA BLOAD <0003> D499 05,42,53 STRI 'BSAVE' CALL BSAVE(pathstring) D49C 41,56,45 <0004> D49F D4,A1 DATA $+2 <0005> D4A1 06,D4,E9 CALL MYSAL * Get pathname <0006> D4A4 BE,AF,10 ST >06,V@>1000 * LOAD opcode D4A7 00,06 <0007> D4A9 35,20,00 MOVE 8192,@>2000,V@>1020 D4AC AF,10,20 D4AF 8F,9D,00 <0008> D4B2 06,D4,D7 CALL MYDOIT * DSRLNK opcode <0009> D4B5 43,16 BR PEEK5 * Done <0010> D4B7 D5,A6 BLOAD DATA RENAME <0011> D4B9 05,42,4C STRI 'BLOAD' CALL BLOAD(pathstring) D4BC 4F,41,44 <0012> D4BF D4,C1 DATA $+2 <0013> D4C1 06,D4,E9 CALL MYSAL * Get pathname <0014> D4C4 BE,AF,10 ST >05,V@>1000 * LOAD opcode D4C7 00,05 <0015> D4C9 06,D4,D7 CALL MYDOIT * DSRLNK opcode <0016> D4CC 35,20,00 MOVE 8192,V@>1020,@>2000 D4CF 8F,9D,00 D4D2 AF,10,20 <0017> D4D5 43,16 BR PEEK5 * Done <0018> D4D7 BF,56,10 MYDOIT DST >1009,@FAC12 * Get buffer address in VDP D4DA 09 <0019> D4DB 06,00,10 CALL LINK * DSRLNK <0020> D4DE 08 BYTE >08 <0021> D4DF 65,B5 BS ERRFE * File Error <0022> D4E1 DA,AF,10 CLOG >E0,V@>1001 * Set error bits 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0055 EQUATES ALCS-359 D4E4 01,E0 <0023> D4E6 45,B5 BR ERRFE <0024> D4E8 00 RTN <0025> D4E9 0F,70 MYSAL XML COMPCT * GARBAGE COLLECTION <0026> D4EB BD,5E,1A DST @STREND,@ARG2 * String end <0027> D4EE A5,5E,6E DSUB @VSPTR,@ARG2 * Value Stack PoinTeR <0028> D4F1 A7,5E,00 DSUB 63,@ARG2 * Size of Value Stack D4F4 3F <0029> D4F5 CB,5E,20 DCHE >2021,@ARG2 * Size of buffer D4F8 21 <0030> D4F9 45,5A BR ERRSO * Error Stack Overflow <0031> D4FB 06,D1,00 CALL GLPARZ * ( <0032> D4FE 06,D1,0C CALL STRGET * Pathstring <0033> D501 86,AF,10 CLR V@>1000 * 0 BYTE D504 00 <0034> D505 35,20,20 MOVE >2020,V@>1000,V@>1001 * Ripple D508 AF,10,01 D50B AF,10,00 <0035> D50E BF,AF,10 DST >1020,V@>1002 * Buffer address D511 02,10,20 <0036> D514 BF,AF,10 DST >2000,V@>1006 * Number of bytes D517 06,20,00 <0037> D51A BC,AF,10 ST @FAC7,V@>1009 * Length byte D51D 09,51 <0038> D51F 34,50,AF MOVE @FAC6,V*FAC4,V@>100A * Pathstring D522 10,0A,B0 D525 4E <0039> D526 00 RTN <0040> ******************************* <0041> D527 88,5A DSKDSR FETCH @FAC16 * Get Length of name <0042> D529 88,5B FETCH @FAC17 * Get Subroutine # <0043> D52B BD,A3,C0 DST @FAC16,V@>03C0 * Load into PAB D52E 5A <0044> D52F BF,56,03 DST >03C0,@FAC12 * PAB address in VDP D532 C0 <0045> D533 06,00,10 CALL LINK * DSRLNK <0046> D536 0A BYTE >0A * Subroutine <0047> D537 65,B5 BS ERRFE * File Error <0048> D539 E6,50,05 SRL 5,@FAC6 * <0049> D53C 8E,50 CZ @FAC6 * <0050> D53E 45,B5 BR ERRFE * File Error <0051> D540 00 RTN * <0052> ******************************* <0053> D541 06,D1,62 DSKNAM CALL DEVNAM * DSK# or SCS# or WDS# <0054> D544 35,00,05 MOVE 5,V*FAC4,@ARG * Get device name D547 5C,B0,4E <0055> D54A BC,17,5F ST @ARG3,@DEVNUM * Save device number characte <0056> D54D D7,5C,44 DCEQ 'DS',@ARG D550 53 <0057> D551 55,5C BR DSKNA2 <0058> D553 D6,5E,4B CEQ 'K',@ARG2 <0059> D556 45,9A BR ERRBA * Error Bad Argument <0060> D558 86,16 CLR @DFLAG * Set DSK flag <0061> D55A 55,75 BR DSKNA4 <0062> D55C D7,5C,53 DSKNA2 DCEQ 'SC',@ARG D55F 43 <0063> D560 75,68 BS DSKNA3 <0064> D562 D7,5C,57 DCEQ 'WD',@ARG D565 44 <0065> D566 45,9A BR ERRBA * Error Bad Argument <0066> D568 D6,5E,53 DSKNA3 CEQ 'S',@ARG2 <0067> D56B 45,9A BR ERRBA * Error Bad Argument <0068> D56D BE,16,FF ST >FF,@DFLAG * Set SCS or WDS flag <0069> D570 BD,10,4E DST @FAC4,@VAR5 * Get string address 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0056 EQUATES ALCS-359 <0070> D573 93,10 DDEC @VAR5 * Point to PATH string length <0071> D575 A6,17,30 DSKNA4 SUB 48,@DEVNUM * DSK# or SCS# or WDS# -1 <0072> D578 00 RTN <0073> ******************************* <0074> D579 06,D1,0C GETFN CALL STRGET * Get string <0075> D57C C6,51,0A CH 10,@FAC7 * Length > 10? <0076> D57F 65,3F BS ERRNTL * Error Name Too Long <0077> D581 8F,50 DCZ @FAC6 * Length = 0? <0078> D583 65,9A BS ERRBA * Error Bad Argument <0079> D585 BE,A3,C0 ST >20,V@>03C0 * Clear PATH buffer D588 20 <0080> D589 35,00,1F MOVE 31,V@>03C0,V@>03C1 D58C A3,C1,A3 D58F C0 <0081> D590 34,50,A3 MOVE @FAC6,V*FAC4,V@>03C2 * File name D593 C2,B0,4E <0082> D596 00 RTN <0083> ******************************* <0084> D597 BC,4C,17 PATH ST @DEVNUM,@FAC2 * Device # <0085> D59A BD,4E,10 DST @VAR5,@FAC4 * Pathname address lenght/st[ <0086> D59D BF,A3,C0 DST >0127,V@>03C0 * Opcode of PATHNAME subrouti D5A0 01,27 <0087> D5A2 06,D8,65 CALL RWDSR * Read/Write DSR LINK <0088> D5A5 00 RTN <0089> ******************************* <0090> D5A6 D5,FC RENAME DATA PROT <0091> D5A8 06,52,45 STRI 'RENAME' CALL RENAME(pathname,oldname, D5AB 4E,41,4D D5AE 45 <0092> D5AF D5,B1 DATA $+2 <0093> D5B1 06,D1,00 CALL GLPARZ * ( <0094> D5B4 06,D5,41 RENAGN CALL DSKNAM * Pathname <0095> D5B7 D6,42,B3 CEQ COMMAZ,@CHAT * , <0096> D5BA 45,33 BR ERRSYN <0097> D5BC 8E,16 CZ @DFLAG * DSK? <0098> D5BE 75,C3 BS RENNP * Yes <0099> D5C0 06,D5,97 CALL PATH * Set PATH <0100> D5C3 06,D5,79 RENNP CALL GETFN * Old name <0101> D5C6 D6,42,B3 CEQ COMMAZ,@CHAT * , <0102> D5C9 45,33 BR ERRSYN <0103> D5CB 06,D1,0C CALL STRGET * New name <0104> D5CE C6,51,0A CH 10,@FAC7 * Length > 10? <0105> D5D1 65,3F BS ERRNTL * Error Name Too Long <0106> D5D3 34,50,A3 MOVE @FAC6,V*FAC4,V@>03D0 D5D6 D0,B0,4E <0107> D5D9 BC,4C,17 ST @DEVNUM,@FAC2 * DSK# <0108> D5DC BF,4E,03 DST >03D0,@FAC4 * New name D5DF D0 <0109> D5E0 BF,50,03 DST >03C2,@FAC6 * Old name D5E3 C2 <0110> D5E4 8E,16 CZ @DFLAG * DSK? <0111> D5E6 75,F0 BS RENDSK * Yes <0112> D5E8 06,D5,27 CALL DSKDSR * DSKLNK <0113> D5EB 01,23 DATA >0123 * Opcode RENAME HARD <0114> D5ED 05,D5,F5 B RENEND <0115> D5F0 06,D5,27 RENDSK CALL DSKDSR * DSKLNK <0116> D5F3 01,13 DATA >0113 * Opcode RENAME DISK <0117> D5F5 D6,42,B3 RENEND CEQ COMMAZ,@CHAT * , <0118> D5F8 75,B4 BS RENAGN * Redo again <0119> D5FA 43,16 BR PEEK5 <0120> ******************************* <0121> D5FC D6,48 PROT DATA SCSI <0122> D5FE 07,50,52 STRI 'PROTECT' CALL PROTECT(pathname,filenam D601 4F,54,45 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0057 EQUATES ALCS-359 D604 43,54 <0123> D606 D6,08 DATA $+2 <0124> D608 06,D1,00 CALL GLPARZ * ( <0125> D60B 06,D5,41 PROAGN CALL DSKNAM * Get pathname <0126> D60E D6,42,B3 CEQ COMMAZ,@CHAT * , <0127> D611 45,33 BR ERRSYN <0128> D613 8E,16 CZ @DFLAG * DSK? <0129> D615 76,1A BS PRONP * Yes <0130> D617 06,D5,97 CALL PATH * Set PATH <0131> D61A 06,D5,79 PRONP CALL GETFN * Get filename <0132> D61D 06,D1,56 CALL SUBLP3 * Option number <0133> D620 86,4D CLR @FAC3 * UNPROTECT <0134> D622 8F,4A DCZ @FAC * Unprotect? <0135> D624 76,29 BS UNPRO <0136> D626 BE,4D,FF ST >FF,@FAC3 * PROTECT <0137> D629 BC,4C,17 UNPRO ST @DEVNUM,@FAC2 * DSK# <0138> D62C BF,4E,03 DST >03C2,@FAC4 * Filename D62F C2 <0139> D630 8E,16 CZ @DFLAG * DSK? <0140> D632 76,3C BS PRODSK * Yes <0141> D634 06,D5,27 CALL DSKDSR * DSRLNK <0142> D637 01,22 DATA >0122 * Opcode PROTECT HARD <0143> D639 05,D6,41 B PROEND <0144> D63C 06,D5,27 PRODSK CALL DSKDSR * DSRLNK <0145> D63F 01,12 DATA >0112 * Opcode PROTECT DISK <0146> D641 D6,42,B3 PROEND CEQ COMMAZ,@CHAT * , <0147> D644 76,0B BS PROAGN * Redo again <0148> D646 43,16 BR PEEK5 <0149> ******************************* <0150> D648 D6,77 SCSI DATA MKDIR <0151> D64A 04,53,43 STRI 'SCSI' CALL SCSI(pathname,string-var D64D 53,49 <0152> D64F D6,51 DATA $+2 <0153> D651 06,D1,00 CALL GLPARZ * ( <0154> D654 06,D5,41 SCSAGN CALL DSKNAM * Pathname <0155> D657 D6,42,B3 CEQ COMMAZ,@CHAT * , <0156> D65A 45,33 BR ERRSYN <0157> D65C BF,0C,00 DST 44,@BYTES * Length of buffer D65F 2C <0158> D660 0F,71 XML GETSTR * Get string space <0159> D662 BC,4C,17 ST @DEVNUM,@FAC2 * SCS# <0160> D665 BD,4E,1C DST @SREF,@FAC4 * String address <0161> D668 06,D5,27 CALL DSKDSR * DSRLNK <0162> D66B 01,1C DATA >011C * Opcode EXAMINE SCSI <0163> D66D 06,D1,2F CALL NGOOD * Assign string to variable <0164> D670 D6,42,B3 CEQ COMMAZ,@CHAT * , <0165> D673 76,54 BS SCSAGN * Redo again <0166> D675 43,16 BR PEEK5 <0167> ******************************* <0168> D677 D6,E0 MKDIR DATA RMDIR <0169> D679 05,4D,4B STRI 'MKDIR' CALL MKDIR(pathname,directory D67C 44,49,52 <0170> D67F D6,81 DATA $+2 <0171> D681 BF,0C,00 DST 255,@BYTES * For sector 0 access D684 FF <0172> D685 0F,71 XML GETSTR * Get string space <0173> D687 BD,00,1C DST @SREF,@VAR0 * Buffer address <0174> D68A 93,00 DDEC @VAR0 * Make it 256 byte buffer <0175> D68C 06,D1,00 CALL GLPARZ * ( <0176> D68F 06,D5,41 MKDIR2 CALL DSKNAM * Pathname <0177> D692 D6,42,B3 CEQ COMMAZ,@CHAT * , <0178> D695 45,33 BR ERRSYN <0179> D697 8E,16 CZ @DFLAG * DSK? <0180> D699 56,C7 BR MKDIR3 * No, Hard 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0058 EQUATES ALCS-359 <0181> D69B C6,51,05 CH 5,@FAC7 * Length > 5? <0182> D69E 65,3F BS ERRNTL * Error Name Too Long <0183> D6A0 06,D5,79 CALL GETFN * Filename <0184> D6A3 BE,4D,FF ST >FF,@FAC3 * Set to READ SECTOR <0185> D6A6 56,AA BR VOL1ST <0186> D6A8 86,4D VOL2ND CLR @FAC3 * Set to WRITE SECTOR <0187> D6AA 87,4A VOL1ST DCLR @FAC * Returned SECTOR <0188> D6AC BC,4C,17 ST @DEVNUM,@FAC2 * DSK# <0189> D6AF BD,4E,00 DST @VAR0,@FAC4 * Buffer Address <0190> D6B2 87,50 DCLR @FAC6 * Sector number 0 DSK <0191> D6B4 06,D5,27 CALL DSKDSR * DSRLNK <0192> D6B7 01,10 DATA >0110 * Opcode SECTOR DISK <0193> D6B9 35,00,0A MOVE 10,V@>03C2,V*VAR0 * Copy VOLUME name over old n D6BC B0,00,A3 D6BF C2 <0194> D6C0 8E,4D CZ @FAC3 * First pass? <0195> D6C2 56,A8 BR VOL2ND * No, again <0196> D6C4 05,D6,D9 B MKDIR4 <0197> D6C7 06,D5,97 MKDIR3 CALL PATH * Set PATH <0198> D6CA 06,D5,79 CALL GETFN * Directory name <0199> D6CD BC,4C,17 ST @DEVNUM,@FAC2 * SCS# <0200> D6D0 BF,4E,03 DST >03C2,@FAC4 * Name address D6D3 C2 <0201> D6D4 06,D5,27 CALL DSKDSR * DSRLNK <0202> D6D7 01,28 DATA >0128 * Opcode MAKE DIRECTORY HARD <0203> D6D9 D6,42,B3 MKDIR4 CEQ COMMAZ,@CHAT * , <0204> D6DC 76,8F BS MKDIR2 * Redo again <0205> D6DE 43,16 BR PEEK5 <0206> ******************************* <0207> D6E0 D7,0E RMDIR DATA CUTDIR <0208> D6E2 05,52,4D STRI 'RMDIR' CALL RMDIR(pathname,directory D6E5 44,49,52 <0209> D6E8 D6,EA DATA $+2 <0210> D6EA 06,D1,00 CALL GLPARZ * ( <0211> D6ED 06,D5,41 RMDIR2 CALL DSKNAM * Pathname <0212> D6F0 D6,42,B3 CEQ COMMAZ,@CHAT * , <0213> D6F3 45,33 BR ERRSYN <0214> D6F5 06,D5,97 CALL PATH * Set PATH <0215> D6F8 06,D5,79 CALL GETFN * Directory name <0216> D6FB BC,4C,17 ST @DEVNUM,@FAC2 * SCS# <0217> D6FE BF,4E,03 DST >03C2,@FAC4 * Name address D701 C2 <0218> D702 06,D5,27 CALL DSKDSR * DSRLNK <0219> D705 01,29 DATA >0129 * Opcode REMOVE DIRECTORY HAR <0220> D707 D6,42,B3 CEQ COMMAZ,@CHAT * , <0221> D70A 76,ED BS RMDIR2 * Redo again <0222> D70C 43,16 BR PEEK5 <0223> ******************************* <0224> D70E D7,3A CUTDIR DATA FCOPY <0225> D710 06,43,55 STRI 'CUTDIR' CALL CUTDIR(pathname,director D713 54,44,49 D716 52 <0226> D717 D7,19 DATA $+2 <0227> D719 06,D1,00 CALL GLPARZ * ( <0228> D71C 06,D5,41 CUTDI2 CALL DSKNAM * Pathname <0229> D71F D6,42,B3 CEQ COMMAZ,@CHAT * , <0230> D722 45,33 BR ERRSYN <0231> D724 06,D5,79 CALL GETFN * Set PATH <0232> D727 BC,4C,17 ST @DEVNUM,@FAC2 * SCS# <0233> D72A BF,4E,03 DST >03C2,@FAC4 * Name address D72D C2 <0234> D72E 06,D5,27 CALL DSKDSR * DSRLNK <0235> D731 01,2A DATA >012A * Opcode CUT DIRECTORY HARD <0236> D733 D6,42,B3 CEQ COMMAZ,@CHAT * , 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0059 EQUATES ALCS-359 <0237> D736 77,1C BS CUTDI2 * Redo again <0238> D738 43,16 BR PEEK5 <0239> ******************************* <0240> D73A D8,72 FCOPY DATA SECTOR <0241> D73C 05,46,43 STRI 'FCOPY' CALL FCOPY(pathname,filename, D73F 4F,50,59 <0242> D742 D7,44 DATA $+2 <0243> D744 0F,70 XML COMPCT * GARBAGE COLLECT <0244> D746 BD,5E,1A DST @STREND,@ARG2 * String end <0245> D749 A5,5E,6E DSUB @VSPTR,@ARG2 * Value Stack PoinTeR address <0246> D74C A7,5E,00 DSUB 63,@ARG2 * Value stack size D74F 3F <0247> D750 CB,5E,10 DCHE >1001,@ARG2 * Buffer size D753 01 <0248> D754 45,5A BR ERRSO * Error Stack Overflow <0249> D756 06,D1,00 CALL GLPARZ * ( <0250> D759 86,00 FCOPY1 CLR @VAR0 * Clear Additional info Buffe <0251> D75B 35,00,0C MOVE 12,@VAR0,@VARV * Ripple D75E 01,00 <0252> D760 06,D5,41 CALL DSKNAM * 1st pathname <0253> D763 D6,42,B3 CEQ COMMAZ,@CHAT * , <0254> D766 45,33 BR ERRSYN <0255> D768 BD,A3,8C DST @DFLAG,V@BUFSRT * FLAG/DSK# D76B 16 <0256> D76C BD,12,10 DST @VAR5,@STRPTR * 1st pathname <0257> D76F 06,D5,79 CALL GETFN * 1st filename <0258> D772 D6,42,B3 CEQ COMMAZ,@CHAT * , <0259> D775 45,33 BR ERRSYN <0260> D777 06,D5,41 CALL DSKNAM * 2nd pathname <0261> D77A D6,42,B3 CEQ COMMAZ,@CHAT * , <0262> D77D 45,33 BR ERRSYN <0263> D77F BD,A3,8E DST @DFLAG,V@BUFEND * FLAG/DSK# D782 16 <0264> D783 BD,14,10 DST @VAR5,@CURLIN * 2nd pathname <0265> D786 06,D1,0C CALL STRGET * 2nd filename <0266> D789 C6,51,0A CH 10,@FAC7 * Length > 10 ? <0267> D78C 65,3F BS ERRNTL * Error Name Too Long <0268> D78E 8E,51 CZ @FAC7 * Length = 0? <0269> D790 65,9A BS ERRBA * Error Bad Argument <0270> D792 34,50,A3 MOVE @FAC6,V*FAC4,V@>03D0 * 2nd filename into buffer D795 D0,B0,4E <0271> D798 86,4D CLR @FAC3 * ADDitional INFO ACCESS CODE <0272> D79A 06,D8,05 CALL FREAD * READ FILE HEADER <0273> D79D BD,1C,02 DST @MNUM,@SREF * Save number of Sectors of F <0274> D7A0 86,4D CLR @FAC3 * ADDITIONAL INFO ACCESS CODE <0275> D7A2 06,D8,35 CALL FWRTE * WRITE FILE HEADER <0276> D7A5 BD,5C,1C DST @SREF,@ARG * Get Total number of Sectors <0277> D7A8 87,4A DCLR @FAC * Clear PASS counter <0278> D7AA CB,5C,00 FCOPY2 DCHE 4,@ARG * ARG>=4 Sectors? D7AD 04 <0279> D7AE 77,B8 BS FCOPY3 * Yes <0280> D7B0 90,4A INC @FAC * PASS+1 <0281> D7B2 BC,4B,5D ST @ARG1,@FAC1 * Save number of sectors left <0282> D7B5 05,D7,C1 B FCOPY4 * Done <0283> D7B8 A7,5C,00 FCOPY3 DSUB 3,@ARG * Sectors-3 D7BB 03 <0284> D7BC 90,4A INC @FAC * PASS+1 <0285> D7BE 05,D7,AA B FCOPY2 * Loop <0286> D7C1 BD,1C,4A FCOPY4 DST @FAC,@SREF * PASS/Number of sectors left <0287> D7C4 87,0E DCLR @CURINC * Sector Pointer <0288> D7C6 D6,1C,01 FCOPY5 CEQ 1,@SREF * Last PASS? <0289> D7C9 57,D1 BR FCOPY6 * No <0290> D7CB BC,4D,1D ST @SREF+1,@FAC3 * Number of sectors Left to r <0291> D7CE 05,D7,D4 B FCOPY7 * Continue 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0060 EQUATES ALCS-359 <0292> D7D1 BE,4D,03 FCOPY6 ST 3,@FAC3 * 3 Sectors to read <0293> D7D4 BD,A3,BA FCOPY7 DST @CURINC,V@>03BA * Save SECTOR NUMBER TO USE D7D7 0E <0294> D7D8 BD,02,0E DST @CURINC,@MNUM * SECTOR NUMBER TO USE <0295> D7DB 06,D8,05 CALL FREAD * READ FILE SECTOR <0296> D7DE D6,1C,01 CEQ 1,@SREF * Last PASS? <0297> D7E1 57,E9 BR FCOPY8 * No <0298> D7E3 BC,4D,1D ST @SREF+1,@FAC3 * Number of sectors left to w <0299> D7E6 05,D7,EC B FCOPY9 * Continue <0300> D7E9 BE,4D,03 FCOPY8 ST 3,@FAC3 * 3 Sectors to write <0301> D7EC BD,0E,A3 FCOPY9 DST V@>03BA,@CURINC * Get sectors to write D7EF BA <0302> D7F0 BD,02,0E DST @CURINC,@MNUM * SECTOR NUMBER TO USE <0303> D7F3 06,D8,35 CALL FWRTE * WRITE FILE SECTOR <0304> D7F6 A3,0E,00 DADD 3,@CURINC * SECTOR+3 D7F9 03 <0305> D7FA 92,1C DEC @SREF * PASS-1 <0306> D7FC 57,C6 BR FCOPY5 * 0=END <0307> D7FE D6,42,B3 CEQ COMMAZ,@CHAT * , <0308> D801 77,59 BS FCOPY1 * Redo again <0309> D803 43,16 BR PEEK5 <0310> ******************************* <0311> D805 BD,16,A3 FREAD DST V@BUFSRT,@DFLAG * 1st FLAG/DSR# D808 8C <0312> D809 8E,16 CZ @DFLAG * DSK? <0313> D80B 78,13 BS FREAD1 * Yes <0314> D80D BD,10,12 DST @STRPTR,@VAR5 * 1st path <0315> D810 06,D5,97 CALL PATH * Set PATH <0316> D813 BF,00,10 FREAD1 DST >1000,@VAR0 * Buffer address in Add info D816 00 <0317> D817 BC,4C,17 ST @DEVNUM,@FAC2 * DSK# <0318> D81A BF,4E,03 DST >03C2,@FAC4 * 1st filename D81D C2 <0319> D81E 86,50 CLR @FAC6 * Pointer to Additional info <0320> D820 8E,16 CZ @DFLAG * DSK? <0321> D822 78,2C BS FREAD2 * Yes <0322> D824 BF,A3,C0 DST >0124,V@>03C0 * Opcode INPUT HARD D827 01,24 <0323> D829 05,D8,31 B FREAD3 <0324> D82C BF,A3,C0 FREAD2 DST >0114,V@>03C0 * Opcode INPUT DISK D82F 01,14 <0325> D831 06,D8,65 FREAD3 CALL RWDSR * DSRLNK <0326> D834 00 RTN <0327> ******************************* <0328> D835 BD,16,A3 FWRTE DST V@BUFEND,@DFLAG * 2nd FLAG/DSK# D838 8E <0329> D839 8E,16 CZ @DFLAG * DSK? <0330> D83B 78,43 BS FWRTE1 * Yes <0331> D83D BD,10,14 DST @CURLIN,@VAR5 * 2nd PATH <0332> D840 06,D5,97 CALL PATH * Set PATH <0333> D843 BF,00,10 FWRTE1 DST >1000,@VAR0 * Buffer Address in Add info D846 00 <0334> D847 BC,4C,17 ST @DEVNUM,@FAC2 * DSK# <0335> D84A BF,4E,03 DST >03D0,@FAC4 * 2nd Filename D84D D0 <0336> D84E 86,50 CLR @FAC6 * Pointer to Add info block <0337> D850 8E,16 CZ @DFLAG * DSK# <0338> D852 78,5C BS FWRTE2 * Yes <0339> D854 BF,A3,C0 DST >0125,V@>03C0 * Opcode OUTPUT HARD D857 01,25 <0340> D859 05,D8,61 B FWRTE3 <0341> D85C BF,A3,C0 FWRTE2 DST >0115,V@>03C0 * Opcode OUTPUT DISK D85F 01,15 <0342> D861 06,D8,65 FWRTE3 CALL RWDSR * DSKLNK 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0061 EQUATES ALCS-359 <0343> D864 00 RTN <0344> ******************************* <0345> D865 BF,56,03 RWDSR DST >03C0,@FAC12 * Buffer address D868 C0 <0346> D869 06,00,10 CALL LINK * DSRLNK <0347> D86C 0A BYTE >0A * Subroutine <0348> D86D 8E,50 CZ @FAC6 * ERRORS? <0349> D86F 45,B5 BR ERRFE * Yes, File Error <0350> D871 00 RTN <0351> ******************************* <0352> D872 00,00 SECTOR DATA >0000 <0353> D874 06,53,45 STRI 'SECTOR' CALL SECTOR(pathname,RWflag,# D877 43,54,4F D87A 52 <0354> D87B D8,7D DATA $+2 <0355> D87D 0F,70 XML COMPCT <0356> D87F BD,5E,1A DST @STREND,@ARG2 <0357> D882 A5,5E,6E DSUB @VSPTR,@ARG2 <0358> D885 A7,5E,00 DSUB 63,@ARG2 D888 3F <0359> D889 CB,5E,01 DCHE 260,@ARG2 D88C 04 <0360> D88D 45,5A BR ERRSO <0361> D88F 06,D1,00 CALL GLPARZ * ( <0362> D892 06,D5,41 SECTOS CALL DSKNAM * Pathname <0363> D895 D6,42,B3 CEQ COMMAZ,@CHAT * , <0364> D898 45,33 BR ERRSYN <0365> D89A 06,D1,26 CALL GETNUM * R/W Flag <0366> D89D 86,00 CLR @VAR0 * WRITE Flag <0367> D89F 8F,4A DCZ @FAC * 0000? <0368> D8A1 78,A5 BS SECTO1 <0369> D8A3 90,00 INC @VAR0 * READ Flag <0370> D8A5 06,D1,26 SECTO1 CALL GETNUM * #SECTORS <0371> D8A8 8F,4A DCZ @FAC * 0000? <0372> D8AA 65,A2 BS ERRBV <0373> D8AC CB,4A,00 DCHE 33,@FAC * Only 32 sectors allowed. D8AF 21 <0374> D8B0 65,A2 BS ERRBV <0375> D8B2 BC,01,4B ST @FAC1,@VARV * Save # SECTORS <0376> D8B5 06,D1,0C CALL STRGET * SECTOR $ <0377> D8B8 8F,50 DCZ @FAC6 * 0 string length? <0378> D8BA 65,A2 BS ERRBV <0379> D8BC 8E,16 CZ @DFLAG * DSK? <0380> D8BE 58,C6 BR SECTO2 * No. <0381> D8C0 CB,50,00 DCHE 5,@FAC6 * String to long? D8C3 05 <0382> D8C4 65,A2 BS ERRBV <0383> D8C6 CB,50,00 SECTO2 DCHE 9,@FAC6 * String to long HARD? D8C9 09 <0384> D8CA 65,A2 BS ERRBV <0385> D8CC BD,0C,50 DST @FAC6,@BYTES * Save string length value. <0386> D8CF A1,4E,50 DADD @FAC6,@FAC4 * Point past end of string. <0387> D8D2 93,4E DDEC @FAC4 * Offset to end of string. <0388> D8D4 86,50 CLR @FAC6 * Sector # buffer. <0389> D8D6 35,00,04 MOVE 4,@FAC6,@FAC7 * Clear buffer. D8D9 51,50 <0390> D8DB BF,5C,03 DST >03C3,@ARG * # number pointer D8DE C3 <0391> D8DF 86,A3,C0 CLR V@>03C0 <0392> D8E2 35,00,04 MOVE 4,V@>03C0,V@>03C1 D8E5 A3,C1,A3 D8E8 C0 <0393> D8E9 86,4A SECTO3 CLR @FAC <0394> D8EB BC,4A,B0 SECTO4 ST V*FAC4,@FAC * Get character. 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0062 EQUATES ALCS-359 D8EE 4E <0395> D8EF CA,4A,47 CHE 71,@FAC * G or higher? <0396> D8F2 65,9A BS ERRBA <0397> D8F4 CA,4A,41 CHE 65,@FAC * A or higher? <0398> D8F7 79,03 BS SECTO5 <0399> D8F9 CA,4A,3A CHE 58,@FAC * : or higher? <0400> D8FC 65,9A BS ERRBA <0401> D8FE CA,4A,30 CHE 48,@FAC * 0 or higher? <0402> D901 45,9A BR ERRBA <0403> D903 A6,4A,30 SECTO5 SUB 48,@FAC * - 0 <0404> D906 CA,4A,0A CHE 10,@FAC * 10 or higher? <0405> D909 59,0E BR SECTO6 <0406> D90B A6,4A,07 SUB >07,@FAC * - 7 <0407> D90E BC,4C,4A SECTO6 ST @FAC,@FAC2 * Save nibble. <0408> D911 93,4E DDEC @FAC4 * $ pointer - 1 <0409> D913 93,0C DDEC @BYTES * $ length - 1 <0410> D915 59,1E BR SECTO7 <0411> D917 BC,B0,5C ST @FAC2,V*ARG * Save # D91A 4C <0412> D91B 05,D9,53 B SECTOA * End routine. <0413> D91E BC,4A,B0 SECTO7 ST V*FAC4,@FAC * Get character. D921 4E <0414> D922 CA,4A,47 CHE 71,@FAC * G or higher? <0415> D925 65,9A BS ERRBA <0416> D927 CA,4A,41 CHE 65,@FAC * A or higher? <0417> D92A 79,36 BS SECTO8 <0418> D92C CA,4A,3A CHE 58,@FAC * : or higher? <0419> D92F 65,9A BS ERRBA <0420> D931 CA,4A,30 CHE 48,@FAC * 0 or higher? <0421> D934 45,9A BR ERRBA <0422> D936 A6,4A,30 SECTO8 SUB 48,@FAC * - 0 <0423> D939 CA,4A,0A CHE 10,@FAC * 10 or higher? <0424> D93C 59,41 BR SECTO9 <0425> D93E A6,4A,07 SUB >07,@FAC * - 7 <0426> D941 E2,4A,04 SECTO9 SLL 4,@FAC * Swap nibbles. <0427> D944 A0,4A,4C ADD @FAC2,@FAC * Add old nibble. <0428> D947 BC,B0,5C ST @FAC,V*ARG * Save # D94A 4A <0429> D94B 93,5C DDEC @ARG * # pointer - 1 <0430> D94D 93,4E DDEC @FAC4 * $ pointer - 1 <0431> D94F 93,0C DDEC @BYTES * $ length - 1 <0432> D951 58,E9 BR SECTO3 <0433> D953 35,00,04 SECTOA MOVE 4,V@>03C0,@FAC6 * Get # D956 50,A3,C0 <0434> D959 8E,16 CZ @DFLAG * DSK? <0435> D95B 59,60 BR SECTOB * No. <0436> D95D BD,50,52 DST @FAC8,@FAC6 * DISK <0437> D960 87,1C SECTOB DCLR @SREF * CPU BUFFER <0438> D962 87,4A SECTOC DCLR @FAC * Clear Returned Sector. <0439> D964 BC,4C,17 ST @DEVNUM,@FAC2 * UNIT# <0440> D967 BC,4D,00 ST @VAR0,@FAC3 * R/W Flag. <0441> D96A BF,4E,10 DST >1000,@FAC4 * VDP BUFFER D96D 00 <0442> D96E 8E,16 CZ @DFLAG * DSK? <0443> D970 79,7A BS SECTOD * Yes. <0444> D972 BF,A3,C0 DST >0120,V@>03C0 * HARD D975 01,20 <0445> D977 05,D9,7F B SECTOE <0446> D97A BF,A3,C0 SECTOD DST >0110,V@>03C0 * DISK D97D 01,10 <0447> D97F 8E,00 SECTOE CZ @VAR0 * WRITE FLAG? <0448> D981 59,8D BR SECRD * NO <0449> D983 35,01,00 MOVE 256,@>2000(@SREF),V@>1000 * WRITE CPU BUFFER D986 AF,10,00 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0063 EQUATES ALCS-359 D989 CF,9D,00 D98C 1C <0450> D98D 06,D8,65 SECRD CALL RWDSR * DSR Access. <0451> D990 8E,00 CZ @VAR0 * WRITE FLAG? <0452> D992 79,9E BS SECWRT * YES <0453> D994 35,01,00 MOVE 256,V@>1000,@>2000(@SREF) * READ VDP BUFFER D997 CF,9D,00 D99A 1C,AF,10 D99D 00 <0454> D99E A3,1C,01 SECWRT DADD 256,@SREF * CPU BUFFER + 256 D9A1 00 <0455> D9A2 8E,16 CZ @DFLAG * DSK? <0456> D9A4 79,B3 BS SECTOH * Yes. <0457> D9A6 D7,52,FF DCEQ >FFFF,@FAC8 * Overflow one word? D9A9 FF <0458> D9AA 79,B1 BS SECTOG * Yes. <0459> D9AC 91,52 DINC @FAC8 * SECTOR# - 1 HARD <0460> D9AE 05,D9,B5 B SECTOI * No. <0461> D9B1 87,52 SECTOG DCLR @FAC8 * HARD <0462> D9B3 91,50 SECTOH DINC @FAC6 * SECTOR# + 1 DISK & HARD <0463> D9B5 92,01 SECTOI DEC @VARV * #SECTORS - 1 <0464> D9B7 59,62 BR SECTOC <0465> D9B9 D6,42,B3 CEQ COMMAZ,@CHAT * ,? <0466> D9BC 78,92 BS SECTOS * Repeat. <0467> D9BE 43,16 BR PEEK5 <0468> *********************************************************** <0469> END 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0064 EQUATES ALCS-359 Symbol Table #1 (New,alpha) 0041 A 834C AAA 8302 AAA1 D33A ABANK 00CB ABSZ 801E ACCEPT 00A4 ACCEPZ 03B7 ACCTRY 8302 ACCUM 03AE ACCVRA 03AC ACCVRW D402 AINIT D418 AINITL 9800 ALCEND 00EC ALLZ 0020 ALSUP D236 AMAP D2A5 AMSCRU D3CE AMSERR D246 AMSMAP D27B AMSOFF D294 AMSON D261 AMSPAS D29E AMSSUB 00BB ANDZ D250 APASS 00F9 APPENZ 835D ARG1 835E ARG2 835F ARG3 8360 ARG4 8361 ARG5 8362 ARG6 C37C ARRAY C38F ARRAY2 D26B ARWOFF D285 ARWON A00A ASC 00DC ASCZ 007C ASSGNV 00CC ATNZ 0032 ATNZZ 00F0 ATZ 602E AUTO1 0394 AUTTMP 0008 BACK 8343 BASE 00F1 BASEZ D487 BASIC 8350 BBB 830C BBB1 D212 BEEP 00EE BEEPZ 0020 BKGD D4B7 BLOAD 0002 BREAK 008E BREAKZ D497 BSAVE 0002 BUF 038E BUFEND 8346 BUFLEV 830E BUFPNT 038C BUFSRT 8366 BYTE1 8367 BYTE2 8368 BYTE3 830C BYTES 830A CALIST 009D CALLZ C6C4 CATLOG 837D CB 834E CCC 8308 CCC1 834A CCHAR 8308 CCPADD 8308 CCPADR 8306 CCPPTR 0012 CFI D11E CFIFCH CB14 CHAR1 CB35 CHAR2 0018 CHAR2Z CB4E CHAR3 004A CHAR3Z CBEB CHAR4 CC55 CHAR5 CCA4 CHAR6 CCF2 CHAR7 CD2B CHAR8 CD59 CHAR9 CD64 CHARA 8342 CHAT 6A78 CHKEND C1EB CHKIN 8302 CHKSUM D42E CHRALL 0005 CHRCNT 601C CHRTAB 6018 CHRTBL 000D CHRTN 00D6 CHRZZ 830E CHSAV 0080 CIF D151 CIFSND 00C5 CIRCUZ 800A CLOSE 00A0 CLOSEZ C42C CLRFAC 0007 CLRLN 8012 CLSALL C277 CLSIT C2A4 CLSNOE 0073 CNS 003A COLON 00B5 COLONZ 002C COMMAT 00B3 COMMAZ 0070 COMPCT 00B8 CONCZ 03BB CONFLG 0075 CONT A012 CONVER 00CD COSZ 8312 COUNT 0010 CPL 03BC CPTEMP A040 CPUBAS 8300 CPUOFF 0820 CRNBUF 08BE CRNEND 007F CRUNCH 0390 CSNTMP 03BA CSNTP1 0010 CSNUM 0002 CSTRIN 830E CURINC 8314 CURLIN 007E CURSOR D71C CUTDI2 D70E CUTDIR 8334 DATA 834D DATAAD 0093 DATAZ 8354 DDD1 0089 DEFZ 8002 DELET 0099 DELETZ 0087 DELREP D183 DEV0 D19B DEV1 D180 DEVASC D162 DEVNAM 8317 DEVNUM 8316 DFLAG 8306 DFLTLM 00E9 DIGITZ 008A DIMZ D22E DIRECT 6FBA DISO 8000 DISPL1 00A2 DISPLZ 00C4 DIVIZ 0003 DLETE 0024 DOLLAR 000A DOWN D527 DSKDSR C290 DSKERR D55C DSKNA2 D568 DSKNA3 D575 DSKNA4 D541 DSKNAM D15D DSKSUB 0010 DSR C27B DSRCAL 8317 DSRFLG 000A DWNARR 007F EDGECH 66CF EDITLN D00D EDTZ00 D079 EDTZ01 D07E EDTZ02 D0AC EDTZ08 D000 EDTZZ0 8350 EEE 8358 EEE1 0081 ELSEZ 02FE ENDSCR 008B ENDZ 8332 ENLN 6A80 ENT09 6A7E ENTER 801C EOF 00CA EOFZ 00BE EQUALZ 00EF ERASEZ 837C ERCODE 6E1B ERPNT5 6E0E ERPRNT C59A ERRBA C586 ERRBLN C57A ERRBS C5A2 ERRBV C58E ERRCC C592 ERRCIP 8322 ERRCOD C5B1 ERRDAT C5AE ERRDE1 C5B5 ERRFE C562 ERRFNN C5A6 ERRIAL C537 ERRIBS C54F ERRIM C5AA ERRINP C5B9 ERRIO C5C8 ERRIVN 038A ERRLN C582 ERRLNF C58A ERRLTL C556 ERRMEM C553 ERRMF1 C56E ERRMS C54B ERRMUV C529 ERRN01 C52C ERRNO C59E ERRNPP C53B ERRNQS C53F ERRNTL C55E ERRNWF C547 ERROBE C596 ERROLP C4C9 ERROR 00A5 ERRORZ C5C1 ERRPV C56A ERRRSC C572 ERRRWG C5BD ERRSNF C543 ERRSNM C566 ERRSNS C55A ERRSO C57E ERRSSL C576 ERRST C530 ERRSY1 C533 ERRSYN CD77 ERRTAB C5C5 ERRUC1 6A84 ERRZ 6A84 ERRZZ C405 EXE01 0076 EXECG 8376 EXPZ 00CE EXPZZ 832E EXTRAM 0046 F 834B FAC1 8354 FAC10 8355 FAC11 8356 FAC12 8357 FAC13 8358 FAC14 8359 FAC15 835A FAC16 835B FAC17 834C FAC2 834D FAC3 834E FAC4 834F FAC5 8350 FAC6 8351 FAC7 8352 FAC8 8353 FAC9 0006 FADD 000A FCOMP D73A FCOPY D759 FCOPY1 D7AA FCOPY2 D7B8 FCOPY3 D7C1 FCOPY4 D7C6 FCOPY5 D7D1 FCOPY6 D7D4 FCOPY7 D7E9 FCOPY8 D7EC FCOPY9 0009 FDIV 834E FFF 8356 FFF1 8311 FIELD 0001 FILSPC 00FA FIXEDZ 8345 FLAG 0001 FLG 0012 FLTINT 0008 FMUL CF73 FNDLNE 8317 FNUM 8317 FORNET 0009 FORW 008C FORZ 836C FPERAD D805 FREAD D813 FREAD1 D82C FREAD2 D831 FREAD3 830A FREEND 8340 FREPTR 8308 FRESTA 2002 FSLOC D835 FWRTE D843 FWRTE1 D85C FWRTE2 D861 FWRTE3 698C G698C 6D78 G6D78 216F GBASIC C047 GC047 C0C7 GC0C7 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0065 EQUATES ALCS-359 C0D5 GC0D5 C0E3 GC0E3 C0F4 GC0F4 C11C GC11C C1C1 GC1C1 C213 GC213 C224 GC224 C2B9 GC2B9 C308 GC308 C39D GC39D C3A1 GC3A1 C3BC GC3BC C3BE GC3BE C3C5 GC3C5 C3E0 GC3E0 C3E3 GC3E3 C3F6 GC3F6 C429 GC429 C46D GC46D CE22 GCE22 CE3B GCE3B CE48 GCE48 CE58 GCE58 CE5B GCE5B CE99 GCE99 CEAC GCEAC CEB3 GCEB3 CEC8 GCEC8 CECF GCECF CEE2 GCEE2 CEF6 GCEF6 CF02 GCF02 CF05 GCF05 CF2C GCF2C CF53 GCF53 CF7D GCF7D CF96 GCF96 CF9C GCF9C C439 GCHR2 C484 GCHR3 C49D GCHR4 D008 GD008 D020 GD020 D032 GD032 D048 GD048 D056 GD056 D06B GD06B D085 GD085 D097 GD097 D09E GD09E D0A1 GD0A1 D0C6 GD0C6 D0D4 GD0D4 D0E7 GD0E7 D0F3 GD0F3 008E GDTECT E025 GE025 C434 GETCHR D579 GETFN CF69 GETLN2 D126 GETNUM 0071 GETSTR D320 GISROF D2DF GISRON C6CC GKCAT C6FD GKCAT2 C7ED GKCAT3 C85D GKCAT5 C902 GKCAT6 C886 GKCAT7 C6CF GKCATA C708 GKCATL C740 GKCLSF C896 GKDF C8EF GKDIR C919 GKDNU1 C927 GKDNU2 C913 GKDNUM C71A GKDONE C75C GKDSR C750 GKDSRL C939 GKDSTR C8A8 GKDV C731 GKERR 83C2 GKFLAG C90E GKFNA1 C84C GKFNAM C8BA GKIF C62D GKINIT C8CC GKIV C614 GKLOAD C765 GKPABD C63D GKPEEK C8DE GKPR C843 GKSCL1 C833 GKSCL2 C825 GKSCRL C76E GKSCRN C65D GKSETG C654 GKSETV C81F GKTKE1 C820 GKTKE2 C817 GKTKE3 C80F GKTKEY D100 GLPARZ 0087 GOSUBZ 0086 GOTOZ 0085 GOZ 8389 GRAMFL 0085 GREAD 008C GREAD1 003E GREAT 00C0 GREATZ 0022 GRINT 802A GRMLST 6034 GRSUB1 802C GRSUB2 802E GRSUB3 008B GVWITE 0086 GWRITE 6036 GWSUB D220 HONK 002D HYPEN 0084 IFZ 64EF ILLST 00A3 IMAGEZ 835E INDEX 8315 INDEXC C2BA INIT 2006 INITF 6014 INITPG 8006 INPUT 03AA INPUTP 0092 INPUTZ 0004 INSRT 00F5 INTERZ 8338 INTRIN 00CF INTZ 0084 IO 833C IOSTRT D2ED ISROFF D2BD ISRON 8377 JOYX 8376 JOYY 8374 KEYBD CB00 KEYTAB 6022 KILSYM C1BA LDDNE C68A LDGRAM C200 LDIPCS C1D2 LDNE2 C04E LDP1 C090 LDP2 C060 LDP4 C088 LDP5 C0AB LDRD C1E1 LDRET C1E3 LDRET2 C0B2 LDTG C156 LDTG2 C135 LDTG3 0004 LEN 8360 LENCST 8362 LENWST 00D5 LENZ 003C LESS 00BF LESSZ 008D LETZ C010 LINK1 C019 LINK2 C022 LINK3 C02B LINK4 C034 LINK5 C325 LINKIT 8030 LINPUT 00AA LINPUZ 8312 LINUM 0002 LISTZ 6A74 LLIST 8336 LNBUF A01C LNKRTN 00C9 LNZ C040 LOAD C69C LOADDT 0371 LODFLG 00D0 LOGZ 00B7 LPARZ 8348 LSUBP 00DF MAXZ 0072 MEMCHK 0008 MERGEZ 002D MINUS 00C2 MINUSZ 00E0 MINZ D677 MKDIR D68F MKDIR2 D6C7 MKDIR3 D6D9 MKDIR4 8302 MNUM 837A MOTION 039E MRGPAB 6065 MSG10 629B MSG109 62A6 MSG130 62B0 MSG135 6076 MSG14 6083 MSG16 609C MSG17 60AD MSG19 60BB MSG24 60D2 MSG25 60E4 MSG28 60F9 MSG34 6110 MSG36 611C MSG39 6128 MSG40 6137 MSG43 6148 MSG44 6159 MSG47 616F MSG48 6189 MSG49 6198 MSG51 61AD MSG54 6324 MSG56 61BE MSG57 61CC MSG60 61DB MSG61 62C5 MSG62 61EB MSG67 61FA MSG69 6215 MSG70 622D MSG74 623A MSG78 624D MSG79 6257 MSG81 626F MSG83 627B MSG84 6286 MSG97 6048 MSGBRK 6319 MSGCF 630A MSGCIS 6040 MSGFST 6053 MSGTA 00C3 MULTZ 0088 MVDN 0089 MVUP D4D7 MYDOIT D4E9 MYSAL 6038 MZMSG AE00 MZSUB 03BE NEWTOP 0096 NEXTZ D12F NGOOD 0039 NINE 0009 NLEN 02E2 NLNADD 8314 NMLEN 830C NMPTR C41F NOERR 0374 NOTONE 00BD NOTZ 800E NREAD 8328 NUDTAB 0023 NUMBER 00FD NUMBEZ 0000 NUMBR 00C8 NUMCOZ 00E8 NUMERZ D115 NUMFCH 00C8 NUMZ 8306 OFFADD 0060 OFFSET 8310 OLDS 03BC OLDTOP 0005 OLDZ 0378 ONECHR 009B ONZ 8008 OPEN C225 OPENIT 009F OPENZ 8317 OPTFLG 009E OPTIOZ 00BA ORZ 00F7 OUTPUZ 000A PABLEN 8304 PABPTR C1EB PAGE C347 PAR01 0001 PARCOM 0074 PARSE D597 PATH 8304 PC C2CA PEEK C2E8 PEEK2 C316 PEEK5 C6B9 PEEKDT C666 PEEKG C644 PEEKV 002E PERIOD 00FB PERMAZ 0079 PGMCHR 832C PGMPTR 8352 PHADDR 835D PHDATA 8300 PHLEN 8301 PHRADD 00DD PIZ C670 PKG C6A9 PKGRAM C64E PKV 002B PLUS 00C1 PLUSZ C680 POG D1B6 POKAGN C676 POKEG D20B POKEND D1A9 POKER C619 POKEV 00D9 POSZ C623 POV 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0066 EQUATES ALCS-359 D206 PREG0 D1FF PREG1 D1F8 PREG2 D1F1 PREG3 D1EA PREG4 D1E3 PREG5 D1DC PREG6 8344 PRGFLG 8004 PRINT 009C PRINTZ D60B PROAGN D63C PRODSK D641 PROEND D61A PRONP D5FC PROT 83CE PRTNFN 03B7 PSCFG 835E PTCBED 830E PTCCIP 8308 PTCCIS 8314 PTCCPH 8304 PTEBSL 8312 PTFBPH 8300 PTFBSL 830C PTFCIP 8306 PTFCIS 8302 PTLBSL 834F PTLCIL 8310 PTLCIP 830A PTLCIS 8316 PTLCPH C3FA PUSH C602 QTOFF C60E QTOFF1 C5F0 QTON C5FB QTON1 0022 QUOTE 8389 RAMFLG 8386 RAMFRE 830A RAMPTR 8384 RAMTOP 8378 RANDOM 0095 RANDOZ 0002 RANGE 8358 READ C263 READIT 6A86 READL1 6A8A READL3 6A76 READLN 0097 READZ 8022 REC 0006 RECALL 08C0 RECBUF 8307 RECLEN 00DE RECZ C3E5 REF01 00F4 RELATZ 009A REMZ D5B4 RENAGN D5A6 RENAME D5F0 RENDSK D5F5 RENEND D5C3 RENNP 0006 RESEQZ 800C RESTOR 0094 RESTOZ CF68 RETNOS 0088 RETURZ 8375 RKEY D6E0 RMDIR D6ED RMDIR2 03A5 RNDX1 03A0 RNDX2 00D7 RNDZ 0006 RNM 00B6 RPARZ 0012 RPL 00E1 RPTZZ 8388 RSTK 0082 RTNB 8326 RTNG CF65 RTNSET 00A9 RUNZ D865 RWDSR 000B SADD 03B9 SAPROT 0388 SAVEVP 0007 SAVEZ D0AF SAVLIN D0CC SAVLN5 0384 SBUFLV 007D SCHSYM 008F SCNSMT 0008 SCR 02E0 SCRNBS 0083 SCROLL D654 SCSAGN D648 SCSI D98D SECRD D8A5 SECTO1 D8C6 SECTO2 D8E9 SECTO3 D8EB SECTO4 D903 SECTO5 D90E SECTO6 D91E SECTO7 D936 SECTO8 D941 SECTO9 D953 SECTOA D960 SECTOB D962 SECTOC D97A SECTOD D97F SECTOE D9B1 SECTOG D9B3 SECTOH D9B5 SECTOI D872 SECTOR D892 SECTOS D99E SECWRT 0003 SEETWO 00D8 SEGZZ 003B SEMICO 00B4 SEMICZ 00F6 SEQUEZ 0386 SEXTRM 0398 SFLAG 00D1 SGNZZ 8375 SIGNZ 00D2 SINZ D311 SISROF D2D6 SISRON 03B4 SIZCCP 00EB SIZEZ 03B6 SIZREC 03B8 SIZXPT 0396 SLSUBP 007B SMB 831E SMTSRT D153 SNDASS D14A SNDER 8300 SP00 8302 SP02 8304 SP04 8306 SP06 0020 SPACE 007E SPEED 0382 SPGMPT 8369 SPKSTS 834B SPLFLG 03AA SPNUM 6016 SPRINT 0300 SPRSAL 0780 SPRVB 8308 SPSAL 830A SPTMP 00D3 SQRZ 8020 SRDATA 831C SREF 0082 SSEPZ 039A SSTEMP 039C SSTMP2 000C SSUB 8372 STACK 830A STADDR 0372 START 00B2 STEPZ 83BD STKMAX 83AF STKMIN 8330 STLN 0098 STOPZ 8314 STORE 8302 STPT 831A STREND D106 STRFCH D10C STRGET 0065 STRING 00C7 STRINZ 8364 STRLEN 8312 STRPTR 8318 STRSP 0065 STRVAL 00DB STRZZ 8324 STVSPT D156 SUBLP3 00A8 SUBNDZ 8373 SUBSTK 833A SUBTAB 00A7 SUBXTZ 00A1 SUBZ 007A SYM 0376 SYMBOL 833E SYMTAB 0000 SYNCHK 63A5 SZNEW 601E SZRUN 65C9 SZSIZE 0392 TABSAV 00FC TABZ 8310 TAG C148 TAG0 C15D TAG5 C160 TAG6 C192 TAG7 C19F TAG9 C19C TAGA C1A8 TAGB C1A5 TAGC 00D4 TANZ 8310 TBLPTR 8316 TEMP 8354 TEMP1 8356 TEMP2 8364 TEMP4 8366 TEMP5 8368 TEMP6 00B0 THENZ 8379 TIMER 8351 TIMLEN 0034 TONE1 0036 TONE2 6030 TOPL02 601A TOPL10 63DD TOPL15 6433 TOPL42 6462 TOPL55 6372 TOPLEV 8310 TOPSTK 834C TOTTIM 00B1 TOZ CE49 TRAC05 CE72 TRAC09 CE76 TRAC10 CE95 TRAC12 CEF8 TRAC50 CF09 TRAC51 CF16 TRAC55 CE1F TRACBK 0090 TRACEZ 0083 TREMZ 00EA UALPHZ 008F UNBREZ D629 UNPRO 00C8 UNQSTZ 0091 UNTRAZ D450 UPAB 000B UPARR 00F8 UPDATZ 000B UPMV D45A USER 00ED USINGZ C3C7 VAL01 03B2 VALIDL 03B0 VALIDP 00FE VALIDZ 00DA VALZ 8300 VAR0 830B VAR2 830E VAR4 8310 VAR5 8311 VAR6 8312 VAR7 8314 VAR9 832A VARA 8316 VARB 8308 VARC 00F3 VARIAZ 8301 VARV 8320 VARW 8304 VARY 8306 VARY2 837B VDPSTS 837B VDPSTT 008A VGWITE D6AA VOL1ST D6A8 VOL2ND 0078 VPOP 0077 VPUSH 0958 VRAMVS 0379 VRMSND 03C0 VROAZ 001C VWIDTH 00A6 WARNZ 6A82 WARNZZ 835A WRITE C5DE WRNINP C5E4 WRNIO C5EA WRNLNF C5CC WRNNO C5D8 WRNNPP C5D2 WRNST 0003 X2 8316 XFLAG 00BC XORZ 0030 ZERO 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0067 EQUATES ALCS-359 Symbol Table #2 (New,value) 0000 NUMBR 0000 SYNCHK 0001 FILSPC 0001 FLG 0001 PARCOM 0002 BREAK 0002 BUF 0002 CSTRIN 0002 LISTZ 0002 RANGE 0003 DLETE 0003 SEETWO 0003 X2 0004 INSRT 0004 LEN 0005 CHRCNT 0005 OLDZ 0006 FADD 0006 RECALL 0006 RESEQZ 0006 RNM 0007 CLRLN 0007 SAVEZ 0008 BACK 0008 FMUL 0008 MERGEZ 0008 SCR 0009 FDIV 0009 FORW 0009 NLEN 000A DOWN 000A DWNARR 000A FCOMP 000A PABLEN 000B SADD 000B UPARR 000B UPMV 000C SSUB 000D CHRTN 0010 CPL 0010 CSNUM 0010 DSR 0012 CFI 0012 FLTINT 0012 RPL 0018 CHAR2Z 001C VWIDTH 0020 ALSUP 0020 BKGD 0020 SPACE 0022 GRINT 0022 QUOTE 0023 NUMBER 0024 DOLLAR 002B PLUS 002C COMMAT 002D HYPEN 002D MINUS 002E PERIOD 0030 ZERO 0032 ATNZZ 0034 TONE1 0036 TONE2 0039 NINE 003A COLON 003B SEMICO 003C LESS 003E GREAT 0041 A 0046 F 004A CHAR3Z 0060 OFFSET 0065 STRING 0065 STRVAL 0070 COMPCT 0071 GETSTR 0072 MEMCHK 0073 CNS 0074 PARSE 0075 CONT 0076 EXECG 0077 VPUSH 0078 VPOP 0079 PGMCHR 007A SYM 007B SMB 007C ASSGNV 007D SCHSYM 007E CURSOR 007E SPEED 007F CRUNCH 007F EDGECH 0080 CIF 0081 ELSEZ 0082 RTNB 0082 SSEPZ 0083 SCROLL 0083 TREMZ 0084 IFZ 0084 IO 0085 GOZ 0085 GREAD 0086 GOTOZ 0086 GWRITE 0087 DELREP 0087 GOSUBZ 0088 MVDN 0088 RETURZ 0089 DEFZ 0089 MVUP 008A DIMZ 008A VGWITE 008B ENDZ 008B GVWITE 008C FORZ 008C GREAD1 008D LETZ 008E BREAKZ 008E GDTECT 008F SCNSMT 008F UNBREZ 0090 TRACEZ 0091 UNTRAZ 0092 INPUTZ 0093 DATAZ 0094 RESTOZ 0095 RANDOZ 0096 NEXTZ 0097 READZ 0098 STOPZ 0099 DELETZ 009A REMZ 009B ONZ 009C PRINTZ 009D CALLZ 009E OPTIOZ 009F OPENZ 00A0 CLOSEZ 00A1 SUBZ 00A2 DISPLZ 00A3 IMAGEZ 00A4 ACCEPZ 00A5 ERRORZ 00A6 WARNZ 00A7 SUBXTZ 00A8 SUBNDZ 00A9 RUNZ 00AA LINPUZ 00B0 THENZ 00B1 TOZ 00B2 STEPZ 00B3 COMMAZ 00B4 SEMICZ 00B5 COLONZ 00B6 RPARZ 00B7 LPARZ 00B8 CONCZ 00BA ORZ 00BB ANDZ 00BC XORZ 00BD NOTZ 00BE EQUALZ 00BF LESSZ 00C0 GREATZ 00C1 PLUSZ 00C2 MINUSZ 00C3 MULTZ 00C4 DIVIZ 00C5 CIRCUZ 00C7 STRINZ 00C8 NUMCOZ 00C8 NUMZ 00C8 UNQSTZ 00C9 LNZ 00CA EOFZ 00CB ABSZ 00CC ATNZ 00CD COSZ 00CE EXPZZ 00CF INTZ 00D0 LOGZ 00D1 SGNZZ 00D2 SINZ 00D3 SQRZ 00D4 TANZ 00D5 LENZ 00D6 CHRZZ 00D7 RNDZ 00D8 SEGZZ 00D9 POSZ 00DA VALZ 00DB STRZZ 00DC ASCZ 00DD PIZ 00DE RECZ 00DF MAXZ 00E0 MINZ 00E1 RPTZZ 00E8 NUMERZ 00E9 DIGITZ 00EA UALPHZ 00EB SIZEZ 00EC ALLZ 00ED USINGZ 00EE BEEPZ 00EF ERASEZ 00F0 ATZ 00F1 BASEZ 00F3 VARIAZ 00F4 RELATZ 00F5 INTERZ 00F6 SEQUEZ 00F7 OUTPUZ 00F8 UPDATZ 00F9 APPENZ 00FA FIXEDZ 00FB PERMAZ 00FC TABZ 00FD NUMBEZ 00FE VALIDZ 02E0 SCRNBS 02E2 NLNADD 02FE ENDSCR 0300 SPRSAL 0371 LODFLG 0372 START 0374 NOTONE 0376 SYMBOL 0378 ONECHR 0379 VRMSND 0382 SPGMPT 0384 SBUFLV 0386 SEXTRM 0388 SAVEVP 038A ERRLN 038C BUFSRT 038E BUFEND 0390 CSNTMP 0392 TABSAV 0394 AUTTMP 0396 SLSUBP 0398 SFLAG 039A SSTEMP 039C SSTMP2 039E MRGPAB 03A0 RNDX2 03A5 RNDX1 03AA INPUTP 03AA SPNUM 03AC ACCVRW 03AE ACCVRA 03B0 VALIDP 03B2 VALIDL 03B4 SIZCCP 03B6 SIZREC 03B7 ACCTRY 03B7 PSCFG 03B8 SIZXPT 03B9 SAPROT 03BA CSNTP1 03BB CONFLG 03BC CPTEMP 03BC OLDTOP 03BE NEWTOP 03C0 VROAZ 0780 SPRVB 0820 CRNBUF 08BE CRNEND 08C0 RECBUF 0958 VRAMVS 2002 FSLOC 2006 INITF 216F GBASIC 6014 INITPG 6016 SPRINT 6018 CHRTBL 601A TOPL10 601C CHRTAB 601E SZRUN 6022 KILSYM 602E AUTO1 6030 TOPL02 6034 GRSUB1 6036 GWSUB 6038 MZMSG 6040 MSGFST 6048 MSGBRK 6053 MSGTA 6065 MSG10 6076 MSG14 6083 MSG16 609C MSG17 60AD MSG19 60BB MSG24 60D2 MSG25 60E4 MSG28 60F9 MSG34 6110 MSG36 611C MSG39 6128 MSG40 6137 MSG43 6148 MSG44 6159 MSG47 616F MSG48 6189 MSG49 6198 MSG51 61AD MSG54 61BE MSG57 61CC MSG60 61DB MSG61 61EB MSG67 61FA MSG69 6215 MSG70 622D MSG74 623A MSG78 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0068 EQUATES ALCS-359 624D MSG79 6257 MSG81 626F MSG83 627B MSG84 6286 MSG97 629B MSG109 62A6 MSG130 62B0 MSG135 62C5 MSG62 630A MSGCIS 6319 MSGCF 6324 MSG56 6372 TOPLEV 63A5 SZNEW 63DD TOPL15 6433 TOPL42 6462 TOPL55 64EF ILLST 65C9 SZSIZE 66CF EDITLN 698C G698C 6A74 LLIST 6A76 READLN 6A78 CHKEND 6A7E ENTER 6A80 ENT09 6A82 WARNZZ 6A84 ERRZ 6A84 ERRZZ 6A86 READL1 6A8A READL3 6D78 G6D78 6E0E ERPRNT 6E1B ERPNT5 6FBA DISO 8000 DISPL1 8002 DELET 8004 PRINT 8006 INPUT 8008 OPEN 800A CLOSE 800C RESTOR 800E NREAD 8012 CLSALL 801C EOF 801E ACCEPT 8020 SRDATA 8022 REC 802A GRMLST 802C GRSUB2 802E GRSUB3 8030 LINPUT 8300 CPUOFF 8300 PHLEN 8300 PTFBSL 8300 SP00 8300 VAR0 8301 PHRADD 8301 VARV 8302 AAA1 8302 ACCUM 8302 CHKSUM 8302 MNUM 8302 PTLBSL 8302 SP02 8302 STPT 8304 PABPTR 8304 PC 8304 PTEBSL 8304 SP04 8304 VARY 8306 CCPPTR 8306 DFLTLM 8306 OFFADD 8306 PTFCIS 8306 SP06 8306 VARY2 8307 RECLEN 8308 CCC1 8308 CCPADD 8308 CCPADR 8308 FRESTA 8308 PTCCIS 8308 SPSAL 8308 VARC 830A CALIST 830A FREEND 830A PTLCIS 830A RAMPTR 830A SPTMP 830A STADDR 830B VAR2 830C BBB1 830C BYTES 830C NMPTR 830C PTFCIP 830E BUFPNT 830E CHSAV 830E CURINC 830E PTCCIP 830E VAR4 8310 OLDS 8310 PTLCIP 8310 TAG 8310 TBLPTR 8310 TOPSTK 8310 VAR5 8311 FIELD 8311 VAR6 8312 COUNT 8312 LINUM 8312 PTFBPH 8312 STRPTR 8312 VAR7 8314 CURLIN 8314 NMLEN 8314 PTCCPH 8314 STORE 8314 VAR9 8315 INDEXC 8316 DFLAG 8316 PTLCPH 8316 TEMP 8316 VARB 8316 XFLAG 8317 DEVNUM 8317 DSRFLG 8317 FNUM 8317 FORNET 8317 OPTFLG 8318 STRSP 831A STREND 831C SREF 831E SMTSRT 8320 VARW 8322 ERRCOD 8324 STVSPT 8326 RTNG 8328 NUDTAB 832A VARA 832C PGMPTR 832E EXTRAM 8330 STLN 8332 ENLN 8334 DATA 8336 LNBUF 8338 INTRIN 833A SUBTAB 833C IOSTRT 833E SYMTAB 8340 FREPTR 8342 CHAT 8343 BASE 8344 PRGFLG 8345 FLAG 8346 BUFLEV 8348 LSUBP 834A CCHAR 834B FAC1 834B SPLFLG 834C AAA 834C FAC2 834C TOTTIM 834D DATAAD 834D FAC3 834E CCC 834E FAC4 834E FFF 834F FAC5 834F PTLCIL 8350 BBB 8350 EEE 8350 FAC6 8351 FAC7 8351 TIMLEN 8352 FAC8 8352 PHADDR 8353 FAC9 8354 DDD1 8354 FAC10 8354 TEMP1 8355 FAC11 8356 FAC12 8356 FFF1 8356 TEMP2 8357 FAC13 8358 EEE1 8358 FAC14 8358 READ 8359 FAC15 835A FAC16 835A WRITE 835B FAC17 835D ARG1 835D PHDATA 835E ARG2 835E INDEX 835E PTCBED 835F ARG3 8360 ARG4 8360 LENCST 8361 ARG5 8362 ARG6 8362 LENWST 8364 STRLEN 8364 TEMP4 8366 BYTE1 8366 TEMP5 8367 BYTE2 8368 BYTE3 8368 TEMP6 8369 SPKSTS 836C FPERAD 8372 STACK 8373 SUBSTK 8374 KEYBD 8375 RKEY 8375 SIGNZ 8376 EXPZ 8376 JOYY 8377 JOYX 8378 RANDOM 8379 TIMER 837A MOTION 837B VDPSTS 837B VDPSTT 837C ERCODE 837D CB 8384 RAMTOP 8386 RAMFRE 8388 RSTK 8389 GRAMFL 8389 RAMFLG 83AF STKMIN 83BD STKMAX 83C2 GKFLAG 83CE PRTNFN 9800 ALCEND A00A ASC A012 CONVER A01C LNKRTN A040 CPUBAS AE00 MZSUB C010 LINK1 C019 LINK2 C022 LINK3 C02B LINK4 C034 LINK5 C040 LOAD C047 GC047 C04E LDP1 C060 LDP4 C088 LDP5 C090 LDP2 C0AB LDRD C0B2 LDTG C0C7 GC0C7 C0D5 GC0D5 C0E3 GC0E3 C0F4 GC0F4 C11C GC11C C135 LDTG3 C148 TAG0 C156 LDTG2 C15D TAG5 C160 TAG6 C192 TAG7 C19C TAGA C19F TAG9 C1A5 TAGC C1A8 TAGB C1BA LDDNE C1C1 GC1C1 C1D2 LDNE2 C1E1 LDRET C1E3 LDRET2 C1EB CHKIN C1EB PAGE C200 LDIPCS C213 GC213 C224 GC224 C225 OPENIT C263 READIT C277 CLSIT C27B DSRCAL C290 DSKERR C2A4 CLSNOE C2B9 GC2B9 C2BA INIT C2CA PEEK C2E8 PEEK2 C308 GC308 C316 PEEK5 C325 LINKIT C347 PAR01 C37C ARRAY C38F ARRAY2 C39D GC39D C3A1 GC3A1 C3BC GC3BC C3BE GC3BE C3C5 GC3C5 C3C7 VAL01 C3E0 GC3E0 C3E3 GC3E3 C3E5 REF01 C3F6 GC3F6 C3FA PUSH C405 EXE01 C41F NOERR C429 GC429 C42C CLRFAC C434 GETCHR C439 GCHR2 C46D GC46D C484 GCHR3 C49D GCHR4 C4C9 ERROR C529 ERRN01 C52C ERRNO 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0069 EQUATES ALCS-359 C530 ERRSY1 C533 ERRSYN C537 ERRIBS C53B ERRNQS C53F ERRNTL C543 ERRSNM C547 ERROBE C54B ERRMUV C54F ERRIM C553 ERRMF1 C556 ERRMEM C55A ERRSO C55E ERRNWF C562 ERRFNN C566 ERRSNS C56A ERRRSC C56E ERRMS C572 ERRRWG C576 ERRST C57A ERRBS C57E ERRSSL C582 ERRLNF C586 ERRBLN C58A ERRLTL C58E ERRCC C592 ERRCIP C596 ERROLP C59A ERRBA C59E ERRNPP C5A2 ERRBV C5A6 ERRIAL C5AA ERRINP C5AE ERRDE1 C5B1 ERRDAT C5B5 ERRFE C5B9 ERRIO C5BD ERRSNF C5C1 ERRPV C5C5 ERRUC1 C5C8 ERRIVN C5CC WRNNO C5D2 WRNST C5D8 WRNNPP C5DE WRNINP C5E4 WRNIO C5EA WRNLNF C5F0 QTON C5FB QTON1 C602 QTOFF C60E QTOFF1 C614 GKLOAD C619 POKEV C623 POV C62D GKINIT C63D GKPEEK C644 PEEKV C64E PKV C654 GKSETV C65D GKSETG C666 PEEKG C670 PKG C676 POKEG C680 POG C68A LDGRAM C69C LOADDT C6A9 PKGRAM C6B9 PEEKDT C6C4 CATLOG C6CC GKCAT C6CF GKCATA C6FD GKCAT2 C708 GKCATL C71A GKDONE C731 GKERR C740 GKCLSF C750 GKDSRL C75C GKDSR C765 GKPABD C76E GKSCRN C7ED GKCAT3 C80F GKTKEY C817 GKTKE3 C81F GKTKE1 C820 GKTKE2 C825 GKSCRL C833 GKSCL2 C843 GKSCL1 C84C GKFNAM C85D GKCAT5 C886 GKCAT7 C896 GKDF C8A8 GKDV C8BA GKIF C8CC GKIV C8DE GKPR C8EF GKDIR C902 GKCAT6 C90E GKFNA1 C913 GKDNUM C919 GKDNU1 C927 GKDNU2 C939 GKDSTR CB00 KEYTAB CB14 CHAR1 CB35 CHAR2 CB4E CHAR3 CBEB CHAR4 CC55 CHAR5 CCA4 CHAR6 CCF2 CHAR7 CD2B CHAR8 CD59 CHAR9 CD64 CHARA CD77 ERRTAB CE1F TRACBK CE22 GCE22 CE3B GCE3B CE48 GCE48 CE49 TRAC05 CE58 GCE58 CE5B GCE5B CE72 TRAC09 CE76 TRAC10 CE95 TRAC12 CE99 GCE99 CEAC GCEAC CEB3 GCEB3 CEC8 GCEC8 CECF GCECF CEE2 GCEE2 CEF6 GCEF6 CEF8 TRAC50 CF02 GCF02 CF05 GCF05 CF09 TRAC51 CF16 TRAC55 CF2C GCF2C CF53 GCF53 CF65 RTNSET CF68 RETNOS CF69 GETLN2 CF73 FNDLNE CF7D GCF7D CF96 GCF96 CF9C GCF9C D000 EDTZZ0 D008 GD008 D00D EDTZ00 D020 GD020 D032 GD032 D048 GD048 D056 GD056 D06B GD06B D079 EDTZ01 D07E EDTZ02 D085 GD085 D097 GD097 D09E GD09E D0A1 GD0A1 D0AC EDTZ08 D0AF SAVLIN D0C6 GD0C6 D0CC SAVLN5 D0D4 GD0D4 D0E7 GD0E7 D0F3 GD0F3 D100 GLPARZ D106 STRFCH D10C STRGET D115 NUMFCH D11E CFIFCH D126 GETNUM D12F NGOOD D14A SNDER D151 CIFSND D153 SNDASS D156 SUBLP3 D15D DSKSUB D162 DEVNAM D180 DEVASC D183 DEV0 D19B DEV1 D1A9 POKER D1B6 POKAGN D1DC PREG6 D1E3 PREG5 D1EA PREG4 D1F1 PREG3 D1F8 PREG2 D1FF PREG1 D206 PREG0 D20B POKEND D212 BEEP D220 HONK D22E DIRECT D236 AMAP D246 AMSMAP D250 APASS D261 AMSPAS D26B ARWOFF D27B AMSOFF D285 ARWON D294 AMSON D29E AMSSUB D2A5 AMSCRU D2BD ISRON D2D6 SISRON D2DF GISRON D2ED ISROFF D311 SISROF D320 GISROF D33A ABANK D3CE AMSERR D402 AINIT D418 AINITL D42E CHRALL D450 UPAB D45A USER D487 BASIC D497 BSAVE D4B7 BLOAD D4D7 MYDOIT D4E9 MYSAL D527 DSKDSR D541 DSKNAM D55C DSKNA2 D568 DSKNA3 D575 DSKNA4 D579 GETFN D597 PATH D5A6 RENAME D5B4 RENAGN D5C3 RENNP D5F0 RENDSK D5F5 RENEND D5FC PROT D60B PROAGN D61A PRONP D629 UNPRO D63C PRODSK D641 PROEND D648 SCSI D654 SCSAGN D677 MKDIR D68F MKDIR2 D6A8 VOL2ND D6AA VOL1ST D6C7 MKDIR3 D6D9 MKDIR4 D6E0 RMDIR D6ED RMDIR2 D70E CUTDIR D71C CUTDI2 D73A FCOPY D759 FCOPY1 D7AA FCOPY2 D7B8 FCOPY3 D7C1 FCOPY4 D7C6 FCOPY5 D7D1 FCOPY6 D7D4 FCOPY7 D7E9 FCOPY8 D7EC FCOPY9 D805 FREAD D813 FREAD1 D82C FREAD2 D831 FREAD3 D835 FWRTE D843 FWRTE1 D85C FWRTE2 D861 FWRTE3 D865 RWDSR D872 SECTOR D892 SECTOS D8A5 SECTO1 D8C6 SECTO2 D8E9 SECTO3 D8EB SECTO4 D903 SECTO5 D90E SECTO6 D91E SECTO7 D936 SECTO8 D941 SECTO9 D953 SECTOA D960 SECTOB D962 SECTOC D97A SECTOD D97F SECTOE D98D SECRD D99E SECWRT D9B1 SECTOG D9B3 SECTOH D9B5 SECTOI E025 GE025 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0070 EQUATES ALCS-359 Symbol Table #4 (Def,alpha) 0034 ACCTON 835C ARG 0032 ATN 0036 BADTON 003B BITREV 0012 CFI 0014 CNS 002C COS 0010 CSN 8372 DATSTK 0001 DIVZER 0003 ERRIOV 0006 ERRLOG 0005 ERRNIP 0002 ERRSNN 0004 ERRSQR 0028 EXP 834A FAC 0006 FADD 000A FCOMP 0009 FDIV 0008 FMUL 836C FPERAD 0007 FSUB 0038 GETSPACE 0022 INT 0010 LINK 0018 LOCASE 002A LOG 8370 MEMSIZ 003D NAMLNK 8300 PAD 0024 PWR 0012 RETURN 000B SADD 000F SCOMP 000E SDIV 8375 SGN 002E SIN 000D SMUL 8400 SOUND 0026 SQR 000C SSUB 837C STATUS 0016 STCASE 8373 SUBSTK 0030 TAN 0007 TRIGER 004A UPCASE 836E VSPTR 0001 WRNOV 837F XPT 837E YPT 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0071 EQUATES ALCS-359 Symbol Table #8 (Def,value) 0001 DIVZER 0001 WRNOV 0002 ERRSNN 0003 ERRIOV 0004 ERRSQR 0005 ERRNIP 0006 ERRLOG 0006 FADD 0007 FSUB 0007 TRIGER 0008 FMUL 0009 FDIV 000A FCOMP 000B SADD 000C SSUB 000D SMUL 000E SDIV 000F SCOMP 0010 CSN 0010 LINK 0012 CFI 0012 RETURN 0014 CNS 0016 STCASE 0018 LOCASE 0022 INT 0024 PWR 0026 SQR 0028 EXP 002A LOG 002C COS 002E SIN 0030 TAN 0032 ATN 0034 ACCTON 0036 BADTON 0038 GETSPACE 003B BITREV 003D NAMLNK 004A UPCASE 8300 PAD 834A FAC 835C ARG 836C FPERAD 836E VSPTR 8370 MEMSIZ 8372 DATSTK 8373 SUBSTK 8375 SGN 837C STATUS 837E YPT 837F XPT 8400 SOUND [2134] 6F87 86,4D LLISZ1 CLR @FAC3 Indicate separator not needed [2135] 6F89 4E,A0 BR LLIZ12 Continue for next keyword [2136] ***********************************************************