99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0001 Version 2.0 (Weiand 1985) Options : LCSFPF [0001] [0002] *********************************************************** [0003] COPY 'DSK5.MYXB5-A' <0001> *********************************************************** <0002> TITL 'MYXB5' <0003> <0004> GROM >A000 <0005> *********************************************************** <0006> TITL 'EQUATES EXEC-359' <0007> *********************************************************** <0008> * GROM ADDRESSES <0009> *********************************************************** <0010> * EQUATES FOR ROUTINES FROM OTHER GROM SECTIONS <0011> <0012> 6018 CHRTBL EQU >6018 RXB CALL CHRTBL load char set <0013> 6372 TOPLEV EQU >6372 RXB CALL USER branch <0014> 63A5 SZNEW EQU >63A5 RXB CALL NEW branch <0015> 63DD TOPL15 EQU >63DD RXB CALL USER branch <0016> 65C9 SZSIZE EQU >65C9 RXB CALL SIZE branch <0017> 8012 CLSALL EQU >8012 RXB branch <0018> E025 GE025 EQU >E025 RXB branch EA module <0019> 6016 SPRINT EQU >6016 Initialize sprites <0020> 601A TOPL10 EQU >601A Return to main and re-init <0021> 601C CHRTAB EQU >601C Load default character set <0022> 601E SZRUN EQU >601E <0023> 6022 KILSYM EQU >6022 KILL SYMBOL TABLE ROUTINE <0024> 602E AUTO1 EQU >602E Get arguments for LIST comman <0025> 6030 TOPL02 EQU >6030 RTN address for failing AUTOL <0026> 6032 EDITLN EQU >6032 Edit a line into the program <0027> 6034 GRSUB1 EQU >6034 Read data (2 bytes) from ERAM <0028> 6036 GWSUB EQU >6036 Write a few bytes of data to <0029> 6048 MSGBRK EQU >6048 * BREAKPOINT <0030> 6053 MSGTA EQU >6053 Message "try again" <0031> <0032> 6A78 CHKEND EQU >6A78 Check end of statement <0033> 6A7C DISO EQU >6A7C <0034> 6A7E ENTER EQU >6A7E <0035> 6A80 ENT09 EQU >6A80 <0036> 6A82 WARNZZ EQU >6A82 WARNING MESSAGE ROUTINE <0037> 6A84 ERRZZ EQU >6A84 ERROR MESSAGE ROUTINE <0038> 6A84 ERRZ EQU >6A84 ERRor routine <0039> 6A86 READL1 EQU >6A86 Read a line from keyboard <0040> <0041> 8000 DISPL1 EQU >8000 <0042> 8002 DELET EQU >8002 <0043> 8004 PRINT EQU >8004 <0044> 8006 INPUT EQU >8006 <0045> 8008 OPEN EQU >8008 <0046> 800A CLOSE EQU >800A <0047> 800C RESTOR EQU >800C <0048> 800E NREAD EQU >800E <0049> 801C EOF EQU >801C <0050> 801E ACCEPT EQU >801E <0051> 8020 SRDATA EQU >8020 <0052> 8022 REC EQU >8022 <0053> 802C GRSUB2 EQU >802C <0054> 802E GRSUB3 EQU >802E <0055> 8030 LINPUT EQU >8030 <0056> <0057> 0022 GRINT EQU >0022 Greatest integer <0058> <0059> *********************************************************** <0060> * Equates for XMLs <0061> 0000 SYNCHK EQU >00 SYNCHK XML selector <0062> 0001 FILSPC EQU >01 Fill-space utility 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0002 EQUATES EXEC-359 <0063> 0001 PARCOM EQU >01 PARse to a COMma selector <0064> 0002 CSTRIN EQU >02 Copy-string utility <0065> 0002 RANGE EQU >02 RANGE selector <0066> 0003 SEETWO EQU >03 SEETWO XML selector <0067> 0006 FADD EQU >06 Floating ADD <0068> 0008 FMUL EQU >08 Floating MULtiply <0069> 0009 FDIV EQU >09 Floating DIVide <0070> 000A FCOMP EQU >0A Floating COMPare <0071> 000B SADD EQU >0B Stack ADD <0072> 000C SSUB EQU >0C Stack SUBtract <0073> 0010 CSNUM EQU >10 Convert String to Number <0074> 0012 CFI EQU >12 Convert to two byte integer <0075> 0012 FLTINT EQU >12 Convert floating to integer <0076> 0070 COMPCT EQU >70 PREFORM A GARBAGE COLLECTION <0077> 0071 GETSTR EQU >71 SYSTEM GET STRING <0078> 0072 MEMCHK EQU >72 MEMORY check routine: VDP <0079> 0073 CNS EQU >73 Convert number to string * Warning - Default changed in 0079 <0080> 0074 PARSE EQU >74 Parse a value <0081> 0075 CONT EQU >75 Continue parsing <0082> 0076 EXECG EQU >76 Execute a XB stmt or program <0083> 0077 VPUSH EQU >77 Push on value stack <0084> 0078 VPOP EQU >78 Pop off value stack <0085> 0079 PGMCHR EQU >79 GET PROGRAM CHARACTER <0086> 007A SYM EQU >7A Find SYMBOL entry <0087> 007B SMB EQU >7B Find symbol table entry <0088> 007C ASSGNV EQU >7C Assign VARIABLE <0089> 007D SCHSYM EQU >7D Search symbol table <0090> 007E SPEED EQU >7E SPEED UP XML <0091> 007F CRUNCH EQU >7F Crunch an input line <0092> 0080 CIF EQU >80 Convert INTEGER to FLOATING P <0093> 0082 RTNB EQU >82 Return <0094> 0083 SCROLL EQU >83 SCROLL THE SCREEN <0095> 0084 IO EQU >84 IO utility (KW table search) <0096> 0085 GREAD EQU >85 READ DATA FROM ERAM <0097> 0086 GWRITE EQU >86 WRITE DATA TO ERAM <0098> 0087 DELREP EQU >87 REMOVE CONTENT FROM VDP/ERAM <0099> 0088 MVDN EQU >88 MOVE DATA IN VDP/ERAM <0100> 0089 MVUP EQU >89 MOVE DATA IN VDP/ERAM <0101> 008A VGWITE EQU >8A MOVE DATA FROM VDP TO ERAM <0102> 008B GVWITE EQU >8B WRITE DATA FROM GRAM TO VRAM <0103> 008C GREAD1 EQU >8C READ DATA FROM ERAM <0104> 008E GDTECT EQU >8E ERAM DETECT&ROM PAGE 1 ENABLE <0105> 008F SCNSMT EQU >8F SCAN STATEMENT FOR PRESCAN <0106> *********************************************************** <0107> <0108> * Temporary workspaces in EDIT <0109> 8300 VAR0 EQU >8300 TEMPORARY <0110> 8300 SP00 EQU >8300 SPRITE value <0111> 8300 PTFBSL EQU >8300 Ptr to 1st byte in SPEAK list <0112> 8300 PHLEN EQU >8300 PHrom data LENgth <0113> 8301 VARV EQU >8301 TEMPORARY <0114> 8301 PHRADD EQU >8301 PHRom ADDress <0115> 8302 ACCUM EQU >8302 # OF BYTES ACCUMULATOR (4 BYTE <0116> 8302 STPT EQU >8302 TWO BYTES <0117> 8302 MNUM EQU >8302 Ussually a counter <0118> 8302 AAA1 EQU >8302 <0119> 8302 SP02 EQU >8302 SPRITE value <0120> 8302 PTLBSL EQU >8302 Ptr to last byte in SPEAK list <0121> 8304 VARY EQU >8304 <0122> 8304 PABPTR EQU >8304 Pointer to current PAB <0123> 8304 SP04 EQU >8304 SPRITE value <0124> 8304 PTEBSL EQU >8304 Ptr to end byte in SPEAK list <0125> * NOTE: PTEBSL points to the end of the temporary speak lis 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0003 EQUATES EXEC-359 <0126> * whereas PTLBSL points to the last byte actually use <0127> * i.e. PTFBSL <= PTLBSL <= PTEBSL <0128> 8306 VARY2 EQU >8306 Use in MVDN only <0129> 8306 DFLTLM EQU >8306 Default array limit (10) <0130> 8306 CCPPTR EQU >8306 OFFSET WITHIN RECORED (1) <0131> * or Pointer to current column <0132> 8306 SP06 EQU >8306 SPRITE value <0133> 8306 PTFCIS EQU >8306 Ptr to 1st character in string <0134> 8307 RECLEN EQU >8307 LENGTH OF CURRENT RECORD (1) <0135> 8308 CCPADR EQU >8308 RAM address of current refs <0136> * or Actual buffer address or c <0137> 8308 VARC EQU >8308 <0138> 8308 CCPADD EQU >8308 RAM address of current color <0139> 8308 CCC1 EQU >8308 <0140> 8308 SPSAL EQU >8308 Location of sprite attribute l <0141> 8308 PTCCIS EQU >8308 Ptr to current character in st <0142> 830A CALIST EQU >830A Call list for resolving refs <0143> 830A RAMPTR EQU >830A Pointer for crunching <0144> 830A STADDR EQU >830A Start address - usually for co <0145> 830A SPTMP EQU >830A Temporary variable <0146> 830A PTLCIS EQU >830A Ptr to last character in strin <0147> 830B VAR2 EQU >830B <0148> 830C BYTES EQU >830C BYTE COUNTER <0149> * or String length for GETSTR <0150> 830C NMPTR EQU >830C Pointer save for pscan <0151> 830C BBB1 EQU >830C <0152> 830C PTFCIP EQU >830C Ptr to 1st character in phrase <0153> 830E CHSAV EQU >830E <0154> 830E CURINC EQU >830E Increment for auto-num mode <0155> 830E VAR4 EQU >830E <0156> 830E PTCCIP EQU >830E Ptr to current character in ph <0157> 8310 TOPSTK EQU >8310 Top of data stack pointer <0158> 8310 VAR5 EQU >8310 VAR5 through VAR5+3 used in RA <0159> 8310 PTLCIP EQU >8310 Ptr to last character in phras <0160> 8311 VAR6 EQU >8311 <0161> 8312 LINUM EQU >8312 Used to determine end of scan <0162> 8312 PTFBPH EQU >8312 Ptr to 1st byte in PHrom <0163> 8312 VAR7 EQU >8312 Used in CHARLY <0164> 8312 STRPTR EQU >8312 RXB PATCH CODE <0165> 8314 NMLEN EQU >8314 Current line for auto-num <0166> 8314 CURLIN EQU >8314 Current line for auto-num <0167> * or Starting line number for L <0168> 8314 PTCCPH EQU >8314 Ptr to current byte in PHrom <0169> 8314 VAR9 EQU >8314 Used in CHARLY <0170> 8316 XFLAG EQU >8316 SCAN FLAG-BITS USED AS BELOW <0171> 8316 PTLCPH EQU >8316 Ptr to last byte in PHrom <0172> 8317 DSRFLG EQU >8317 INTERNAL =60, EXTERNAL =0 (1) <0173> 8317 OPTFLG EQU >8317 Option flag byte during OPEN <0174> 8317 FORNET EQU >8317 Nesting level of for/next <0175> 8317 FNUM EQU >8317 Current file number for search <0176> <0177> *********************************************************** <0178> * Permanent workspace variables <0179> 8318 STRSP EQU >8318 String space begining <0180> 831A STREND EQU >831A String space ending <0181> 831C SREF EQU >831C Temporary string pointer <0182> 831E SMTSRT EQU >831E Start of current statement <0183> 8320 VARW EQU >8320 Screen address (CURSOR) <0184> 8322 ERRCOD EQU >8322 Return error code from ALC <0185> 8324 STVSPT EQU >8324 Value-stack base <0186> 8326 RTNG EQU >8326 Return vector from 9900 code <0187> 8328 NUDTAB EQU >8328 Start of NUD table <0188> 832A VARA EQU >832A Ending display location <0189> 832C PGMPTR EQU >832C Program text pointer (TOKEN) 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0004 EQUATES EXEC-359 <0190> 832E EXTRAM EQU >832E Line number table pointer <0191> 8330 STLN EQU >8330 Start of line number table <0192> 8332 ENLN EQU >8332 End of line number table <0193> 8334 DATA EQU >8334 Data pointer for READ <0194> 8336 LNBUF EQU >8336 Line table pointer for READ <0195> 8338 INTRIN EQU >8338 Add of intrinsic poly constant <0196> 833A SUBTAB EQU >833A Subprogram symbol table <0197> 833C IOSTRT EQU >833C PAB list/Start of I/O chain <0198> 833E SYMTAB EQU >833E Symbol table pointer <0199> 8340 FREPTR EQU >8340 Free space pointer <0200> 8342 CHAT EQU >8342 Current charater/token <0201> 8343 BASE EQU >8343 OPTION BASE value <0202> 8344 PRGFLG EQU >8344 Program/imperative flag <0203> 8345 FLAG EQU >8345 General 8-bit flag <0204> 8346 BUFLEV EQU >8346 Crunch-buffer destruction leve <0205> 8348 LSUBP EQU >8348 Last subprogram block on stack <0206> * FAC EQU >834A Floating-point ACcurmulator <0207> 834A CCHAR EQU >834A Current character <0208> 834B FAC1 EQU FAC+1 <0209> 834B SPLFLG EQU >834B SPelL out phrase FLaG <0210> 834C FAC2 EQU FAC+2 <0211> 834C AAA EQU FAC+2 <0212> 834C TOTTIM EQU >834C TOTal wait TIMe <0213> * NOTE: DATAD must follow immediately after TOTTIM. The <0214> * routine STDATA is counting on this fact! <0215> 834D FAC3 EQU FAC+3 <0216> 834D DATAAD EQU >834D Speech DATA ADdress <0217> 834E FAC4 EQU FAC+4 <0218> 834E CCC EQU FAC+4 <0219> 834E FFF EQU FAC+4 <0220> 834F FAC5 EQU FAC+5 <0221> 834F PTLCIL EQU >834F Pointer To Last Character In L <0222> 8350 FAC6 EQU FAC+6 <0223> 8350 BBB EQU FAC+6 <0224> 8350 EEE EQU FAC+6 <0225> 8351 FAC7 EQU FAC+7 <0226> 8351 TIMLEN EQU >8351 TIMe LENgth of timing charact <0227> 8352 FAC8 EQU FAC+8 <0228> 8352 PHADDR EQU >8352 PHrom ADDRess <0229> 8353 FAC9 EQU FAC+9 <0230> 8354 FAC10 EQU FAC+10 <0231> 8354 DDD1 EQU FAC+10 <0232> 8354 TEMP1 EQU >8354 TEMPorary CPU location 1 <0233> 8355 FAC11 EQU FAC+11 <0234> 8356 FAC12 EQU FAC+12 <0235> 8356 FFF1 EQU FAC+12 <0236> 8356 TEMP2 EQU >8356 TEMPorary CPU location 2 <0237> 8357 FAC13 EQU FAC+13 <0238> 8358 FAC14 EQU FAC+14 <0239> 8358 EEE1 EQU FAC+14 <0240> 8358 READ EQU >8358 Address of speech peripheral <0241> * READ byte interface <0242> 8359 FAC15 EQU FAC+15 <0243> 835A FAC16 EQU FAC+16 <0244> 835A WRITE EQU >835A Address of speech peripheral <0245> * WRITE byte interface <0246> 835B FAC17 EQU FAC+17 <0247> * ARG EQU >835C Floating-point ARGument <0248> 835D ARG1 EQU ARG+1 <0249> 835D PHDATA EQU >835D PHrom DATA <0250> 835E ARG2 EQU ARG+2 <0251> 835E PTCBED EQU >835E Ptr To Current Byte Ext Data <0252> 835F ARG3 EQU ARG+3 <0253> 8360 ARG4 EQU ARG+4 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0005 EQUATES EXEC-359 <0254> 8360 LENCST EQU >8360 LEN of Current ext data STring <0255> 8361 ARG5 EQU ARG+5 <0256> 8362 ARG6 EQU ARG+6 <0257> 8362 LENWST EQU >8362 LEN of Whole ext data STring <0258> 8363 ARG7 EQU ARG+7 <0259> 8364 ARG8 EQU ARG+8 <0260> 8364 STRLEN EQU >8364 STRing LENgth <0261> 8364 TEMP4 EQU >8364 <0262> 8366 TEMP5 EQU >8366 <0263> * NOTE: BYTE1, BYTE2, and BYTE3 must be in consecutive memo <0264> * locations, and in the following order for SPGET to <0265> * work! <0266> 8366 BYTE1 EQU >8366 BYTE 1 <0267> 8367 BYTE2 EQU >8367 BYTE 2 <0268> 8368 BYTE3 EQU >8368 BYTE 3 <0269> 8368 TEMP6 EQU >8368 <0270> 8369 SPKSTS EQU >8369 SPeaK StaTus <0271> * FPERAD EQU >836C Value stack pointer <0272> 8367 ARG11 EQU ARG+11 <0273> 836B ARG15 EQU ARG+15 <0274> 836C ARG16 EQU ARG+16 <0275> * VSPTR EQU >836E Value stack pointer <0276> *********************************************************** <0277> * GPL Status Block <0278> * SUBSTK EQU >8373 SUBROUTINE STACK <0279> 8374 KEYBD EQU >8374 KEYBOARD SELCTION <0280> 8375 RKEY EQU >8375 KEY CODE <0281> 8376 EXPZ EQU >8376 Exponent in floating-point <0282> 8376 JOYY EQU >8376 JOYSTICK Y POSITION <0283> 8377 JOYX EQU >8377 JOYSTICK X POSITION <0284> 8378 RANDOM EQU >8378 RANDOM NUMBER GENERATOR <0285> 8379 TIMER EQU >8379 TIMING REGISTER <0286> 837A MOTION EQU >837A NUMBER OF MOVING SPRITES <0287> 837B VDPSTS EQU >837B VDP STATUS REGISTER <0288> 837B VDPSTT EQU >837B VDP STATUS REGISTER <0289> 837C ERCODE EQU >837C STATUS REGISTER <0290> 837D CB EQU >837D Character Buffer <0291> *********************************************************** <0292> 8384 RAMTOP EQU >8384 Highest address in ERAM <0293> 8386 RAMFRE EQU >8386 Free pointer in the ERAM <0294> 8388 RSTK EQU >8388 Subroutine stack base <0295> * (Starts at >8A) <0296> 8389 RAMFLG EQU >8389 ERAM flag <0297> 8389 GRAMFL EQU >8389 GRAM / VDP flag <0298> 83AF STKMIN EQU >83AF Base of data stack <0299> 83BD STKMAX EQU >83BD Top of data stack <0300> 83CE PRTNFN EQU >83CE Sound - previous tone finished <0301> *********************************************************** <0302> * VDP addresses <0303> 02E0 SCRNBS EQU >02E0 Screen base addr for last lin <0304> 02E2 NLNADD EQU >02E2 New LiNe ADDress <0305> 02FE ENDSCR EQU >02FE END of SCReen address <0306> 0300 SPRSAL EQU >0300 Sprite attribute list <0307> 0372 START EQU >0372 Line to start execution at <0308> * Temporary <0309> 0374 NOTONE EQU >0374 NO-TONE for SIZE in ACCEPT us <0310> * in FLMGRS (4 bytes used) <0311> 0376 SYMBOL EQU >0376 Saved symbol table pointer <0312> 0378 ONECHR EQU >0378 Used for CHRZ <0313> 0379 VRMSND EQU >0379 Sound blocks <0314> 0382 SPGMPT EQU >0382 Saved PGMPTR for continue <0315> 0384 SBUFLV EQU >0384 Saved BUFLEV for contiue <0316> 0386 SEXTRM EQU >0386 Saved EXTRAM for continue <0317> 0388 SAVEVP EQU >0388 Saved VSPRT for continue 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0006 EQUATES EXEC-359 <0318> 038A ERRLN EQU >038A On-error line pointer <0319> 0390 CSNTMP EQU >0390 Use as temporary stored place <0320> * or CSN TEMPORARY FOR FAC12 <0321> 0392 TABSAV EQU >0392 Saved main symbol table ponte <0322> 0394 AUTTMP EQU >0394 AUTOLD TEMPORARY IN SIDE ERRZ <0323> 0396 SLSUBP EQU >0396 Saved LSUBP for continue <0324> 0398 SFLAG EQU >0398 Saved on-warning/break bits <0325> 039A SSTEMP EQU >039A To save subprogram program ta <0326> 039C SSTMP2 EQU >039C Same as above. Used in SUBPRO <0327> 039E MRGPAB EQU >039E MERGEd temporary for pab ptr <0328> 03A0 RNDX2 EQU >03A0 Random number generator seed <0329> 03A5 RNDX1 EQU >03A5 Random number generator seed <0330> 03AA INPUTP EQU >03AA INPUT TEMPORARY FOR PTR TO PR <0331> 03AA SPNUM EQU >03AA Sprite number temporary, also <0332> * in INPUTP in FLMGR <0333> 03AC ACCVRW EQU >03AC Temoporary used in ERRZZ, als <0334> * used in FLMGRS <0335> * or temporary for @VARW, @VARA <0336> 03AE ACCVRA EQU >03AE TRY AGAIN <0337> 03B0 VALIDP EQU >03B0 Use as two values passing fro <0338> * or PTR TO STANDARD STRING IN VAL <0339> 03B2 VALIDL EQU >03B2 VALIDATE code to READL1 <0340> * or Length of string in validate <0341> 03B4 SIZCCP EQU >03B4 SIZE TEMPORARY FOR CCPADR <0342> 03B6 SIZREC EQU >03B6 SIZE TEMPORARY FOR RECLEN <0343> * <0344> 03B7 ACCTRY EQU >03B7 ACCEPT "TRY AGAIN" FLAG <0345> 03B8 SIZXPT EQU >03B8 Save XPT in SIZE when "try ag <0346> 03BA CSNTP1 EQU >03BA CSN TEMPORARY FOR FAC10 <0347> * <0348> 03BC OLDTOP EQU >03BC Temporary used in ERRZZ, also <0349> * or Old top of memory for RELOCA <0350> 03BC CPTEMP EQU >03BC CCPPTR, RECLEN temp in INPUT <0351> 03BE NEWTOP EQU >03BE New top of memory for RELOCA <0352> 03C0 VROAZ EQU >03C0 Temporary roll-out area <0353> 07FF SPRVB EQU >07FF Sprite velocity block. <0354> 0820 CRNBUF EQU >0820 CRuNch BUFfer address <0355> 08BE CRNEND EQU >08BE CRuNch buffer END <0356> 0958 VRAMVS EQU >0958 Default base of value stack <0357> <0358> *********************************************************** <0359> * IMMEDITATE VALUES <0360> 0000 NUMBR EQU >00 NUMERIC validate <0361> 0002 LISTZ EQU >02 <0362> 0003 X2 EQU >03 <0363> 0005 OLDZ EQU >05 <0364> 0006 RESEQZ EQU >06 <0365> 0007 SAVEZ EQU >07 <0366> 0008 MERGEZ EQU >08 <0367> 000A DWNARR EQU >0A <0368> 000B UPARR EQU >0B <0369> 000D CHRTN EQU >0D <0370> 0020 BKGD EQU >20 BACKGROUND CHARACTER <0371> 0060 OFFSET EQU >60 OFFSET FOR VIDEO TABLES <0372> 0065 STRVAL EQU >65 Value in accum. is string val [0004] *********************************************************** [0005] COPY 'DSK5.MYXB5-B' <0001> *********************************************************** <0002> * Editting command equates & keys or symbols <0003> 0002 BREAK EQU >02 Break key <0004> 0003 DLETE EQU >03 Delete key <0005> 0004 INSRT EQU >04 Insert key <0006> 0006 RECALL EQU >06 Edit-buffer recall <0007> 0007 CLRLN EQU >07 Clear-line key 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0007 EQUATES EXEC-359 <0008> 0008 BACK EQU >08 Back-space key <0009> 0009 FORW EQU >09 Forward-space key <0010> 000A DOWN EQU >0A Down-arrow key <0011> 000B UPMV EQU >0B Up-arrow key <0012> 001C VWIDTH EQU >1C Screen width (PRINT) <0013> 0020 SPACE EQU >20 Space key <0014> 0022 QUOTE EQU >22 " <0015> 0023 NUMBER EQU >23 # <0016> 0024 DOLLAR EQU >24 $ <0017> 007E CURSOR EQU >1E+OFFSET CURSOR <0018> 007F EDGECH EQU >1F+OFFSET EDGE character <0019> 002B PLUS EQU >2B + <0020> 002C COMMAT EQU >2C , <0021> 002D MINUS EQU >2D - <0022> 002D HYPEN EQU >2D + <0023> 002E PERIOD EQU >2E . <0024> 0030 ZERO EQU >30 0 <0025> 0039 NINE EQU >39 9 <0026> 003A COLON EQU >3A : <0027> 003B SEMICO EQU >3B ; <0028> 003C LESS EQU >3C < <0029> 003E GREAT EQU >3E > <0030> 0041 A EQU >41 A <0031> 0046 F EQU >46 F <0032> <0033> *********************************************************** <0034> * BASIC TOKEN TABLE <0035> * EQU >80 spare token <0036> 0081 ELSEZ EQU >81 ELSE <0037> 0082 SSEPZ EQU >82 :: <0038> 0083 TREMZ EQU >83 $ <0039> 0084 IFZ EQU >84 IF <0040> 0085 GOZ EQU >85 GO <0041> 0086 GOTOZ EQU >86 GOTO <0042> 0087 GOSUBZ EQU >87 GOSUB <0043> 0088 RETURZ EQU >88 RETURN <0044> 0089 DEFZ EQU >89 DEF <0045> 008A DIMZ EQU >8A DIM <0046> 008B ENDZ EQU >8B END <0047> 008C FORZ EQU >8C FOR <0048> 008D LETZ EQU >8D LET <0049> 008E BREAKZ EQU >8E BREAK <0050> 008F UNBREZ EQU >8F UNBREAK <0051> 0090 TRACEZ EQU >90 TRACE <0052> 0091 UNTRAZ EQU >91 UNTRACE <0053> 0092 INPUTZ EQU >92 INPUT <0054> 0093 DATAZ EQU >93 DATA <0055> 0094 RESTOZ EQU >94 RESTORE <0056> 0095 RANDOZ EQU >95 RANDOMIZE <0057> 0096 NEXTZ EQU >96 NEXT <0058> 0097 READZ EQU >97 READ <0059> 0098 STOPZ EQU >98 STOP <0060> 0099 DELETZ EQU >99 DELETE <0061> 009A REMZ EQU >9A REM <0062> 009B ONZ EQU >9B ON <0063> 009C PRINTZ EQU >9C PRINT <0064> 009D CALLZ EQU >9D CALL <0065> 009E OPTIOZ EQU >9E OPTION <0066> 009F OPENZ EQU >9F OPEN <0067> 00A0 CLOSEZ EQU >A0 CLOSE <0068> 00A1 SUBZ EQU >A1 SUB <0069> 00A2 DISPLZ EQU >A2 DISPLAY <0070> 00A3 IMAGEZ EQU >A3 IMAGE <0071> 00A4 ACCEPZ EQU >A4 ACCEPT 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0008 EQUATES EXEC-359 <0072> 00A5 ERRORZ EQU >A5 ERROR <0073> 00A6 WARNZ EQU >A6 WARNING <0074> 00A7 SUBXTZ EQU >A7 SUBEXIT <0075> 00A8 SUBNDZ EQU >A8 SUBEND <0076> 00A9 RUNZ EQU >A9 RUN <0077> 00AA LINPUZ EQU >AA LINPUT <0078> * EQU >AB spare token (LIBRARY) <0079> * EQU >AC spare token (REAL) <0080> * EQU >AD spare token (INTEGER) <0081> * EQU >AE spare token (SCRATCH) <0082> * EQU >AF spare token <0083> 00B0 THENZ EQU >B0 THEN <0084> 00B1 TOZ EQU >B1 TO <0085> 00B2 STEPZ EQU >B2 STEP <0086> 00B3 COMMAZ EQU >B3 , <0087> 00B4 SEMICZ EQU >B4 ; <0088> 00B5 COLONZ EQU >B5 : <0089> 00B6 RPARZ EQU >B6 ) <0090> 00B7 LPARZ EQU >B7 ( <0091> 00B8 CONCZ EQU >B8 & (CONCATENATE) <0092> * EQU >B9 spare token <0093> 00BA ORZ EQU >BA OR <0094> 00BB ANDZ EQU >BB AND <0095> 00BC XORZ EQU >BC XOR <0096> 00BD NOTZ EQU >BD NOT <0097> 00BE EQUALZ EQU >BE = <0098> 00BF LESSZ EQU >BF < <0099> 00C0 GREATZ EQU >C0 > <0100> 00C1 PLUSZ EQU >C1 + <0101> 00C2 MINUSZ EQU >C2 - <0102> 00C3 MULTZ EQU >C3 * <0103> 00C4 DIVIZ EQU >C4 / <0104> 00C5 CIRCUZ EQU >C5 ^ <0105> * EQU >C6 spare token <0106> 00C7 STRINZ EQU >C7 QUOTED STRING <0107> 00C8 UNQSTZ EQU >C8 UNQUOTED STRING <0108> 00C8 NUMZ EQU >C8 ALSO NUMERICAL STRING <0109> 00C8 NUMCOZ EQU >C8 ALSO UNQUOTED STRING <0110> 00C9 LNZ EQU >C9 LINE NUMBER CONSTANT <0111> * EQU >CA spare token <0112> 00CB ABSZ EQU >CB ABS <0113> 00CC ATNZ EQU >CC ATN <0114> 00CD COSZ EQU >CD COS <0115> 00CE EXPZZ EQU >CE EXP <0116> 00CF INTZ EQU >CF INT <0117> 00D0 LOGZ EQU >D0 LOG <0118> 00D1 SGNZZ EQU >D1 SGN <0119> 00D2 SINZ EQU >D2 SIN <0120> 00D3 SQRZ EQU >D3 SQR <0121> 00D4 TANZ EQU >D4 TAN <0122> 00D5 LENZ EQU >D5 LEN <0123> 00D6 CHRZZ EQU >D6 CHR$ <0124> 00D7 RNDZ EQU >D7 RND <0125> 00D8 SEGZZ EQU >D8 SEG$ <0126> 00D9 POSZ EQU >D9 POS <0127> 00DA VAL EQU >DA VAL <0128> 00DB STRZZ EQU >DB STR$ <0129> 00DC ASCZ EQU >DC ASC <0130> 00DD PIZ EQU >DD PI <0131> 00DE RECZ EQU >DE REC <0132> 00DF MAXZ EQU >DF MAX <0133> 00E0 MINZ EQU >E0 MIN <0134> 00E1 RPTZZ EQU >E1 RPT$ <0135> * EQU >E2 unused 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0009 EQUATES EXEC-359 <0136> * EQU >E2 unused <0137> * EQU >E3 unused <0138> * EQU >E4 unused <0139> * EQU >E5 unused <0140> * EQU >E6 unused <0141> * EQU >E7 unused <0142> 00E8 NUMERZ EQU >E8 NUMERIC <0143> 00E9 DIGITZ EQU >E9 DIGIT <0144> 00EA UALPHZ EQU >EA UALPHA <0145> 00EB SIZEZ EQU >EB SIZE <0146> 00EC ALLZ EQU >EC ALL <0147> 00ED USINGZ EQU >ED USING <0148> 00EE BEEPZ EQU >EE BEEP <0149> 00EF ERASEZ EQU >EF ERASE <0150> 00F0 ATZ EQU >F0 AT <0151> 00F1 BASEZ EQU >F1 BASE <0152> * EQU >F2 spare token (TEMPORARY) <0153> 00F3 VARIAZ EQU >F3 VARIABLE <0154> 00F4 RELATZ EQU >F4 RELATIVE <0155> 00F5 INTERZ EQU >F5 INTERNAL <0156> 00F6 SEQUEZ EQU >F6 SEQUENTIAL <0157> 00F7 OUTPUZ EQU >F7 OUTPUT <0158> 00F8 UPDATZ EQU >F8 UPDATE <0159> 00F9 APPENZ EQU >F9 APPEND <0160> 00FA FIXEDZ EQU >FA FIXED <0161> 00FB PERMAZ EQU >FB PERMANENT <0162> 00FC TABZ EQU >FC TAB <0163> 00FD NUMBEZ EQU >FD # <0164> 00FE VALIDZ EQU >FE VALIDATE <0165> * EQU >FF ILLEGAL VALUE <0166> *********************************************************** <0167> <0168> *********************************************************** <0169> * NOTE: FILES EXECSD, SUBS AND PART OF PSCANS ARE IN GROM 5 <0170> * AS BELOW: <0171> *-------NAME------------------ADDRESS---------BYTES LEFT--- <0172> * EXECS >A000 - >AD92 5 <0173> * SUBS >AD98 - >B4DC 2 <0174> * PSCANS >B4E0 - >B7FA 5 <0175> * <0176> * Some of the error calls at the end of EXECS file are <0177> * shared and directly addressed by SUBS file. Any change in <0178> * EXECS file which affects the address of error calls will <0179> * affect error reference in SUBS file. Make sure to edit <0180> * SUBS file in that situation. <0181> *********************************************************** <0182> A000 0F,75 XML CONT XML CONT used by subprogram <0183> A002 43,FB BR LITS05 Build FAC entry and GETSTR <0184> A004 40,9C BR EXEC Execute a program <0185> A006 48,D3 BR LINE <0186> A008 48,6E BR DATAST <0187> A00A 48,8A BR ASC <0188> A00C 40,A9 BR EXEC1 <0189> A00E 41,2B BR EXEC6D Save information on a break <0190> A010 48,0A BR DELINK Delink symbol table entry <0191> A012 48,E5 BR CONV1 <0192> A014 49,FC BR SQUISH Called in error routine in PS <0193> A016 45,71 BR VALCD <0194> A018 42,8D BR INTRND <0195> A01A 40,1A BR $ <0196> A01C 4B,1A GA01C BR LNKRTN Routine to go back to XB prog <0197> A01E 49,89 GA01E BR SPCOL Clear breakpoint in line # ro <0198> A020 46,FC BR UBSUB Spare <0199> A022 40,22 BR $ 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0010 EQUATES EXEC-359 <0200> A024 40,24 BR $ *** Please let me know it you add <0201> * *** branches here since it will a <0202> * *** the address of link list. Sum <0203> A026 A0,30 LINK1 DATA LINK2 <0204> A028 05,53,4F STRI 'SOUND' A02B 55,4E,44 <0205> A02E AA,3E DATA SOUND <0206> A030 A0,3A LINK2 DATA LINK3 <0207> A032 05,43,4C STRI 'CLEAR' A035 45,41,52 <0208> A038 AA,18 DATA CLEAR <0209> A03A A0,44 LINK3 DATA LINK4 <0210> A03C 05,43,4F STRI 'COLOR' A03F 4C,4F,52 <0211> A042 A9,1D DATA COLOR <0212> A044 A0,4E LINK4 DATA LINK5 <0213> A046 05,47,43 STRI 'GCHAR' A049 48,41,52 <0214> A04C A8,FA DATA GCHAR <0215> A04E A0,58 LINK5 DATA LINK6 <0216> A050 05,48,43 STRI 'HCHAR' A053 48,41,52 <0217> A056 AB,03 DATA HCHAR <0218> A058 A0,62 LINK6 DATA LINK7 <0219> A05A 05,56,43 STRI 'VCHAR' A05D 48,41,52 <0220> A060 AB,26 DATA VCHAR <0221> A062 A0,6B LINK7 DATA LINKA <0222> A064 04,43,48 STRI 'CHAR' A067 41,52 <0223> A069 AB,46 DATA CHARLY <0224> A06B A0,73 LINKA DATA LINKB <0225> A06D 03,4B,45 STRI 'KEY' A070 59 <0226> A071 B6,83 DATA ZKEY <0227> A073 A0,7D LINKB DATA LINKC <0228> A075 05,4A,4F STRI 'JOYST' A078 59,53,54 <0229> A07B B6,8D DATA ZJOYST <0230> A07D A0,88 LINKC DATA LINKD <0231> A07F 06,53,43 STRI 'SCREEN' A082 52,45,45 A085 4E <0232> A086 AC,C9 DATA BORDER <0233> A088 A0,94 LINKD DATA LINKE <0234> A08A 07,56,45 STRI 'VERSION' A08D 52,53,49 A090 4F,4E <0235> A092 AA,1F DATA VERS <0236> A094 AE,06 LINKE DATA LINKS1 <0237> A096 03,45,52 STRI 'ERR' A099 52 <0238> A09A AC,F9 DATA ERRWXY <0239> *********************************************************** <0240> * START EXECUTION OF A PROGRAM OR STATEMENT <0241> * DATA: <0242> * RAM(START) points into line number table at the <0243> * first line to execute <0244> * @PGMFLG contains >FF if executing a program or zero <0245> * if imperative statement <0246> *********************************************************** <0247> A09C 8E,44 EXEC CZ @PRGFLG If program <0248> A09E 60,AE BS GA0AE <0249> A0A0 BD,2E,A3 DST V@START,@EXTRAM Line to start execution at 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0011 EQUATES EXEC-359 A0A3 72 <0250> A0A4 95,2E DINCT @EXTRAM Pointer to text pointer <0251> A0A6 06,A2,8D CALL INTRND Initialize random number <0252> A0A9 BE,7F,03 EXEC1 ST X2,@XPT Initialize screen display <0253> A0AC 40,B2 BR GA0B2 <0254> A0AE BF,2C,08 GA0AE DST CRNBUF,@PGMPTR Executing out of crunch buffe A0B1 20 <0255> A0B2 BF,26,A0 GA0B2 DST EXEC20,@RTNG Address of return from ALC A0B5 BC <0256> A0B6 BF,28,A1 DST NUDTB,@NUDTAB NUD table address for ALC A0B9 47 <0257> A0BA 0F,76 XML EXECG Execute XB <0258> A0BC 8A,23 EXEC20 CASE @ERRCOD+1 Check type of return <0259> A0BE 40,DF BR EXECND 0 - NORMAL END <0260> A0C0 41,1A BR EXECBK 1 - BREAKPOINT <0261> A0C2 40,ED BR EXECTR 2 - TRACE <0262> A0C4 48,AB BR ERORZ 3 - ERROR <0263> A0C6 40,D4 BR WARNGZ 4 - WARNING <0264> A0C8 41,DA BR ONERR 5 - ON ERROR <0265> A0CA 47,17 BR UDF 6 - FUNCTION <0266> A0CC 42,18 BR ONBRK 7 - ON BREAK <0267> A0CE 44,38 BR CONCAT 8 - CONCATENATE STRINGS "&" <0268> A0D0 41,AA BR ONWARN 9 - ON WARNING <0269> A0D2 42,2F BR GPLCAL A - CALL STATEMENT <0270> A0D4 C6,73,B0 WARNGZ CH >B0,@SUBSTK <0271> A0D7 6D,CA BS ERRSO <0272> * Stack overflow <0273> * ALLOW ROOM ON STACK FOR WARNING CALLS <0274> A0D9 06,6A,82 WRNN01 CALL WARNZZ ONLY WARNING MSG FROM XB SUPPORT <0275> A0DC 02 BYTE 2 * NUMERIC OVERFLOW <0276> A0DD 41,16 BR CLRRTN Clear ERRCOD and return <0277> * NORMAL END OF EXECUTION <0278> A0DF 8E,44 EXECND CZ @PRGFLG If imperative mode <0279> A0E1 40,E9 BR ERRRDY <0280> A0E3 06,60,1C CALL CHRTAB Load the default character se <0281> A0E6 05,63,DD B TOPL15 Return to top-level <0282> A0E9 06,6A,84 ERRRDY CALL ERRZZ Display * READY * <0283> A0EC 00 BYTE 0 <0284> * TRACE-MODE turned on - display line number <0285> A0ED 86,20 EXECTR CLR @VARW Clear upper address byte <0286> A0EF BC,21,7F ST @XPT,@VARW+1 Get current x-pointer <0287> A0F2 A3,20,02 DADD NLNADD-3,@VARW Make a valid screen address A0F5 DF <0288> A0F6 C7,20,02 DCH NLNADD+22,@VARW If might go off screen A0F9 F8 <0289> A0FA 41,02 BR GA102 <0290> A0FC 0F,83 XML SCROLL SCROLL to next line <0291> A0FE BF,20,02 DST NLNADD,@VARW Re-initialize screen address A101 E2 <0292> A102 BE,B0,20 GA102 ST LESS+OFFSET,V*VARW Display open bracket "(" A105 9C <0293> A106 91,20 DINC @VARW Increment screen address <0294> A108 06,A8,8A CALL ASC Convert line # into ASCII <0295> A10B BE,B0,20 ST GREAT+OFFSET,V*VARW Display close bracket ")" A10E 9E <0296> A10F A7,20,02 DSUB NLNADD-4,@VARW Update the x-pointer A112 DE <0297> A113 BC,7F,21 ST @VARW+1,@XPT <0298> A116 87,22 CLRRTN DCLR @ERRCOD Clear the return vector <0299> A118 0F,82 XML RTNB Return to ALC <0300> * BREAKPOINT OR BREAK-KEY RECIEVED <0301> A11A 8E,44 EXECBK CZ @PRGFLG If break or program <0302> A11C 61,43 BS ERRBRK <0303> A11E BD,52,2E DST @EXTRAM,@FAC8 @FAC8 : Source addr in ERAM 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0012 EQUATES EXEC-359 <0304> A121 97,52 DDECT @FAC8 Point to the line # <0305> A123 06,A7,0C CALL UBSUB1 Reset the breakpoint <0306> A126 03 SCAN Get break key out of queue <0307> A127 BD,A3,82 EXEC6C DST @PGMPTR,V@SPGMPT Save text pointer A12A 2C <0308> A12B BD,A3,86 EXEC6D DST @EXTRAM,V@SEXTRM Save line number table pointe A12E 2E <0309> A12F BD,A3,88 DST @VSPTR,V@SAVEVP Save value stack pointer A132 6E <0310> A133 BD,A3,84 DST @BUFLEV,V@SBUFLV Save crunch buffer level A136 46 <0311> A137 BD,A3,96 DST @LSUBP,V@SLSUBP Save last subprogram on stack A13A 48 <0312> A13B BC,A3,98 ST @FLAG,V@SFLAG Save FLAG for continue A13E 45 <0313> A13F B2,A3,98 AND >63,V@SFLAG Only warning and break bits A142 63 <0314> A143 06,6A,84 ERRBRK CALL ERRZZ * BREAKPOINT <0315> A146 01 BYTE 1 [0006] *********************************************************** [0007] COPY 'DSK5.MYXB5-C' <0001> *********************************************************** <0002> * NUD / STATEMENT BRANCH TABLE <0003> *********************************************************** <0004> A147 41,89 NUDTB BR RECX 'RECORD' 0 <0005> A149 46,8B BR NBREAK 'BREAK' 0 <0006> A14B 46,9D BR NUNBRK 'UNBREAK' 0 <0007> A14D 46,81 BR NTRACE 'TRACE' 0 <0008> A14F 46,86 BR NUNTRC 'UNTRACE' 0 <0009> A151 41,8C BR NREADX 'READ' 0 <0010> A153 41,8F BR PRINTX 'PRINT' 0 <0011> A155 41,86 BR SZRUNX 'RUN' 0 <0012> A157 41,A7 BR LINPUX Reserved for LINPUT 1 <0013> A159 41,92 BR RESTOX 'RESTORE' 1 <0014> A15B 43,7F BR NRNDMZ 'RANDOMIZE' 1 <0015> A15D 41,95 BR INPUTX 'INPUT' 1 <0016> A15F 41,98 BR OPENX 'OPEN' 1 <0017> A161 41,9B BR CLOSEX 'CLOSE' 1 <0018> A163 42,48 BR NPI 'PI' 1 <0019> A165 42,58 BR NMAX 'MAX' 1 <0020> A167 42,65 BR NMIN 'MIN' 2 <0021> A169 46,28 BR RPTZ01 'RPT$' 2 <0022> A16B 41,9E BR ACCEPX 'ACCEPT' 2 <0023> A16D 41,83 BR EOFX 'EOF' 2 <0024> A16F 45,1A BR ASC01 'ASC' 2 <0025> A171 45,BD BR POS01 'POS' 2 <0026> A173 45,55 BR VAL01 'VAL' 2 <0027> A175 45,2B BR STRZ01 'STR$' 2 <0028> A177 44,90 BR SEGZ01 'SEG$' 3 <0029> A179 41,A4 BR DELETX 'DELETE' 3 <0030> A17B 41,A1 BR DISPLX 'DISPLAY' 3 <0031> A17D 44,F3 BR LEN01 'LEN' 3 <0032> A17F 44,FF BR CHRZ01 'CHR$' 3 <0033> A181 42,9F BR NRND 'RND' 3 <0034> * The following are long branches to another GROM <0035> A183 05,80,1C EOFX B EOF <0036> A186 05,60,1E SZRUNX B SZRUN <0037> A189 05,80,22 RECX B REC <0038> A18C 05,80,0E NREADX B NREAD <0039> A18F 05,80,04 PRINTX B PRINT <0040> A192 05,80,0C RESTOX B RESTOR <0041> A195 05,80,06 INPUTX B INPUT <0042> A198 05,80,08 OPENX B OPEN <0043> A19B 05,80,0A CLOSEX B CLOSE 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0013 EQUATES EXEC-359 <0044> A19E 05,80,1E ACCEPX B ACCEPT <0045> A1A1 05,80,00 DISPLX B DISPL1 <0046> A1A4 05,80,02 DELETX B DELET <0047> A1A7 05,80,30 LINPUX B LINPUT <0048> *********************************************************** <0049> * FLAGS USED IN EXECUTION MODE: this needs to be checked <0050> * @FLAG BIT RESET SET <0051> * 0 <0052> * 1 Warning PRINT PRINT off <0053> * 2 Warning NEXT STOP <0054> * 3 Not in UDF Executing a UDF <0055> * 4 TRACE mode Normal mode <0056> * 5 <0057> * 6 BREAK allowed BREAK not allowed <0058> * 7 No LST/EDT protect LIST/EDIT protected <0059> *********************************************************** <0060> <0061> *********************************************************** <0062> * ON WARNING {NEXT | STOP | PRINT} <0063> * ON WARNING NEXT - Causes warning messages to be ignored <0064> * and execution to continue as if a <0065> * warning never occurred <0066> * ON WARNING STOP - Causes a warning to be treated as an <0067> * error - i.e. the message is displayed <0068> * and execution is halted <0069> * ON WARNING PRINT - Causes the default warning handling to <0070> * be in effect, i.e. any warning <0071> * messages are printed and execution <0072> * continues <0073> *********************************************************** <0074> A1AA 0F,79 ONWARN XML PGMCHR GET OPTION <0075> A1AC D6,42,9C CEQ PRINTZ,@CHAT If print <0076> A1AF 41,B7 BR GA1B7 <0077> A1B1 B2,45,F9 AND >F9,@FLAG Turn on print and contiue <0078> A1B4 05,A1,CF B ONWRN5 <0079> A1B7 D6,42,98 GA1B7 CEQ STOPZ,@CHAT <0080> A1BA 41,C4 BR GA1C4 <0081> A1BC B2,45,FD AND >FD,@FLAG Turn on print <0082> A1BF B6,45,04 OR >04,@FLAG Turn on stop <0083> A1C2 41,CF BR ONWRN5 <0084> A1C4 D6,42,96 GA1C4 CEQ NEXTZ,@CHAT * SYNTAX ERROR <0085> A1C7 4D,BA BR ERRSYN <0086> A1C9 B6,45,02 OR >02,@FLAG Turn off print <0087> A1CC B2,45,FB AND >FB,@FLAG Turn off stop <0088> A1CF 0F,79 ONWRN5 XML PGMCHR Check for EOS <0089> A1D1 06,6A,78 ONWRN7 CALL CHKEND Error if not EOS <0090> A1D4 4D,BA BR ERRSYN If not EOS <0091> A1D6 87,22 DCLR @ERRCOD <0092> A1D8 0F,75 XML CONT Continue <0093> *********************************************************** <0094> * ON ERROR {line number | STOP} <0095> * ON ERROR line number - causes the error routine to build <0096> * an error stack entry and pass <0097> * control to the line specified in <0098> * the most-recently executed <0099> * on-error-statement <0100> * ON ERROR STOP - causes the default error handling <0101> * conditions to be in effect. i.e. any <0102> * errors that occur cause execution to halt <0103> * an a message to be displayed <0104> *********************************************************** <0105> A1DA 0F,79 ONERR XML PGMCHR Get option <0106> A1DC D6,42,C9 CEQ LNZ,@CHAT If line # then find the line <0107> A1DF 42,0E BR GA20E 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0014 EQUATES EXEC-359 <0108> A1E1 0F,79 XML PGMCHR Get upper byte <0109> A1E3 BC,4A,42 ST @CHAT,@FAC <0110> A1E6 0F,79 XML PGMCHR Get lower byte <0111> A1E8 BC,4B,42 ST @CHAT,@FAC1 <0112> A1EB BD,4C,32 DST @ENLN,@FAC2 <0113> A1EE A7,4C,00 DSUB 3,@FAC2 Pointing to 1st line # A1F1 03 <0114> * Consider both ERAM and RAM cases to get line # from the <0115> * line number table. Also reset the break bit. <0116> A1F2 06,80,2E ONERR2 CALL GRSUB3 Get 2 bytes from either RAM/E <0117> A1F5 4C BYTE FAC2 * FAC2 has the address <0118> A1F6 D5,4A,58 DCEQ @EEE1,@FAC If found <0119> A1F9 62,06 BS ONERR4 <0120> A1FB C5,4C,30 DCH @STLN,@FAC2 Not found <0121> A1FE 4D,E6 BR ERRLNF <0122> A200 A7,4C,00 DSUB 4,@FAC2 Goto next line A203 04 <0123> A204 41,F2 BR ONERR2 <0124> A206 95,4C ONERR4 DINCT @FAC2 <0125> A208 BD,A3,8A DST @FAC2,V@ERRLN A20B 4C <0126> A20C 42,16 BR GA216 <0127> A20E D6,42,98 GA20E CEQ STOPZ,@CHAT * SYNTAX ERROR <0128> A211 4D,BA BR ERRSYN <0129> A213 87,A3,8A DCLR V@ERRLN Back to default error handlin <0130> A216 41,CF GA216 BR ONWRN5 Finish up same as ON WARNING <0131> *********************************************************** <0132> * ON BREAK {NEXT | STOP} <0133> * ON BREAK NEXT - Causes any breakpoints which have been <0134> * set on statements to be ignored when the <0135> * statement is encountered and also masks <0136> * the shift-C key so that it is ignored <0137> * ON BREAK STOP - Causes the default break handling to be <0138> * in force., i.e. execution is halted and <0139> * the BREAKPOINT message is displayed on <0140> * the screen <0141> *********************************************************** <0142> A218 0F,79 ONBRK XML PGMCHR Get next char to find option <0143> A21A D6,42,98 CEQ STOPZ,@CHAT If stop option specified <0144> A21D 42,25 BR GA225 <0145> A21F B2,45,BF AND >BF,@FLAG break allowed <0146> A222 05,A2,2D B GA22D Don't change this to BR GA22D <0147> A225 D6,42,96 GA225 CEQ NEXTZ,@CHAT If next option number <0148> A228 4D,BA BR ERRSYN specified then syntax error <0149> A22A B6,45,40 OR >40,@FLAG If next option specified then <0150> * break NOT allowed <0151> A22D 41,CF GA22D BR ONWRN5 Finish up same as ON WARNING <0152> *********************************************************** <0153> * GPLCAL - If a call is made to a subprogram that does not <0154> * not exist either in the BASIC program itself or in the <0155> * internal GPL subprogram list then one final attempt is <0156> * made to find the subprogram at execution time by <0157> * searching for the subprogram in the console or a <0158> * peripheral. If not found there, then a <0159> * *SUBPROGRAM NOT FOUND error occurs <0160> * <0161> * Input: the subprogram name is in the FAC and the length <0162> * of the name is in FAC15 <0163> *********************************************************** <0164> A22F 8E,80,89 GPLCAL CZ @RAMFLG Can't try if CPU program <0165> A232 4D,F6 BR ERRSNF <0166> A234 E7,59,00 DSRL 8,@FAC15 Make name length a double A237 08 <0167> A238 A5,2C,59 DSUB @FAC15,@PGMPTR Point back at name 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0015 EQUATES EXEC-359 <0168> A23B 93,2C DDEC @PGMPTR Point at name length <0169> A23D BD,56,2C DST @PGMPTR,@FAC12 Set pointer to name <0170> A240 06,00,10 CALL LINK Issue 'Call Program Link' <0171> A243 0A BYTE 10 * Search subprogram lists <0172> A244 41,D1 BR ONWRN7 If all ok, check-end and rtn <0173> A246 4D,F6 BR ERRSNF If not found, error <0174> <0175> *********************************************************** <0176> * NUD FOR PI <0177> *********************************************************** <0178> A248 31,00,08 NPI MOVE 8,G@CONPI,@FAC Load constant PI A24B 4A,A2,50 <0179> A24E 0F,75 XML CONT <0180> A250 40,03,0E CONPI BYTE >40,3,14,15,92,65,35,90 A253 0F,5C,41 A256 23,5A <0181> * 3.1415992653590E+00 <0182> *********************************************************** <0183> * NUD FOR MAX <0184> *********************************************************** <0185> A258 06,A2,6D NMAX CALL MAXMIN Combine MAX and MIN <0186> A25B 0A GT <0187> A25C 42,63 BR GA263 <0188> A25E 35,00,08 NMAXZ1 MOVE 8,@ARG,@FAC A261 4A,5C <0189> A263 0F,75 GA263 XML CONT <0190> *********************************************************** <0191> * NUD FOR MIN <0192> *********************************************************** <0193> A265 06,A2,6D NMIN CALL MAXMIN Combine MAX and MIN again <0194> A268 0A GT <0195> A269 42,5E BR NMAXZ1 <0196> A26B 0F,75 XML CONT <0197> *********************************************************** <0198> * COMMON MAX / MIN ROUTINE <0199> *********************************************************** <0200> A26D 06,AC,89 MAXMIN CALL LPAR Skip "(" parse, and insure , <0201> A270 C6,4C,63 CH >63,@FAC2 Must be numeric <0202> A273 6D,BE BS ERRSNM <0203> A275 0F,77 XML VPUSH Push l.h. arg on stack <0204> A277 0F,74 XML PARSE PARSE up to ")" <0205> A279 B6 BYTE RPARZ <0206> A27A C6,4C,63 CH >63,@FAC2 Must be numeric <0207> A27D 6D,BE BS ERRSNM <0208> A27F 0F,7E XML SPEED Must be <0209> A281 00 BYTE SYNCHK * at a <0210> A282 B6 BYTE RPARZ * right parenthesis <0211> A283 35,00,08 MOVE 8,@FAC,@ARG Save in ARG for compare A286 5C,4A <0212> A288 0F,78 XML VPOP Get l.h. arg back <0213> A28A 0F,0A XML FCOMP Compare operands <0214> A28C 00 RTN <0215> * Initialize random number generator <0216> A28D 31,00,0A INTRND MOVE 10,G@X2SEED,V@RNDX2 A290 A3,A0,A2 A293 95 <0217> A294 00 RTN <0218> A295 42,03,23 X2SEED BYTE >42,>03,>23,>15,>00 * = 33521, X2 INITIAL VAL A298 15,00 <0219> A29A 43,02,3E X1SEED BYTE >43,>02,>3E,>2A,>17 * = 2624223, X1 INITIAL VAL A29D 2A,17 <0220> *********************************************************** <0221> * PSEUDO-RANDOM NUMBER GENERATOR <0222> * X(N+1) = (A*X(N)+C) MOD M; RND = X/M 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0016 EQUATES EXEC-359 <0223> * WHERE: X = X2 * 1E7 + X1 <0224> * A = A2 * 1E7 + A1 <0225> * C = C2 * 1E7 + C1 <0226> * M = 1E14 <0227> * ASSUMPTIONS: <0228> * (1) All numbers are integers; fractional parts are <0229> * truncated <0230> * (2) If the variables listed below start in the ranges <0231> * specified. They will also end in the ranges specified <0232> * <0233> * CONSTANTS: 0 <= A2 < 5E6 ; 0 <= C2 < 1E7 <0234> * 0 <= A1 < 5E6 ; 0 <= C1 < 1E7 <0235> * VARIABLES: 0 <= X2 < 1E7 ; 0 <= T1 <= 1E14 ; 0 <= T2 < 1E <0236> * 0 <= X1 < 1E7 ; 0 <= T3 <= 1E14 ; 0 <= T4 < 1E <0237> * <0238> * STACK USAGE: <0239> * CONSTANT REFS CONTANT REFS CONTANT REF <0240> * +---------+ IN/OUT IN/OUT IN/OUT <0241> * | STACK+4 | X2*A1(F)(H) -- ---- -- ---- <0242> * +---------+ <0243> * | STACK+3 | T2 (C)(J) -- ---- -- ---- <0244> * +---------+ <0245> * | STACK+2 | T1 (B)(D) new X1 (E)(N) -- ---- <0246> * +---------+ <0247> * | STACK+1 |old X1(A)(G) T3 (K)(L) new X2 (M)(P) <0248> * +---------+ <0249> *********************************************************** <0250> * COMPUTE NEW VALUE FOR X1, SAVE IT IN V@RNDX1 <0251> * STACK <0252> * SREFS FAC CONTENTS <0253> A29F 35,00,05 NRND MOVE 5,V@RNDX1,@FAC FAC = X1 A2A2 4A,A3,A5 <0254> A2A5 86,4F CLR @FAC5 FAC = CLR <0255> A2A7 87,50 DCLR @FAC6 FAC = CLR <0256> A2A9 0F,77 XML VPUSH (A) FAC = X1 <0257> A2AB 31,00,08 MOVE 8,G@RNDA1,@ARG ARG = A1 A2AE 5C,A3,57 <0258> A2B1 0F,08 XML FMUL FAC = X1*A1 <0259> A2B3 31,00,08 MOVE 8,G@RNDC1,@ARG ARG = C1 A2B6 5C,A3,67 <0260> A2B9 0F,06 XML FADD T1=FAC = X1*A1+C1 <0261> A2BB 0F,77 XML VPUSH (B) FAC = T1 <0262> A2BD 31,00,08 MOVE 8,G@RNDEM,@ARG ARG = 1/1E7 A2C0 5C,A3,77 <0263> A2C3 0F,08 XML FMUL FAC = T1/1E7 <0264> A2C5 06,00,22 CALL GRINT T2=FAC = INT(T1/1E7) <0265> A2C8 0F,77 XML VPUSH (C) FAC = T2 <0266> A2CA 31,00,08 MOVE 8,G@RNDEP,@ARG ARG = 1E7 A2CD 5C,A3,6F <0267> A2D0 0F,08 XML FMUL FAC = T2*1E7 <0268> A2D2 A7,6E,00 DSUB 8,@VSPTR A2D5 08 <0269> A2D6 0F,0C XML SSUB (D) X1=FAC = T1-T2*1E7 <0270> A2D8 35,00,05 MOVE 5,@FAC,V@RNDX1 FAC = X1 (new) A2DB A3,A5,4A <0271> A2DE 0F,77 XML VPUSH (E) FAC = X1 <0272> * COMPUTE NEW VALUE FOR X2, SAVE IT IN V@RNDX2 <0273> A2E0 35,00,05 MOVE 5,V@RNDX2,@FAC FAC = X2 A2E3 4A,A3,A0 <0274> A2E6 86,4F CLR @FAC5 FAC = CLR <0275> A2E8 87,50 DCLR @FAC6 FAC = CLR <0276> A2EA 31,00,08 MOVE 8,G@RNDA1,@ARG ARG = A1 A2ED 5C,A3,57 <0277> A2F0 0F,08 XML FMUL FAC = X2*A1 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0017 EQUATES EXEC-359 <0278> A2F2 A3,6E,00 DADD 8,@VSPTR A2F5 08 <0279> A2F6 0F,77 XML VPUSH (F) FAC = X2*A1 <0280> A2F8 A7,6E,00 DSUB 24,@VSPTR A2FB 18 <0281> A2FC 0F,78 XML VPOP (G) FAC = X1 <0282> A2FE A3,6E,00 DADD 32,@VSPTR A301 20 <0283> A302 31,00,08 MOVE 8,G@RNDA2,@ARG ARG = A2 A305 5C,A3,4F <0284> A308 0F,08 XML FMUL FAC = X1*A2 <0285> A30A 0F,0B XML SADD (H) FAC = X2*A1+X1*A2 <0286> A30C 31,00,08 MOVE 8,G@RNDC2,@ARG ARG = C2 A30F 5C,A3,5F <0287> A312 0F,06 XML FADD FAC = X2*A1+X1*A2 <0288> A314 0F,0B XML SADD (J) T3=FAC = X2*A1+X1*A2 <0289> A316 A7,6E,00 DSUB 16,@VSPTR A319 10 <0290> A31A 0F,77 XML VPUSH (K) FAC = T3 <0291> A31C 31,00,08 MOVE 8,G@RNDEM,@ARG ARG = 1/1E7 A31F 5C,A3,77 <0292> A322 0F,08 XML FMUL FAC = T3/1E7 <0293> A324 06,00,22 CALL GRINT T4=FAC = INT(T3/1E7) <0294> A327 31,00,08 MOVE 8,G@RNDEP,@ARG ARG = 1E7 A32A 5C,A3,6F <0295> A32D 0F,08 XML FMUL FAC = T4*1E7 <0296> A32F 0F,0C XML SSUB (L) X2=FAC = T3-T4*1E7 <0297> A331 35,00,05 MOVE 5,@FAC,V@RNDX2 FAC = X2 (new) A334 A3,A0,4A <0298> * COMPUTE NEW VALUE FOR RND, LEAVE IT IN FAC <0299> A337 31,00,08 MOVE 8,G@RNDEM,@ARG ARG = 1/1E7 A33A 5C,A3,77 <0300> A33D 0F,08 XML FMUL FAC = X2/1E7 <0301> A33F 0F,77 XML VPUSH (M) FAC = X2/1E7 <0302> A341 A3,6E,00 DADD 8,@VSPTR A344 08 <0303> A345 0F,78 XML VPOP (N) FAC = X1 <0304> A347 0F,08 XML FMUL FAC = X1/1E7 <0305> A349 0F,08 XML FMUL FAC = X1/1E14 <0306> A34B 0F,0B XML SADD (P)RND=FAC = (X2/1E7)+(X1/1E14) <0307> A34D 0F,75 XML CONT [0008] *********************************************************** [0009] COPY 'DSK5.MYXB5-D' <0001> * CONSTANTS FOR THE RANDOM NUMBER ROUTINE <0002> A34F 43,01,2B RNDA2 BYTE >43,>01,>2B,>59,>52,>00,>00,>00 * = 1438982 A352 59,52,00 A355 00,00 <0003> A357 42,2A,08 RNDA1 BYTE >42,>2A,>08,>15,>00,>00,>00,>00 * = 0420821 A35A 15,00,00 A35D 00,00 <0004> A35F 43,02,0B RNDC2 BYTE >43,>02,>0B,>20,>30,>00,>00,>00 * = 2113248 A362 20,30,00 A365 00,00 <0005> A367 43,06,36 RNDC1 BYTE >43,>06,>36,>05,>13,>00,>00,>00 * = 6540519 A36A 05,13,00 A36D 00,00 <0006> A36F 43,0A,00 RNDEP BYTE >43,>0A,>00,>00,>00,>00,>00,>00 * = 1E7 A372 00,00,00 A375 00,00 <0007> A377 3C,0A,00 RNDEM BYTE >3C,>0A,>00,>00,>00,>00,>00,>00 * = 1/1E7 A37A 00,00,00 A37D 00,00 <0008> *********************************************************** <0009> * RANDOMIZE STATEMENT 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0018 EQUATES EXEC-359 <0010> *********************************************************** <0011> A37F 06,6A,78 NRNDMZ CALL CHKEND Seed provider? <0012> A382 63,C0 BS RNDM1 No <0013> * RANDOMIZE given a see value <0014> * (99,000,000,000,001 possible starting positions) <0015> * (Place-value is ignored in the input number) <0016> A384 0F,74 XML PARSE Parse the seed <0017> A386 83 BYTE TREMZ * Up to end of statement <0018> A387 06,A3,ED CALL CKSTNM <0019> A38A 8F,4A DCZ @FAC Check FAC for zero <0020> A38C 63,B6 BS GA3B6 <0021> A38E BE,4A,46 ST >46,@FAC 0 < FAC < 1E14 <0022> A391 0F,77 XML VPUSH Let FAC = X2*1E7+X1 <0023> A393 31,00,08 MOVE 8,G@RNDEM,@ARG ARG = 1/1E7 A396 5C,A3,77 <0024> A399 0F,08 XML FMUL FAC = X2+X1/1E7 <0025> A39B 06,00,22 CALL GRINT FAC = X2 <0026> A39E 35,00,05 MOVE 5,@FAC,V@RNDX2 FAC = X2 A3A1 A3,A0,4A <0027> A3A4 31,00,08 MOVE 8,G@RNDEP,@ARG ARG = 1E7 A3A7 5C,A3,6F <0028> A3AA 0F,08 XML FMUL FAC = X2*1E7 <0029> A3AC 0F,0C XML SSUB FAC = X1 <0030> A3AE 35,00,05 MOVE 5,@FAC,V@RNDX1 FAC = X1 A3B1 A3,A5,4A <0031> A3B4 0F,75 XML CONT FAC = X1 <0032> A3B6 BD,A3,A0 GA3B6 DST @FAC,V@RNDX2 FAC = 0 A3B9 4A <0033> A3BA BD,A3,A5 DST @FAC,V@RNDX1 FAC = 0 A3BD 4A <0034> A3BE 0F,75 XML CONT <0035> * RANDOMIZE given number seed value (use GPL RAND function) <0036> * (16K possible starting positions) <0037> A3C0 BF,4A,42 RNDM1 DST >4201,@FAC FAC = >4201 A3C3 01 <0038> A3C4 86,4E CLR @FAC4 FAC4= >00 <0039> A3C6 06,A3,D2 CALL RNDMZ <0040> A3C9 03,A5 DATA RNDX1 <0041> A3CB 06,A3,D2 CALL RNDMZ Set up seed <0042> A3CE 03,A0 DATA RNDX2 <0043> A3D0 0F,75 XML CONT Continue on <0044> A3D2 88,52 RNDMZ FETCH @FAC8 Fetch address of seed (high b <0045> A3D4 88,53 FETCH @FAC9 Fetch address of seed (low by <0046> A3D6 02,63 RAND 99 GPL Randomize <0047> A3D8 BC,4C,78 ST @RANDOM,@FAC2 >00<=FAC+2<=FF <0048> A3DB E6,4C,02 SRL 2,@FAC2 >00<=FAC+2<=3F <0049> A3DE 02,63 RAND 99 GPL Randomize <0050> A3E0 BC,4D,78 ST @RANDOM,@FAC3 >00<=FAC+3<=FF <0051> A3E3 E6,4D,02 SRL 2,@FAC3 >00<=FAC+3<=3F <0052> A3E6 35,00,05 MOVE 5,@FAC,V*FAC8 Put in seed A3E9 B0,52,4A <0053> A3EC 00 RTN <0054> A3ED D6,4C,65 CKSTNM CEQ >65,@FAC2 <0055> A3F0 6D,BE BS ERRSNM <0056> A3F2 00 RTN <0057> A3F3 40,01,00 FLT1 BYTE >40,>01,>00,>00,>00,>00,>00,>00 A3F6 00,00,00 A3F9 00,00 <0058> *********************************************************** <0059> * EXTENDED STRING PACKAGE <0060> * THE ROUTINES ARE: <0061> * LITS05 - Move a string literal from the program to the <0062> * string space <0063> * INTARG - Checks that an argument is a numeric and 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0019 EQUATES EXEC-359 <0064> * converts it from floating point to an integer <0065> * PUSSTR - Checks that an argument is a string and pushes <0066> * it on the stack <0067> * CONCAT - Concatenates 2 strings together <0068> * SEG$ - Segments a string <0069> * LEN - Puts the length of a string in the FAC <0070> * CHR$ - Converts an integer into its ASCII character <0071> * STR$ - Converts a number into its string equivalent <0072> * VAL - Converts a string into its numeric equivalent <0073> * POS - Gives the position of one string within another <0074> * RPT$ - Generates a single string with multiple copies <0075> * of the original string <0076> * <0077> * AN ENTRY IN THE FAC LOOKS LIKE: <0078> * +------------+-----+----+-------------+-----------------+ <0079> * |addr of ptr | >65 | xx | addr of str | length of str | <0080> * +------------+-----+----+-------------+-----------------+ <0081> * FAC FAC2 FAC3 FAC4 FAC6 <0082> *********************************************************** <0083> * Support routine for functions to build FAC entry <0084> A3FB 86,50 LITS05 CLR @FAC6 Need as a double-byte value <0085> A3FD BD,0C,50 DST @FAC6,@BYTES LENGTH FOR GETSTR <0086> A400 BC,52,80 ST @RAMTOP,@FAC8 Copy ERAM flag for later A403 84 <0087> A404 0F,71 LITS07 XML GETSTR ALLOCATE STRING SPACE <0088> A406 BF,4A,00 LITS08 DST >001C,@FAC SAVE ADDR OF STRING (SREF) A409 1C <0089> A40A BD,4E,1C DST @SREF,@FAC4 SAVE ADDR OF STRING <0090> A40D BF,4C,65 DST >6500,@FAC2 INDICATES A STRING CONSTANT A410 00 <0091> *********** COPY STRING INTO STRING SPACE ***************** <0092> A411 8F,0C LITS09 DCZ @BYTES If non-null string <0093> A413 64,2B BS GA42B <0094> A415 8E,52 CZ @FAC8 <0095> A417 44,20 BR GA420 <0096> A419 34,0C,B0 MOVE @BYTES,V*TEMP5,V*SREF A41C 1C,B0,66 <0097> A41F 00 RTN <0098> * Else source string in ERAM <0099> A420 BD,56,0C GA420 DST @BYTES,@FFF1 FFF1 : BYTE COUNT <0100> A423 BD,58,1C DST @SREF,@EEE1 EEE1 : DESTINATION ADDR ON VD <0101> A426 BD,54,66 DST @TEMP5,@DDD1 DDD1 : Source addr in ERAM <0102> A429 0F,8B XML GVWITE Move data from ERAM to VDP <0103> A42B 00 GA42B RTN <0104> A42C 86,52 LITS06 CLR @FAC8 SET FLAG TO VDP <0105> A42E 44,04 BR LITS07 JUMP INTO CODE <0106> *********************************************************** <0107> * PUSSTR - Insures that the entry in the FAC is a string <0108> * and pushes it onto the stack. <0109> *********************************************************** <0110> A430 D6,4C,65 PUSSTR CEQ >65,@FAC2 <0111> A433 4D,BE BR ERRSNM <0112> A435 0F,77 XML VPUSH PUSH THE ARGUMENT <0113> A437 00 RTN <0114> *********************************************************** <0115> * CONCAT - CONCATENATES TWO STRINGS TOGETHER <0116> * INPUT : FLOATING POINT ACCUMULATOR ENTRIES <0117> * OUTPUT : CONCATENATED STRING AND (POSSIBLE) <0118> * ZEROED BACK-POINTERS FOR THE OLD STRINGS <0119> * USES : TEMP2, TEMP4 AND TEMP5 AS TEMPORARIES <0120> *********************************************************** <0121> A438 86,23 CONCAT CLR @ERRCOD+1 CLEAR THE ERROR CODE <0122> A43A 06,A4,30 CALL PUSSTR Push the string & get next to <0123> A43D 0F,74 XML PARSE GET THE R.H. ARGUMENT 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0020 EQUATES EXEC-359 <0124> A43F B8 BYTE CONCZ <0125> A440 D6,4C,65 CEQ >65,@FAC2 If not string - error <0126> A443 4D,BE BR ERRSNM <0127> A445 BD,0C,50 DST @FAC6,@BYTES GET R.H. LENGTH <0128> A448 A1,0C,E0 DADD V@6(@VSPTR),@BYTES ADD IN L.H. LENGTH A44B 06,6E <0129> A44D C7,0C,00 DCH 255,@BYTES A450 FF <0130> A451 44,5B BR GA45B <0131> A453 BF,0C,00 DST 255,@BYTES TRUNCATE IF TOO LONG A456 FF <0132> A457 06,6A,82 WRNST1 CALL WARNZZ Display warning <0133> A45A 13 BYTE 19 * STRING TRUNCATED message <0134> A45B BD,68,0C GA45B DST @BYTES,@TEMP6 Keep length for later <0135> A45E 0F,77 XML VPUSH <0136> A460 0F,71 XML GETSTR Alloccate the result string <0137> A462 0F,78 XML VPOP Retrieve R.H. <0138> A464 35,00,08 MOVE 8,@FAC,@ARG A467 5C,4A <0139> A469 0F,78 XML VPOP Retrieve L.H. <0140> A46B BD,66,4E DST @FAC4,@TEMP5 Set ptr to L.H. ARG(for FREST <0141> A46E BD,0C,50 DST @FAC6,@BYTES Length of L.H. ARG <0142> A471 86,52 CLR @FAC8 Force VDP mode <0143> A473 06,A4,06 CALL LITS08 Set up FAC & copy L.H. ARG in <0144> A476 8F,62 DCZ @ARG6 If R.H. =0 don't copy <0145> A478 64,8E BS CONC06 <0146> A47A BD,64,1C DST @SREF,@TEMP4 Get ptr to new string <0147> A47D A1,64,50 DADD @FAC6,@TEMP4 Ptr to where 2nd string begin <0148> A480 A5,68,50 DSUB @FAC6,@TEMP6 Length of 2nd string <0149> * (possibly truncated) <0150> A483 64,8E BS CONC06 <0151> A485 34,68,B0 MOVE @TEMP6,V*ARG4,V*TEMP4 Copy in 2nd string A488 64,B0,60 <0152> A48B A1,50,68 DADD @TEMP6,@FAC6 Add in length of 2nd ARG <0153> * NOTE: FAC6 already contained length of 1st ARG from the <0154> * parse that was done on it <0155> A48E 0F,75 CONC06 XML CONT Done. <0156> *********************************************************** <0157> * SEG$(A$,X,Y) - Extracts the desiginated string from A$. <0158> * X specifies the character position within A$ at <0159> * which the extraction begins. Y specifies the number <0160> * of characters to extract. <0161> * If X or Y is negative an error occurs. If X=0 an <0162> * error occurs. If Y=0 or X > Y then a null string is <0163> * is returned. If the ramaining length in A$ starting <0164> * at the postion specified by X is less than the length <0165> * specified by Y, then the remainder of A$ starting at <0166> * position X is returned. <0167> * INPUT - Control is turned over to SEG$ from PARSE. The <0168> * only requirement is that a SEG$ was encountered. <0169> * OUTPUT - The Floating Point Accumulator is set up with <0170> * the header for the segmented string. <0171> * USES - TEMP2 (Others in calls to GETSTR and LITS08) <0172> *********************************************************** <0173> A490 06,AC,89 SEGZ01 CALL LPAR Insure "(" parse and check ", <0174> A493 06,A4,30 CALL PUSSTR Push string and get next toke <0175> A496 0F,7E XML SPEED Get the position <0176> A498 01 BYTE PARCOM * within the source string <0177> A499 06,A9,95 CALL INTARG CHECK & CONVERT ARG TO INTEGE <0178> A49C 8F,4A DCZ @FAC CAN'T HAVE VALUE OF 0 <0179> A49E 6D,EE BS ERRBV <0180> A4A0 0F,77 XML VPUSH PUSH THE ARG <0181> A4A2 0F,74 XML PARSE Get extraction length <0182> A4A4 B6 BYTE RPARZ 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0021 EQUATES EXEC-359 <0183> A4A5 0F,7E XML SPEED Must have <0184> A4A7 00 BYTE SYNCHK * ended on <0185> A4A8 B6 BYTE RPARZ * a right parenthesis <0186> A4A9 06,A9,95 CALL INTARG CHECK & CONVERT ARG TO INTEGE <0187> A4AC BD,5C,4A DST @FAC,@ARG Move extraction length <0188> A4AF 0F,78 XML VPOP Get position back <0189> A4B1 BD,5E,4A DST @FAC,@ARG2 Move position <0190> A4B4 0F,78 XML VPOP Retrieve source string <0191> A4B6 BD,56,5E DST @ARG2,@TEMP2 Get position within string <0192> A4B9 C5,56,50 DCH @FAC6,@TEMP2 If position > length =>null <0193> A4BC 64,EF BS SEGZ08 <0194> A4BE A1,56,5C DADD @ARG,@TEMP2 Compute end of substring <0195> A4C1 A5,56,50 DSUB @FAC6,@TEMP2 Compute length beyond end <0196> A4C4 93,56 DDEC @TEMP2 string <0197> A4C6 D3,56,00 DCGE 0,@TEMP2 A4C9 00 <0198> A4CA 44,D4 BR SEGZ06 Fine if substring is shorter <0199> A4CC BD,5C,50 DST @FAC6,@ARG Else, truncate length of <0200> * substring <0201> A4CF A5,5C,5E DSUB @ARG2,@ARG Subtract position from source <0202> * length <0203> A4D2 91,5C DINC @ARG Increment to include last cha <0204> A4D4 BD,0C,5C SEGZ06 DST @ARG,@BYTES # of bytes needed for substri <0205> A4D7 0F,77 XML VPUSH Save source string entry <0206> A4D9 0F,71 XML GETSTR ALLOCATE RESULT STRING <0207> A4DB 0F,78 XML VPOP Restore source string entry <0208> A4DD BD,66,4E DST @FAC4,@TEMP5 Pointer to source for FRESTR <0209> * LITS08 <0210> A4E0 A1,66,5E DADD @ARG2,@TEMP5 Pointer to start of substring <0211> A4E3 93,66 DDEC @TEMP5 Decrement since zero-based <0212> A4E5 BD,50,0C DST @BYTES,@FAC6 Set length of string <0213> A4E8 86,52 CLR @FAC8 FORCE VDP MODE <0214> A4EA 06,A4,06 CALL LITS08 Copy in & set up FAC <0215> A4ED 0F,75 XML CONT <0216> A4EF 87,5C SEGZ08 DCLR @ARG Extract a null string <0217> A4F1 44,D4 BR SEGZ06 >>>JUMP ALWAYS<<< <0218> *********************************************************** <0219> * LEN(A$) - Calculate the length of a string and leave the <0220> * result in the FAC. <0221> * CONTROL - Turned over to NLEN from the parser. <0222> * USES - No temporaries. <0223> *********************************************************** <0224> A4F3 06,A5,65 LEN01 CALL PARFF Insure left parenthesis & par <0225> A4F6 4D,BE BR ERRSNM If not string value <0226> A4F8 BD,4A,50 DST @FAC6,@FAC Length <0227> A4FB 0F,80 LEN02 XML CIF Convert integer to floating p <0228> A4FD 0F,75 XML CONT <0229> *********************************************************** <0230> * CHR$(X) - Takes integer value X and converts the number <0231> * into the ASCII representation for that number. <0232> * CONTROL - Turned over to NCHR by the parser. <0233> * OUTPUT - FAC is set up with the string entry <0234> * USES - Uses temproraries when invoking LITS06(LITSTR) <0235> *********************************************************** <0236> A4FF 06,A5,65 CHRZ01 CALL PARFF Insure left parenthesis & par <0237> A502 06,A9,95 CALL INTARG Convert into integer <0238> A505 BF,0C,00 DST 1,@BYTES Create a length 1 string A508 01 <0239> A509 BC,A3,78 ST @FAC1,V@ONECHR Move the value to VDP(for LIT A50C 4B <0240> A50D BF,66,03 DST ONECHR,@TEMP5 Address of character A510 78 <0241> A511 06,A4,2C CALL LITS06 Create string and set up FAC <0242> A514 BF,50,00 DST 1,@FAC6 Length of string 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0022 EQUATES EXEC-359 A517 01 <0243> A518 0F,75 XML CONT <0244> *********************************************************** <0245> * ASC(A$) - Takes the numeric value of the first character <0246> * in A$. <0247> *********************************************************** <0248> A51A 06,A5,65 ASC01 CALL PARFF Insure left parenthesis & par <0249> A51D 4D,BE BR ERRSNM If not string <0250> A51F 8E,51 CZ @FAC7 Bad Argument? <0251> A521 6D,EA BS ERRBA <0252> A523 BC,4B,B0 ST V*FAC4,@FAC1 Get the first character A526 4E <0253> A527 86,4A CLR @FAC <0254> A529 44,FB BR LEN02 USE COMMON CODE >>>JUMP ALWAY <0255> *********************************************************** <0256> * STR$(X) - Takes as its imput an integer X and converts it <0257> * to its string representation. <0258> * CONTROL - Turned over to STR$ by the parser. <0259> * USES - The usual temporaries used by string function <0260> * when it calls LITS06. Uses the Roll-out area <0261> * for a temporary storage area when allocating <0262> * the result string. <0263> * OUTPUT - FAC is set up in the usual manner for a string <0264> *********************************************************** <0265> A52B 06,A5,65 STRZ01 CALL PARFF Insure left parenthesis & par <0266> A52E 6D,BE BS ERRSNM If not numeric-error <0267> A530 86,55 CLR @FAC11 Select XB floating type <0268> A532 0F,73 XML CNS Convert the number to string <0269> A534 D6,90,55 CEQ SPACE,*FAC11 If leading space A537 20 <0270> A538 45,3E BR GA53E <0271> A53A 90,55 INC @FAC11 Suppress it out <0272> A53C 92,56 DEC @FAC12 Shorten the length <0273> A53E 86,0C GA53E CLR @BYTES Prepare for 2-byte value <0274> A540 BC,0D,56 ST @FAC12,@BYTES+1 Get length of string <0275> A543 34,0C,A3 MOVE @BYTES,*FAC11,V@VROAZ Put the string in VDP A546 C0,90,55 <0276> A549 BF,66,03 DST VROAZ,@TEMP5 Copy-from address(for LITSTR) A54C C0 <0277> A54D 06,A4,2C CALL LITS06 Allocate and set up FAC <0278> A550 BD,50,0C DST @BYTES,@FAC6 Put in the length <0279> A553 0F,75 XML CONT <0280> *********************************************************** <0281> * VAL(A$) - Takes as its input a string, A$, and converts <0282> * the string into a number if the string is a <0283> * valid representation of a number. <0284> * CONTROL - From the parser. <0285> * OUTPUT - FAC contains the floating point number. <0286> *********************************************************** <0287> A555 06,A5,65 VAL01 CALL PARFF Insure left parenthesis & par <0288> A558 4D,BE BR ERRSNM If not string - error <0289> A55A 8E,51 CZ @FAC7 Can't have null string <0290> A55C 6D,EA BS ERRBA <0291> A55E 06,A5,71 CALL VALCD So bad argument error <0292> A561 6D,EA BS ERRBA <0293> A563 0F,75 XML CONT <0294> * Short routine to parse a single argument enclosed in <0295> * parenthesis for a function or a subprogram and set <0296> * condition based upon whether the value parsed was a <0297> * string or a numeric. <0298> A565 D6,42,B7 PARFF CEQ LPARZ,@CHAT <0299> A568 4D,BA BR ERRSYN <0300> A56A 0F,74 XML PARSE <0301> A56C FF BYTE >FF * 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0023 EQUATES EXEC-359 <0302> A56D D6,4C,65 CEQ >65,@FAC2 <0303> A570 01 RTNC <0304> A571 BD,66,4E VALCD DST @FAC4,@TEMP5 Pointer to string <0305> A574 A1,66,50 DADD @FAC6,@TEMP5 Pointer to trailing length by <0306> A577 BD,0C,50 DST @FAC6,@BYTES For suppressing trailing blan <0307> A57A 91,0C DINC @BYTES Prepare for undue subtraction <0308> A57C 93,66 GA57C DDEC @TEMP5 Keep track of end of string <0309> A57E 93,0C DDEC @BYTES Decrease length of string <0310> A580 65,B9 BS RTNSET End up with empty string, <0311> A582 D6,B0,66 CEQ SPACE,V*TEMP5 Wild trailing blanks A585 20 <0312> A586 65,7C BS GA57C <0313> A588 91,0C DINC @BYTES Allow for terminator <0314> A58A 0F,77 XML VPUSH Save the ptr to the string <0315> A58C 0F,71 XML GETSTR Get a new string <0316> A58E 0F,78 XML VPOP Retrieve the ptr to the strin <0317> A590 BD,66,4E DST @FAC4,@TEMP5 Get the ptr to the string <0318> A593 86,52 CLR @FAC8 Force VDP mode <0319> A595 06,A4,11 CALL LITS09 Copy the string and set up FA <0320> A598 A1,0C,1C DADD @SREF,@BYTES Point to the trailing length <0321> A59B 93,0C DDEC @BYTES Point at the last character <0322> A59D BE,B0,0C ST SPACE,V*BYTES Put in the terminator A5A0 20 <0323> A5A1 BD,56,1C DST @SREF,@FAC12 Address for the conversion <0324> A5A4 D6,B0,56 GA5A4 CEQ SPACE,V*FAC12 While leading spaces A5A7 20 <0325> A5A8 45,AE BR GA5AE <0326> A5AA 91,56 DINC @FAC12 Skip leading blank <0327> A5AC 45,A4 BR GA5A4 <0328> A5AE 86,4C GA5AE CLR @FAC2 Get rid of string (in case=0) <0329> A5B0 86,54 CLR @FAC10 Assume no error <0330> A5B2 0F,10 XML CSNUM Convert it <0331> A5B4 D5,56,0C DCEQ @BYTES,@FAC12 Convert all of it? <0332> A5B7 68,F1 BS WRNNO Yes, check overflow & return <0333> A5B9 D4,00,00 RTNSET CEQ @>8300,@>8300 No, return with condition set <0334> A5BC 01 RTNC <0335> *********************************************************** <0336> * POS(A$,B$,X) - Attempts to match the string, B$, in A$ <0337> * beginning at character # X in A$. If X is > LEN(A$), a <0338> * match is not found or A$ is the null string then the <0339> * returned value is 0. If B$ is the null string then the <0340> * returned value is 1. Otherwise, the returned value is <0341> * the column # of the 1st character matched in A$ <0342> * CONTROL - Fromn the parser. Returned through common code <0343> * IN LEN. <0344> * USES - Not temporaries - Utilizes FAC and ARG. <0345> *********************************************************** <0346> A5BD 06,AC,89 POS01 CALL LPAR Insure "(", parse , insure ", <0347> A5C0 06,A4,30 CALL PUSSTR STACK THE STRING AND GET TOKE <0348> A5C3 0F,7E XML SPEED Parse the match string and <0349> A5C5 01 BYTE PARCOM * insure end on comma <0350> A5C6 06,A4,30 CALL PUSSTR STACK THE STRING AND GET TOKE <0351> A5C9 0F,74 XML PARSE Get position <0352> A5CB B6 BYTE RPARZ <0353> A5CC 0F,7E XML SPEED Must have <0354> A5CE 00 BYTE SYNCHK * ended on a <0355> A5CF B6 BYTE RPARZ * right parenthesis <0356> A5D0 06,A9,95 CALL INTARG Check and convert it <0357> A5D3 8F,4A DCZ @FAC Value out of range <0358> A5D5 6D,EE BS ERRBV <0359> A5D7 BD,0C,4A DST @FAC,@BYTES Keep the offset <0360> A5DA 93,0C DDEC @BYTES Correct for position 0 <0361> A5DC 0F,78 XML VPOP Get match string back <0362> A5DE 35,00,08 MOVE 8,@FAC,@ARG Put match in ARG 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0024 EQUATES EXEC-359 A5E1 5C,4A <0363> A5E3 0F,78 XML VPOP Get source back <0364> A5E5 8E,51 CZ @FAC7 If source null <0365> A5E7 66,24 BS POS12 <0366> A5E9 C4,51,0D CH @BYTES+1,@FAC7 OFFSET > LENGTH? <0367> A5EC 46,24 BR POS12 Yes, no match possible <0368> A5EE 8E,63 CZ @ARG7 If null string <0369> A5F0 66,15 BS POS06 <0370> A5F2 A1,4E,0C DADD @BYTES,@FAC4 Adjust ptr for offset <0371> A5F5 A4,51,0D SUB @BYTES+1,@FAC7 Adjust length <0372> A5F8 C8,51,63 POS02 CHE @ARG7,@FAC7 Enough space left for a match <0373> A5FB 46,24 BR POS12 No, no match possible <0374> A5FD BD,4A,4E DST @FAC4,@FAC Get first ARG <0375> A600 BD,5C,60 DST @ARG4,@ARG Get second ARG <0376> A603 BC,64,63 ST @ARG7,@ARG8 And length of second <0377> A606 D4,B0,5C POS04 CEQ V*FAC,V*ARG Compare the characters A609 B0,4A <0378> A60B 46,1C BR POS10 Didn't match <0379> A60D 91,4A DINC @FAC Next in source <0380> A60F 91,5C DINC @ARG Next in match <0381> A611 92,64 DEC @ARG8 Reached end of match? <0382> A613 46,06 BR POS04 Not yet, so loop <0383> A615 90,0D POS06 INC @BYTES+1 Matched! Correct for 1 index <0384> A617 BD,4A,0C POS08 DST @BYTES,@FAC Character position of match <0385> A61A 44,FB BR LEN02 Convert to floating point <0386> * NOTE: Utilizes the LEN code to do the conversion and <0387> * finish up. <0388> A61C 90,0D POS10 INC @BYTES+1 Step index of match character <0389> A61E 92,51 DEC @FAC7 Move 1 position down 1st <0390> A620 91,4E DINC @FAC4 Argument <0391> A622 45,F8 BR POS02 Try to match again <0392> * JUMP ALWAYS <0393> A624 86,0D POS12 CLR @BYTES+1 NO MATCH POSSIBLE <0394> A626 46,17 BR POS08 [0010] *********************************************************** [0011] COPY 'DSK5.MYXB5-E' <0001> *********************************************************** <0002> * RPT$(A$,X) - Creates a string consisting of X copies of <0003> * A$. If X is negative or non-numeric, an <0004> * exception occurs. If A$ is not a string, an <0005> * exception occurs. <0006> *********************************************************** <0007> A628 06,AC,89 RPTZ01 CALL LPAR Insure "(", parse, insure "," <0008> A62B 06,A4,30 CALL PUSSTR Insure a string and push it <0009> A62E 0F,74 XML PARSE Parse second argument <0010> A630 B6 BYTE RPARZ <0011> A631 0F,7E XML SPEED Must have <0012> A633 00 BYTE SYNCHK * ended on a <0013> A634 B6 BYTE RPARZ * right parenthesis <0014> A635 06,A9,95 CALL INTARG Check numeric and convert <0015> A638 A9,4A,E0 DMUL V@6(@VSPTR),@FAC Compute result length A63B 06,6E <0016> A63D 8F,4B DCZ @FAC1 <0017> A63F 66,49 BS GA649 <0018> A641 06,6A,82 WRNST2 CALL WARNZZ Give truncation message <0019> A644 13 BYTE 19 * STRING TRUNCATED message <0020> A645 BF,4C,00 DST 255,@FAC2 Make it a maximum string A648 FF <0021> A649 BD,0C,4C GA649 DST @FAC2,@BYTES Copy requested string length <0022> A64C 0F,71 XML GETSTR Get the new string <0023> A64E 0F,78 XML VPOP Retrieve the original string <0024> * At this point BYTES should still contain the length <0025> A650 BD,5C,50 DST @FAC6,@ARG Copy original length in ARG <0026> A653 8F,0C DCZ @BYTES Zero copies requested 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0025 EQUATES EXEC-359 <0027> A655 46,59 BR GA659 <0028> A657 87,5C DCLR @ARG So we copy zero!!!!!!! <0029> A659 C1,0C,5C GA659 DEX @ARG,@BYTES Original length to BYTE <0030> A65C BD,66,4E DST @FAC4,@TEMP5 And also original start addr <0031> A65F 86,52 CLR @FAC8 Clear flag for LITS08 <0032> A661 06,A4,06 CALL LITS08 Create FAC and copy on copy <0033> * ARG contains total length now. <0034> A664 BD,50,5C DST @ARG,@FAC6 Store new length <0035> A667 A5,5C,0C RPTZ02 DSUB @BYTES,@ARG Subtract one copy <0036> A66A 8F,5C DCZ @ARG <<<< A66C 66,84 BS XMLCON <0038> A66E A1,1C,0C DADD @BYTES,@SREF Compute new start address <0039> A671 C5,0C,5C DCH @ARG,@BYTES <0040> A674 46,79 BR GA679 <0041> A676 BD,0C,5C DST @ARG,@BYTES Truncate string <0042> A679 34,0C,B0 GA679 MOVE @BYTES,V*TEMP5,V*SREF A67C 1C,B0,66 <0043> A67F 46,67 BR RPTZ02 <0044> *********************************************************** <0045> * TRACE STATEMENT <0046> *********************************************************** <0047> A681 B6,45,10 NTRACE OR >10,@FLAG Set the trace bit <0048> A684 0F,75 XMLCON XML CONT Continue on <0049> *********************************************************** <0050> * UNTRACE STATEMENT <0051> *********************************************************** <0052> A686 B2,45,EF NUNTRC AND >EF,@FLAG Reset the trace bit <0053> A689 0F,75 XML CONT Continue on <0054> *********************************************************** <0055> * BREAK AND UNBREAK STATEMENTS <0056> *********************************************************** <0057> A68B BE,5C,FF NBREAK ST >FF,@ARG BREAK flag <0058> A68E 06,6A,78 CALL CHKEND Check for end of statement <0059> A691 46,A4 BR LINEGP If not goto LINEGP <0060> A693 93,2C DDEC @PGMPTR Back up so CON will rescan en <0061> A695 8E,44 CZ @PRGFLG Rative without line # <0062> A697 41,27 BR EXEC6C <0063> A699 06,6A,84 ERROLP CALL ERRZZ Only legal in a program <0064> A69C 1B BYTE 27 <0065> A69D 86,5C NUNBRK CLR @ARG UNBREAK flag for common <0066> A69F 06,6A,78 CALL CHKEND Check for end of statement <0067> A6A2 66,F7 BS UNBK01 If end then goto UNBK01 <0068> A6A4 06,A8,D3 LINEGP CALL LINE Get line # <0069> A6A7 BD,5E,32 DST @ENLN,@ARG2 <0070> A6AA A7,5E,00 DSUB >03,@ARG2 1st line # A6AD 03 <0071> A6AE C9,5E,30 LNGP1 DCHE @STLN,@ARG2 If line not found <0072> A6B1 46,F1 BR WRNLNF <0073> A6B3 06,80,2E CALL GRSUB3 Read line # of data from ERAM <0074> A6B6 5E BYTE >5E * (use GREAD1) or VDP <0075> * @ARG2: Source addr in ERAM/VDP, reset possible breakpoint <0076> A6B7 D5,58,4A DCEQ @FAC,@EEE1 If line found <0077> A6BA 66,C2 BS LNGP2 <0078> A6BC A7,5E,00 DSUB 4,@ARG2 Next line in VDP or ERAM A6BF 04 <0079> A6C0 46,AE BR LNGP1 <0080> * JUMP ALWAYS <0081> A6C2 8E,80,84 LNGP2 CZ @RAMTOP If ERAM exists <0082> A6C5 66,DA BS GA6DA <0083> A6C7 B2,58,7F AND >7F,@EEE1 Assume UNBREAK flag <0084> A6CA 8E,5C CZ @ARG If BREAK flag <0085> A6CC 66,D1 BS GA6D1 <0086> A6CE B6,58,80 OR >80,@EEE1 Set the breakpoint <0087> A6D1 06,60,36 GA6D1 CALL GWSUB Write a few bytes of data to 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0026 EQUATES EXEC-359 <0088> * ERAM (use GWRITE) <0089> A6D4 5E,58,01 BYTE >5E,>58,>01 * ARG2,EEE1,1 <0090> * @ARG2: Destination addr on ERA <0091> * @EEE1: Data <0092> * 1 : Byte count <0093> A6D7 05,A6,E6 B LNGP2B <0094> A6DA B2,B0,5E GA6DA AND >7F,V*ARG2 Assume UNBREAK flag first A6DD 7F <0095> A6DE 8E,5C CZ @ARG If BREAK flag <0096> A6E0 66,E6 BS LNGP2B <0097> A6E2 B6,B0,5E OR >80,V*ARG2 Set the breakpoint A6E5 80 <0098> A6E6 06,6A,78 LNGP2B CALL CHKEND Check for end of statement <0099> A6E9 66,FA BS LNGP4 If end then continue <0100> A6EB 0F,7E XML SPEED Must be <0101> A6ED 00 BYTE SYNCHK * at a <0102> A6EE B3 BYTE COMMAZ * comma now <0103> A6EF 46,A4 BR LINEGP <0104> * JUMP ALWAYS <0105> A6F1 06,6A,82 WRNLNF CALL WARNZZ Note: warning not error <0106> A6F4 26 BYTE 38 * 'LINE NOT FOUND' <0107> A6F5 46,E6 BR LNGP2B And contiue on <0108> * JUMP ALWAYS <0109> A6F7 06,A6,FC UNBK01 CALL UBSUB Clear all bkpt in line # tabl <0110> A6FA 0F,75 LNGP4 XML CONT Contiue <0111> * CLEAR ALL BREAKPOINTS <0112> A6FC BD,52,30 UBSUB DST @STLN,@FAC8 END OF LINE # BUFFER <0113> A6FF 06,A7,0C GA6FF CALL UBSUB1 Reset one line # at a time <0114> A702 A3,52,00 DADD 4,@FAC8 Got to the next line A705 04 <0115> A706 C5,52,32 DCH @ENLN,@FAC8 End of table <0116> A709 46,FF BR GA6FF <0117> A70B 00 RTN <0118> A70C 06,80,2E UBSUB1 CALL GRSUB3 Read the line # from ERAM/VDP <0119> * Reset possible bkpt too <0120> A70F 52 BYTE >52 * @FAC8: Source addr on ERAM/VD <0121> A710 06,60,36 CALL GWSUB Write a few bytes of data to <0122> * ERAM(use GWRITE) or VDP <0123> A713 52,58,01 BYTE >52,>58,>01 * FAC8,EEE1,1 <0124> * @FAC8: Destination adr in ERAM/V <0125> * @EEE1: Data <0126> * 1 : Byte count <0127> A716 00 RTN <0128> *********************************************************** <0129> * USER DEFINED FUNCTIONS <0130> * Subroutine to store away the information of the tokens in <0131> * a function reference, go into the 'DEF' statement, <0132> * calculate the value of the expression and then resume <0133> * execution of the user's program after the reference. <0134> * An entry in the FAC and on the stack for a function <0135> * reference looks like: <0136> * +--------+-----+---------------------+--------+---------+ <0137> * | PGMPTR | >68 | string/numeric flag | SYMTAB | FREPTR | <0138> * +--------+-----+---------------------+--------+---------+ <0139> * FAC FAC2 FAC3 FAC4 FAC6 <0140> * <0141> * The 'PGMPTR' is where execution resumes after evaluating <0142> * the function. String (80)/numeric(00) flag is function <0143> * type. SYMTAB is the old symbol table pointer and FREPTR <0144> * is the old free space pointer. These are restored after <0145> * the function is evaluated. <0146> *********************************************************** <0147> A717 8E,44 UDF CZ @PRGFLG If imperative <0148> A719 47,20 BR GA720 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0027 EQUATES EXEC-359 <0149> A71B 8E,80,85 CZ @RAMTOP+1 And ERAM, error <0150> A71E 46,99 BR ERROLP <0151> A720 86,51 GA720 CLR @FAC7 Assume no args <0152> A722 87,22 DCLR @ERRCOD Clear the error code for cont <0153> A724 86,5E CLR @ARG2 Safety for VPUSH <0154> A726 86,4C CLR @FAC2 Sagety for VPUSH <0155> A728 D6,42,B7 CEQ LPARZ,@CHAT <0156> A72B 47,3B BR GA73B <0157> A72D 0F,77 XML VPUSH Save ptr to function definiti <0158> A72F 0F,74 XML PARSE PARSE to get arg value <0159> A731 FF BYTE >FF <0160> A732 35,00,08 MOVE 8,@FAC,@ARG Save PARSE result A735 5C,4A <0161> A737 0F,78 XML VPOP Get S.T. ptr to function defi <0162> A739 90,51 INC @FAC7 Indicate theat we have an arg <0163> A73B BC,66,51 GA73B ST @FAC7,@TEMP5 Move the parmeter count <0164> A73E BD,64,4A DST @FAC,@TEMP4 S.T. ptr to definition <0165> A741 0F,77 XML VPUSH Allow room for UDF result <0166> A743 35,00,08 MOVE 8,@ARG,@FAC Retrieve parse result A746 4A,5C <0167> A748 0F,77 XML VPUSH Save parse result <0168> A74A BC,4C,B0 ST V*TEMP4,@FAC2 Get S.T. declarations A74D 64 <0169> A74E BC,4D,4C ST @FAC2,@FAC3 Do this to save string bit <0170> * NOTE: THIS IS TO ALLOW THE CHECKING AFTER THE FUNCTION HA <0171> * BEEN EVALUATED TO MAKE SURE THE FUNCTION <0172> * TYPE (STRING/NUMERIC) MATCHES THE RESULT IT PRODUCE <0173> A751 B2,4C,07 AND >07,@FAC2 Mask all but # of parameters <0174> A754 D4,4C,66 CEQ @TEMP5,@FAC2 <0175> A757 4D,F2 BR ERRIAL <0176> * Incorrect argument list error above. <0177> A759 BD,4A,2C DST @PGMPTR,@FAC Will resume execution here <0178> A75C BE,4C,70 ST >70,@FAC2 Entering parameter into symbo <0179> * table while in UDF statement executing <0180> A75F B2,4D,80 AND >80,@FAC3 Mask all but string bit <0181> A762 A7,6E,00 DSUB 16,@VSPTR Get below parse result A765 10 <0182> A766 BD,4E,3E DST @SYMTAB,@FAC4 Save current symbol table ptr <0183> A769 BD,50,40 DST @FREPTR,@FAC6 Save current free space ptr <0184> A76C 0F,77 XML VPUSH Save the return info <0185> A76E A3,6E,00 DADD 8,@VSPTR Get back to parse result A771 08 <0186> *********** SHIFT EXECUTION TO FUNCTION DEFINITION ******** <0187> A772 BD,2C,E0 DST V@6(@TEMP4),@PGMPTR Set text ptr to definiti A775 06,64 <0188> A777 0F,79 XML PGMCHR Get 1st character in the defi <0189> A779 C6,73,A4 CH >A4,@SUBSTK Stack overflow <0190> A77C 6D,CA BS ERRSO <0191> A77E 35,00,18 MOVE 24,@>8300,V@VROAZ Roll out temporaries A781 A3,C0,00 <0192> A784 B6,45,08 OR >08,@FLAG Set function flag for ENTER <0193> A787 BE,16,80 ST >80,@XFLAG Make calls look like ENTERX <0194> A78A D6,42,BE CEQ EQUALZ,@CHAT <0195> A78D 47,9C BR GA79C <0196> * NOTE: This is to keep the global/local variables correct <0197> * the event that a function uses another function in <0198> * its evaluation. <0199> A78F 86,59 CLR @FAC15 Create a dummy entry in table <0200> A791 06,6A,80 CALL ENT09 for no-paremter function <0201> A794 97,2C DDECT @PGMPTR Back up to equal sign <0202> A796 86,E0,02 CLR V@2(@VSPTR) This is to keep ASSGNV(called A799 6E <0203> * below) not to screw up in <0204> * case FAC2 happens to have a 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0028 EQUATES EXEC-359 <0205> * value (greater) >65 <0206> A79A 47,9F BR GA79F <0207> A79C 06,6A,7E GA79C CALL ENTER Enter the parameter <0208> A79F 0F,79 GA79F XML PGMCHR Get the '=' (Checked in PSCAN <0209> A7A1 B2,45,F7 AND >F7,@FLAG Reset to normal ENTERs <0210> A7A4 35,00,18 MOVE 24,V@VROAZ,@>8300 A7A7 00,A3,C0 <0211> A7AA BE,EF,FF ST >68,V@-6(@VSPTR) Correct stack entry ID A7AD FA,6E,68 <0212> A7B0 BD,E0,02 DST V@SYMBOL,V@2(@SYMTAB) Fudge link to A7B3 3E,A3,76 <0213> * get global values <0214> A7B6 BD,4A,3E DST @SYMTAB,@FAC Set up for SMB <0215> A7B9 0F,7B XML SMB Get value space <0216> A7BB 35,00,08 MOVE 8,@FAC,@FAC8 Destination A7BE 52,4A <0217> A7C0 0F,78 XML VPOP Get arg back <0218> A7C2 35,00,08 MOVE 8,@FAC,@ARG Argument value A7C5 5C,4A <0219> A7C7 35,00,08 MOVE 8,@FAC8,@FAC Destination A7CA 4A,52 <0220> A7CC 0F,77 XML VPUSH Push to destination <0221> A7CE 35,00,08 MOVE 8,@ARG,@FAC Argument value A7D1 4A,5C <0222> A7D3 D6,4C,65 CEQ >65,@FAC2 If a string <0223> A7D6 47,E2 BR GA7E2 <0224> A7D8 D7,4A,00 DCEQ >001C,@FAC If not temp A7DB 1C <0225> A7DC 67,E2 BS GA7E2 <0226> A7DE BD,4E,B0 DST V*FAC,@FAC4 Get new location of string A7E1 4A <0227> * Parameter was allocated in S. <0228> A7E2 0F,79 GA7E2 XML PGMCHR Skip the '=' <0229> A7E4 0F,7C XML ASSGNV Assign the value to the param <0230> A7E6 0F,74 XML PARSE PARSE to end of function defi <0231> A7E8 83 BYTE TREMZ <0232> **** CHECK FOR TYPE MATCH (STRING/STRING OR NUM/NUM)******* <0233> **** BETWEEN THE RESULT AND THE FUNCTION TYPE ************* <0234> A7E9 D6,4C,65 CEQ >65,@FAC2 If result string <0235> A7EC 47,F6 BR GA7F6 <0236> A7EE 8E,E0,03 CZ V@3(@VSPTR) If functional A7F1 6E <0237> A7F2 6D,BE BS ERRSNM <0238> A7F4 47,FC BR GA7FC not a string <0239> A7F6 8E,E0,03 GA7F6 CZ V@3(@VSPTR) If functional A7F9 6E <0240> A7FA 4D,BE BR ERRSNM <0241> ***** NOW RESTORE SYMBOL TABLE AND RESUME ***************** <0242> ***** EXECUTION AT THE ORIGINAL LINE ********************** <0243> A7FC 06,A8,0A GA7FC CALL DELINK Delink the parameter entry <0244> A7FF BD,2C,E0 DST V@8(@VSPTR),@PGMPTR Manual pop to get ptr back A802 08,6E <0245> A804 93,2C DDEC @PGMPTR Back up text pointer <0246> A806 0F,79 XML PGMCHR Get next token <0247> A808 0F,75 XML CONT <0248> A80A BD,66,3E DELINK DST @SYMTAB,@TEMP5 Save addr of S.T. entry just <0249> * in case entry is a string <0250> * (must free the string) <0251> A80D 35,00,04 MOVE 4,V@4(@VSPTR),@SYMTAB Restore old symbol table A810 3E,E0,04 A813 6E <0252> * pointer and free space pointe <0253> * This handles the freeing of t <0254> * string value which was assign 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0029 EQUATES EXEC-359 <0255> * to the parameter. <0256> A814 D2,B0,66 CGE 0,V*TEMP5 If string parmeter A817 00 <0257> A818 68,4C BS GA84C <0258> A81A BD,66,E0 DST V@6(@TEMP5),@TEMP5 Where the string is A81D 06,66 <0259> A81F 8F,66 DCZ @TEMP5 If non-null string <0260> A821 68,33 BS GA833 <0261> A823 BD,56,EF DST V@-3(@TEMP5),@TEMP2 Get backpointer A826 FF,FD,66 <0262> A829 C9,56,3E DCHE @SYMTAB,@TEMP2 If not used <0263> A82C 68,33 BS GA833 <0264> A82E 87,EF,FF DCLR V@-3(@TEMP5) Free up the string A831 FD,66 <0265> * This handles the special case of F$(X$)=X$ <0266> * The result, which was permanent, must be made a temp. <0267> A833 D6,4C,65 GA833 CEQ >65,@FAC2 If string result <0268> A836 48,4A BR GA84A <0269> A838 C9,4A,3E DCHE @SYMTAB,@FAC If came from argument <0270> A83B 68,4A BS GA84A <0271> A83D 8F,4E DCZ @FAC4 If non-null <0272> A83F 68,46 BS GA846 <0273> A841 87,EF,FF DCLR V@-3(@FAC4) Clear the backpointer A844 FD,4E <0274> A846 BF,4A,00 GA846 DST >001C,@FAC Make it a temp A849 1C <0275> A84A 48,56 GA84A BR GA856 If numeric parameter <0276> A84C 8E,80,84 GA84C CZ @RAMTOP If ERAM exist <0277> A84F 68,56 BS GA856 <0278> A851 A3,80,86 DADD 8,@RAMFRE Remove 8 bytes of value A854 00,08 <0279> A856 A7,6E,00 GA856 DSUB 8,@VSPTR Trash the stack entry A859 08 <0280> A85A 00 RTN And retrun <0281> A85B 0F,74 ATTNUT XML PARSE <0282> A85D B6 BYTE RPARZ <0283> A85E 06,A3,ED CALL CKSTNM CHECK FOR NUMERIC OR STRING <0284> A861 0F,7E XML SPEED Insure argument is in <0285> A863 02 BYTE RANGE * range of 0-30 <0286> A864 00 BYTE 0 <0287> A865 00,1E DATA 30 <0288> A867 E6,4B,01 SRL 1,@FAC1 0,1 : 0000 ATTENUATION <0289> * 2,3 : 0001 <0290> * 4,5 : 0010 <0291> * 6,7 : 0011 ETC... <0292> A86A B6,4B,F0 OR >F0,@FAC1 REGISTER BITS <0293> A86D 00 RTN <0294> *********************************************************** <0295> * SUBROUTINE TO SET POINTER TO EACH DATUM <0296> *********************************************************** <0297> A86E 93,36 DATAST DDEC @LNBUF Point to 1st byte of line ptr <0298> A870 06,80,2C CALL GRSUB2 Read 2 bytes from VDP or ERAM <0299> A873 36 BYTE LNBUF * (use GREAD1), @LNBUF: Source <0300> * * address in ERAM or VDP <0301> A874 BD,34,58 DST @EEE1,@DATA Put it in @DATA <0302> A877 06,80,20 CALL SRDATA Look for 'DATA' on the line <0303> A87A 48,89 BR DATST1 OK, FOUND ANOTHER 'DATA' STMT <0304> A87C 97,36 DDECT @LNBUF NO <0305> A87E D5,36,30 DCEQ @STLN,@LNBUF <0306> A881 68,87 BS GA887 <0307> A883 93,36 DDEC @LNBUF Point to 1st token address <0308> A885 48,6E BR DATAST <0309> A887 86,34 GA887 CLR @DATA Indicate no data <0310> A889 00 DATST1 RTN 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0030 EQUATES EXEC-359 <0311> *********************************************************** <0312> * Subroutine to get line number and goto routine to display <0313> * it on the screen. <0314> *********************************************************** <0315> A88A 8E,80,89 ASC CZ @RAMFLG <0316> A88D 48,97 BR GA897 <0317> A88F BD,5E,EF DST V@-2(@EXTRAM),@ARG2 Get line # in A892 FF,FE,2E <0318> A895 48,A5 BR GA8A5 <0319> A897 BF,56,00 GA897 DST 2,@FFF1 @FFF1 : Byte count A89A 02 <0320> A89B BD,54,2E DST @EXTRAM,@DDD1 @DDD1 : Source addr in ERAM <0321> A89E 97,54 DDECT @DDD1 <0322> A8A0 0F,8C XML GREAD1 Read data from ERAM <0323> A8A2 BD,5E,58 DST @EEE1,@ARG2 @EEE1 : Destination addr on C <0324> A8A5 B2,5E,7F GA8A5 AND >7F,@ARG2 Reset the breakpoint if any <0325> A8A8 05,6A,7C B DISO <0326> *********************************************************** <0327> * Code to decode error returned from ALC <0328> *********************************************************** <0329> A8AB 8A,22 ERORZ CASE @ERRCOD DECODE ERROR FROM INTERPRETER <0330> A8AD 4D,BA BR ERRSYN 0 SYNTAX ERROR <0331> A8AF 4D,C6 BR ERRMEM 1 MEMORY FULL <0332> A8B1 4D,EE BR ERRBV 2 BAD VALUE <0333> A8B3 4D,E6 BR ERRLNF 3 LINE NOT FOUND <0334> A8B5 4D,BA BR ERRSYN 4 SYNTAX <0335> A8B7 4D,E2 BR ERRBS 5 BAD SUBSCRIPT <0336> A8B9 4D,BE BR ERRSNM 6 STRING-NUMBER MISMATCH <0337> A8BB 4D,CA BR ERRSO 7 STACK OVERFLOW <0338> A8BD 4D,EA BR ERRBA 8 BAD ARGUMENT <0339> A8BF 4D,DE BR ERRRWG 9 RETURN WITHOUT GOSUB <0340> A8C1 4D,F2 BR ERRIAL A INCORRECT ARGUMENT LIST <0341> A8C3 4D,D2 BR ERRFNN B FOR/NEXT NESTING <0342> A8C5 4D,CE BR ERRNWF C NEXT WITHOUT FOR <0343> A8C7 4D,C2 BR ERRMUV D IMPROPERLY USED NAME <0344> A8C9 4D,F2 BR ERRIAL E INCORRECT ARGUMENT LIST <0345> A8CB 4D,DA BR ERRRSC F RECURSIVE SUBPROGRAM CALL <0346> A8CD 4D,F6 BR ERRSNF 10 SUBPROGRAM NOT FOUND <0347> A8CF 46,99 BR ERROLP 11 ONLY LEGAL IN A PROGRAM <0348> A8D1 4D,D6 BR ERRSNS 12 MUST BE IN SUBPROGRAM <0349> *********************************************************** <0350> * SUBROUTINE TO GET LINE # FOLLOWING 'BREAK', 'UNBREAK', <0351> * 'RESTORE' <0352> *********************************************************** <0353> A8D3 D6,42,C9 LINE CEQ LNZ,@CHAT Should be line # reference <0354> A8D6 4D,BA BR ERRSYN <0355> A8D8 0F,79 XML PGMCHR Get high order line # <0356> A8DA BC,4A,42 ST @CHAT,@FAC Build result in FAC, FAC1 <0357> A8DD 0F,79 XML PGMCHR <0358> A8DF BC,4B,42 ST @CHAT,@FAC1 Low order line # <0359> A8E2 0F,79 XML PGMCHR Get token following line # <0360> A8E4 00 RTN <0361> A8E5 86,54 CONV1 CLR @FAC10 <0362> A8E7 0F,10 XML CSNUM Convert String to Number <0363> *********************************************************** <0364> A8E9 BC,A3,BA ST @FAC10,V@CSNTP1 A8EC 54 <0365> A8ED BD,A3,90 DST @FAC12,V@CSNTMP Save those in temporary, becaus A8F0 56 <0366> * in ERROV : WARNING routine hav <0367> * FAC12 and FAC10 values changed <0368> *********************************************************** <0369> A8F1 8E,54 WRNNO CZ @FAC10 Numeric overflow <0370> A8F3 68,F9 BS GA8F9 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0031 EQUATES EXEC-359 <0371> A8F5 06,6A,82 CALL WARNZZ <0372> A8F8 02 BYTE 2 <0373> A8F9 00 GA8F9 RTN <0374> *********************************************************** <0375> * SUBROUTINE FOR 'GCHAR' <0376> *********************************************************** <0377> A8FA 06,AC,A9 GCHAR CALL GPHV Get X,Y values <0378> A8FD 06,A9,DD GCHAR2 CALL NUMVAR Get pointer to return variabl <0379> A900 31,00,08 MOVE 8,G@FLT1,@FAC Clear FAC A903 4A,A3,F3 <0380> A906 BC,4B,7D ST @CB,@FAC1 Get the character <0381> A909 A6,4B,60 SUB OFFSET,@FAC1 Remove screen offset <0382> A90C CA,4B,64 CHE 100,@FAC1 <0383> A90F 49,19 BR GA919 <0384> A911 C0,4C,4B EX @FAC1,@FAC2 <0385> A914 AE,4B,64 DIV 100,@FAC1 <0386> A917 90,4A INC @FAC <0387> A919 0F,7C GA919 XML ASSGNV Assign the value to the symbo <0388> * RXB PATCH CODE <0389> A91B 55,5C BR GCHARA [0012] *********************************************************** [0013] COPY 'DSK5.MYXB5-F' <0001> *********************************************************** <0002> * SUBROUTINE FOR 'COLOR' <0003> *********************************************************** <0004> A91D 0F,7E COLOR XML SPEED Must be <0005> A91F 00 BYTE SYNCHK * at a <0006> A920 B7 BYTE LPARZ * left parenthesis <0007> * RXB PATCH CODE <0008> A921 87,00 COL08 DCLR @VAR0 Clear ALL pointer <0009> A923 D6,42,EC CEQ ALLZ,@CHAT ALL? <0010> A926 49,34 BR COL09 No. <0011> A928 BE,00,EC ST ALLZ,@VAR0 Yes, store it in pointer <0012> A92B 87,4A DCLR @FAC Set 0 <0013> A92D 0F,79 XML PGMCHR Skip ALL token. <0014> A92F 06,B0,E4 CALL COMMA2 Skip comma. <0015> A932 49,52 BR COL21 Start ALL RXB routine <0016> A934 D6,42,FD COL09 CEQ NUMBEZ,@CHAT If sprite number specified <0017> A937 49,49 BR COL20 <0018> A939 06,AE,00 CALL CHAR1 Check sprite number (SPNUM3) <0019> A93C 06,A9,89 COL10 CALL SPCOL Put the color in SAL <0020> A93F D6,42,B3 CEQ COMMAZ,@CHAT More color changes <0021> A942 4B,1A BR LNKRTN <0022> A944 06,AE,02 CALL CHAR2 Skip and get sprite number (S <0023> A947 49,3C BR COL10 <0024> * This part for regular color change routine <0025> A949 0F,7E COL20 XML SPEED Parse the character <0026> A94B 01 BYTE PARCOM * set and insure a comma <0027> A94C 0F,7E XML SPEED Insure in range of <0028> A94E 02 BYTE RANGE * 0<= x <= 14 <0029> * RXB PATCH CODE <0030> * BYTE 0,0,14 <0031> A94F 00,00,10 BYTE 0,0,16 <0032> A952 A3,4A,08 COL21 DADD >080F,@FAC Color table addr(>0810 - >081 A955 0F <0033> A956 0F,77 XML VPUSH Push table set address <0034> A958 0F,7E XML SPEED Parse the foreground color <0035> A95A 01 BYTE PARCOM * and insure a comma <0036> A95B 06,AC,A0 CALL RAN16 Error if >16 or <1 <0037> A95E BC,0E,4B ST @FAC1,@VAR4 Save it <0038> A961 E2,0E,04 SLL 4,@VAR4 Foreground color in 4 MSBits <0039> A964 0F,74 XML PARSE Get background color <0040> A966 B6 BYTE RPARZ <0041> A967 06,AC,A0 CALL RAN16 Error if >16 or <1 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0032 EQUATES EXEC-359 <0042> A96A B4,0E,4B OR @FAC1,@VAR4 Background color in 4 LSBits <0043> A96D 0F,78 XML VPOP Get color table address <0044> A96F BC,B0,4A ST @VAR4,V*FAC Load the colors into the tabl A972 0E <0045> * RXB PATCH CODE <0046> A973 D6,00,EC CEQ ALLZ,@VAR0 ALL in pointer. <0047> A976 49,80 BR COL22 No. <0048> A978 35,00,0E MOVE 14,V*FAC,V@1(@FAC) Fill color table with values A97B E0,01,4A A97E B0,4A <0049> A980 D6,42,B3 COL22 CEQ COMMAZ,@CHAT End of call. Go back. <0050> A983 4B,1A BR LNKRTN <0051> A985 0F,79 XML PGMCHR Skip "," <0052> A987 49,21 BR COL08 Take care of the next set <0053> * CALL SPCOL -- Changes color of sprite. <0054> * Called also from SPRITE. <0055> A989 0F,74 SPCOL XML PARSE <0056> A98B B6 BYTE RPARZ * Get the color number <0057> A98C 06,AC,A0 CALL RAN16 Check range 1 - 16 <0058> A98F BC,E0,03 ST @FAC1,V@3(@SPSAL) Store in SAL A992 08,4B <0059> A994 00 RTN <0060> *********************************************************** <0061> * INTARG - Insures that the value in FAC is a numeric, <0062> * converts it to integer, issues error message if <0063> * necessary or returns. <0064> *********************************************************** <0065> A995 C6,4C,63 INTARG CH >63,@FAC2 If string - error <0066> A998 6D,BE BS ERRSNM <0067> A99A 86,54 CLR @FAC10 ASSUME NO ERROR OR WARNING <0068> A99C 87,6C DCLR @FPERAD <0069> A99E 0F,12 XML FLTINT <0070> A9A0 8E,54 CZ @FAC10 If error <0071> A9A2 4D,EE BR ERRBV <0072> A9A4 D2,4A,00 CGE 0,@FAC Can't be < zero <0073> A9A7 4D,EE BR ERRBV <0074> A9A9 00 RTN <0075> * FAC IS SET UP WITH F.P. 1 <0076> A9AA BC,4B,00 JOYXY ST @VAR0,@FAC1 <0077> A9AD 8E,00 CZ @VAR0 If <>0 <0078> A9AF 49,B5 BR GA995 <0079> A9B1 86,4A CLR @FAC (>0000000000000000) <0080> A9B3 49,BD BR GA99D <0081> A9B5 D2,00,00 GA995 CGE 0,@VAR0 <0082> A9B8 69,BD BS GA99D <0083> A9BA BE,4A,BF ST >BF,@FAC <0084> A9BD 0F,7C GA99D XML ASSGNV Assign the value <0085> A9BF 00 RTN <0086> A9C0 BC,00,4B KEYJOY ST @FAC1,@VAR0 Keyboard selection <0087> A9C3 06,A9,DD CALL NUMVAR Get variable for key-code <0088> A9C6 D6,42,B3 CEQ COMMAZ,@CHAT If not comma - error <0089> A9C9 4D,BA BR ERRSYN <0090> A9CB 0F,79 XML PGMCHR Get next character <0091> A9CD 06,A9,DD CALL NUMVAR Get variable for key-status <0092> A9D0 BC,74,00 ST @VAR0,@KEYBD Keyboard selection <0093> A9D3 31,00,08 MOVE 8,G@FLT1,@FAC Set up float A9D6 4A,A3,F3 <0094> * RXB PATCH CODE ************* <0095> * SCAN SCAN the keyboard <0096> * CLR @KEYBD Clear the code(No affect on s <0097> A9D9 06,B6,C4 CALL KEYSTR * RXB KEY STRING COMPARISON * <0098> A9DC 01 RTNC Return scan condition code <0099> A9DD 0F,7A NUMVAR XML SYM Get the symbol name <0100> A9DF DA,B0,4A CLOG >C0,V*FAC Can't be string or function 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0033 EQUATES EXEC-359 A9E2 C0 <0101> A9E3 4D,C2 BR ERRMUV It is, IMPROPERLY USED NAME E <0102> A9E5 0F,7B XML SMB Get value pointer <0103> A9E7 0F,77 XML VPUSH Put on stack for ASSGNV <0104> A9E9 00 RTN And return <0105> A9EA 80,00,A0 ATTREG DATA >8000,>A000,>C000, A9ED 00,C0,00 <0106> A9F0 9F,BF,DF BYTE >9F,>BF,>DF,>FF,>00,>06 A9F3 FF,00,06 <0107> A9F6 D6,42,B7 COMB CEQ LPARZ,@CHAT If not '(' - error <0108> A9F9 4D,BA BR ERRSYN <0109> A9FB 00 RTN <0110> A9FC 35,00,08 SQUISH MOVE 8,V*FAC8,@FAC Sneak it out A9FF 4A,B0,52 <0111> AA02 BD,58,6E DST @VSPTR,@FAC14 Now move stack to squish it <0112> AA05 A5,58,52 DSUB @FAC8,@FAC14 out - # of bytes to move <0113> AA08 6A,13 BS SQU05 If none to move <0114> AA0A 34,58,EF MOVE @FAC14,V@8(@FAC8),V@-16(@FAC8) AA0D FF,F0,52 AA10 E0,08,52 <0115> AA13 A7,6E,00 SQU05 DSUB 8,@VSPTR AA16 08 <0116> AA17 00 RTN <0117> *********************************************************** <0118> * SUBPROGRAM FOR CLEAR <0119> *********************************************************** <0120> AA18 07,80 CLEAR ALL SPACE+OFFSET Clear the screen <0121> AA1A BE,7F,03 ST 3,@XPT Initialize screen pointer <0122> AA1D 4B,1E BR LNKRT2 Return to caller <0123> *********************************************************** <0124> * SUBPROGRAM FOR VERSION <0125> *********************************************************** <0126> AA1F 06,A9,F6 VERS CALL COMB Insure have left parenthesis <0127> AA22 06,AD,AF CALL ERRC05 Get symbol information <0128> *---------------------------------------------------------- <0129> * Change version number to 110 6/16/81 <0130> AA25 BF,4A,07 DST 2001,@FAC AA28 D1 <0131> AA29 0F,80 XML CIF Convert to floating point <0132> *---------------------------------------------------------- <0133> AA2B 50,EF BR ASSRTN Assign and return to caller <0134> * INIALIZATION DATA FOR SOUND <0135> AA2D 42,0B,12 FLTS BYTE >42,>0B,>12,>22,>00,>00,>00,>00 AA30 22,00,00 AA33 00,00 <0136> AA35 01,FF,01 SNDREG BYTE >01,>FF,>01,>04,>9F,>BF,>DF,>FF,>00 AA38 04,9F,BF AA3B DF,FF,00 <0137> *********************************************************** <0138> * SUBPROGRAM FOR 'SOUND' <0139> * Builds 2 blocks in VDP RAM <0140> * 1st BLOCK : >01,, <0141> * 2nd BLOCK : >04,>9F,>BF,>DF,>FF,>00 <0142> *********************************************************** <0143> AA3E D7,80,CC SOUND DCEQ VRMSND,@>83CC Insure previous sound started AA41 03,79 * Warning - Default changed in 0143 <0144> AA43 6A,3E BS SOUND <0145> AA45 31,00,09 MOVE 9,G@SNDREG,V@VRMSND AA48 A3,79,AA AA4B 35 <0146> AA4C 06,AC,89 CALL LPAR Duration in milliseconds <0147> AA4F D2,4A,00 CGE 0,@FAC Don't wait for completion <0148> AA52 6A,59 BS GAA39 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0034 EQUATES EXEC-359 <0149> AA54 83,4A DNEG @FAC of previous sound <0150> AA56 87,80,CE DCLR @PRTNFN Make GPL interpeters stop pre <0151> AA59 0F,7E GAA39 XML SPEED Insure duration <0152> AA5B 02 BYTE RANGE * is in range <0153> AA5C 01 BYTE 1 * of 1 - 4250 <0154> AA5D 10,9A DATA 4250 <0155> * Convert duration into 1/60s of a second <0156> AA5F AB,4A,00 DMUL 6,@FAC Duration * 6 AA62 06 <0157> AA63 AF,4A,00 DDIV 100,@FAC (duration * 6) / 100 AA66 64 <0158> AA67 8E,4B CZ @FAC1 If duration =0 <0159> AA69 4A,6D BR GAA4D <0160> AA6B 90,4B INC @FAC1 Set it to 1/60th of a second <0161> AA6D BC,A3,7B GAA4D ST @FAC1,V@VRMSND+2 3rd byte of the 1st block AA70 4B <0162> * | INTERUPT COUNT <0163> *********************************************************** <0164> * SOUND TABLE OF 10 BYTES IN CPU RAM (>00 - >09) <0165> * >00 - >05 : FREQUENCY CONTROL <0166> * >06 - >08 : ATTENUATION CONTROL <0167> * >09 : NOISE CONTROL(non-zero = noise encountered) <0168> * >0A : POINTER FOR CURRENT FREQENCY CONTROL <0169> * >0B : POINTER FOR CURRENT ATTENUATION CONTROL <0170> * >00 , >01 FOR REG 0; <0171> * >02 , >03 FOR REG 1; <0172> * >04 , >05 FOR REG 2; <0173> * REG0 : >8000, REG1 : >A000, REG3 : >C000 <0174> * INITIALIZE ATTENUATION CONTROL <0175> * REG0 : >9F, REG1 : >BF, REG2 : >DF <0176> *********************************************************** <0177> AA71 31,00,0C MOVE 12,G@ATTREG,@>8300 AA74 00,A9,EA <0178> AA77 0F,7E SOUND1 XML SPEED Parse the frequency value <0179> AA79 01 BYTE PARCOM * and insure a comma <0180> AA7A 06,A3,ED CALL CKSTNM Must be a numeric <0181> AA7D D2,4A,00 CGE 0,@FAC Noise if negative <0182> AA80 4A,BF BR SOUND2 <0183> AA82 31,00,08 MOVE 8,G@FLTS,@ARG Constant 111834 AA85 5C,AA,2D <0184> AA88 0F,09 XML FDIV P = 111834/FREQUENCY <0185> AA8A 0F,7E XML SPEED Insure in range <0186> AA8C 02 BYTE RANGE <0187> AA8D 03 BYTE 3 * Range: 3 - 1023 <0188> AA8E 03,FF DATA 1023 <0189> * GET THE 4 L.S.Bits BITS AND 6 M.S.Bits OF 'P' <0190> AA90 EB,4A,00 DSRC 4,@FAC AA93 04 <0191> AA94 E6,4A,04 SRL 4,@FAC <0192> AA97 B5,90,0A DOR @FAC,*STADDR 1st byte of frequency control byt AA9A 4A <0193> * BIT 7 6 5 4 3 2 1 <0194> * 1 0 * 2nd byte of frequency control byt <0196> * 0 0 AA9B 94,0A INCT @STADDR Advance ponter for next time <0198> AA9D 06,A8,5B CALL ATTNUT Get attenuation <0199> * BIT 7 6 5 4 3 2 1 <0200> * 1 1 0 0 0 <0201> AAA0 B0,90,0B AND @FAC1,*VAR2 1 1 AAA3 4B <0202> AAA4 90,0B INC @VAR2 Advance pointer for next time <0203> * CHECK FOR END OF SOUND CALL <0204> AAA6 D6,42,B6 SOUND3 CEQ RPARZ,@CHAT End of statement? 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0035 EQUATES EXEC-359 <0205> AAA9 6A,DD BS SOUND5 <0206> AAAB 0F,7E XML SPEED If not right parenthesis <0207> AAAD 00 BYTE SYNCHK * then must be at <0208> AAAE B3 BYTE COMMAZ * a comma <0209> AAAF D6,0A,06 CEQ 6,@STADDR If not 3 regs yet <0210> AAB2 4A,77 BR SOUND1 <0211> * 3 sound regs already - so must be noise control <0212> AAB4 0F,7E XML SPEED Get frequency (should be nois <0213> AAB6 01 BYTE PARCOM * and insure a comma <0214> AAB7 06,A3,ED CALL CKSTNM Must be a numeric value <0215> AABA D2,4A,00 CGE 0,@FAC If not noise-error <0216> AABD 6D,EE BS ERRBV <0217> * NOISE CONTROL <0218> AABF D6,09,FF SOUND2 CEQ >FF,@>8309 * BAD ARGUMENT ERROR <0219> AAC2 4D,EA BR ERRBA <0220> AAC4 83,4A DNEG @FAC -(FREQUENCY) <0221> AAC6 0F,7E XML SPEED Insure in range <0222> AAC8 02 BYTE RANGE * of 1 - 8 <0223> AAC9 01 BYTE 1 * <0224> AACA 00,08 DATA 8 <0225> AACC 92,4B DEC @FAC1 0 - 7 (2nd BIT: 'T') <0226> * OTH, 1ST BITS: <0227> AACE BC,09,4B ST @FAC1,@>8309 <0228> AAD1 B6,09,E0 OR >E0,@>8309 Noise control byte: <0229> * BIT 7 6 5 4 3 2 1 0 <0230> * 1 1 1 0 0 < S > <0231> * PUT ATTENUATION IN THE 2ND BYTE OF 1ST BLOCK <0232> AAD4 06,A8,5B CALL ATTNUT <0233> AAD7 BC,A3,7A ST @FAC1,V@VRMSND+1 AADA 4B <0234> * 1 1 1 1 < ATTN/2 DB> <0235> AADB 4A,A6 BR SOUND3 Go check for end of list <0236> AADD 86,10 SOUND5 CLR @VAR5 Pointer to sound table <0237> AADF 8E,80,CE SND05 CZ @PRTNFN Wait untild previous <0238> AAE2 6A,EE BS SOUND6 <0239> AAE4 03 SCAN Is finished and <0240> AAE5 4A,DF BR SND05 look for a break-key <0241> AAE7 D6,75,02 CEQ BREAK,@RKEY If not break-key <0242> AAEA 4A,DF BR SND05 <0243> AAEC 41,27 BR EXEC6C If BREAK-KEY encountered <0244> * LOAD SOUND TABLE <0245> AAEE BC,81,00 SOUND6 ST *VAR5,@>8400 SOUND ADDRESS PORT AAF1 90,10 <0246> AAF3 90,10 INC @VAR5 Next byte in table <0247> AAF5 D6,10,0A CEQ >0A,@VAR5 If not finished <0248> AAF8 4A,EE BR SOUND6 <0249> AAFA BF,4A,03 DST VRMSND,@FAC Where the 2 blocks are AAFD 79 <0250> AAFE F6,4A,01 I/O 1,@FAC Start sound from VDP list <0251> AB01 4B,1A BR LNKRTN Return to caller <0252> *********************************************************** <0253> * SUBPROGRAM FOR 'HCHAR' <0254> *********************************************************** <0255> AB03 06,AC,D6 HCHAR CALL HVCHR Get X, Y values character, # <0256> AB06 8F,4A DCZ @FAC If 0 characters <0257> AB08 6B,12 BS HCHAR2 <0258> AB0A 08,E0,00 HCHAR1 BYTE >08,>E0,>00,>FB * FMT '@VAR0' Display horizo AB0D FB <0259> AB0E 93,4A DDEC @FAC Done yet? <0260> AB10 4B,0A BR HCHAR1 No, finish it <0261> * RXB PATCH CODE <0262> AB12 D6,42,B3 HCHAR2 CEQ COMMAZ,@CHAT <0263> AB15 6B,03 BS HCHAR <0264> AB17 BC,7F,02 XPTRTN ST @MNUM,@XPT Restore X-pointer 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0036 EQUATES EXEC-359 <0265> AB1A 0F,7E LNKRTN XML SPEED Must be at <0266> AB1C 00 BYTE SYNCHK * a right <0267> AB1D B6 BYTE RPARZ * parenthesis <0268> AB1E 06,6A,78 LNKRT2 CALL CHKEND Check end of statement <0269> AB21 4D,BA BR ERRSYN If not end-of-stmt , error <0270> AB23 06,00,12 CALL RETURN Return to caller <0271> *********************************************************** <0272> * SUBPROGRAM FOR 'VCHAR' <0273> *********************************************************** <0274> AB26 06,AC,D6 VCHAR CALL HVCHR Get X, Y values character, # <0275> AB29 8F,4A DCZ @FAC If 0 characters <0276> AB2B 6B,3F BS VCHAR2 <0277> AB2D 08,E0,00 VCHAR1 BYTE >08,>E0,>00,>9E,>FB * FMT '@VAR0',>31 Display v AB30 9E,FB <0278> AB32 93,4A DDEC @FAC Done yet? <0279> AB34 6B,3F BS VCHAR2 Yes, return <0280> AB36 8E,7E CZ @YPT If not at start of colunm <0281> AB38 4B,2D BR VCHAR1 <0282> AB3A 90,7F INC @XPT Move X-ptr to right one colun <0283> AB3C 05,AB,2D B VCHAR1 <0284> * RXB PATCH CODE <0285> AB3F D6,42,B3 VCHAR2 CEQ COMMAZ,@CHAT <0286> AB42 6B,26 BS VCHAR <0287> AB44 4B,17 BR XPTRTN <0288> *********************************************************** <0289> * SUBPROGRAM FOR 'CHAR' <0290> *********************************************************** <0291> AB46 06,A9,F6 CHARLY CALL COMB <0292> AB49 0F,79 CHAR5 XML PGMCHR Skip "(" or "," <0293> <0294> * RXB PATCH CODE <0295> AB4B D6,42,EC CEQ ALLZ,@CHAT <0296> AB4E 4B,5E BR GAB1F <0297> AB50 0F,79 XML PGMCHR <0298> AB52 06,B0,E4 CALL COMMA2 <0299> AB55 BE,00,EC ST ALLZ,@VAR0 <0300> AB58 BF,4A,00 DST 32,@FAC AB5B 20 <0301> AB5C 4B,67 BR GAB28 <0302> <0303> AB5E 0F,7E GAB1F XML SPEED Get the first value <0304> AB60 01 BYTE PARCOM * and insure a comma <0305> AB61 0F,7E XML SPEED Insure in range <0306> AB63 02 BYTE RANGE * of 32 - 143 <0307> * RXB PATCH CODE <0308> AB64 1E BYTE 30 <0309> AB65 00,9F DATA 159 <0310> AB67 E3,4A,00 GAB28 DSLL 3,@FAC Convert chr number to address AB6A 03 <0311> AB6B A3,4A,03 DADD >0300,@FAC CORRECT FOR OFFSET AB6E 00 <0312> AB6F BD,04,4A DST @FAC,@VARY Save it <0313> AB72 0F,74 XML PARSE Get string <0314> AB74 B6 BYTE RPARZ <0315> AB75 D6,4C,65 CEQ >65,@FAC2 MUST BE STRING <0316> AB78 4D,BE BR ERRSNM <0317> AB7A 35,00,04 MOVE 4,@FAC4,@VAR5 VAR5 pointer to string value AB7D 10,4E <0318> * Start defining character description. <0319> * VARY Address of RAM for character description. <0320> * VAR5 Pointer to string value. <0321> * VAR7 Length of string value. <0322> * VAR9 Temporary counter. <0323> * VAR9+1 Temporary counter. 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0037 EQUATES EXEC-359 <0324> AB7F C7,12,00 DCH 64,@VAR7 Max 4 characters at a time AB82 40 <0325> AB83 4B,89 BR CHAR40 <0326> AB85 BF,12,00 DST 64,@VAR7 IGNORE THE EXCESSES AB88 40 <0327> AB89 CB,04,07 CHAR40 DCHE SPRVB,@VARY Don't have space for AB8C FF <0328> AB8D 6C,1F BS CHARL4 <0329> AB8F BE,4A,30 ST ZERO,@FAC Floating Point Accumulator (> <0330> AB92 35,00,0F MOVE 15,@FAC,@FAC1 AB95 4B,4A <0331> AB97 8F,12 DCZ @VAR7 Fill with zero <0332> AB99 6B,B8 BS CHAR50 <0333> AB9B CB,12,00 DCHE 16,@VAR7 AB9E 10 <0334> AB9F 6B,AA BS GAB6B <0335> ABA1 34,12,4A MOVE @VAR7,V*VAR5,@FAC Move whatever ABA4 B0,10 <0336> ABA6 87,12 DCLR @VAR7 <0337> ABA8 4B,B8 BR CHAR50 <0338> ABAA 35,00,10 GAB6B MOVE 16,V*VAR5,@FAC Move one character ABAD 4A,B0,10 <0339> ABB0 A7,12,00 DSUB 16,@VAR7 Less num of bytes to move ABB3 10 <0340> ABB4 A3,10,00 DADD 16,@VAR5 Move pointer ABB7 10 <0341> ABB8 BE,14,4A CHAR50 ST >4A,@VAR9 Move pointer (>4A=FAC) <0342> ABBB BE,15,01 ST 1,@VAR9+1 <0343> ABBE 05,AB,C3 B GAB84 <0344> ABC1 90,15 GAB82 INC @VAR9+1 <0345> ABC3 CE,15,08 GAB84 CGT 8,@VAR9+1 <0346> ABC6 6C,02 BS GABC3 <0347> ABC8 86,0C CLR @BYTES Clear dot-building byte <0348> ABCA E2,0C,04 CHARL2 SLL 4,@BYTES For loop(2 chars per byte) <0349> ABCD BC,5C,90 ST *VAR9,@ARG ABD0 14 <0350> ABD1 CA,5C,30 CHE ZERO,@ARG If < 0 <0351> ABD4 4D,EE BR ERRBV <0352> ABD6 CE,5C,39 CGT NINE,@ARG If in 0-9 <0353> ABD9 4B,E5 BR CHARL3 <0354> ABDB CA,5C,41 CHE A,@ARG If > 9 but < A <0355> ABDE 4D,EE BR ERRBV <0356> ABE0 C6,5C,46 CH F,@ARG If > F <0357> ABE3 6D,EE BS ERRBV <0358> ABE5 A6,5C,30 CHARL3 SUB ZERO,@ARG Character - >30 <0359> ABE8 C6,5C,0A CH 10,@ARG If in A-F <0360> ABEB 4B,F0 BR GABB1 <0361> ABED A6,5C,07 SUB 7,@ARG Correct for that too <0362> ABF0 B4,0C,5C GABB1 OR @ARG,@BYTES Dot expression <0363> ABF3 90,14 INC @VAR9 <0364> ABF5 DA,14,01 CLOG 1,@VAR9 1st half of row finished? <0365> ABF8 4B,CA BR CHARL2 Yes, do 2nd half <0366> * (each takes half byte) <0367> ABFA BC,B0,04 ST @BYTES,V*VARY Load characters ABFD 0C <0368> ABFE 91,04 DINC @VARY <0369> AC00 4B,C1 BR GAB82 Load characters on next row <0370> AC02 8F,12 GABC3 DCZ @VAR7 More char to describe <0371> AC04 4B,89 BR CHAR40 <0372> * RXB PATCH CODE <0373> AC06 D6,00,EC CEQ ALLZ,@VAR0 <0374> AC09 4C,1F BR CHARL4 <0375> AC0B 87,00 DCLR @VAR0 <0376> AC0D 35,00,08 CHRFIL MOVE 8,V@>0400,V@>0408(@VAR0) 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0038 EQUATES EXEC-359 AC10 E4,08,00 AC13 A4,00 <0377> AC15 A3,00,00 DADD 8,@VAR0 AC18 08 <0378> AC19 D7,00,02 DCEQ 94*8,@VAR0 AC1C F0 <0379> AC1D 4C,0D BR CHRFIL <0380> <0381> AC1F D6,42,B3 CHARL4 CEQ COMMAZ,@CHAT More specified? <0382> AC22 6B,49 BS CHAR5 <0383> AC24 4B,1A BR LNKRTN Return [0014] *********************************************************** [0015] COPY 'DSK5.MYXB5-G' <0001> *********************************************************** <0002> * SUBPROGRAM FOR 'KEY' <0003> *********************************************************** <0004> AC26 06,B6,9D KEY CALL SPAR GET KEY UNIT <0005> * RXB PATCH LABEL ************ <0006> AC29 0F,7E GABD1 XML SPEED Insure in range <0007> AC2B 02 BYTE RANGE * of 0 - 5 <0008> AC2C 00 BYTE 0 <0009> AC2D 00,05 DATA 5 <0010> AC2F 06,A9,C0 CALL KEYJOY Get variables for code and st <0011> * and scan keyboard <0012> * KEYJOY returns key status <0013> AC32 6C,3D BS KEY1B KEY STATUS = 1 <0014> AC34 83,4A DNEG @FAC Assume status = -1 <0015> AC36 D6,75,FF CEQ >FF,@RKEY But correct if = 0 <0016> AC39 4C,3D BR KEY1B <0017> AC3B 87,4A DCLR @FAC KEY STATUS = 0 <0018> AC3D 0F,7C KEY1B XML ASSGNV Assign value in variable <0019> AC3F BF,4A,40 DST >4001,@FAC Re-store F.P. 1 in FAC AC42 01 <0020> AC43 8E,75 CZ @RKEY If key-code = 0 <0021> AC45 6C,65 BS KEY2 <0022> AC47 D6,75,FF CEQ >FF,@RKEY No key depressed, <0023> AC4A 6C,61 BS KEY1C key code assigned to -1 <0024> * FORMAT FOR KEYCODES ABOVE 99 ADDED FOR 99/4A HIGHEST <0025> * KEYCODE (OTHER THAN >FF) IS >C6=198 <0026> * 5/7/81 <0027> AC4C CA,75,64 CHE 100,@RKEY <0028> AC4F 4C,5C BR GAC04 <0029> AC51 90,4A INC @FAC <0030> AC53 A6,75,64 SUB 100,@RKEY <0031> AC56 BC,4C,75 ST @RKEY,@FAC2 FLOATING FORMAT (>4001__00000 <0032> AC59 05,AC,5F B GAC07 <0033> AC5C BC,4B,75 GAC04 ST @RKEY,@FAC1 FLOATING FORMAT (>40__0000000 <0034> AC5F 4C,67 GAC07 BR KEY2A <0035> AC61 83,4A KEY1C DNEG @FAC KEY CODE ASSIGNED TO -1 <0036> AC63 4C,67 BR KEY2A <0037> AC65 87,4A KEY2 DCLR @FAC (>000000000000000) <0038> AC67 0F,7C KEY2A XML ASSGNV ASSIGN VALUE TO VARIABLE <0039> * RXB PATCH CODE ************* <0040> * BR LNKRTN <0041> AC69 55,B5 BR SUBRTN <0042> *********************************************************** <0043> * SUBPROGRAM FOR 'JOYSTICK' <0044> *********************************************************** <0045> AC6B 06,B6,9D JOYST CALL SPAR KEY UNIT <0046> * RXB PATCH LABEL ************ <0047> AC6E 0F,7E GAC16 XML SPEED Insure in range <0048> AC70 02 BYTE RANGE * of 1 - 4 <0049> AC71 01 BYTE 1 <0050> AC72 00,04 DATA 4 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0039 EQUATES EXEC-359 <0051> AC74 06,A9,C0 CALL KEYJOY GET VARIABLES FOR X, Y <0052> * AND SCAN KEYBOARD <0053> AC77 BC,00,76 ST @JOYY,@VAR0 JOYSTICK Y POSITION <0054> AC7A 06,A9,AA CALL JOYXY -4 to +4 <0055> AC7D BF,4A,40 DST >4001,@FAC Re-store F.P. 1 in FAC AC80 01 <0056> AC81 BC,00,77 ST @JOYX,@VAR0 JOYSTICK X POSITION <0057> AC84 06,A9,AA CALL JOYXY -4 to +4 <0058> * RXB PATCH CODE ************* <0059> * BR LNKRTN <0060> AC87 55,B5 BR SUBRTN <0061> *********************************************************** <0062> * INSURE LEFT PARENTHESIS AND THEN PARSE TO A COMMA <0063> *********************************************************** <0064> * RXB PATCH CODE <0065> AC89 D6,42,B3 LPAR CEQ COMMAZ,@CHAT <0066> AC8C 6C,94 BS CPAR <0067> AC8E 0F,7E XML SPEED Must be <0068> AC90 00 BYTE SYNCHK * at a <0069> AC91 B7 BYTE LPARZ * left parenthesis <0070> AC92 4C,98 BR GAC35 <0071> AC94 0F,7E CPAR XML SPEED <0072> AC96 00 BYTE SYNCHK <0073> AC97 B3 BYTE COMMAZ <0074> * RXB PATCH LABEL *********** <0075> AC98 0F,74 GAC35 XML PARSE Do the parse <0076> AC9A B3 BYTE COMMAZ * Stop on a comma <0077> AC9B 0F,7E XML SPEED Must be <0078> AC9D 00 BYTE SYNCHK * at a <0079> AC9E B3 BYTE COMMAZ * comma <0080> AC9F 00 RTN <0081> *********************************************************** <0082> * SUBROUTINE FOR 'RANGE' USED IN ALL SOUND AND GRAPHICS <0083> *********************************************************** <0084> ACA0 0F,7E RAN16 XML SPEED Insure in range <0085> ACA2 02 BYTE RANGE * of 1 to 16 <0086> ACA3 01 BYTE 1 <0087> ACA4 00,10 DATA 16 <0088> ACA6 92,4B DEC @FAC1 Adjust to internal range <0089> ACA8 00 RTN <0090> *********************************************************** <0091> * SUBROUTINE TO GET ROW, COLUMN VALUES <0092> *********************************************************** <0093> * RXB PATCH CODE <0094> ACA9 06,AC,89 GPHV CALL LPAR Insure '(', parse, insure ',' <0095> * RXB PATCH CODE <0096> ACAC 0F,7E GPHVRC XML SPEED Insure in range <0097> ACAE 02 BYTE RANGE * of 1 - 24 <0098> ACAF 01 BYTE 1 <0099> ACB0 00,18 DATA 24 <0100> ACB2 92,4B DEC @FAC1 Adjust to internal range <0101> ACB4 BC,02,7F ST @XPT,@MNUM <0102> ACB7 BC,7E,4B ST @FAC1,@YPT Set row pointer <0103> ACBA 0F,7E XML SPEED Get column value <0104> ACBC 01 BYTE PARCOM * and insure a comma <0105> ACBD 0F,7E XML SPEED Insure in range <0106> ACBF 02 BYTE RANGE * of 1 to 32 <0107> ACC0 01 BYTE 1 <0108> ACC1 00,20 DATA 32 <0109> ACC3 92,4B DEC @FAC1 Internal range: 0 - 31 <0110> ACC5 BC,7F,4B ST @FAC1,@XPT Set column pointer <0111> ACC8 00 RTN <0112> * Subroutine to control border color <0113> * Character background is also affected since transparent 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0040 EQUATES EXEC-359 <0114> * is used. <0115> ACC9 06,A5,65 BORDER CALL PARFF Insure '(' , and parse <0116> ACCC 06,AC,A0 CALL RAN16 Check 1 - 16 & put in interna <0117> ACCF 3D,00,01 MOVE 1,@FAC1,#7 Load VDP register ACD2 07,4B <0118> ACD4 4B,1E BR LNKRT2 Return to XB program <0119> * Get ROW, COLUMN VALUES AND NUMBER OF CHARACTERS <0120> ACD6 06,AC,A9 HVCHR CALL GPHV Get X, Y VALUES <0121> ACD9 0F,74 XML PARSE <0122> ACDB B6 BYTE RPARZ <0123> ACDC 06,A9,95 CALL INTARG <0124> ACDF A2,4B,60 ADD OFFSET,@FAC1 <0125> ACE2 BC,00,4B ST @FAC1,@VAR0 SAVE THE CHARACTER <0126> ACE5 BF,4A,00 DST 1,@FAC ASSUME 1 CHARACTER ACE8 01 <0127> ACE9 D6,42,B6 CEQ RPARZ,@CHAT If not right parenthesis <0128> ACEC 6C,F8 BS GAC95 <0129> ACEE 0F,7E XML SPEED Must be <0130> ACF0 00 BYTE SYNCHK * at a <0131> ACF1 B3 BYTE COMMAZ * comma <0132> ACF2 0F,74 XML PARSE # OF CHARACTERS <0133> ACF4 B6 BYTE RPARZ <0134> ACF5 06,A9,95 CALL INTARG FLOATING TO INTEGER <0135> ACF8 00 GAC95 RTN <0136> *********************************************************** <0137> * ERRWXY - Is the subroutine for CALL ERR(W,X,Y,Z) <0138> * The parameters indicate: <0139> * W - The error code # of the error <0140> * X - Indicates whether execution(-1) error or <0141> * I/O (0-255) error on LUNO 0-255 <0142> * Y - Indicates the severity code of the error <0143> * Z - Line number of the error <0144> * ERR Can be called with 2 forms: <0145> * CALL ERR(W,X,Y,Z) and CALL ERR(W,X) <0146> * If ERR is called and no error has occured then all <0147> * values returned are zero. <0148> *********************************************************** <0149> ACF9 BD,52,6E ERRWXY DST @VSPTR,@FAC8 Get a temp VSPTR <0150> ACFC C5,52,24 GAC99 DCH @STVSPT,@FAC8 While not a bottom of stack <0151> ACFF 4D,33 BR GACD0 <0152> AD01 BC,5C,E0 ST V@2(@FAC8),@ARG Keep ID code in ARG area AD04 02,52 <0153> AD06 D6,5C,69 CEQ >69,@ARG *** ERROR entry <0154> AD09 4D,12 BR GACAF <0155> AD0B 06,A9,FC CALL SQUISH Squish it out of the stack <0156> AD0E 0F,77 XML VPUSH Put permanent copy of error <0157> * entry on stack <0158> AD10 4D,3F BR ERR10 Jump out now <0159> * Jump always <0160> AD12 D6,5C,67 GACAF CEQ >67,@ARG *** FOR entry <0161> AD15 4D,1D BR GACBA <0162> AD17 A7,52,00 DSUB 32,@FAC8 Skip it AD1A 20 <0163> AD1B 4D,31 BR GACCE <0164> AD1D D6,5C,66 GACBA CEQ >66,@ARG *** GOSUB entry <0165> AD20 4D,28 BR GACC5 <0166> AD22 A7,52,00 DSUB 8,@FAC8 Skip it AD25 08 <0167> AD26 4D,31 BR GACCE <0168> AD28 D6,5C,6A GACC5 CEQ >6A,@ARG * SYNTAX ERROR <0169> AD2B 4D,BA BR ERRSYN <0170> AD2D A7,52,00 DSUB 16,@FAC8 Skip it AD30 10 <0171> AD31 4C,FC GACCE BR GAC99 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0041 EQUATES EXEC-359 <0172> AD33 BF,4A,00 GACD0 DST >0080,@FAC No error entry there so AD36 80 <0173> AD37 BF,4C,69 DST >6900,@FAC2 fake one AD3A 00 <0174> AD3B 87,4E DCLR @FAC4 <0175> AD3D 87,50 DCLR @FAC6 <0176> AD3F 0F,77 ERR10 XML VPUSH Push the temporary entry on <0177> * top of stack <0178> * Code to get "W" in <0179> AD41 06,A9,F6 CALL COMB Check for left parenthesis <0180> AD44 06,AD,AF CALL ERRC05 Pick up user's symbol <0181> AD47 BC,4B,EF ST V@-8(@VSPTR),@FAC1 Get error code AD4A FF,F8,6E <0182> AD4D 0F,80 XML CIF Convert it to floating <0183> AD4F 0F,7C XML ASSGNV Assign it <0184> * Code to get "X" in <0185> AD51 06,AD,AA CALL ERRCOM Check syntax & get user's sym <0186> AD54 DA,EF,FF CLOG >80,V@-7(@VSPTR) If execution AD57 F9,6E,80 <0187> AD5A 4D,66 BR GAD03 <0188> AD5C 31,00,08 MOVE 8,G@FLT1,@FAC Make it such AD5F 4A,A3,F3 <0189> AD62 83,4A DNEG @FAC Make it a negative <0190> AD64 4D,6E BR GAD0B <0191> AD66 BC,4B,EF GAD03 ST V@-5(@VSPTR),@FAC1 Get I/O LUNO number AD69 FF,FB,6E <0192> AD6C 0F,80 XML CIF Convert it to floating <0193> AD6E 0F,7C GAD0B XML ASSGNV <0194> * Code to get "Y" in <0195> AD70 D6,42,B6 CEQ RPARZ,@CHAT If long form of CALL ERR <0196> AD73 6D,A5 BS GAD42 <0197> AD75 06,AD,AA CALL ERRCOM Check syntax & get user's sym <0198> AD78 BC,4B,EF ST V@-7(@VSPTR),@FAC1 Get severity code AD7B FF,F9,6E <0199> AD7E B2,4B,7F AND >7F,@FAC1 Reset execution / I/O flag <0200> AD81 0F,80 XML CIF Convert it <0201> AD83 0F,7C XML ASSGNV Assign it <0202> * Code to get "Z" in <0203> AD85 06,AD,AA CALL ERRCOM Check syntax & get symbol <0204> AD88 BD,4C,EF DST V@-2(@VSPTR),@FAC2 Get line pointer AD8B FF,FE,6E <0205> AD8E BD,4A,4C DST @FAC2,@FAC <0206> AD91 8F,4C DCZ @FAC2 If line number exists <0207> AD93 6D,A1 BS GAD3E <0208> AD95 97,4C DDECT @FAC2 Point to the line # <0209> AD97 06,60,34 CALL GRSUB1 Read line # (2 bytes) from VD <0210> * or ERAM (use GREAD) <0211> AD9A 4C BYTE >4C * @FAC2: Source addr on ERAM/VD <0212> AD9B BD,4A,50 DST @EEE,@FAC Put the line # in FAC <0213> AD9E B2,4A,7F AND >7F,@FAC Reset the breakpoint if any <0214> ADA1 0F,80 GAD3E XML CIF Convert it <0215> ADA3 0F,7C XML ASSGNV Assign it <0216> ADA5 0F,78 GAD42 XML VPOP Trash the temporary entry <0217> ADA7 05,AB,1A B LNKRTN Return from subprogram <0218> * Must be long branch because of AND above <0219> ADAA D6,42,B3 ERRCOM CEQ COMMAZ,@CHAT Check for comma <0220> ADAD 4D,BA BR ERRSYN <0221> ADAF 0F,79 ERRC05 XML PGMCHR Get the next character <0222> ADB1 0F,7A XML SYM Collect name & s.t. entry <0223> ADB3 0F,7B XML SMB Get value space <0224> ADB5 0F,77 XML VPUSH Push it <0225> ADB7 86,4A CLR @FAC Set up for conversion <0226> ADB9 00 RTN <0227> * CHANGE IN ADDRESS OF THE ERROR CALLS WILL AFFECT 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0042 EQUATES EXEC-359 <0228> * THE FILE SUBS..... <0229> * ERROR messages called from this file <0230> ADBA 06,6A,84 ERRSYN CALL ERRZZ * SYNTAX ERROR <0231> ADBD 03 BYTE 3 * (shared by SUBS) <0232> ADBE 06,6A,84 ERRSNM CALL ERRZZ * STRING-NUMBER MISMATCH <0233> ADC1 07 BYTE 7 * (shared by SUBS) <0234> ADC2 06,6A,84 ERRMUV CALL ERRZZ * IMPROPERLY USED NAME <0235> ADC5 09 BYTE 9 <0236> ADC6 06,6A,84 ERRMEM CALL ERRZZ * MEMORY FULL <0237> ADC9 0B BYTE 11 <0238> ADCA 06,6A,84 ERRSO CALL ERRZZ * STACK OVERFLOW <0239> ADCD 0C BYTE 12 <0240> ADCE 06,6A,84 ERRNWF CALL ERRZZ * NEXT WITHOUT FOR <0241> ADD1 0D BYTE 13 <0242> ADD2 06,6A,84 ERRFNN CALL ERRZZ * FOR/NEXT NESTING <0243> ADD5 0E BYTE 14 <0244> ADD6 06,6A,84 ERRSNS CALL ERRZZ * MUST BE IN SUBPROGRAM <0245> ADD9 0F BYTE 15 <0246> ADDA 06,6A,84 ERRRSC CALL ERRZZ * RECURSIVE SUBPROGRAM CALL <0247> ADDD 10 BYTE 16 <0248> ADDE 06,6A,84 ERRRWG CALL ERRZZ * RETURN WITHOUT GOSUB <0249> ADE1 12 BYTE 18 <0250> ADE2 06,6A,84 ERRBS CALL ERRZZ * BAD SUBSCRIPT <0251> ADE5 14 BYTE 20 <0252> ADE6 06,6A,84 ERRLNF CALL ERRZZ * LINE NOT FOUND <0253> ADE9 16 BYTE 22 <0254> ADEA 06,6A,84 ERRBA CALL ERRZZ * BAD ARGUMENTS <0255> ADED 1C BYTE 28 <0256> ADEE 06,6A,84 ERRBV CALL ERRZZ * BAD VALUE <0257> ADF1 1E BYTE 30 * (shared by SUBS) <0258> ADF2 06,6A,84 ERRIAL CALL ERRZZ * INCORRECT ARGUMENT LIST <0259> ADF5 1F BYTE 31 * (shared by SUBS) <0260> ADF6 06,6A,84 ERRSNF CALL ERRZZ * SUBPROGRAM NOT FOUND <0261> ADF9 25 BYTE 37 <0262> * Other error messages appear in this program <0263> * ERRRDY * READY DATA 0 <0264> * ERRBRK * BREAK POINT DATA 1 <0265> * ERROLP * ONLY LEGAL IN A PROGRAM DATA 27 <0266> * <0267> * WRNN01 * NUMERIC OVERFLOW DATA 2 <0268> * WRNS02 <0269> * WRNST1 * STRING TRUNCATED DATA 19 <0270> * WRNST2 <0271> * WRNLNF * LINE NOT FOUND DATA 38 <0272> * <0273> *********************************************************** <0274> AORG >0E00 <0275> <0276> * SPRITE SUBROUTINES BRANCH TABLE <0277> AE00 50,4F CHAR1 BR SPNUM3 Called in CHARLY. EXEC <0278> AE02 50,48 CHAR2 BR SPNUM2 Called in CHARLY. EXEC <0279> AE04 4E,04 BR $ Called in CHARLY. EXEC <0280> * SUBROUTINE LINK LIST <0281> AE06 AE,11 LINKS1 DATA LINKS2 <0282> AE08 06,53,50 STRI 'SPRITE' AE0B 52,49,54 AE0E 45 <0283> AE0F AE,8F DATA SPRTE <0284> AE11 AE,1F LINKS2 DATA LINKS3 <0285> AE13 09,44,45 STRI 'DELSPRITE' AE16 4C,53,50 AE19 52,49,54 AE1C 45 <0286> AE1D AE,C0 DATA SPRDEL 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0043 EQUATES EXEC-359 <0287> AE1F AE,2C LINKS3 DATA LINKS4 <0288> AE21 08,50,4F STRI 'POSITION' AE24 53,49,54 AE27 49,4F,4E <0289> AE2A AE,FF DATA SPRPOS <0290> AE2C AE,36 LINKS4 DATA LINKS5 <0291> AE2E 05,43,4F STRI 'COINC' AE31 49,4E,43 <0292> AE34 B6,FD DATA ZSCOI <0293> AE36 AE,42 LINKS5 DATA LINKS6 <0294> AE38 07,4D,41 STRI 'MAGNIFY' AE3B 47,4E,49 AE3E 46,59 <0295> AE40 AF,75 DATA SPRMAG <0296> AE42 AE,4D LINKS6 DATA LINKS7 <0297> AE44 06,4D,4F STRI 'MOTION' AE47 54,49,4F AE4A 4E <0298> AE4B AF,8D DATA SPRMOV <0299> AE4D AE,58 LINKS7 DATA LINKS8 <0300> AE4F 06,4C,4F STRI 'LOCATE' AE52 43,41,54 AE55 45 <0301> AE56 AF,9D DATA SPRLOC <0302> AE58 AE,64 LINKS8 DATA LINKS9 <0303> AE5A 07,50,41 STRI 'PATTERN' AE5D 54,54,45 AE60 52,4E <0304> AE62 AF,B1 DATA SPRPAT <0305> AE64 AE,71 LINKS9 DATA LINKSA <0306> AE66 08,44,49 STRI 'DISTANCE' AE69 53,54,41 AE6C 4E,43,45 <0307> AE6F B7,12 DATA ZSDIST <0308> AE71 AE,79 LINKSA DATA LINKSB <0309> AE73 03,53,41 STRI 'SAY' AE76 59 <0310> AE77 B1,07 DATA SAY <0311> AE79 AE,83 LINKSB DATA LINKSC <0312> AE7B 05,53,50 STRI 'SPGET' AE7E 47,45,54 <0313> AE81 B2,60 DATA SPGET <0314> AE83 B7,1F LINKSC DATA LINKSD <0315> AE85 07,43,48 STRI 'CHARSET' AE88 41,52,53 AE8B 45,54 <0316> AE8D B0,29 DATA CHRSET <0317> *********************************************************** <0318> * CALL SPRITE(#SPRITE,CHAR,COLOR,Y,X,(YSPEED,XSPEED),...) <0319> *********************************************************** <0320> AE8F 06,B0,42 SPRTE CALL SPNUM1 Check sprite mode and skip "( <0321> AE92 06,B0,48 CALL SPNUM2 Get sprite number <0322> AE95 06,B0,89 SPRT3 CALL SPCHR Put character number for spri <0323> AE98 0F,7E XML SPEED <0324> AE9A 00 BYTE SYNCHK <0325> AE9B B3 BYTE COMMAZ * Check for comma and skip it <0326> AE9C 06,A0,1E CALL GA01E Put sprite color in SAL (SPC <0327> AE9F 0F,7E XML SPEED Insure at a comma <0328> AEA1 00 BYTE SYNCHK <0329> AEA2 B3 BYTE COMMAZ <0330> AEA3 06,B0,6C CALL SPLOC Put location of sprite in SAL <0331> AEA6 BD,B0,08 DST @SP04+1,V*SPSAL Put in location of sprite AEA9 05 <0332> * Finish defining SAL. Check if velocity is specified 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0044 EQUATES EXEC-359 <0333> AEAA D6,42,B3 SPRT4 CEQ COMMAZ,@CHAT Finished!!!!! <0334> AEAD 50,F1 BR GB0F2 <0335> AEAF 0F,79 XML PGMCHR <0336> AEB1 D6,42,FD CEQ NUMBEZ,@CHAT Next sprite specified <0337> AEB4 4E,BB BR GAEBB <0338> AEB6 06,B0,4F CALL SPNUM3 Get the next sprite number <0339> AEB9 4E,95 BR SPRT3 And go! <0340> AEBB 06,B0,9B GAEBB CALL SPMOVE Get the velocity first <0341> AEBE 4E,AA BR SPRT4 <0342> *********************************************************** <0343> * CALL DELSPRITE(#SPR,.......) or CALL DESPRITE(ALL) <0344> *********************************************************** <0345> AEC0 06,B0,42 SPRDEL CALL SPNUM1 Insure at '(' <0346> AEC3 0F,79 SPDEL1 XML PGMCHR Skip "(" or "," <0347> AEC5 D6,42,FD CEQ NUMBEZ,@CHAT If sprite number <0348> AEC8 4E,F6 BR GAEF6 <0349> AECA 0F,79 XML PGMCHR Skip "#" <0350> AECC 0F,74 XML PARSE Parse the sprite number <0351> AECE B6 BYTE RPARZ <0352> AECF 06,B0,54 CALL SPNUM4 Check and convert number <0353> AED2 87,E4,80 DCLR V@>0480(@SPSAL) Stop motion if moving AED5 08 <0354> AED6 BF,B0,08 DST >C000,V*SPSAL Hide the sprite off screen AED9 C0,00 <0355> *---------------------------------------------------------- <0356> * Add following 7 lines for speeding up XBASIC <0357> AEDB D4,A3,AA CEQ @MOTION,V@SPNUM Check current sprite AEDE 7A <0358> AEDF 4E,EF BR SPDEL2 <0359> * no. against sprite motion count <0360> * yes, change to as low as possible <0361> AEE1 92,7A GAEE1 DEC @MOTION <0362> AEE3 6E,EF BS SPDEL2 <0363> AEE5 A7,08,00 DSUB 4,@SPSAL AEE8 04 <0364> AEE9 8F,E4,80 DCZ V@>0480(@SPSAL) AEEC 08 <0365> AEED 6E,E1 BS GAEE1 <0366> *---------------------------------------------------------- <0367> AEEF D6,42,B3 SPDEL2 CEQ COMMAZ,@CHAT If more sprites <0368> AEF2 6E,C3 BS SPDEL1 <0369> AEF4 4E,FD BR GAEFD <0370> AEF6 0F,7E GAEF6 XML SPEED Must have 'ALL' else error <0371> AEF8 00 BYTE SYNCHK <0372> AEF9 EC BYTE ALLZ <0373> AEFA 06,60,16 CALL SPRINT Reinitialize all sprites <0374> AEFD 50,F1 GAEFD BR GB0F2 Return to caller <0375> *********************************************************** <0376> * CALL POSTION(#SPR,Y,X,...) <0377> *********************************************************** <0378> AEFF 06,B0,42 SPRPOS CALL SPNUM1 Check for sprites and skip "( <0379> AF02 06,B0,48 SPRP02 CALL SPNUM2 Check sprite number <0380> AF05 06,B0,F4 CALL PREPN Prepare Y-position return var <0381> AF08 0F,7E XML SPEED Insure at a comma <0382> AF0A 00 BYTE SYNCHK <0383> AF0B B3 BYTE COMMAZ <0384> AF0C BD,00,B0 DST V*SPSAL,@SP00 Read X, Y position AF0F 08 <0385> AF10 BC,4B,00 ST @SP00,@FAC1 Get Y position <0386> AF13 D6,4B,FE CEQ >FE,@FAC1 <0387> AF16 4F,1C BR GAF1C <0388> AF18 95,4A DINCT @FAC Get 256 as an output <0389> AF1A 4F,1E BR GAF1E <0390> AF1C 94,4B GAF1C INCT @FAC1 Regular adjustment for user 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0045 EQUATES EXEC-359 <0391> AF1E 06,AF,33 GAF1E CALL SPRP03 Check, convert & assign value <0392> AF21 06,B0,F4 CALL PREPN Prepare X-pos return variable <0393> AF24 BC,4B,01 ST @SP00+1,@FAC1 Get X position <0394> AF27 91,4A DINC @FAC Adjust for the user <0395> AF29 06,AF,33 CALL SPRP03 Check, convert & assign value <0396> AF2C D6,42,B3 CEQ COMMAZ,@CHAT If not finished <0397> AF2F 6F,02 BS SPRP02 <0398> AF31 50,F1 BR GB0F2 Return <0399> AF33 0F,80 SPRP03 XML CIF Convert integer to float <0400> AF35 D7,00,C0 DCEQ >C000,@SP00 If hidden sprite AF38 00 <0401> AF39 4F,3D BR GAF3D <0402> AF3B 87,4A DCLR @FAC Return value zero <0403> AF3D 0F,7C GAF3D XML ASSGNV Assign to variable <0404> AF3F 00 RTN [0016] *********************************************************** [0017] COPY 'DSK5.MYXB5-H' <0001> *********************************************************** <0002> * CALL COINC(#SPR,#SPR,TOLERANCE,CODE) <0003> * CALL COINC(#SPR,YLOC,XLOC,TOLERANCE,CODE) <0004> * CALL COINC(ALL) <0005> *********************************************************** <0006> AF40 06,B0,42 SPRCOI CALL SPNUM1 <0007> AF43 0F,79 XML PGMCHR Skip "(" <0008> AF45 D6,42,EC CEQ ALLZ,@CHAT Check coinc of all sprites <0009> AF48 4F,56 BR GAF56 <0010> AF4A 0F,79 XML PGMCHR Skip "ALL" <0011> AF4C 06,B0,E4 CALL COMMA2 Check and skip "," <0012> AF4F DA,7B,20 CLOG >20,@VDPSTT Check VDP status <0013> * RXB PATCH CODE ************ <0014> * BS NULRTN <0015> AF52 77,0C BS NR <0016> AF54 4F,6C BR GAF6C <0017> * RXB PATCH CODE ************ <0018> AF56 06,AF,E9 GAF56 CALL CODIST Get distance of 2 sprites <0019> AF59 06,B0,E1 CALL COMMA Get tolerance level <0020> AF5C 0F,7E XML SPEED <0021> AF5E 02 BYTE RANGE * Check against range <0022> AF5F 00 BYTE 0 * FAC has tolerance level <0023> AF60 00,FF DATA 255 <0024> AF62 C5,00,4A DCH @FAC,@SP00 Y-loc out of range <0025> * RXB PATCH CODE ************ <0026> * BS NULRTN <0027> AF65 77,0C BS NR <0028> AF67 C5,04,4A DCH @FAC,@SP04 X-loc out of range <0029> * RXB PATCH CODE ************ <0030> * BS NULRTN <0031> AF6A 77,0C BS NR <0032> * If no conincidence just return zero <0033> AF6C 06,B0,F4 GAF6C CALL PREPN Prepare for numeric output <0034> AF6F BF,4A,BF DST >BFFF,@FAC Store -1 in FAC AF72 FF <0035> * RXB PATCH CODE ************ <0036> * BR ASSRTN <0037> AF73 57,0F BR AR <0038> *********************************************************** <0039> * CALL MAGNIFY(magnification factor=1 - 4) <0040> *********************************************************** <0041> AF75 06,B0,42 SPRMAG CALL SPNUM1 Insure at "(" <0042> AF78 0F,79 XML PGMCHR Skip the "(" <0043> AF7A 0F,74 XML PARSE Parse the magnification facto <0044> AF7C B6 BYTE RPARZ <0045> AF7D 0F,7E XML SPEED <0046> AF7F 02 BYTE RANGE 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0046 EQUATES EXEC-359 <0047> AF80 01 BYTE 1 <0048> AF81 00,04 DATA 4 <0049> * Next statement adding >DF to subtract 1 from FAC <0050> AF83 A2,4B,DF ADD >DF,@FAC1 Turn on screen and interrupt <0051> AF86 3D,00,01 MOVE 1,@FAC1,#1 Store it to VDP register 1 AF89 01,4B <0052> AF8B 50,F1 BR GB0F2 <0053> *********************************************************** <0054> * CALL MOTION(#SPR,YSPEED,XSPEED,...) <0055> *********************************************************** <0056> AF8D 06,B0,42 SPRMOV CALL SPNUM1 Insure at "(" <0057> * RXB PATCH CODE ************* <0058> * SPRMV2 CALL SPNUM2 Get sprite number <0059> AF90 05,B5,63 SPRMV2 B SPGS GO or STOP <0060> AF93 06,B0,9B SPRMV3 CALL SPMOVE Store velocity <0061> AF96 D6,42,B3 SPRMV4 CEQ COMMAZ,@CHAT Loop if more <0062> AF99 6F,90 BS SPRMV2 <0063> AF9B 50,F1 BR GB0F2 <0064> *********************************************************** <0065> * CALL LOCATE(#SPR,YLOC,XLOC,...) <0066> *********************************************************** <0067> AF9D 06,B0,42 SPRLOC CALL SPNUM1 Insure at "(" <0068> AFA0 06,B0,48 SPRLC2 CALL SPNUM2 Check sprite number <0069> AFA3 06,B0,6C CALL SPLOC Read location <0070> AFA6 BD,B0,08 DST @SP04+1,V*SPSAL Put in sprite location AFA9 05 <0071> AFAA D6,42,B3 CEQ COMMAZ,@CHAT Loop if more <0072> AFAD 6F,A0 BS SPRLC2 <0073> AFAF 50,F1 BR GB0F2 <0074> *********************************************************** <0075> * CALL PATTERN(#SPR,CHAR,...) <0076> *********************************************************** <0077> AFB1 06,B0,42 SPRPAT CALL SPNUM1 Insure at "(" <0078> AFB4 06,B0,48 SPRPT2 CALL SPNUM2 Get sprite number <0079> AFB7 06,B0,89 CALL SPCHR Set the sprite character <0080> AFBA D6,42,B3 CEQ COMMAZ,@CHAT Loop if more <0081> AFBD 6F,B4 BS SPRPT2 <0082> AFBF 50,F1 BR GB0F2 <0083> *********************************************************** <0084> * CALL DISTANCE(#1,#2,DISTANCE) <0085> * CALL DISTANCE(#1,Y,X,DISTANCE) <0086> *********************************************************** <0087> AFC1 06,B0,42 DIST CALL SPNUM1 Insure at "(" <0088> * RXB PATCH LABEL ************ <0089> AFC4 0F,79 GAFC4 XML PGMCHR Skip "(" <0090> AFC6 06,AF,E9 CALL CODIST Get distance in Y and X <0091> AFC9 06,B0,F4 CALL PREPN Prepare return variable <0092> AFCC A9,00,00 DMUL @SP00,@SP00 X=X*X <0093> AFCF A9,04,04 DMUL @SP04,@SP04 Y=Y*Y <0094> AFD2 A1,02,06 DADD @SP06,@SP02 @SP02=X*X+Y*Y <0095> AFD5 0D OVF Checking overflow bit <0096> AFD6 6F,E1 BS OVER If overflow-indicate maximum <0097> AFD8 BD,4A,02 DST @SP02,@FAC Put distance squared in FAC <0098> AFDB C7,02,7F DCH >7FFF,@SP02 If bigger then 128 AFDE FF <0099> AFDF 4F,E5 BR GAFE5 <0100> AFE1 BF,4A,7F OVER DST >7FFF,@FAC Put maximum value AFE4 FF <0101> AFE5 0F,80 GAFE5 XML CIF Convert to floating format <0102> * RXB PATCH CODE <0103> * BR ASSRTN Assign value and return <0104> AFE7 57,0F BR AR <0105> *********************************************************** <0106> * CODIST routine gets locations of two sprites or one 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0047 EQUATES EXEC-359 <0107> * sprite and Y and X position specified by a user and <0108> * calculates absolute value of Y and X distance. <0109> *********************************************************** <0110> AFE9 86,00 CODIST CLR @SP00 <0111> AFEB 35,00,07 MOVE 7,@SP00,@SP00+1 Clear up first 8 bytes AFEE 01,00 <0112> AFF0 D6,42,FD CEQ NUMBEZ,@CHAT Check for # <0113> AFF3 4D,BA BR ERRSYN <0114> AFF5 06,B0,4F CALL SPNUM3 Get the first sprite <0115> AFF8 BD,01,B0 DST V*SPSAL,@SP00+1 Location of first sprite AFFB 08 <0116> AFFC 90,01 INC @SP00+1 Increment to make range 1-256 <0117> AFFE BC,03,02 ST @SP02,@SP02+1 Put X in SP02+1 <0118> B001 86,02 CLR @SP02 Y in SP00+1 <0119> B003 D6,42,FD CEQ NUMBEZ,@CHAT Get 2nd sprite <0120> B006 50,11 BR GB011 <0121> B008 06,B0,4F CALL SPNUM3 Get the next sprite <0122> B00B BD,05,B0 DST V*SPSAL,@SP04+1 Location of second sprite B00E 08 <0123> B00F 50,17 BR GB017 <0124> B011 06,B0,6C GB011 CALL SPLOC Get Y and X location <0125> B014 06,B0,E4 CALL COMMA2 Check for comma and skip <0126> B017 90,05 GB017 INC @SP04+1 Increment to make range 1-256 <0127> B019 A5,00,04 DSUB @SP04,@SP00 Difference in Y at SP00 <0128> B01C 81,00 DABS @SP00 Get absolute value <0129> B01E 86,05 CLR @SP04+1 Clear byte before X <0130> B020 A5,05,02 DSUB @SP02,@SP04+1 Difference in Y at SP04 <0131> B023 81,05 DABS @SP04+1 get the absolute value <0132> B025 BC,05,06 ST @SP06,@SP04+1 Put in the right place <0133> B028 00 RTN <0134> *********************************************************** <0135> * CHRSET restores the standard character set and the <0136> * standard colors for the standard character set <0137> * (black on transparent) <0138> *********************************************************** <0139> B029 06,6A,78 CHRSET CALL CHKEND Must be at EOS now <0140> B02C 4D,BA BR ERRSYN Else its an error <0141> B02E BE,4C,40 ST >40,@FAC2 Number of characters to load <0142> B031 06,60,18 CALL CHRTBL Call RXB routine to load <0143> B034 BE,A8,0F ST >10,V@>080F Set 1st set to black on tranp B037 10 <0144> B038 35,00,10 MOVE 16,V@>080F,V@>0810 Ripple for rest B03B A8,10,A8 B03E 0F <0145> B03F 06,00,12 CALL RETURN Return to the caller <0146> ****************************** <0147> * SPNUM1 ROUTINE * <0148> ****************************** <0149> B042 D6,42,B7 SPNUM1 CEQ LPARZ,@CHAT Should be "(" <0150> B045 4D,BA BR ERRSYN <0151> B047 00 RTN <0152> ****************************** <0153> * SPNUM2 ROUTINE * <0154> ****************************** <0155> B048 0F,79 SPNUM2 XML PGMCHR Get the next character <0156> B04A D6,42,FD SPNUM6 CEQ NUMBEZ,@CHAT Must be "#" <0157> B04D 4D,BA BR ERRSYN <0158> B04F 0F,79 SPNUM3 XML PGMCHR Get next character <0159> B051 06,B0,E1 CALL COMMA Parse up to comma and skip it <0160> B054 0F,7E SPNUM4 XML SPEED <0161> B056 02 BYTE RANGE * Verify the value is in range <0162> B057 01 BYTE 1 * Sprite number 1 - 28 <0163> B058 00,1C DATA 28 <0164> *---------------------------------------------------------- 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0048 EQUATES EXEC-359 <0165> * Insert a line here in sprite handling code for speeeding <0166> * up XB 5/22/81 <0167> * RXB PATCH LABLE ************ <0168> B05A BC,A3,AA SPNUM5 ST @FAC1,V@SPNUM Keep sprite number B05D 4B <0169> *---------------------------------------------------------- <0170> B05E 92,4B DEC @FAC1 Adjust for internal use <0171> B060 E3,4A,00 DSLL 2,@FAC Get location of SAL B063 02 <0172> B064 A3,4A,03 DADD >0300,@FAC Sprite # * 4 + >0300 B067 00 <0173> B068 BD,08,4A DST @FAC,@SPSAL Save SAL location <0174> B06B 00 RTN <0175> ****************************** <0176> * SPLOC ROUTINE * <0177> ****************************** <0178> B06C 06,B0,E1 SPLOC CALL COMMA Parse up to comma and skip it <0179> B06F 0F,7E XML SPEED <0180> B071 02 BYTE RANGE * Range of Y: 1 - 256 <0181> B072 01 BYTE 1 <0182> B073 01,00 DATA 256 <0183> B075 96,4B DECT @FAC1 Adjust for internal use: FF - <0184> B077 BD,04,4A DST @FAC,@SP04 Store in SP04 area <0185> B07A 0F,74 XML PARSE <0186> B07C B6 BYTE RPARZ * Parse to ")" or less <0187> B07D 0F,7E XML SPEED <0188> B07F 02 BYTE RANGE * Get X value. Range: 1 - 256 <0189> B080 01 BYTE 1 <0190> B081 01,00 DATA 256 <0191> B083 92,4B DEC @FAC1 Adjust for internal use: 0 - <0192> B085 BC,06,4B ST @FAC1,@SP06 SP04+1=Y-loc and SP06=X-loc <0193> B088 00 RTN <0194> ****************************** <0195> * SPCHR ROUTINE * <0196> ****************************** <0197> B089 0F,74 SPCHR XML PARSE <0198> B08B B6 BYTE RPARZ <0199> B08C 0F,7E XML SPEED <0200> B08E 02 BYTE RANGE * Check upper range <0201> * RXB PATCH CODE <0202> * BYTE 32 * Character value 32 - 144 <0203> * DATA 143 <0204> B08F 1E BYTE 30 <0205> B090 00,9F DATA 159 <0206> B092 A2,4B,60 ADD >60,@FAC1 Add offset to character numbe <0207> B095 BC,E0,02 ST @FAC1,V@2(@SPSAL) Store the character value B098 08,4B <0208> B09A 00 RTN <0209> ****************************** <0210> * SPMOVE ROUTINE * <0211> ****************************** <0212> B09B 06,B0,E1 SPMOVE CALL COMMA Parse up to comma and skip <0213> B09E 06,B0,BD CALL RANGEV Check if numeric and convert <0214> * to integer <0215> B0A1 BC,0A,4B ST @FAC1,@SPTMP Store Y velocity <0216> B0A4 0F,74 XML PARSE Get X velocity <0217> B0A6 B6 BYTE RPARZ * Check for ")" or less <0218> B0A7 06,B0,BD CALL RANGEV Numeric check and convert <0219> * to integer <0220> B0AA BC,4A,0A SPMOVF ST @SPTMP,@FAC * @FAC=Y velocity, @FAC1=X velo <0221> B0AD BD,E4,80 DST @FAC,V@>0480(@SPSAL) Store velocities in SAL B0B0 08,4A <0222> *---------------------------------------------------------- <0223> * Add the following 3 lines for speeding up XB 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0049 EQUATES EXEC-359 <0224> B0B2 C4,A3,AA CH @MOTION,V@SPNUM Check current sprite B0B5 7A <0225> B0B6 50,BC BR GB0BD against sprite motion <0226> * counter <0227> B0B8 BC,7A,A3 ST V@SPNUM,@MOTION higher? Yes, replace it B0BB AA <0228> *---------------------------------------------------------- <0229> B0BC 00 GB0BD RTN <0230> B0BD C6,4C,63 RANGEV CH >63,@FAC2 The same as INTARG <0231> B0C0 6D,BE BS ERRSNM <0232> B0C2 86,54 CLR @FAC10 <0233> B0C4 87,6C DCLR @FPERAD <0234> B0C6 0F,12 XML FLTINT <0235> B0C8 8E,54 CZ @FAC10 <0236> B0CA 4D,EE BR ERRBV <0237> B0CC D3,4A,00 DCGE 0,@FAC If positive number, B0CF 00 <0238> B0D0 50,DA BR GB0DB <0239> B0D2 C7,4A,00 DCH >007F,@FAC should be 0 - 127 B0D5 7F <0240> B0D6 6D,EE BS ERRBV <0241> B0D8 50,E0 BR GB0E1 If negative number, <0242> B0DA CB,4A,FF GB0DB DCHE >FF80,@FAC Should be -1 to -128 B0DD 80 <0243> B0DE 4D,EE BR ERRBV <0244> B0E0 00 GB0E1 RTN Otherwise its ok. <0245> ****************************** <0246> * COMMA ROUTINE * <0247> ****************************** <0248> B0E1 0F,74 COMMA XML PARSE <0249> B0E3 B3 BYTE COMMAZ <0250> B0E4 D6,42,B3 COMMA2 CEQ COMMAZ,@CHAT <0251> B0E7 4D,BA BR ERRSYN <0252> B0E9 0F,79 XML PGMCHR Get next character <0253> B0EB 00 RTN <0254> ****************************** <0255> * LINK BACK TO XB * <0256> ****************************** <0257> B0EC 06,B0,F4 NULRTN CALL PREPN <0258> B0EF 0F,7C ASSRTN XML ASSGNV <0259> B0F1 05,A0,1C GB0F2 B GA01C (LNKRTN) <0260> ******************************* <0261> * PREPARE FOR PASSING ARGUMENT* <0262> ******************************* <0263> B0F4 0F,7A PREPN XML SYM Pick up name & search table <0264> B0F6 0F,7B XML SMB Evaluate any subscripts <0265> B0F8 C6,4C,63 CH >63,@FAC2 If not numeric, error <0266> B0FB 6D,F2 BS ERRIAL <0267> B0FD 0F,77 XML VPUSH Save entry on stack <0268> B0FF 86,4A CLR @FAC Clear FAC for new value <0269> B101 35,00,07 MOVE 7,@FAC,@FAC1 B104 4B,4A <0270> B106 00 RTN <0271> *********************************************************** <0272> * CALL SAY(....................) <0273> * Decode given parameter(s). Store all data first, then go <0274> * speak it all at once. <0275> *********************************************************** <0276> B107 D6,42,B7 SAY CEQ LPARZ,@CHAT Must start with "(" <0277> B10A 4D,BA BR ERRSYN <0278> B10C BD,4C,6E DST @VSPTR,@FAC2 Save current top of stack on <0279> B10F 0F,77 XML VPUSH the stack <0280> B111 BF,0C,00 DST 255,@BYTES 255 bytes = 85 3 byte entires B114 FF 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0050 EQUATES EXEC-359 <0281> B115 0F,71 XML GETSTR Get temp speech list string <0282> B117 BF,4A,00 DST >001C,@FAC Indicate it is temp string (S B11A 1C <0283> B11B BF,4C,65 DST >6500,@FAC2 Indicate it is string entry B11E 00 <0284> B11F BD,4E,1C DST @SREF,@FAC4 Save pointer to temp string <0285> B122 BD,50,0C DST @BYTES,@FAC6 Length is 255 <0286> B125 0F,77 XML VPUSH Make it semi-permenant <0287> * Set up pointers into the speak list <0288> B127 BD,00,4E DST @FAC4,@PTFBSL Front points to begining <0289> B12A BD,02,4E DST @FAC4,@PTLBSL Last now points to beginning <0290> B12D BD,04,00 DST @PTFBSL,@PTEBSL <0291> B130 A1,04,50 DADD @FAC6,@PTEBSL End points to the end+1 <0292> B133 06,B5,51 CALL SETRW Set PHROM read/write address <0293> B136 06,B5,46 CALL WAIT Wait till no one is speaking <0294> B139 06,B3,1E DIRSPK CALL GETPRM Get next parameter <0295> B13C 71,B0 BS NEXT1 If non-null ASCII string <0296> B13E BD,06,4E DST @FAC4,@PTFCIS Set up pointer to first char <0297> B141 BD,0A,50 DST @FAC6,@PTLCIS Set ptr-to-last-char-in-strin <0298> B144 A1,0A,06 DADD @PTFCIS,@PTLCIS by adding length-of-string <0299> B147 93,0A DDEC @PTLCIS and subtracting 1 <0300> * Make a speech list <0301> B149 06,B5,51 CALL SETRW Set speech read/write addrs <0302> B14C BD,08,06 DST @PTFCIS,@PTCCIS Start at beginning of string <0303> B14F 86,4C CLR @TOTTIM Clear total time delay <0304> B151 06,B3,9B CALL GETTIM Get first timing mark <0305> B154 06,B3,8B CALL TIMING Get any subsequent marks <0306> * The total first time delay is in TOTTIM now <0307> B157 C5,08,0A GB158 DCH @PTLCIS,@PTCCIS While more string <0308> B15A 71,A6 BS GB1A7 <0309> B15C 06,B3,34 CALL PHRASE Get next phrase <0310> * If spell flag is 0, try to look the phrase up. If it <0311> * can not be found, then set the spell flag, and it will be <0312> * spelled out. If found, save on speak list. <0313> B15F 8E,4B CZ @SPLFLG There is a phrase <0314> B161 51,72 BR GB173 <0315> B163 06,B4,30 CALL LOOKUP Try to look it up in the PHRO <0316> B166 8F,4D DCZ @DATAAD If not found then <0317> B168 51,6F BR GB170 <0318> B16A BE,4B,01 ST 1,@SPLFLG Set the spell flag <0319> B16D 51,72 BR GB173 <0320> B16F 06,B5,36 GB170 CALL STDATA Store data in list <0321> * If spell flag is 1, set time delay to >3C, and take the <0322> * phrase one character at a time (spell it). Look up each <0323> * character: if not found, use 'UHOH' data instead. <0324> * Regardless, store data on speak list. <0325> B172 D6,4B,01 GB173 CEQ 1,@SPLFLG Need to spell it out? <0326> B175 51,9F BR GB1A0 <0327> B177 BD,4F,10 DST @PTLCIP,@PTLCIL Est last char to spell out <0328> B17A BE,4C,3C ST >3C,@TOTTIM >3C used because sounds good <0329> * Take each single character <0330> * Skip over any embedded spaces encountered in a phrase <0331> B17D D6,B0,0C GB17E CEQ SPACE,V*PTFCIP B180 20 <0332> B181 51,87 BR GB188 <0333> B183 91,0C DINC @PTFCIP <0334> B185 51,7D BR GB17E <0335> * Set first and last pointers to same one character <0336> B187 BD,10,0C GB188 DST @PTFCIP,@PTLCIP <0337> B18A 06,B4,30 CALL LOOKUP Try to look it up <0338> * If not found, use data to 'UHOH' <0339> B18D 8F,4D DCZ @DATAAD <0340> B18F 51,95 BR GB196 <0341> B191 BF,4D,71 DST >71F4,@DATAAD Put addr of 'UHOH' in 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0051 EQUATES EXEC-359 B194 F4 <0342> B195 06,B5,36 GB196 CALL STDATA Store data on speak list <0343> B198 91,0C DINC @PTFCIP Go on to next character <0344> B19A C5,0C,4F DCH @PTLCIL,@PTFCIP Until done all <0345> B19D 51,7D BR GB17E <0346> * At this point, get next timing group. The first timing <0347> * character has already been found, and it's value is still <0348> * in TIMLEN. Therefore, initiatory call to GETTIM not <0349> * needed. Simply clear TOTTIM and call TIMING. <0350> B19F 86,4C GB1A0 CLR @TOTTIM <0351> B1A1 06,B3,8B CALL TIMING <0352> B1A4 51,57 BR GB158 <0353> * At this point, finished all the phrases in this string. <0354> * TOTTIM should equal >FE, it indicate end of sting If it <0355> * doesn't equal >FE, it indicates that a timing group was <0356> * put on the end of the string. Therefore, save the timing <0357> * group with a null data address to show it is only timing. <0358> B1A6 D6,4C,FE GB1A7 CEQ >FE,@TOTTIM <0359> B1A9 71,B0 BS NEXT1 <0360> B1AB 87,4D DCLR @DATAAD <0361> B1AD 06,B5,36 CALL STDATA <0362> * Next item could be direct string. <0363> B1B0 D6,42,B3 NEXT1 CEQ COMMAZ,@CHAT If direct string present <0364> B1B3 51,CA BR SPEAK <0365> B1B5 06,B3,1E CALL GETPRM Get the next parameter <0366> B1B8 71,C5 BS NEXT2 If non-null direct string <0367> B1BA BE,4C,FF ST >FF,@TOTTIM Mark TOTTIM as direct string <0368> B1BD 0F,77 XML VPUSH Save direct string on stack <0369> B1BF BD,4D,6E DST @VSPTR,@DATAAD Store stack addr on string <0370> B1C2 06,B5,36 CALL STDATA And add to the speak list <0371> * If the next character is a comma, loop thru it again <0372> B1C5 D6,42,B3 NEXT2 CEQ COMMAZ,@CHAT <0373> B1C8 71,39 BS DIRSPK <0374> * If end fall into SPEAK [0018] *********************************************************** [0019] COPY 'DSK5.MYXB5-I' <0001> *********************************************************** <0002> * SPEAK will actually speak the speech list. It tests the <0003> * timing byte to see if it is an >FF. If it is, then the <0004> * data following it points to a direct speech data string <0005> * in VDP. If it is not, then the data following it points <0006> * to a PHROM speech data list. In the first case, this <0007> * routine will issue a speak external command to the PHROM <0008> * and then feed bytes out to the PHROM as it requests them. <0009> * In the second case, the address will be loaded out to the <0010> * PHROM, and then a speak command will be issued. <0011> *********************************************************** <0012> B1CA 06,B5,51 SPEAK CALL SETRW Set read/write address <0013> B1CD C9,00,02 GB1CE DCHE @PTLBSL,@PTFBSL More speech list to go <0014> B1D0 72,57 BS GB258 <0015> B1D2 06,B5,46 CALL WAIT Yes, wait until previous <0016> * speech is though <0017> B1D5 D6,B0,00 CEQ >FF,V*PTFBSL External speech data B1D8 FF <0018> B1D9 71,FD BS GB1FE <0019> B1DB BC,79,B0 ST V*PTFBSL,@TIMER No, load timer B1DE 00 <0020> B1DF 82,79 NEG @TIMER and neg it to correct <0021> B1E1 BD,12,E0 DST V@1(@PTFBSL),@PTFBPH Put addr into PTFBPH B1E4 01,00 <0022> B1E6 A3,00,00 DADD 3,@PTFBSL and skip to next node B1E9 03 <0023> B1EA D2,79,00 LOOP1 CGE 0,@TIMER Wait for time delay <0024> B1ED 51,EA BR LOOP1 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0052 EQUATES EXEC-359 <0025> B1EF 8E,12 CZ @PTFBPH If there is data <0026> B1F1 71,FB BS GB1FC <0027> B1F3 06,B4,EC CALL LOADAD Load the addr to PHROM <0028> B1F6 BE,C0,00 ST >50,@>8300(@WRITE) and issue speak command B1F9 5A,50 <0029> B1FB 52,54 GB1FC BR CONTIN <0030> B1FD 91,00 GB1FE DINC @PTFBSL Speak external, skip over >FF <0031> B1FF BD,5E,B0 DST V*PTFBSL,@PTCBED Set up pointer to 1st byte B202 00 <0032> B203 BD,5E,E0 DST V@4(@PTCBED),@PTCBED in external speech data B206 04,5E <0033> B208 95,00 DINCT @PTFBSL Skip addr bytes <0034> B20A BC,62,EF ST V@-1(@PTCBED),@LENWST Get Len of whole string B20D FF,FF,5E <0035> B210 A6,62,03 DIRSPH SUB 3,@LENWST Minus 3 bytes overhead <0036> * All external speech strings start with a >60 <0037> B213 D6,B0,5E CEQ >60,V*PTCBED Bad speech string B216 60 <0038> B217 4D,EE BR ERRBV <0039> B219 06,B5,46 CALL WAIT Wait for go ahead <0040> B21C 95,5E DINCT @PTCBED Skip spk ext & 1st byte len <0041> B21E BC,60,B0 ST V*PTCBED,@LENCST Get len of current string B221 5E <0042> B222 91,5E DINC @PTCBED Skip len byte to 1st real byt <0043> B224 BE,56,10 ST 16,@TEMP2 Do 1st 16 bytes (fill buff) <0044> B227 BE,C0,00 ST >60,@>8300(@WRITE) Start Speak External B22A 5A,60 <0045> B22C BC,C0,00 LOOPR ST V*PTCBED,@>8300(@WRITE) Write byte to PHROM B22F 5A,B0,5E <0046> B232 91,5E DINC @PTCBED Go to next byte <0047> B234 92,62 DEC @LENWST 1 less char in whole string <0048> B236 72,54 BS CONTIN Finished whole string? <0049> B238 92,60 DEC @LENCST 1 less char in curr string <0050> B23A 72,10 BS DIRSPH Finished current string? <0051> B23C 92,56 DEC @TEMP2 1 less char in this loop <0052> B23E 52,2C BR LOOPR Not finished curr loop yet? <0053> B240 BC,69,C0 GB241 ST @>8300(@READ),@SPKSTS Read status from PHROM B243 00,58 <0054> * If the next statement is true, it means that speak was <0055> * probably interupted and that it is shot at this point. <0056> * Therefore, we are going to quit now. <0057> B245 DA,69,80 CLOG >80,@SPKSTS <0058> B248 72,54 BS CONTIN <0059> B24A DA,69,40 CLOG >40,@SPKSTS Loop till buff below half <0060> B24D 72,40 BS GB241 <0061> B24F BE,56,08 ST 8,@TEMP2 Put 8 more bytes to PHROM <0062> B252 52,2C BR LOOPR and go do these <0063> B254 05,B1,CD CONTIN B GB1CE We've said it all!! <0064> * Now pop all entries off stack that we put on! <0065> B257 0F,78 GB258 XML VPOP Free up a temporary string <0066> B259 D5,6E,4C DCEQ @FAC2,@VSPTR <0067> B25C 52,57 BR GB258 <0068> B25E 50,F1 BR GB0F2 And return to the caller <0069> *********************************************************** <0070> * SPGET subprogram. Load speech data from external device. <0071> * Use standard file I/O <0072> *********************************************************** <0073> B260 D6,42,B7 SPGET CEQ LPARZ,@CHAT Must have left parenthesis <0074> B263 4D,BA BR ERRSYN <0075> B265 06,B5,51 CALL SETRW Set PHROM read/write address <0076> B268 06,B5,46 CALL WAIT Wait till no one is speaking <0077> B26B 06,B3,1E NXTPAR CALL GETPRM Get the next parameter <0078> B26E 8F,50 DCZ @FAC6 If non-null ASCII string <0079> B270 73,17 BS GB318 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0053 EQUATES EXEC-359 <0080> B272 BD,06,4E DST @FAC4,@PTFCIS Pointer to 1st char in string <0081> B275 BD,0A,50 DST @FAC6,@PTLCIS Pointer to last-char-in-strin <0082> B278 A1,0A,06 DADD @PTFCIS,@PTLCIS by adding length-of-string <0083> B27B 93,0A DDEC @PTLCIS and subtracting 1 <0084> B27D 06,B5,51 CALL SETRW Set the speech read/write add <0085> B280 BD,08,06 DST @PTFCIS,@PTCCIS Set curr char to first char <0086> B283 86,4C CLR @TOTTIM Clear total time delay <0087> B285 06,B3,9B CALL GETTIM Get first timing mark <0088> B288 06,B3,8B CALL TIMING Get any subsquent marks <0089> * Get one phrase, and look it up. If the phrase is not foun <0090> * substitute in 'UHOH'. <0091> B28B C5,08,0A DCH @PTLCIS,@PTCCIS Possible phrase <0092> B28E 73,17 BS GB318 <0093> B290 06,B3,34 CALL PHRASE Yes, go get it <0094> B293 D6,4B,01 CEQ 1,@SPLFLG Spell flag set then set <0095> B296 52,9B BR GB29C <0096> B298 BD,10,0C DST @PTFCIP,@PTLCIP last ptr to first (1 char) <0097> B29B 06,B4,30 GB29C CALL LOOKUP Look up the phrase <0098> B29E 8F,4D DCZ @DATAAD If not there, <0099> B2A0 52,A9 BR GB2AA <0100> B2A2 BF,4D,71 DST >71F4,@DATAAD use 'UHOH' data addr B2A5 F4 <0101> B2A6 BE,64,51 ST >51,@STRLEN 'UHOH' data length <0102> * Data must be in PHRADD and PHLEN, so move it <0103> B2A9 BD,01,4D GB2AA DST @DATAAD,@PHRADD <0104> B2AC BC,00,64 ST @STRLEN,@PHLEN <0105> B2AF A2,00,03 ADD 3,@PHLEN For overhead info <0106> * There must be a variable to put this data in. If not, err <0107> B2B2 0F,7E XML SPEED <0108> B2B4 00 BYTE SYNCHK <0109> B2B5 B3 BYTE COMMAZ <0110> B2B6 0F,7A XML SYM Find symbol in table <0111> B2B8 0F,7B XML SMB Evaluate andy subscripts <0112> B2BA 0F,77 XML VPUSH Save for assignment <0113> B2BC 86,0C CLR @BYTES Two byte value <0114> B2BE BC,0D,00 ST @PHLEN,@BYTES+1 Length of string needed <0115> B2C1 0F,71 XML GETSTR Get a string for the data <0116> B2C3 06,B5,51 CALL SETRW Set up speech read/write addr <0117> B2C6 BF,4A,00 DST >001C,@FAC Now build string FAC entry B2C9 1C <0118> B2CA BF,4C,65 DST >6500,@FAC2 String ID B2CD 00 <0119> B2CE BD,4E,1C DST @SREF,@FAC4 Pointer to string <0120> B2D1 BD,50,0C DST @BYTES,@FAC6 Length of string <0121> B2D4 BF,B0,1C DST >6000,V*SREF Mark string as speech data B2D7 60,00 <0122> B2D9 BC,E0,02 ST @PHLEN,V@2(@SREF) Put in string length B2DC 1C,00 <0123> B2DE A7,E0,01 DSUB 3,V@1(@SREF) minus thei info B2E1 1C,00,03 <0124> * LOADAD expects addr to be in PTFBPH, so move it. <0125> B2E4 BD,12,01 DST @PHRADD,@PTFBPH <0126> B2E7 06,B4,EC CALL LOADAD <0127> * Going to copy string from PHROM to VDP. The actual data <0128> * from PHROM is in bit-reversed order, so must reverse the <0129> * order after reading in the order. Remember that 3 bytes <0130> * PHLEN are our own overhead, so don't copy all <0131> B2EA C6,00,03 GB2EB CH 3,@PHLEN <0132> B2ED 53,15 BR GB316 <0133> B2EF BE,C0,00 ST >10,@>8300(@WRITE) Issue read byte command B2F2 5A,10 <0134> B2F4 BC,68,C0 ST @>8300(@READ),@BYTE3 Read the byte B2F7 00,58 <0135> * the following code is somewhat tricky. It will bit 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0054 EQUATES EXEC-359 <0136> * reverse the contents of BYTE3 into BYTE1 through <0137> * BYTE2 by means of word shifts. Note the definition of <0138> * BYTE1 , BYTE2, and BYTE3 in EQU's. You might try an <0139> * example if it isn't clear what is going on. <0140> B2F9 86,67 CLR @BYTE2 <0141> B2FB BE,54,08 ST >08,@TEMP1 <0142> B2FE EB,67,00 RNDAG DSRC 1,@BYTE2 B301 01 <0143> B302 E3,66,00 DSLL 1,@BYTE1 B305 01 <0144> B306 92,54 DEC @TEMP1 <0145> B308 52,FE BR RNDAG <0146> * Store the bit-corrected byte into the string & inc str pt <0147> B30A BC,E0,03 ST @BYTE1,V@3(@SREF) B30D 1C,66 <0148> B30F 91,1C DINC @SREF <0149> B311 92,00 DEC @PHLEN Dec the string length <0150> B313 52,EA BR GB2EB Go do next char if there is o <0151> B315 0F,7C GB316 XML ASSGNV Assign the string to variable <0152> B317 D6,42,B3 GB318 CEQ COMMAZ,@CHAT If more go do <0153> B31A 72,6B BS NXTPAR <0154> B31C 50,F1 BR GB0F2 <0155> *********************************************************** <0156> * GETPAM gets the next string paameter passed to the <0157> * routine. If that parameter is non-exist or null, then <0158> * condition bit is set. If the parameter is there then <0159> * condition bit is reset and the FAC entry describes the <0160> * string. In either case, return with condition is done. <0161> *********************************************************** <0162> B31E 0F,79 GETPRM XML PGMCHR Get next token <0163> B320 D6,42,B3 CEQ COMMAZ,@CHAT Go set condition no parm <0164> B323 73,30 BS SETCB <0165> B325 0F,74 XML PARSE <0166> B327 B6 BYTE RPARZ <0167> B328 D6,4C,65 CEQ >65,@FAC2 If not string, error <0168> B32B 4D,BE BR ERRSNM <0169> B32D 8F,50 DCZ @FAC6 Set cond if null string <0170> B32F 01 RTNC Else return <0171> B330 D4,00,00 SETCB CEQ @>8300,@>8300 Set condition bit <0172> B333 01 RTNC <0173> *********************************************************** <0174> * Get the next phrase out of the current string. The phrase <0175> * may begin with a #, which means it will continue to the <0176> * next #, or it many begin with an ordinary character, in <0177> * which case it will end with the character just before the <0178> * first timing character encountered. In either case, the <0179> * end of the string will indicate a legal end of phrase if <0180> * it occurs before the usual indicator! <0181> *********************************************************** <0182> B334 D6,4A,23 PHRASE CEQ NUMBER,@CCHAR Phrase start with #? <0183> B337 53,6F BR GB370 <0184> B339 91,08 DINC @PTCCIS Yes, inc CC ptr past # <0185> B33B D6,B0,08 GB33C CEQ SPACE,V*PTCCIS Skip spaces B33E 20 <0186> B33F 53,45 BR GB346 <0187> B341 91,08 DINC @PTCCIS <0188> B343 53,3B BR GB33C <0189> B345 D6,B0,08 GB346 CEQ NUMBER,V*PTCCIS All spaces? B348 23 <0190> B349 53,4E BR GB34F <0191> B34B 91,08 DINC @PTCCIS Yes, skip this # too <0192> B34D 00 RTN And ignore this phrase <0193> B34E BD,0C,08 GB34F DST @PTCCIS,@PTFCIP Save 1st char in phrase <0194> B351 91,08 GB352 DINC @PTCCIS Go on to next char 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0055 EQUATES EXEC-359 <0195> * Got to watch for end of string. If encountered before a <0196> * #, act like char after string is #. Then last char will <0197> * be char before, or the last char in the string!! <0198> B353 C5,08,0A DCH @PTLCIS,@PTCCIS <0199> B356 73,61 BS FNDNUM <0200> B358 BC,4A,B0 ST V*PTCCIS,@CCHAR No, get char in CCHAR B35B 08 <0201> B35C D6,4A,23 CEQ NUMBER,@CCHAR If not # continue looking <0202> B35F 53,51 BR GB352 <0203> B361 BD,10,08 FNDNUM DST @PTCCIS,@PTLCIP Last char in phrase is one <0204> B364 93,10 DDEC @PTLCIP before the # <0205> B366 91,08 DINC @PTCCIS Point to char after # <0206> B368 06,B3,9B CALL GETTIM Get 1st timing char after phr <0207> B36B 86,4B CLR @SPLFLG Indicate don't spell <0208> B36D 53,8A BR GB38B No # as 1st char in phrase <0209> B36F BD,0C,08 GB370 DST @PTCCIS,@PTFCIP Curr char is 1st char phrase <0210> B372 86,4B CLR @SPLFLG Assume don't spell <0211> B374 CA,4A,41 CHE >41,@CCHAR If not alphabetic (>41="A") <0212> B377 73,7B BS GB37C <0213> B379 90,4B INC @SPLFLG set spell flag <0214> * Need to find end of phrase, which is char before next <0215> * timing char we find. Therefore, look for a timing char! <0216> B37B 91,08 GB37C DINC @PTCCIS <0217> B37D 06,B3,9B CALL GETTIM <0218> B380 D6,51,FF CEQ >FF,@TIMLEN If not timing, loop <0219> B383 73,7B BS GB37C <0220> B385 BD,10,08 DST @PTCCIS,@PTLCIP Char before curr char is <0221> B388 93,10 DDEC @PTLCIP the last char in phrase <0222> B38A 00 GB38B RTN <0223> *********************************************************** <0224> * TIMING will loop through chars in string until it finds <0225> * non-timing char. Non-timing chars have TIMLEN values of <0226> * >FE or >FF. GETTIM must be called before this routine to <0227> * establish a correct value of TIMLEN. Also, most likely <0228> * TOTTIM should have been cleared. <0229> *********************************************************** <0230> B38B CA,51,FE TIMING CHE >FE,@TIMLEN <0231> B38E 73,9A BS GB39B <0232> B390 A1,4C,51 DADD @TIMLEN,@TOTTIM <0233> B393 91,08 DINC @PTCCIS <0234> B395 06,B3,9B CALL GETTIM <0235> B398 53,8B BR TIMING <0236> B39A 00 GB39B RTN <0237> *********************************************************** <0238> * GETTIM will examine the current char in the string and <0239> * set TIMLEN to the appropriate time delay value. TIMLEN <0240> * can take on the following values: <0241> * >00 if char is timing '+' <0242> * >06 if char is timing ' ' <0243> * >0C if char is timing '-' <0244> * >12 if char is timing ',' <0245> * >1E if char is timing ';' <0246> * >30 if char is timing ':' <0247> * >3C if char is timing '.' <0248> * >FE if char is out of stirng bounds <0249> * >FF if char is not timing <0250> * Note that to test timing, some manipulation of PTCCIS <0251> * would be neccesary, so it is stored and used in TEMP1 <0252> *********************************************************** <0253> B39B BC,4A,B0 GETTIM ST V*PTCCIS,@CCHAR Get the char B39E 08 <0254> B39F BD,54,08 DST @PTCCIS,@TEMP1 store curr ptr in TEMP1 <0255> B3A2 C5,54,0A DCH @PTLCIS,@TEMP1 out of string bounds? <0256> B3A5 53,AB BR GB3AC 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0056 EQUATES EXEC-359 <0257> B3A7 BE,51,FE ST >FE,@TIMLEN Yes, load value and return <0258> B3AA 00 RTN <0259> B3AB C6,4A,3B GB3AC CH SEMICO,@CCHAR Can not be timing <0260> B3AE 74,15 BS NOTIME <0261> B3B0 D6,4A,20 CEQ SPACE,@CCHAR <0262> B3B3 53,C4 BR GB3C5 <0263> B3B5 BE,51,06 ST 6,@TIMLEN <0264> B3B8 D6,E0,01 GB3B9 CEQ SPACE,V@1(@PTCCIS) While spaces B3BB 08,20 <0265> B3BD 53,C3 BR GB3C4 <0266> B3BF 91,08 DINC @PTCCIS Skip them <0267> B3C1 53,B8 BR GB3B9 <0268> B3C3 00 GB3C4 RTN <0269> B3C4 D6,4A,2B GB3C5 CEQ PLUS,@CCHAR <0270> B3C7 53,D3 BR GB3D4 <0271> B3C9 91,54 DINC @TEMP1 Need to test the next char <0272> B3CB 06,B4,19 CALL NUMERC Is it numeric <0273> B3CE 74,15 BS NOTIME Was numeric => not timing cha <0274> B3D0 86,51 CLR @TIMLEN Not numeric => set as no timi <0275> B3D2 00 RTN <0276> B3D3 D6,4A,2C GB3D4 CEQ COMMAT,@CCHAR <0277> B3D6 53,DC BR GB3DD <0278> B3D8 BE,51,12 ST >12,@TIMLEN <0279> B3DB 00 RTN <0280> B3DC D6,4A,2E GB3DD CEQ PERIOD,@CCHAR <0281> B3DF 53,F3 BR GB3F4 <0282> B3E1 93,54 DDEC @TEMP1 Go back to preceding char <0283> B3E3 06,B4,19 CALL NUMERC Is it numeric? <0284> B3E6 53,EF BR PTIME No, so it is timing <0285> B3E8 95,54 DINCT @TEMP1 Yes, on to following char <0286> B3EA 06,B4,19 CALL NUMERC Is it numeric too? <0287> B3ED 74,15 BS NOTIME Yes, both numeric => not timi <0288> B3EF BE,51,3C PTIME ST >3C,@TIMLEN Both not numeric => timing <0289> B3F2 00 RTN <0290> B3F3 D6,4A,2D GB3F4 CEQ HYPEN,@CCHAR <0291> B3F6 54,03 BR GB404 <0292> B3F8 91,54 DINC @TEMP1 Check next char <0293> B3FA 06,B4,19 CALL NUMERC Is it numeric? <0294> B3FD 74,15 BS NOTIME Was numeric => not a timing c <0295> B3FF BE,51,0C ST >0C,@TIMLEN Was not numeric => set as tim <0296> B402 00 RTN <0297> B403 D6,4A,3A GB404 CEQ COLON,@CCHAR <0298> B406 54,0C BR GB40D <0299> B408 BE,51,30 ST >30,@TIMLEN <0300> B40B 00 RTN <0301> B40C D6,4A,3B GB40D CEQ SEMICO,@CCHAR <0302> B40F 54,15 BR NOTIME <0303> B411 BE,51,1E ST >1E,@TIMLEN <0304> B414 00 RTN <0305> B415 BE,51,FF NOTIME ST >FF,@TIMLEN Set as no timing char present <0306> B418 00 RTN <0307> *********************************************************** <0308> * NUMERC tests the char pointed to by PTCCIS and verifies <0309> * the following: <0310> * 1 - it is within the current string boundaries <0311> * 2 - it is numeric (i.e. between '0' and '9') <0312> * If both of the above conditions are true, COND is set <0313> * upon return, otherwise COND is reset <0314> *********************************************************** <0315> B419 C5,54,0A NUMERC DCH @PTLCIS,@TEMP1 <0316> B41C 74,2F BS GB430 <0317> B41E C5,06,54 DCH @TEMP1,@PTFCIS <0318> B421 74,2F BS GB430 <0319> B423 CA,B0,54 CHE >30,V*TEMP1 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0057 EQUATES EXEC-359 B426 30 <0320> B427 54,2F BR GB430 <0321> B429 C6,B0,54 CH >39,V*TEMP1 B42C 39 <0322> B42D 53,30 BR SETCB <0323> B42F 01 GB430 RTNC <0324> *********************************************************** <0325> * LOOKUP is a prolong routine to SEARCH. In each PHROM, <0326> * there may be 2 trees, one starting at >0000 and the other <0327> * at >8000. Either may or may not be present. Presences is <0328> * determined if a >AA byte is at the starting location. <0329> * LOOKUP determines if the tree at >0000 is in, and if so, <0330> * calls SEARCH with that addr. If that tree is not present <0331> * or the phrase couldn't be found in it, LOOKUP then checks <0332> * if the tree at >8000 is present, and again, if so, calls <0333> * SEARCH with that tree address. If the word was found in <0334> * the first tree, or after searching the second tree, the <0335> * routine will return. <0336> *********************************************************** <0337> B430 87,66 LOOKUP DCLR @BYTE1 BYTE1 contains addr of curr t <0338> B432 BD,12,66 TRYAGN DST @BYTE1,@PTFBPH Look for >AA tree header <0339> B435 06,B4,EC CALL LOADAD LOADAD expects addr in PTFBPH <0340> B438 BE,C0,00 ST >10,@>8300(@WRITE) Put out read byte command B43B 5A,10 <0341> B43D D6,C0,00 CEQ >AA,@>8300(@READ) Tree out there? B440 58,AA <0342> B442 54,4D BR GB44E <0343> B444 91,12 DINC @PTFBPH Skip the tree header <0344> B446 06,B4,58 CALL SEARCH Go search this PHROM tree <0345> B449 8F,4D DCZ @DATAAD Phrase found => exit <0346> B44B 54,57 BR FOUND <0347> B44D A3,66,80 GB44E DADD >8000,@BYTE1 Go to start of next PHROM tre B450 00 <0348> * Note >8000 + >8000 = >0000 => tried both trees <0349> B451 8F,66 DCZ @BYTE1 <0350> B453 54,32 BR TRYAGN <0351> B455 87,4D DCLR @DATAAD Didnt find phrase in either t <0352> B457 00 FOUND RTN <0353> *********************************************************** <0354> * SEARCH actually searches the PHROM tree for the phrase. <0355> * The PHROM tree organization is as follows: <0356> * (i.e. this is one phrase node) <0357> * phrase ASCII length 1 byte <0358> * actual ASCII characters n bytes <0359> * less then pointer 2 bytes <0360> * greater then pointer 2 bytes <0361> * speech data pointer 3 bytes <0362> * speech data length 1 byte <0363> * The comparison of two words proceeds on a char by char <0364> * basis, where length is secondary to char values, i.e. <0365> * move > answer; number < we; eight < eighty; etc... <0366> *********************************************************** <0367> B458 06,B4,EC SEARCH CALL LOADAD Set PHROM to start phrase nod <0368> B45B BE,C0,00 ST >10,@>8300(@WRITE) Issue read byte command B45E 5A,10 <0369> B460 86,16 CLR @PTLCPH Length of phrase => PTLCPH <0370> B462 BC,17,C0 ST @>8300(@READ),@PTLCPH+1 (stored as 2 byte value B465 00,58 <0371> B467 A1,16,12 DADD @PTFBPH,@PTLCPH Add front ptr giving end ptr <0372> B46A BD,14,12 DST @PTFBPH,@PTCCPH Set up curr char as 1 beyond <0373> B46D 91,14 DINC @PTCCPH length byte <0374> B46F BD,0E,0C DST @PTFCIP,@PTCCIP Reset current ptr into phrase <0375> * Compare two characters <0376> B472 BE,C0,00 NEXT ST >10,@>8300(@WRITE) Issue read byte command 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0058 EQUATES EXEC-359 B475 5A,10 <0377> B477 BC,5D,C0 ST @>8300(@READ),@PHDATA Get char in from PHROM B47A 00,58 <0378> B47C D4,5D,B0 CEQ V*PTCCIP,@PHDATA Compare the char B47F 0E <0379> B480 54,D0 BR GB4D1 <0380> B482 91,14 DINC @PTCCPH Equal, advance both pointers <0381> B484 91,0E DINC @PTCCIP <0382> B486 D6,B0,0E CEQ SPACE,V*PTCCIP Skip extra spaces B489 20 <0383> B48A 54,A0 BR GB4A1 <0384> B48C D6,E0,01 GB48D CEQ SPACE,V@1(@PTCCIP) While spaces B48F 0E,20 <0385> B491 54,97 BR GB498 <0386> B493 91,0E DINC @PTCCIP Skip them <0387> B495 54,8C BR GB48D <0388> * By skipping extra spaces, might have reached end of phras <0389> * If this is true, next char in phrase = #. If so, advance <0390> * the pointer to be beyond end of phrase. <0391> B497 D6,E0,01 GB498 CEQ NUMBER,V@1(@PTCCIP) B49A 0E,23 <0392> B49C 54,A0 BR GB4A1 <0393> B49E 91,0E DINC @PTCCIP <0394> B4A0 C5,14,16 GB4A1 DCH @PTLCPH,@PTCCPH End of PHROM word? <0395> B4A3 54,C5 BR GB4C6 <0396> B4A5 C5,0E,10 DCH @PTLCIP,@PTCCIP Yes, end of phrase <0397> B4A8 54,BF BR GB4C0 <0398> B4AA BD,12,16 DST @PTLCPH,@PTFBPH Yes, word found <0399> * Skip 5 bytes down from last char to data pointer <0400> B4AD A3,12,00 DADD 6,@PTFBPH B4B0 06 <0401> B4B1 06,B5,1E CALL READAD Set data addr => DATAAD <0402> B4B4 BE,C0,00 ST >10,@>8300(@WRITE) Issue read byte command B4B7 5A,10 <0403> B4B9 BC,64,C0 ST @>8300(@READ),@STRLEN Get length of speech data B4BC 00,58 <0404> B4BE 00 RTN <0405> B4BF BF,12,00 GB4C0 DST 3,@PTFBPH Move 3 bytes past PTLCPH B4C2 03 <0406> B4C3 54,DC BR NXTPHR <0407> B4C5 C5,0E,10 GB4C6 DCH @PTLCIP,@PTCCIP 2 characters <0408> B4C8 54,72 BR NEXT <0409> B4CA BF,12,00 DST 1,@PTFBPH Phrase linger: use LT ptr B4CD 01 <0410> B4CE 54,DC BR NXTPHR <0411> * Two characters compared were not equal <0412> B4D0 BF,12,00 GB4D1 DST 3,@PTFBPH 3 bytes past last to GT B4D3 03 <0413> B4D4 C4,5D,B0 CH V*PTCCIP,@PHDATA After phrase B4D7 0E <0414> B4D8 54,DC BR NXTPHR <0415> B4DA 97,12 DDECT @PTFBPH Back up 2 bytes to LT link <0416> * Go get next phrase out of the PHROM to compare <0417> B4DC A1,12,16 NXTPHR DADD @PTLCPH,@PTFBPH Add displacement to last char <0418> B4DF 06,B5,1E CALL READAD and get the new address <0419> B4E2 8F,4D DCZ @DATAAD More leaves on this tree <0420> B4E4 54,E7 BR GB4E8 <0421> B4E6 00 RTN No, return empty handed <0422> B4E7 BD,12,4D GB4E8 DST @DATAAD,@PTFBPH Store new addr in PTFBPH <0423> B4EA 54,58 BR SEARCH Go compare this new word! <0424> * The program should never reach this point!! It should <0425> * return somewhere up above. <0426> *********************************************************** <0427> * LOADAD will set the addr out in the PHROM to the addr 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0059 EQUATES EXEC-359 <0428> * found in PTFBPH. Note that the PHROM is expecting five <0429> * nybbles to be written out as the address. <0430> *********************************************************** <0431> B4EC BD,54,12 LOADAD DST @PTFBPH,@TEMP1 This is destructive, so copy <0432> B4EF BD,56,12 DST @PTFBPH,@TEMP2 address into temporary areas <0433> B4F2 E6,54,04 SRL 4,@TEMP1 Isolate the MSN of the MSB <0434> B4F5 E6,55,04 SRL 4,@TEMP1+1 Isolate the MSN of the LSB <0435> B4F8 B3,56,0F DAND >0F0F,@TEMP2 Isolate the LSN of the MSB, L B4FB 0F <0436> B4FC B7,54,40 DOR >4040,@TEMP1 Include a 4 as MSN of all 4 n B4FF 40 <0437> B500 B7,56,40 DOR >4040,@TEMP2 to indicate a Load Address C B503 40 <0438> B504 BC,C0,00 ST @TEMP2+1,@>8300(@WRITE) Write out the LSN of th B507 5A,57 <0439> B509 BC,C0,00 ST @TEMP1+1,@>8300(@WRITE) Write out the LSN of th B50C 5A,55 <0440> B50E BC,C0,00 ST @TEMP2,@>8300(@WRITE) Write out the MSN of th B511 5A,56 <0441> B513 BC,C0,00 ST @TEMP1,@>8300(@WRITE) Write out the MSN of th B516 5A,54 <0442> B518 BE,C0,00 ST >40,@>8300(@WRITE) Write out 0 as fifth ny B51B 5A,40 <0443> B51D 00 RTN <0444> *********************************************************** <0445> * READAD will read an address from the PHROM and store it <0446> * in DATAAD. Note that PTFBPH should contain the addr of <0447> * the PHROM location to be read so LOADAD will work. <0448> *********************************************************** <0449> B51E 06,B4,EC READAD CALL LOADAD Set the addr of the PHROM <0450> B521 BE,C0,00 ST >10,@>8300(@WRITE) Get high byte of addr B524 5A,10 <0451> B526 BC,4D,C0 ST @>8300(@READ),@DATAAD Stroe it in DATAAD B529 00,58 <0452> B52B BE,C0,00 ST >10,@>8300(@WRITE) Get low byte of addr B52E 5A,10 <0453> B530 BC,4E,C0 ST @>8300(@READ),@DATAAD+1 Store it in DATAAD+1 B533 00,58 <0454> B535 00 RTN [0020] *********************************************************** [0021] COPY 'DSK5.MYXB5-J' <0001> *********************************************************** <0002> * STDATA will store the data in DATAAD and TOTTIM onto the <0003> * speech list. It will also check that there is room on the <0004> * speech list for this entry, and abort with error if not. <0005> *********************************************************** <0006> B536 D5,02,04 STDATA DCEQ @PTEBSL,@PTLBSL Is there room? <0007> B539 75,58 BS ERRSSL <0008> B53B 35,00,03 MOVE 3,@TOTTIM,V*PTLBSL Put data in list B53E B0,02,4C <0009> B541 A3,02,00 DADD 3,@PTLBSL and inc top of list B544 03 <0010> B545 00 RTN <0011> *********************************************************** <0012> * WAIT loops until the speech peripheral goes idle. <0013> *********************************************************** <0014> * ( Loop until nobody is talking) <0015> B546 BC,69,C0 WAIT ST @>8300(@READ),@SPKSTS Read status from PHROM B549 00,58 <0016> B54B DA,69,80 CLOG >80,@SPKSTS <0017> B54E 55,46 BR WAIT <0018> B550 00 RTN <0019> *********************************************************** <0020> * SETRW moves addrs of speech read/write from GROM to VDP 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0060 EQUATES EXEC-359 <0021> *********************************************************** <0022> B551 31,00,04 SETRW MOVE 4,G@>0046,@READ B554 58,00,46 <0023> B557 00 RTN <0024> *********************************************************** <0025> * ERROR MESSAGES <0026> *********************************************************** <0027> * The following calls are in EXECS file. <0028> * ERRSYN CALL ERRZZ * SYNTAX ERROR <0029> * BYTE 3 <0030> * ERRSNM CALL ERRZZ * STRING-NUMBER MISMATCH <0031> * BYTE 7 <0032> * ERRBV CALL ERRZZ * BAD VALUE <0033> * BYTE 30 <0034> * ERRIAL CALL ERRZZ * INCORRECT ARGUMENT LIST <0035> * BYTE 31 <0036> *********************************************************** <0037> B558 06,6A,84 ERRSSL CALL ERRZZ * SPEECH STRING TOO LONG <0038> B55B 15 BYTE 21 <0039> *********************************************************** <0040> * RXB <0041> * GCHAR PATCH FOR COMMA <0042> B55C D6,42,B3 GCHARA CEQ COMMAZ,@CHAT ,? <0043> B55F 68,FA BS GCHAR <0044> B561 4B,17 BR XPTRTN <0045> <0046> * MOTION PATCH for GO and STOP <0047> B563 0F,79 SPGS XML PGMCHR ( or , <0048> B565 D6,42,EC CEQ ALLZ,@CHAT ALL? <0049> B568 55,90 BR SPGS1 No. <0050> B56A 0F,79 XML PGMCHR Skip ALL <0051> B56C 0F,79 XML PGMCHR Skip , <0052> B56E BF,4A,00 DST 1,@FAC First sprite B571 01 <0053> B572 06,B0,5A CALL SPNUM5 Get sprite table <0054> B575 06,B0,9B CALL SPMOVE Store velocity <0055> B578 BE,4A,1C ST 28,@FAC Last sprite <0056> B57B 87,00 DCLR @VAR0 Index <0057> B57D 35,00,02 SPGSA MOVE 2,V@>0780,V@>0780(@VAR0) B580 E7,80,00 B583 A7,80 <0058> B585 A3,00,00 DADD 4,@VAR0 Index +4 B588 04 <0059> B589 92,4A DEC @FAC Sprite -1 <0060> B58B 55,7D BR SPGSA Done? <0061> B58D 05,AF,96 B SPRMV4 No. <0062> B590 D6,42,FD SPGS1 CEQ NUMBEZ,@CHAT #? <0063> B593 55,9B BR SPGS2 No. <0064> B595 06,B0,4A CALL SPNUM6 Standard routine. <0065> B598 05,AF,93 B SPRMV3 <0066> B59B D6,42,85 SPGS2 CEQ GOZ,@CHAT GO? <0067> B59E 55,A7 BR SPGS3 No. <0068> B5A0 B2,80,C2 AND >BF,@>83C2 GO!!! B5A3 BF <0069> B5A4 05,B5,B0 B SPGS4 Done. <0070> B5A7 D6,42,98 SPGS3 CEQ STOPZ,@CHAT STOP? <0071> B5AA 4D,BA BR ERRSYN No <0072> B5AC B6,80,C2 OR >40,@>83C2 STOP!!! B5AF 40 <0073> B5B0 0F,79 SPGS4 XML PGMCHR Skip GO or STOP <0074> B5B2 05,AF,96 B SPRMV4 <0075> *********************************************************** <0076> [0022] *********************************************************** 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0061 EQUATES EXEC-359 [0023] COPY 'DSK5.MYXB5-K' <0001> *********************************************************** <0002> * RXB <0003> ************************** <0004> B5B5 00 SUBRTN RTN <0005> ************************** <0006> B5B6 0F,79 STRFCH XML PGMCHR <0007> B5B8 0F,74 XML PARSE <0008> B5BA B6 BYTE >B6 <0009> B5BB 00 RTN <0010> B5BC 06,B5,B6 STRGET CALL STRFCH <0011> B5BF D6,4C,65 CEQ >65,@FAC2 <0012> B5C2 4D,BE BR ERRSNM * STRING NUM MISMATCH <0013> B5C4 00 RTN <0014> B5C5 06,B5,B6 NUMFCH CALL STRFCH <0015> B5C8 D6,4C,65 CEQ >65,@FAC2 <0016> B5CB 6D,BE BS ERRSNM * STRING NUM MISMATCH <0017> B5CD 00 RTN <0018> B5CE 0F,12 CFIFCH XML CFI <0019> B5D0 D6,54,03 CEQ >03,@FAC+10 <0020> B5D3 6D,EE BS ERRBV * NUMERIC OVERFLOW <0021> B5D5 00 RTN <0022> B5D6 06,B6,4D GETNUM CALL SUBLP3 <0023> B5D9 D6,42,B3 CEQ >B3,@CHAT <0024> B5DC 4D,BA BR ERRSYN <0025> B5DE 00 RTN <0026> B5DF 06,B5,D6 ROWCOL CALL GETNUM <0027> B5E2 CF,4A,00 DCGT 24,@FAC B5E5 18 <0028> B5E6 6D,EE BS ERRBV <0029> B5E8 93,4A DDEC @FAC <0030> B5EA BC,02,7F ST @XPT,@MNUM <0031> B5ED BC,7E,4B ST @FAC1,@YPT <0032> B5F0 06,B5,D6 CALL GETNUM <0033> B5F3 CF,4A,00 DCGT 32,@FAC B5F6 20 <0034> B5F7 6D,EE BS ERRBV <0035> B5F9 93,4A DDEC @FAC <0036> B5FB BC,7F,4B ST @FAC1,@XPT <0037> B5FE 00 RTN <0038> B5FF 0F,79 NGOOD XML PGMCHR <0039> B601 CA,42,80 NGOOD1 CHE >80,@CHAT <0040> B604 6D,BA BS ERRSYN * ? <0041> B606 06,B6,1A CALL SNDER <0042> B609 D6,4C,65 CEQ >65,@FAC2 <0043> B60C 4D,BE BR ERRSNM * STRING NUMBER MISMATCH <0044> B60E BF,4A,00 DST >001C,@FAC B611 1C <0045> B612 BD,4E,1C DST @SREF,@FAC4 <0046> B615 BD,50,0C DST @BYTES,@FAC6 <0047> B618 56,23 BR SNDASS <0048> B61A 0F,7A SNDER XML SYM <0049> B61C 0F,7B XML SMB <0050> B61E 0F,77 XML VPUSH <0051> B620 00 RTN <0052> B621 0F,80 CIFSND XML CIF <0053> B623 0F,7C SNDASS XML ASSGNV <0054> B625 00 RTN <0055> B626 BC,00,7D GETLP ST @CB,@VAR0 <0056> B629 BC,01,7D ST @CB,@VARV <0057> B62C A6,01,60 SUB OFFSET,@VARV <0058> B62F BC,E0,00 ST @VARV,V@0(@STRPTR) B632 12,01 <0059> B634 91,12 DINC @STRPTR 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0062 EQUATES EXEC-359 <0060> B636 00 RTN <0061> B637 BC,00,E0 PUTLP ST V@0(@FAC4),@VAR0 B63A 00,4E <0062> B63C A2,00,60 ADD OFFSET,@VAR0 <0063> B63F 91,4E DINC @FAC4 <0064> B641 00 RTN <0065> B642 08 HFMT FMT <0066> B643 E0,00 DATA >E000 <0067> B645 FB FEND <0068> B646 00 RTN <0069> B647 08 VFMT FMT <0070> B648 E0,00 DATA >E000 <0071> B64A 9E BYTE >9E <0072> B64B FB FEND <0073> B64C 00 RTN <0074> B64D 06,B5,C5 SUBLP3 CALL NUMFCH <0075> B650 06,B5,CE CALL CFIFCH <0076> B653 00 RTN <0077> B654 86,4A CLRFAC CLR @FAC <0078> B656 35,00,07 MOVE 7,@FAC,@FAC1 B659 4B,4A <0079> B65B 00 RTN <0080> ************************** <0081> B65C 06,6A,84 ERRFE CALL ERRZZ * <0082> B65F 22 BYTE 34 * <0083> B660 CB,00,01 DSKDSR DCHE 256,@VAR0 * B663 00 <0084> B664 56,6B BR DSRDSS * <0085> B666 A2,8F,80 ADD >10,@>03C1 * B669 C1,10 <0086> B66B BF,56,03 DSRDSS DST >03C0,@FAC12 * B66E C0 <0087> B66F 06,00,10 CALL LINK * <0088> B672 0A BYTE >0A * <0089> B673 BC,0B,7C ST @>837C,@VAR2 * <0090> B676 E6,50,04 SRL 4,@FAC6 * <0091> B679 8E,50 CZ @FAC6 * <0092> B67B 56,5C BR ERRFE * <0093> B67D D6,0B,20 CEQ >20,@VAR2 * <0094> B680 76,5C BS ERRFE * <0095> B682 00 RTN * <0096> *********************************************************** <0097> * RXB <0098> *********************************************************** <0099> B683 06,AC,26 ZKEY CALL KEY * KEY <0100> B686 D6,42,B3 KEYAGN CEQ COMMAZ,@CHAT * <0101> B689 76,83 BS ZKEY * <0102> B68B 4B,1A BR LNKRTN * <0103> ************************** <0104> B68D 06,AC,6B ZJOYST CALL JOYST * JOYST <0105> B690 D6,42,B3 JOYAGN CEQ COMMAZ,@CHAT * <0106> B693 4B,1A BR LNKRTN * <0107> B695 06,B6,F7 CALL CPAR2 * <0108> B698 06,AC,6E CALL GAC16 * <0109> B69B 56,90 BR JOYAGN * <0110> ***************************** <0111> B69D D6,42,B7 SPAR CEQ LPARZ,@CHAT (? <0112> B6A0 76,A7 BS SPAR1 Yes. <0113> B6A2 D6,42,B3 CEQ COMMAZ,@CHAT ,? <0114> B6A5 4D,BA BR ERRSYN No. <0115> B6A7 0F,79 SPAR1 XML PGMCHR Skip ( or , <0116> B6A9 0F,74 XML PARSE Get string or value. <0117> B6AB B6 BYTE RPARZ <0118> B6AC D6,4C,65 CEQ >65,@FAC2 String? 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0063 EQUATES EXEC-359 <0119> B6AF 56,BF BR SPAR2 No. <0120> B6B1 BD,04,4E DST @FAC4,@>8304 Save address. <0121> B6B4 BD,06,50 DST @FAC6,@>8306 Save length. <0122> B6B7 BF,10,99 DST >994A,@>8310 Set flag. B6BA 4A <0123> B6BB 06,AC,89 CALL LPAR <0124> B6BE 00 RTN <0125> B6BF 0F,7E SPAR2 XML SPEED <0126> B6C1 00 BYTE SYNCHK <0127> B6C2 B3 BYTE COMMAZ <0128> B6C3 00 RTN <0129> ***************************** <0130> B6C4 D7,10,99 KEYSTR DCEQ >994A,@>8310 Flag set? B6C7 4A <0131> B6C8 56,E6 BR RSCAN3 No. <0132> B6CA 03 RSCAN SCAN Any key? <0133> B6CB 56,CA BR RSCAN No. <0134> B6CD 8F,06 DCZ @>8306 Length 0? <0135> B6CF 76,E7 BS RSCAN4 Yes. <0136> B6D1 BD,08,04 DST @>8304,@>8308 String address. <0137> B6D4 BD,02,06 DST @>8306,@>8302 Copy length. <0138> B6D7 D4,75,B0 RSCAN2 CEQ V*>8308,@RKEY Same? B6DA 08 <0139> B6DB 76,EC BS RSCAN5 Yes. <0140> B6DD 91,08 DINC @>8308 Address +1 <0141> B6DF 93,02 DDEC @>8302 Length -1 <0142> B6E1 56,D7 BR RSCAN2 No matcth. <0143> B6E3 05,B6,CA B RSCAN Restart. <0144> B6E6 03 RSCAN3 SCAN Normal key scan. <0145> B6E7 86,74 RSCAN4 CLR @KEYBD <0146> B6E9 87,10 DCLR @>8310 Clear flag. <0147> B6EB 01 RTNC <0148> B6EC 06,B6,E7 RSCAN5 CALL RSCAN4 <0149> B6EF D4,8F,7D CEQ @0,@0 Force condition bit on. B6F2 00,8F,7D B6F5 00 <0150> B6F6 01 RTNC <0151> ***************************** <0152> B6F7 0F,7E CPAR2 XML SPEED * Similar to LPAR <0153> B6F9 00,B3 DATA COMMAZ * Syntax check , <0154> B6FB 4C,98 BR GAC35 * Parse value <0155> ***************************** <0156> B6FD 06,AF,40 ZSCOI CALL SPRCOI * COINC <0157> B700 D6,42,B3 COINLP CEQ >B3,@CHAT * <0158> B703 4B,1A BR LNKRTN * <0159> B705 0F,79 XML PGMCHR * <0160> B707 06,AF,56 CALL GAF56 * <0161> B70A 57,00 BR COINLP * <0162> ************************** <0163> B70C 06,B0,F4 NR CALL PREPN * <0164> B70F 0F,7C AR XML ASSGNV * <0165> B711 00 RTN * <0166> ************************** <0167> B712 06,AF,C1 ZSDIST CALL DIST * DISTANCE <0168> B715 D6,42,B3 DISLP CEQ >B3,@CHAT * <0169> B718 4B,1A BR LNKRTN * <0170> B71A 06,AF,C4 CALL GAFC4 * <0171> B71D 57,15 BR DISLP * <0172> *********************************************************** <0173> B71F B7,62 LINKSD DATA LINKSE <0174> B721 07,47,4D STRI 'GMOTION' B724 4F,54,49 B727 4F,4E <0175> B729 B7,2B DATA $+2 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0064 EQUATES EXEC-359 <0176> B72B 06,B0,42 CALL SPNUM1 GMOTOIN <0177> B72E 06,B0,48 GMAGN CALL SPNUM2 <0178> B731 BE,54,02 ST >02,@TEMP1 <0179> B734 BD,56,E4 DST V@>0480(@SPSAL),@TEMP2 B737 80,08 <0180> B739 06,B0,F4 GMO1 CALL PREPN <0181> B73C BC,4B,56 ST @TEMP2,@FAC+1 <0182> B73F C6,4B,7F CH >7F,@FAC+1 <0183> B742 57,48 BR GMO2 <0184> B744 82,4B NEG @FAC+1 <0185> B746 83,4A DNEG @FAC <0186> B748 06,B6,21 GMO2 CALL CIFSND <0187> B74B D6,54,01 CEQ >01,@TEMP1 <0188> B74E 77,54 BS GMO3 <0189> B750 0F,7E XML SPEED <0190> B752 00,B3 DATA >00B3 <0191> B754 C0,57,56 GMO3 EX @TEMP2,@TEMP2+1 <0192> B757 92,54 DEC @TEMP1 <0193> B759 57,39 BR GMO1 <0194> B75B D6,42,B3 CEQ >B3,@CHAT <0195> B75E 77,2E BS GMAGN <0196> B760 4B,1A BR LNKRTN <0197> ************************** <0198> B762 B7,D1 LINKSE DATA LINKSF <0199> B764 07,52,4D STRI 'RMOTION' B767 4F,54,49 B76A 4F,4E <0200> B76C B7,6E DATA $+2 <0201> B76E 06,B0,42 CALL SPNUM1 * RMOTION <0202> B771 0F,79 RMAGN XML PGMCHR <0203> B773 D6,42,EC CEQ >EC,@CHAT <0204> B776 57,88 BR NOALL <0205> B778 0F,7E XML SPEED <0206> B77A 00,EC DATA >00EC <0207> B77C BF,00,00 DST >001C,@VAR0 B77F 1C <0208> B780 BD,4A,00 NXALL DST @VAR0,@FAC <0209> B783 06,B0,5A CALL SPNUM5 <0210> B786 57,97 BR RMALL <0211> B788 BF,00,00 NOALL DST >0001,@VAR0 B78B 01 <0212> B78C D6,42,FD CEQ >FD,@CHAT <0213> B78F 4D,BA BR ERRSYN <0214> B791 06,B5,C5 CALL NUMFCH <0215> B794 06,B0,54 CALL SPNUM4 <0216> B797 BD,54,E4 RMALL DST V@>0480(@SPSAL),@TEMP1 B79A 80,08 <0217> B79C BE,56,02 ST >02,@TEMP2 <0218> B79F 8E,54 RMOTLP CZ @TEMP1 <0219> B7A1 77,B3 BS J2 <0220> B7A3 D6,54,80 CEQ >80,@TEMP1 <0221> B7A6 77,BF BS J3 <0222> B7A8 C6,54,7F CH >7F,@TEMP1 <0223> B7AB 77,B1 BS J1 <0224> B7AD 82,54 NEG @TEMP1 <0225> B7AF 57,B3 BR J2 <0226> B7B1 80,54 J1 ABS @TEMP1 <0227> B7B3 C0,55,54 J2 EX @TEMP1,@TEMP1+1 <0228> B7B6 92,56 DEC @TEMP2 <0229> B7B8 57,9F BR RMOTLP <0230> B7BA BD,E4,80 DST @TEMP1,V@>0480(@SPSAL) B7BD 08,54 <0231> B7BF 93,00 J3 DDEC @VAR0 <0232> B7C1 57,80 BR NXALL 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0065 EQUATES EXEC-359 <0233> B7C3 D6,42,B3 CEQ >B3,@CHAT <0234> B7C6 77,71 BS RMAGN <0235> B7C8 4B,1A BR LNKRTN <0236> ***************************************** <0237> B7CA 0F,7E S1ET9F XML SPEED * CHECK FROM <0238> B7CC 02,1E DATA >021E * 30 TO 159 <0239> B7CE 00,9F DATA >009F * <0240> B7D0 00 RTN * <0241> ***************************************** <0242> B7D1 B8,25 LINKSF DATA LINK10 <0243> B7D3 07,49,4E STRI 'INVERSE' B7D6 56,45,52 B7D9 53,45 <0244> B7DB B7,DD DATA $+2 <0245> B7DD 06,B0,42 CALL SPNUM1 INVERSE(CHAR#) <0246> B7E0 0F,79 INVAGN XML PGMCHR <0247> B7E2 D6,42,EC CEQ >EC,@CHAT <0248> B7E5 57,F9 BR INOALL <0249> B7E7 0F,7E XML SPEED <0250> B7E9 00,EC DATA >00EC <0251> B7EB BF,4A,00 DST >001E,@FAC B7EE 1E <0252> B7EF E3,4A,00 DSLL 3,@FAC B7F2 03 <0253> B7F3 BF,54,01 DST >01C8,@TEMP1 B7F6 C8 <0254> B7F7 58,07 BR INVLP <0255> B7F9 0F,74 INOALL XML PARSE <0256> B7FB B6 BYTE >B6 <0257> B7FC 06,B7,CA CALL S1ET9F <0258> B7FF E3,4A,00 DSLL 3,@FAC B802 03 <0259> B803 BF,54,00 DST >0004,@TEMP1 B806 04 <0260> B807 85,E3,00 INVLP DINV V@>0300(@FAC) B80A 4A <0261> B80B A3,4A,00 DADD >0002,@FAC B80E 02 <0262> B80F 93,54 DDEC @TEMP1 <0263> B811 58,07 BR INVLP <0264> B813 D6,42,B3 INVNOK CEQ >B3,@CHAT <0265> B816 77,E0 BS INVAGN <0266> B818 4B,1A BR LNKRTN <0267> ***************************************** <0268> B81A 06,B5,B6 SSDSLL CALL STRFCH <0269> B81D 06,B7,CA CALL S1ET9F <0270> B820 E3,4A,00 DSLL 3,@FAC B823 03 <0271> B824 00 RTN <0272> ***************************************** <0273> B825 B8,64 LINK10 DATA LINK11 <0274> B827 08,53,57 STRI 'SWAPCHAR' B82A 41,50,43 B82D 48,41,52 <0275> B830 B8,32 DATA $+2 <0276> B832 06,B0,42 CALL SPNUM1 SWAPCHAR(CHAR#,CHAR#) <0277> B835 06,B8,1A SWCHAG CALL SSDSLL <0278> B838 BD,0E,4A DST @FAC,@VAR4 <0279> B83B D6,42,B3 CEQ >B3,@CHAT <0280> B83E 4D,BA BR ERRSYN <0281> B840 06,B8,1A CALL SSDSLL <0282> B843 BD,10,4A DST @FAC,@VAR5 <0283> B846 35,00,08 MOVE 8,V@>0300(@VAR4),@FAC B849 4A,E3,00 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0066 EQUATES EXEC-359 B84C 0E <0284> B84D 35,00,08 MOVE 8,V@>0300(@VAR5),V@>0300(@VAR4) B850 E3,00,0E B853 E3,00,10 <0285> B856 35,00,08 MOVE 8,@FAC,V@>0300(@VAR5) B859 E3,00,10 B85C 4A <0286> B85D D6,42,B3 CEQ >B3,@CHAT <0287> B860 78,35 BS SWCHAG <0288> B862 4B,1A BR LNKRTN <0289> ****************************************** <0290> B864 B8,98 LINK11 DATA LINK12 <0291> B866 07,44,55 STRI 'DUPCHAR' B869 50,43,48 B86C 41,52 <0292> B86E B8,70 DATA $+2 <0293> B870 06,B0,42 CALL SPNUM1 DUPCHAR(CHAR#,CHAR#) <0294> B873 06,B8,1A DCHAGN CALL SSDSLL <0295> B876 BD,0E,4A DST @FAC,@VAR4 <0296> B879 D6,42,B3 CEQ >B3,@CHAT <0297> B87C 4D,BA BR ERRSYN <0298> B87E 06,B8,1A CALL SSDSLL <0299> B881 35,00,08 MOVE 8,V@>0300(@VAR4),V@>0300(@FAC) B884 E3,00,4A B887 E3,00,0E <0300> B88A D6,42,B3 CEQ >B3,@CHAT <0301> B88D 78,73 BS DCHAGN <0302> B88F 4B,1A BR LNKRTN <0303> ****************************************** <0304> B891 0F,7E S00T10 XML SPEED * CHECK FROM <0305> B893 02,00 DATA >0200 * 0 TO 16 <0306> B895 00,10 DATA >0010 * <0307> B897 00 RTN * <0308> ****************************************** <0309> B898 B9,07 LINK12 DATA LINK13 <0310> B89A 09,53,57 STRI 'SWAPCOLOR' B89D 41,50,43 B8A0 4F,4C,4F B8A3 52 <0311> B8A4 B8,A6 DATA $+2 <0312> B8A6 0F,7E XML SPEED SWAPCOLOR(SET#,SET#) <0313> B8A8 00,B7 DATA >00B7 <0314> B8AA D6,42,FD SCOL10 CEQ >FD,@CHAT <0315> B8AD 58,DA BR SCOL20 <0316> B8AF 06,B0,4F CALL SPNUM3 <0317> B8B2 BC,0E,E0 ST V@>0003(@FAC),@VAR4 B8B5 03,4A <0318> B8B7 BD,10,4A DST @FAC,@VAR5 <0319> B8BA D6,42,FD CEQ >FD,@CHAT <0320> B8BD 4D,BA BR ERRSYN <0321> B8BF 06,B5,B6 CALL STRFCH <0322> B8C2 06,B0,54 CALL SPNUM4 <0323> B8C5 BC,E0,03 ST V@>0003(@FAC),V@>0003(@VAR5) B8C8 10,E0,03 B8CB 4A <0324> B8CC BC,E0,03 ST @VAR4,V@>0003(@FAC) B8CF 4A,0E <0325> B8D1 D6,42,B3 CEQ >B3,@CHAT <0326> B8D4 4B,1A BR LNKRTN <0327> B8D6 0F,79 XML PGMCHR <0328> B8D8 58,AA BR SCOL10 <0329> B8DA 0F,7E SCOL20 XML SPEED <0330> B8DC 01 BYTE >01 <0331> B8DD 06,B8,91 CALL S00T10 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0067 EQUATES EXEC-359 <0332> B8E0 A3,4A,08 DADD >080F,@FAC B8E3 0F <0333> B8E4 BD,0E,4A DST @FAC,@VAR4 <0334> B8E7 0F,74 XML PARSE <0335> B8E9 B6 BYTE >B6 <0336> B8EA 06,B8,91 CALL S00T10 <0337> B8ED A3,4A,08 DADD >080F,@FAC B8F0 0F <0338> B8F1 BC,00,B0 ST V*FAC,@VAR0 B8F4 4A <0339> B8F5 BC,B0,4A ST V*VAR4,V*FAC B8F8 B0,0E <0340> B8FA BC,B0,0E ST @VAR0,V*VAR4 B8FD 00 <0341> B8FE D6,42,B3 CEQ >B3,@CHAT <0342> B901 4B,1A BR LNKRTN <0343> B903 0F,79 XML PGMCHR <0344> B905 58,DA BR SCOL20 <0345> ****************************************** <0346> B907 B9,63 LINK13 DATA LINK14 <0347> B909 08,44,55 STRI 'DUPCOLOR' B90C 50,43,4F B90F 4C,4F,52 <0348> B912 B9,14 DATA $+2 <0349> B914 0F,7E XML SPEED DUPCOLOR(SET#,SET#) <0350> B916 00,B7 DATA >00B7 <0351> B918 D6,42,FD DCOL10 CEQ >FD,@CHAT <0352> B91B 59,3E BR DCOL20 <0353> B91D 06,B0,4F CALL SPNUM3 <0354> B920 BC,0E,E0 ST V@>0003(@FAC),@VAR4 B923 03,4A <0355> B925 D6,42,FD CEQ >FD,@CHAT <0356> B928 4D,BA BR ERRSYN <0357> B92A 06,B5,B6 CALL STRFCH <0358> B92D 06,B0,54 CALL SPNUM4 <0359> B930 BC,E0,03 ST @VAR4,V@>0003(@FAC) B933 4A,0E <0360> B935 D6,42,B3 CEQ >B3,@CHAT <0361> B938 4B,1A BR LNKRTN <0362> B93A 0F,79 XML PGMCHR <0363> B93C 59,18 BR DCOL10 <0364> B93E 0F,7E DCOL20 XML SPEED <0365> B940 01 BYTE >01 <0366> B941 06,B8,91 CALL S00T10 <0367> B944 A3,4A,08 DADD >080F,@FAC B947 0F <0368> B948 BC,00,B0 ST V*FAC,@VAR0 B94B 4A <0369> B94C 0F,74 XML PARSE <0370> B94E B6 BYTE >B6 <0371> B94F 06,B8,91 CALL S00T10 <0372> B952 A3,4A,08 DADD >080F,@FAC B955 0F <0373> B956 BC,B0,4A ST @VAR0,V*FAC B959 00 <0374> B95A D6,42,B3 CEQ >B3,@CHAT <0375> B95D 4B,1A BR LNKRTN <0376> B95F 0F,79 XML PGMCHR <0377> B961 59,3E BR DCOL20 [0024] *********************************************************** [0025] COPY 'DSK5.MYXB5-L' <0001> ****************************************** <0002> B963 B9,8C LINK14 DATA LINK15 <0003> B965 05,4C,44 STRI 'LDIAG' 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0068 EQUATES EXEC-359 B968 49,41,47 <0004> B96B B9,6D DATA $+2 <0005> B96D 06,AC,D6 LDIAG CALL HVCHR LDIAG(R,C,CHAR#,REP) <0006> B970 8F,4A DCZ @FAC <0007> B972 6B,17 BS XPTRTN <0008> B974 06,B6,47 LLPD CALL VFMT <0009> B977 92,7F DEC @XPT <0010> B979 93,4A DDEC @FAC <0011> B97B 79,85 BS LCOMMA <0012> B97D 8E,7E CZ @YPT <0013> B97F 59,74 BR LLPD <0014> B981 92,7F DEC @XPT <0015> B983 59,74 BR LLPD <0016> B985 D6,42,B3 LCOMMA CEQ COMMAZ,@CHAT <0017> B988 79,6D BS LDIAG <0018> B98A 4B,17 BR XPTRTN <0019> ****************************************** <0020> B98C B9,B5 LINK15 DATA LINK16 <0021> B98E 05,52,44 STRI 'RDIAG' B991 49,41,47 <0022> B994 B9,96 DATA $+2 <0023> B996 06,AC,D6 RDIAG CALL HVCHR RDIAG(R,C,CHAR#,REP) <0024> B999 8F,4A DCZ @FAC <0025> B99B 79,AE BS RCOMMA <0026> B99D 06,B6,47 RLPD CALL VFMT <0027> B9A0 90,7F INC @XPT <0028> B9A2 93,4A DDEC @FAC <0029> B9A4 79,AE BS RCOMMA <0030> B9A6 8E,7E CZ @YPT <0031> B9A8 59,9D BR RLPD <0032> B9AA 90,7F INC @XPT <0033> B9AC 59,9D BR RLPD <0034> B9AE D6,42,B3 RCOMMA CEQ COMMAZ,@CHAT <0035> B9B1 79,96 BS RDIAG <0036> B9B3 4B,17 BR XPTRTN <0037> ****************************************** <0038> B9B5 BA,AC LINK16 DATA LINK17 <0039> B9B7 05,4D,4F STRI 'MOVES' B9BA 56,45,53 <0040> B9BD B9,BF DATA $+2 <0041> B9BF 06,B0,42 CALL SPNUM1 MOVES(TYPE$,BYTES,$,TO) <0042> * or MOVES(TYPE$,BYTES,FROM,$) <0043> B9C2 06,B5,BC MOVESA CALL STRGET * ( or , <0044> B9C5 BD,10,B0 DST V*FAC4,@VAR5 * TYPE "VRG" B9C8 4E <0045> B9C9 06,B5,D6 CALL GETNUM * ,BYTES <0046> B9CC 8F,4A DCZ @FAC <0047> B9CE 6D,EE BS ERRBV <0048> B9D0 BD,0C,4A DST @FAC,@BYTES <0049> B9D3 06,B5,B6 CALL STRFCH * ,FROM <0050> B9D6 D6,10,24 CEQ 36,@VAR5 <0051> B9D9 59,E7 BR MOVESX <0052> B9DB C8,0D,50 CHE @FAC6,@BYTES+1 <0053> B9DE 79,ED BS MOVESB <0054> B9E0 86,0C CLR @BYTES <0055> B9E2 BC,0D,50 ST @FAC6,@BYTES+1 <0056> B9E5 59,ED BR MOVESB <0057> B9E7 06,B5,CE MOVESX CALL CFIFCH <0058> B9EA BD,4E,4A DST @FAC,@FAC4 <0059> B9ED BD,04,4E MOVESB DST @FAC4,@VARY <0060> B9F0 D6,11,24 CEQ 36,@VAR6 <0061> B9F3 5A,05 BR MOVESN <0062> B9F5 CB,0C,01 DCHE 256,@BYTES B9F8 00 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0069 EQUATES EXEC-359 <0063> B9F9 6D,EE BS ERRBV <0064> B9FB 0F,71 XML GETSTR <0065> B9FD 06,B5,FF CALL NGOOD <0066> BA00 BD,4A,1C DST @SREF,@FAC <0067> BA03 5A,08 BR MOVESC <0068> BA05 06,B6,4D MOVESN CALL SUBLP3 * ,TO <0069> BA08 BD,06,4A MOVESC DST @FAC,@VARY2 <0070> BA0B D6,10,24 CEQ 36,@VAR5 * VDP FROM <0071> BA0E 5A,13 BR MTYPES <0072> BA10 BE,10,56 ST 86,@VAR5 <0073> BA13 D6,11,24 MTYPES CEQ 36,@VAR6 <0074> BA16 5A,1B BR MTYPE <0075> BA18 BE,11,56 ST 86,@VAR6 <0076> BA1B D6,10,56 MTYPE CEQ 86,@VAR5 * VDP FROM <0077> BA1E 5A,48 BR MTYPE3 <0078> BA20 D6,11,56 CEQ 86,@VAR6 * VDP TO <0079> BA23 5A,2D BR MTYPE1 <0080> BA25 34,0C,E0 MTYPE0 MOVE @BYTES,V@0(@VARY),V@0(@VARY2) BA28 00,06,E0 BA2B 00,04 <0081> BA2D D6,11,52 MTYPE1 CEQ 82,@VAR6 * RAM TO <0082> BA30 5A,3B BR MTYPE2 <0083> BA32 34,0C,CF MOVE @BYTES,V@0(@VARY),@0(@VARY2) BA35 7D,00,06 BA38 E0,00,04 <0084> BA3B D6,11,47 MTYPE2 CEQ 71,@VAR6 * GRAM TO <0085> BA3E 5A,48 BR MTYPE3 <0086> BA40 2C,0C,00 MOVE @BYTES,V@0(@VARY),G@0(@VARY2) BA43 00,06,E0 BA46 00,04 <0087> BA48 D6,10,52 MTYPE3 CEQ 82,@VAR5 * RAM FROM <0088> BA4B 5A,78 BR MTYPE7 <0089> BA4D D6,11,56 CEQ 86,@VAR6 * VDP TO <0090> BA50 5A,5B BR MTYPE5 <0091> BA52 34,0C,E0 MTYPE4 MOVE @BYTES,@0(@VARY),V@0(@VARY2) BA55 00,06,CF BA58 7D,00,04 <0092> BA5B D6,11,52 MTYPE5 CEQ 82,@VAR6 * RAM TO <0093> BA5E 5A,6A BR MTYPE6 <0094> BA60 34,0C,CF MOVE @BYTES,@0(@VARY),@0(@VARY2) BA63 7D,00,06 BA66 CF,7D,00 BA69 04 <0095> BA6A D6,11,47 MTYPE6 CEQ 71,@VAR6 * GRAM TO <0096> BA6D 5A,78 BR MTYPE7 <0097> BA6F 2C,0C,00 MOVE @BYTES,@0(@VARY),G@0(@VARY2) BA72 00,06,CF BA75 7D,00,04 <0098> BA78 D6,10,47 MTYPE7 CEQ 71,@VAR5 * GRAM FROM <0099> BA7B 5A,A5 BR MOVESD <0100> BA7D D6,11,56 CEQ 86,@VAR6 * VDP TO <0101> BA80 5A,8A BR MTYPE9 <0102> BA82 32,0C,E0 MTYPE8 MOVE @BYTES,G@0(@VARY),V@0(@VARY2) BA85 00,06,00 BA88 00,04 <0103> BA8A D6,11,52 MTYPE9 CEQ 82,@VAR6 * RAM TO <0104> BA8D 5A,98 BR MTYPEA <0105> BA8F 32,0C,CF MOVE @BYTES,G@0(@VARY),@0(@VARY2) BA92 7D,00,06 BA95 00,00,04 <0106> BA98 D6,11,47 MTYPEA CEQ 71,@VAR6 * GRAM TO <0107> BA9B 5A,A5 BR MOVESD <0108> BA9D 2A,0C,00 MOVE @BYTES,G@0(@VARY),G@0(@VARY2) BAA0 00,06,00 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0070 EQUATES EXEC-359 BAA3 00,04 <0109> BAA5 D6,42,B3 MOVESD CEQ >B3,@CHAT <0110> BAA8 79,C2 BS MOVESA <0111> BAAA 4B,1A BR LNKRTN <0112> ******************************* <0113> BAAC BB,8E LINK17 DATA LINK18 <0114> BAAE 03,48,45 STRI 'HEX' HEX BAB1 58 <0115> BAB2 BA,B4 DATA $+2 <0116> BAB4 06,B0,42 CALL SPNUM1 <0117> BAB7 06,B5,B6 HEXAGN CALL STRFCH Get STRING or NUMBER <0118> BABA D6,4C,65 CEQ >65,@FAC2 STRING? <0119> BABD 7B,14 BS HEXSTR Yes <0120> BABF 06,B5,CE CALL CFIFCH No <0121> BAC2 BD,56,4A DST @FAC,@TEMP2 <0122> BAC5 BF,0C,00 DST >0004,@BYTES BAC8 04 <0123> BAC9 0F,71 XML GETSTR <0124> BACB BD,12,1C DST @SREF,@STRPTR <0125> BACE BC,00,56 ST @TEMP2,@VAR0 <0126> BAD1 E6,00,04 SRL 4,@VAR0 <0127> BAD4 06,BB,02 CALL HEXNS <0128> BAD7 BC,00,56 ST @TEMP2,@VAR0 <0129> BADA E2,00,04 SLL 4,@VAR0 <0130> BADD E6,00,04 SRL 4,@VAR0 <0131> BAE0 06,BB,02 CALL HEXNS <0132> BAE3 BC,00,57 ST @TEMP2+1,@VAR0 <0133> BAE6 E6,00,04 SRL 4,@VAR0 <0134> BAE9 06,BB,02 CALL HEXNS <0135> BAEC BC,00,57 ST @TEMP2+1,@VAR0 <0136> BAEF E2,00,04 SLL 4,@VAR0 <0137> BAF2 E6,00,04 SRL 4,@VAR0 <0138> BAF5 06,BB,02 CALL HEXNS <0139> BAF8 D6,42,B3 CEQ COMMAZ,@CHAT <0140> BAFB 4D,BA BR ERRSYN <0141> BAFD 06,B5,FF CALL NGOOD <0142> BB00 5B,57 BR HEXDON <0143> BB02 CA,00,0A HEXNS CHE >0A,@VAR0 <0144> BB05 5B,0A BR HEXNS2 <0145> BB07 A2,00,07 ADD >07,@VAR0 <0146> BB0A A2,00,30 HEXNS2 ADD >30,@VAR0 <0147> BB0D BC,B0,12 ST @VAR0,V*STRPTR BB10 00 <0148> BB11 91,12 DINC @STRPTR <0149> BB13 00 RTN <0150> BB14 87,56 HEXSTR DCLR @TEMP2 <0151> BB16 BD,12,4E DST @FAC4,@STRPTR <0152> BB19 CB,50,00 DCHE 5,@FAC6 BB1C 05 <0153> BB1D 7B,2B BS HEXS4 <0154> BB1F 8A,51 CASE @FAC7 <0155> BB21 5B,49 BR HEXS0 <0156> BB23 5B,43 BR HEXS1 <0157> BB25 5B,3A BR HEXS2 <0158> BB27 5B,34 BR HEXS3 <0159> BB29 5B,2B BR HEXS4 <0160> BB2B 06,BB,5E HEXS4 CALL HEXSN <0161> BB2E E2,00,04 SLL 4,@VAR0 <0162> BB31 A0,56,00 ADD @VAR0,@TEMP2 <0163> BB34 06,BB,5E HEXS3 CALL HEXSN <0164> BB37 A0,56,00 ADD @VAR0,@TEMP2 <0165> BB3A 06,BB,5E HEXS2 CALL HEXSN <0166> BB3D E2,00,04 SLL 4,@VAR0 <0167> BB40 A0,57,00 ADD @VAR0,@TEMP2+1 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0071 EQUATES EXEC-359 <0168> BB43 06,BB,5E HEXS1 CALL HEXSN <0169> BB46 A0,57,00 ADD @VAR0,@TEMP2+1 <0170> BB49 0F,79 HEXS0 XML PGMCHR <0171> BB4B 06,B6,1A CALL SNDER <0172> BB4E 06,B6,54 CALL CLRFAC <0173> BB51 BD,4A,56 DST @TEMP2,@FAC <0174> BB54 06,B6,21 CALL CIFSND <0175> BB57 D6,42,B3 HEXDON CEQ COMMAZ,@CHAT <0176> BB5A 7A,B7 BS HEXAGN <0177> BB5C 4B,1A BR LNKRTN <0178> BB5E BC,00,B0 HEXSN ST V*STRPTR,@VAR0 BB61 12 <0179> BB62 CA,00,67 CHE 103,@VAR0 * g ? <0180> BB65 6D,EA BS ERRBA <0181> BB67 CA,00,61 CHE 97,@VAR0 * a ? <0182> BB6A 5B,6F BR HEXSN2 <0183> BB6C A6,00,20 SUB 32,@VAR0 * -32 <0184> BB6F CA,00,47 HEXSN2 CHE 71,@VAR0 * G ? <0185> BB72 6D,EA BS ERRBA <0186> BB74 CA,00,41 CHE 65,@VAR0 * A ? <0187> BB77 5B,7E BR HEXSN3 <0188> BB79 A6,00,37 SUB 55,@VAR0 * -55 <0189> BB7C 5B,8B BR HEXSN4 <0190> BB7E CA,00,3A HEXSN3 CHE 58,@VAR0 * : ? <0191> BB81 6D,EA BS ERRBA <0192> BB83 CA,00,30 CHE 48,@VAR0 * 0 ? <0193> BB86 4D,EA BR ERRBA <0194> BB88 A6,00,30 SUB 48,@VAR0 * -48 <0195> BB8B 91,12 HEXSN4 DINC @STRPTR <0196> BB8D 00 RTN <0197> ************************** <0198> BB8E BC,7C LINK18 DATA LINK19 <0199> BB90 02,49,4F STRI 'IO' IO <0200> BB93 BB,95 DATA $+2 <0201> BB95 06,B0,42 CALL SPNUM1 <0202> BB98 06,B5,D6 IOAGN CALL GETNUM * TYPE 0-6 <0203> BB9B CA,4B,07 CHE >07,@FAC1 <0204> BB9E 6D,EE BS ERRBV <0205> BBA0 BC,04,4B ST @FAC1,@VARY <0206> BBA3 06,B6,4D CALL SUBLP3 * ADDRESS/ <0207> BBA6 8A,04 CASE @VARY * BITS/BYTES <0208> BBA8 5B,B6 BR SOG <0209> BBAA 5B,BB BR SOV <0210> BBAC 5B,C0 BR CRUI <0211> BBAE 5B,EB BR CRUO <0212> BBB0 5C,15 BR CSW <0213> BBB2 5C,1D BR CSR <0214> BBB4 5C,25 BR CSV <0215> BBB6 F6,4A,00 SOG I/O 0,@FAC <0216> BBB9 5C,2B BR IODONE <0217> BBBB F6,4A,01 SOV I/O 1,@FAC <0218> BBBE 5C,2B BR IODONE <0219> BBC0 06,BC,3A CRUI CALL CRUSET <0220> BBC3 F6,0E,02 I/O 2,@VAR4 <0221> BBC6 0F,79 XML PGMCHR <0222> BBC8 06,B6,1A CALL SNDER <0223> BBCB 06,B6,54 CALL CLRFAC <0224> BBCE BC,4B,00 ST @VAR0,@FAC1 <0225> BBD1 06,B6,21 CALL CIFSND * VARIABLE1 <0226> BBD4 CA,04,09 CHE >09,@VARY <0227> BBD7 7B,DB BS CRUI16 <0228> BBD9 5C,2B BR IODONE <0229> BBDB 0F,79 CRUI16 XML PGMCHR <0230> BBDD 06,B6,1A CALL SNDER 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0072 EQUATES EXEC-359 <0231> BBE0 06,B6,54 CALL CLRFAC <0232> BBE3 BC,4B,01 ST @VARV,@FAC1 <0233> BBE6 06,B6,21 CALL CIFSND * VARIABLE2 <0234> BBE9 5C,2B BR IODONE <0235> BBEB 06,BC,3A CRUO CALL CRUSET <0236> BBEE 06,B6,4D CALL SUBLP3 * VARIABLE1 <0237> BBF1 CB,4A,01 DCHE >0100,@FAC BBF4 00 <0238> BBF5 6D,EE BS ERRBV <0239> BBF7 CA,04,09 CHE >09,@VARY <0240> BBFA 7C,01 BS CRUO16 <0241> BBFC BC,00,4B ST @FAC1,@VAR0 <0242> BBFF 5C,10 BR CRUO8 <0243> BC01 BD,00,4A CRUO16 DST @FAC,@VAR0 <0244> BC04 06,B6,4D CALL SUBLP3 * VARIABLE2 <0245> BC07 CB,4A,01 DCHE >0100,@FAC BC0A 00 <0246> BC0B 6D,EE BS ERRBV <0247> BC0D BC,01,4B ST @FAC1,@VARV <0248> BC10 F6,0E,03 CRUO8 I/O 3,@VAR4 <0249> BC13 5C,2B BR IODONE <0250> BC15 06,BC,50 CSW CALL CSLOAD <0251> BC18 F6,0E,04 I/O 4,@VAR4 <0252> BC1B 5C,2B BR IODONE <0253> BC1D 06,BC,50 CSR CALL CSLOAD <0254> BC20 F6,0E,05 I/O 5,@VAR4 <0255> BC23 5C,2B BR IODONE <0256> BC25 06,BC,50 CSV CALL CSLOAD <0257> BC28 F6,0E,06 I/O 6,@VAR4 <0258> BC2B D6,42,B3 IODONE CEQ >B3,@CHAT <0259> BC2E 7B,98 BS IOAGN <0260> BC30 4B,1A BR LNKRTN <0261> BC32 BD,0E,4A CRUTMP DST @FAC,@VAR4 <0262> BC35 87,10 DCLR @VAR5 <0263> BC37 87,00 DCLR @VAR0 <0264> BC39 00 RTN <0265> BC3A 8E,4B CRUSET CZ @FAC1 <0266> BC3C 6D,EE BS ERRBV <0267> BC3E CA,4A,11 CHE >11,@FAC <0268> BC41 6D,EE BS ERRBV <0269> BC43 BC,04,4B ST @FAC1,@VARY <0270> BC46 06,B6,4D CALL SUBLP3 * CRU-ADDRESS <0271> BC49 06,BC,32 CALL CRUTMP <0272> BC4C BC,10,04 ST @VARY,@VAR5 <0273> BC4F 00 RTN <0274> BC50 06,BC,32 CSLOAD CALL CRUTMP <0275> BC53 06,B6,4D CALL SUBLP3 * ADDRESS <0276> BC56 BD,10,4A DST @FAC,@VAR5 <0277> BC59 00 RTN <0278> ******************************* <0279> BC5A 86,55 HVPNUM CLR @FAC11 Select XB FLP <0280> BC5C 0F,73 XML CNS <0281> BC5E D6,90,55 CEQ SPACE,*FAC11 Leading space? BC61 20 <0282> BC62 5C,68 BR HVPUTN <0283> BC64 90,55 INC @FAC11 Supress space out <0284> BC66 92,56 DEC @FAC12 Shorten length <0285> BC68 86,0C HVPUTN CLR @BYTES <0286> BC6A BC,0D,56 ST @FAC12,@BYTES+1 Length <0287> BC6D 0F,71 XML GETSTR <0288> BC6F 34,0C,B0 MOVE @BYTES,*FAC11,V*SREF Store in VDP rollout BC72 1C,90,55 <0289> BC75 BD,4E,1C DST @SREF,@FAC4 VDP rollout address <0290> BC78 BD,50,0C DST @BYTES,@FAC6 Store length 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0073 EQUATES EXEC-359 <0291> BC7B 00 RTN <0292> ******************************* <0293> BC7C BC,AD LINK19 DATA LINK1A <0294> BC7E 04,48,50 STRI 'HPUT' BC81 55,54 <0295> BC83 BC,85 DATA $+2 <0296> BC85 06,B0,42 CALL SPNUM1 <0297> BC88 06,B5,DF HPAGIN CALL ROWCOL Get ROW & COL <0298> BC8B 06,B5,B6 CALL STRFCH Get string or number <0299> BC8E D6,4C,65 CEQ >65,@FAC2 String? <0300> BC91 7C,96 BS HPUTS Yes <0301> BC93 06,BC,5A CALL HVPNUM No, CNS <0302> BC96 8F,50 HPUTS DCZ @FAC6 <0303> BC98 7C,A6 BS HPOUT <0304> BC9A 87,4A DCLR @FAC <0305> BC9C 06,B6,37 HPUTLP CALL PUTLP <0306> BC9F 06,B6,42 CALL HFMT <0307> BCA2 93,50 DDEC @FAC6 <0308> BCA4 5C,9C BR HPUTLP <0309> BCA6 D6,42,B3 HPOUT CEQ >B3,@CHAT <0310> BCA9 7C,88 BS HPAGIN <0311> BCAB 4B,17 BR XPTRTN <0312> ************************** <0313> BCAD BC,FF LINK1A DATA LINK1B <0314> BCAF 04,56,50 STRI 'VPUT' BCB2 55,54 <0315> BCB4 BC,B6 DATA $+2 <0316> BCB6 06,B0,42 CALL SPNUM1 <0317> BCB9 06,B5,DF VPAGIN CALL ROWCOL Get ROW & COL <0318> BCBC 06,B5,B6 CALL STRFCH Get string or number <0319> BCBF D6,4C,65 CEQ >65,@FAC2 String? <0320> BCC2 7C,C7 BS VPUTS Yes <0321> BCC4 06,BC,5A CALL HVPNUM No, CNS <0322> BCC7 8F,50 VPUTS DCZ @FAC6 <0323> BCC9 7C,E0 BS VPOUT <0324> BCCB 87,4A DCLR @FAC <0325> BCCD 06,B6,37 VPUTLP CALL PUTLP <0326> BCD0 06,B6,47 CALL VFMT <0327> BCD3 93,50 DDEC @FAC6 <0328> BCD5 7C,E0 BS VPOUT <0329> BCD7 8E,7E CZ @YPT <0330> BCD9 5C,CD BR VPUTLP <0331> BCDB 90,7F INC @XPT <0332> BCDD 05,BC,CD B VPUTLP <0333> BCE0 D6,42,B3 VPOUT CEQ >B3,@CHAT <0334> BCE3 7C,B9 BS VPAGIN <0335> BCE5 4B,17 BR XPTRTN <0336> **************************** <0337> BCE7 06,B5,DF HVGETS CALL ROWCOL <0338> BCEA 06,B5,D6 CALL GETNUM <0339> BCED CF,4A,00 DCGT >00FF,@FAC BCF0 FF <0340> BCF1 6D,EE BS ERRBV * BAD VALUE <0341> BCF3 BD,0C,4A DST @FAC,@BYTES <0342> BCF6 BD,54,4A DST @FAC,@TEMP1 <0343> BCF9 0F,71 XML GETSTR <0344> BCFB BD,12,1C DST @SREF,@STRPTR <0345> BCFE 00 RTN <0346> **************************** <0347> BCFF BD,22 LINK1B DATA LINK1C <0348> BD01 04,48,47 STRI 'HGET' BD04 45,54 <0349> BD06 BD,08 DATA $+2 <0350> BD08 06,B0,42 CALL SPNUM1 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0074 EQUATES EXEC-359 <0351> BD0B 06,BC,E7 HAGAIN CALL HVGETS <0352> BD0E 06,B6,26 LP2 CALL GETLP <0353> BD11 06,B6,42 CALL HFMT <0354> BD14 93,54 DDEC @TEMP1 <0355> BD16 5D,0E BR LP2 <0356> BD18 06,B5,FF HDONE CALL NGOOD <0357> BD1B D6,42,B3 CEQ >B3,@CHAT <0358> BD1E 7D,0B BS HAGAIN <0359> BD20 4B,17 BR XPTRTN <0360> ************************** <0361> BD22 BD,5A LINK1C DATA LINK1D <0362> BD24 04,56,47 STRI 'VGET' BD27 45,54 <0363> BD29 BD,2B DATA $+2 <0364> BD2B 06,B0,42 CALL SPNUM1 <0365> BD2E 06,BC,E7 VAGAIN CALL HVGETS <0366> BD31 06,B6,26 LP1 CALL GETLP <0367> BD34 06,B6,47 CALL VFMT <0368> BD37 93,54 DDEC @TEMP1 <0369> BD39 7D,44 BS VDONE <0370> BD3B 8E,7E CZ @YPT <0371> BD3D 5D,31 BR LP1 <0372> BD3F 90,7F INC @XPT <0373> BD41 05,BD,31 B LP1 <0374> BD44 06,B5,FF VDONE CALL NGOOD <0375> BD47 D6,42,B3 CEQ >B3,@CHAT <0376> BD4A 7D,2E BS VAGAIN <0377> BD4C 4B,17 BR XPTRTN [0026] *********************************************************** [0027] COPY 'DSK5.MYXB5-M' <0001> ******************************************************* <0002> * CPU PROGRAM FOR >8300 SCATCH PAD SUBROUTINE EXECUTE * <0003> ******************************************************* <0004> * AORG >8300 <0005> BD4E 83,02 CPUPGM DATA >8302 * CPUPGM DATA >8302 First address. * <0006> BD50 04,20 DATA >0420 * BLWP >834A Switch contex * <0007> BD52 83,4A DATA >834A * FAC not used * <0008> BD54 04,E0 DATA >04E0 * CLR @>837C Clear for GPL * <0009> BD56 83,7C DATA >837C * * <0010> BD58 04,5B DATA >045B * RT Return to GPL. * <0011> * END * <0012> ******************************************************* <0013> BD5A BD,8A LINK1D DATA LINK1E <0014> BD5C 07,45,58 STRI 'EXECUTE' EXECUTE BD5F 45,43,55 BD62 54,45 <0015> BD64 BD,66 DATA $+2 <0016> BD66 06,B0,42 CALL SPNUM1 <0017> BD69 06,B6,4D EXAGN CALL SUBLP3 <0018> BD6C 35,00,0C MOVE 12,@>8300,V@>03C0 BD6F A3,C0,00 <0019> BD72 31,00,0C MOVE 12,G@CPUPGM,@>8300 BD75 00,BD,4E <0020> BD78 BD,04,4A DST @FAC,@>8304 <0021> BD7B 0F,F0 XML >F0 <0022> BD7D 35,00,0C MOVE 12,V@>03C0,@>8300 BD80 00,A3,C0 <0023> BD83 D6,42,B3 CEQ >B3,@CHAT <0024> BD86 7D,69 BS EXAGN <0025> BD88 4B,1A BR LNKRTN <0026> *********************************************************** <0027> BD8A BD,96 LINK1E DATA LINK1F <0028> BD8C 04,53,49 STRI 'SIZE' SIZE BD8F 5A,45 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0075 EQUATES EXEC-359 <0029> BD91 BD,93 DATA $+2 <0030> BD93 05,65,C9 B SZSIZE <0031> BD96 BD,A6 LINK1F DATA LINK20 <0032> BD98 06,43,4C STRI 'CLSALL' CLSALL BD9B 53,41,4C BD9E 4C <0033> BD9F BD,A1 DATA $+2 <0034> BDA1 06,80,12 CALL CLSALL <0035> BDA4 4B,1E BR LNKRT2 <0036> BDA6 BD,B2 LINK20 DATA LINK21 <0037> BDA8 03,42,59 STRI 'BYE' BYE BDAB 45 <0038> BDAC BD,AE DATA $+2 <0039> BDAE 06,80,12 CALL CLSALL <0040> BDB1 0B EXIT <0041> BDB2 BD,C3 LINK21 DATA LINK22 <0042> BDB4 03,4E,45 STRI 'NEW' NEW BDB7 57 <0043> BDB8 BD,BA DATA $+2 <0044> BDBA 86,A3,71 RXBNEW CLR V@>0371 Clear AUTOLOAD flag <0045> BDBD 06,80,12 CALL CLSALL <0046> BDC0 05,63,A5 B SZNEW <0047> BDC3 BD,FF LINK22 DATA LINK23 <0048> BDC5 04,42,49 STRI 'BIAS' BIAS BDC8 41,53 <0049> BDCA BD,CC DATA $+2 <0050> BDCC 06,B0,42 CALL SPNUM1 <0051> BDCF 06,B5,D6 BIASAG CALL GETNUM <0052> BDD2 BD,00,4A DST @FAC,@VAR0 <0053> BDD5 06,B5,BC CALL STRGET <0054> BDD8 BD,04,4E DST @FAC4,@VARY <0055> BDDB BD,06,50 DST @FAC6,@VARY2 <0056> BDDE BC,4B,B0 BIASLP ST V*VARY,@FAC1 * Character. BDE1 04 <0057> BDE2 8F,00 DCZ @VAR0 * 0? <0058> BDE4 7D,EB BS BIASM * Yes. <0059> BDE6 A2,4B,60 ADD 96,@FAC1 * ADD OFFSET <0060> BDE9 5D,EE BR BIASSV <0061> BDEB A6,4B,60 BIASM SUB 96,@FAC1 * MINUS OFFSET <0062> BDEE BC,B0,04 BIASSV ST @FAC1,V*VARY BDF1 4B <0063> BDF2 91,04 DINC @VARY <0064> BDF4 93,06 DDEC @VARY2 <0065> BDF6 5D,DE BR BIASLP <0066> BDF8 D6,42,B3 CEQ >B3,@CHAT <0067> BDFB 7D,CF BS BIASAG <0068> BDFD 4B,1A BR LNKRTN <0069> BDFF BE,0C LINK23 DATA LINK24 <0070> BE01 04,45,41 STRI 'EALR' EALR BE04 4C,52 <0071> BE06 BE,08 DATA $+2 <0072> BE08 06,BE,2E CALL EASAVE <0073> BE0B 33 BYTE >33 <0074> BE0C BE,1A LINK24 DATA LINK25 <0075> BE0E 05,45,41 STRI 'EAPGM' EAPGM BE11 50,47,4D <0076> BE14 BE,16 DATA $+2 <0077> BE16 06,BE,2E CALL EASAVE <0078> BE19 35 BYTE >35 <0079> BE1A BE,27 LINK25 DATA LINK26 <0080> BE1C 04,45,41 STRI 'EAED' EAED BE1F 45,44 <0081> BE21 BE,23 DATA $+2 <0082> BE23 06,BE,2E XEAED CALL EASAVE 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0076 EQUATES EXEC-359 <0083> BE26 31 BYTE >31 <0084> BE27 BE,54 LINK26 DATA LINK27 <0085> BE29 02,45,41 STRI 'EA' EA menu <0086> BE2C BE,4E DATA EAMENU <0087> BE2E 06,B0,42 EASAVE CALL SPNUM1 <0088> BE31 06,B5,BC CALL STRGET <0089> BE34 BC,AF,22 ST @FAC,V@>2256 BE37 56,4A <0090> BE39 A2,AF,22 ADD 1,V@>2256 BE3C 56,01 <0091> BE3E 34,50,AF MOVE @FAC6,V@0(@FAC4),V@>2257 BE41 22,57,E0 BE44 00,4E <0092> BE46 BE,EF,22 ST >0D,V@>2257(@FAC6) BE49 57,50,0D <0093> BE4C 88,42 FETCH @CHAT <0094> BE4E 06,80,12 EAMENU CALL CLSALL <0095> BE51 05,E0,25 B GE025 <0096> BE54 BE,60 LINK27 DATA LINK28 <0097> BE56 02,58,42 STRI 'XB' XB menu <0098> BE59 BE,5B DATA $+2 <0099> BE5B 06,80,12 XBMENU CALL CLSALL <0100> BE5E 5E,9F BR RXBRUN <0101> BE60 BE,A2 LINK28 DATA LINK29 <0102> BE62 05,58,42 STRI 'XBPGM' XBPGM BE65 50,47,4D <0103> BE68 BE,6A DATA $+2 <0104> BE6A 06,B0,42 CALL SPNUM1 <0105> BE6D 06,80,12 CALL CLSALL <0106> BE70 06,B5,BC CALL STRGET <0107> BE73 8F,50 DCZ @FAC6 <0108> BE75 7E,97 BS RXBXBP <0109> BE77 86,AF,22 CLR V@>2254 BE7A 54 <0110> BE7B 35,00,32 MOVE 50,V@>2254,V@>2255 BE7E AF,22,55 BE81 AF,22,54 <0111> BE84 BF,AF,22 DST >994A,V@>2254 BE87 54,99,4A <0112> BE8A BC,AF,22 ST @FAC7,V@>2256 BE8D 56,51 <0113> BE8F 34,50,AF MOVE @FAC6,V@0(@FAC4),V@>2257 BE92 22,57,E0 BE95 00,4E <0114> BE97 D6,42,B3 RXBXBP CEQ >B3,@CHAT <0115> BE9A 5E,9F BR RXBRUN <0116> BE9C 06,BE,B7 CALL RXBFIL <0117> BE9F 05,63,72 RXBRUN B TOPLEV <0118> BEA2 C0,10 LINK29 DATA >C010 <0119> BEA4 05,46,49 STRI 'FILES' FILES BEA7 4C,45,53 <0120> BEAA BE,AC DATA $+2 <0121> BEAC 06,B0,42 CALL SPNUM1 <0122> BEAF 06,80,12 CALL CLSALL <0123> BEB2 06,BE,B7 CALL RXBFIL <0124> BEB5 5D,BA BR RXBNEW <0125> BEB7 06,B6,4D RXBFIL CALL SUBLP3 <0126> BEBA 8F,4A DCZ @FAC <0127> BEBC 6D,EE BS ERRBV <0128> BEBE CB,4A,00 DCHE 16,@FAC BEC1 10 <0129> BEC2 6D,EE BS ERRBV <0130> BEC4 D6,42,B6 CEQ RPARZ,@CHAT <0131> BEC7 4D,BA BR ERRSYN 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0077 EQUATES EXEC-359 <0132> BEC9 0F,79 XML PGMCHR <0133> BECB 87,4C DCLR @FAC2 <0134> BECD BC,4C,4B ST @FAC1,@FAC2 <0135> BED0 BF,A3,C0 DST >0116,V@>03C0 BED3 01,16 <0136> BED5 06,B6,60 CALL DSKDSR <0137> BED8 00 RTN <0138> *********************************************************** <0139> [0028] *********************************************************** [0029] END 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0078 EQUATES EXEC-359 Symbol Table #1 (New,alpha) 0041 A 834C AAA 8302 AAA1 00CB ABSZ 801E ACCEPT A19E ACCEPX 00A4 ACCEPZ 03B7 ACCTRY 8302 ACCUM 03AE ACCVRA 03AC ACCVRW 00EC ALLZ 00BB ANDZ 00F9 APPENZ B70F AR 835D ARG1 8367 ARG11 836B ARG15 836C ARG16 835E ARG2 835F ARG3 8360 ARG4 8361 ARG5 8362 ARG6 8363 ARG7 8364 ARG8 A88A ASC A51A ASC01 00DC ASCZ 007C ASSGNV B0EF ASSRTN 00CC ATNZ A85B ATTNUT A9EA ATTREG 00F0 ATZ 602E AUTO1 0394 AUTTMP 0008 BACK 8343 BASE 00F1 BASEZ 8350 BBB 830C BBB1 00EE BEEPZ BDCF BIASAG BDDE BIASLP BDEB BIASM BDEE BIASSV 0020 BKGD ACC9 BORDER 0002 BREAK 008E BREAKZ 8346 BUFLEV 8366 BYTE1 8367 BYTE2 8368 BYTE3 830C BYTES 830A CALIST 009D CALLZ 837D CB 834E CCC 8308 CCC1 834A CCHAR 8308 CCPADD 8308 CCPADR 8306 CCPPTR 0012 CFI B5CE CFIFCH AE00 CHAR1 AE02 CHAR2 AB89 CHAR40 AB49 CHAR5 ABB8 CHAR50 ABCA CHARL2 ABE5 CHARL3 AC1F CHARL4 AB46 CHARLY 8342 CHAT 6A78 CHKEND AC0D CHRFIL B029 CHRSET 601C CHRTAB 6018 CHRTBL 000D CHRTN A4FF CHRZ01 00D6 CHRZZ 830E CHSAV 0080 CIF B621 CIFSND 00C5 CIRCUZ A3ED CKSTNM AA18 CLEAR 800A CLOSE A19B CLOSEX 00A0 CLOSEZ B654 CLRFAC 0007 CLRLN A116 CLRRTN 8012 CLSALL 0073 CNS AFE9 CODIST B700 COINLP A921 COL08 A934 COL09 A93C COL10 A949 COL20 A952 COL21 A980 COL22 003A COLON 00B5 COLONZ A91D COLOR A9F6 COMB B0E1 COMMA B0E4 COMMA2 002C COMMAT 00B3 COMMAZ 0070 COMPCT A48E CONC06 A438 CONCAT 00B8 CONCZ A250 CONPI 0075 CONT B254 CONTIN A8E5 CONV1 00CD COSZ AC94 CPAR B6F7 CPAR2 03BC CPTEMP BD4E CPUPGM 0820 CRNBUF 08BE CRNEND BBC0 CRUI BBDB CRUI16 007F CRUNCH BBEB CRUO BC01 CRUO16 BC10 CRUO8 BC3A CRUSET BC32 CRUTMP BC50 CSLOAD 0390 CSNTMP 03BA CSNTP1 0010 CSNUM BC1D CSR 0002 CSTRIN BC25 CSV BC15 CSW 830E CURINC 8314 CURLIN 007E CURSOR 8334 DATA 834D DATAAD A86E DATAST 0093 DATAZ A889 DATST1 B873 DCHAGN B918 DCOL10 B93E DCOL20 8354 DDD1 0089 DEFZ 8002 DELET A1A4 DELETX 0099 DELETZ A80A DELINK 0087 DELREP 8306 DFLTLM 00E9 DIGITZ 008A DIMZ B210 DIRSPH B139 DIRSPK B715 DISLP 6A7C DISO 8000 DISPL1 A1A1 DISPLX 00A2 DISPLZ AFC1 DIST 00C4 DIVIZ 0003 DLETE 0024 DOLLAR 000A DOWN B660 DSKDSR B66B DSRDSS 8317 DSRFLG 000A DWNARR BE4E EAMENU BE2E EASAVE 007F EDGECH 6032 EDITLN 8350 EEE 8358 EEE1 0081 ELSEZ 02FE ENDSCR 008B ENDZ 8332 ENLN 6A80 ENT09 6A7E ENTER 801C EOF A183 EOFX 00BE EQUALZ 00EF ERASEZ 837C ERCODE A8AB ERORZ AD3F ERR10 ADEA ERRBA A143 ERRBRK ADE2 ERRBS ADEE ERRBV ADAF ERRC05 8322 ERRCOD ADAA ERRCOM B65C ERRFE ADD2 ERRFNN ADF2 ERRIAL 038A ERRLN ADE6 ERRLNF ADC6 ERRMEM ADC2 ERRMUV ADCE ERRNWF A699 ERROLP 00A5 ERRORZ A0E9 ERRRDY ADDA ERRRSC ADDE ERRRWG ADF6 ERRSNF ADBE ERRSNM ADD6 ERRSNS ADCA ERRSO B558 ERRSSL ADBA ERRSYN ACF9 ERRWXY 6A84 ERRZ 6A84 ERRZZ BD69 EXAGN A09C EXEC A0A9 EXEC1 A0BC EXEC20 A127 EXEC6C A12B EXEC6D A11A EXECBK 0076 EXECG A0DF EXECND A0ED EXECTR 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 0009 FDIV 834E FFF 8356 FFF1 0001 FILSPC 00FA FIXEDZ 8345 FLAG A3F3 FLT1 0012 FLTINT AA2D FLTS 0008 FMUL B361 FNDNUM 8317 FNUM 8317 FORNET 0009 FORW 008C FORZ B457 FOUND 8340 FREPTR A01C GA01C A01E GA01E A0AE GA0AE A0B2 GA0B2 A102 GA102 A1B7 GA1B7 A1C4 GA1C4 A20E GA20E A216 GA216 A225 GA225 A22D GA22D A263 GA263 A3B6 GA3B6 A420 GA420 A42B GA42B A45B GA45B A53E GA53E A57C GA57C A5A4 GA5A4 A5AE GA5AE A649 GA649 A659 GA659 A679 GA679 A6D1 GA6D1 A6DA GA6DA A6FF GA6FF A720 GA720 A73B GA73B A79C GA79C A79F GA79F A7E2 GA7E2 A7F6 GA7F6 A7FC GA7FC A833 GA833 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0079 EQUATES EXEC-359 A846 GA846 A84A GA84A A84C GA84C A856 GA856 A887 GA887 A897 GA897 A8A5 GA8A5 A8F9 GA8F9 A919 GA919 A9B5 GA995 A9BD GA99D AA59 GAA39 AA6D GAA4D AB5E GAB1F AB67 GAB28 ABAA GAB6B ABC1 GAB82 ABC3 GAB84 ABF0 GABB1 AC02 GABC3 AC29 GABD1 AC5C GAC04 AC5F GAC07 AC6E GAC16 AC98 GAC35 ACF8 GAC95 ACFC GAC99 AD12 GACAF AD1D GACBA AD28 GACC5 AD31 GACCE AD33 GACD0 AD66 GAD03 AD6E GAD0B ADA1 GAD3E ADA5 GAD42 AEBB GAEBB AEE1 GAEE1 AEF6 GAEF6 AEFD GAEFD AF1C GAF1C AF1E GAF1E AF3D GAF3D AF56 GAF56 AF6C GAF6C AFC4 GAFC4 AFE5 GAFE5 B011 GB011 B017 GB017 B0BC GB0BD B0DA GB0DB B0E0 GB0E1 B0F1 GB0F2 B157 GB158 B16F GB170 B172 GB173 B17D GB17E B187 GB188 B195 GB196 B19F GB1A0 B1A6 GB1A7 B1CD GB1CE B1FB GB1FC B1FD GB1FE B240 GB241 B257 GB258 B29B GB29C B2A9 GB2AA B2EA GB2EB B315 GB316 B317 GB318 B33B GB33C B345 GB346 B34E GB34F B351 GB352 B36F GB370 B37B GB37C B38A GB38B B39A GB39B B3AB GB3AC B3B8 GB3B9 B3C3 GB3C4 B3C4 GB3C5 B3D3 GB3D4 B3DC GB3DD B3F3 GB3F4 B403 GB404 B40C GB40D B42F GB430 B44D GB44E B48C GB48D B497 GB498 B4A0 GB4A1 B4BF GB4C0 B4C5 GB4C6 B4D0 GB4D1 B4E7 GB4E8 A8FA GCHAR A8FD GCHAR2 B55C GCHARA 008E GDTECT E025 GE025 B626 GETLP B5D6 GETNUM B31E GETPRM 0071 GETSTR B39B GETTIM B72E GMAGN B739 GMO1 B748 GMO2 B754 GMO3 0087 GOSUBZ 0086 GOTOZ 0085 GOZ ACA9 GPHV ACAC GPHVRC A22F GPLCAL 8389 GRAMFL 0085 GREAD 008C GREAD1 003E GREAT 00C0 GREATZ 0022 GRINT 6034 GRSUB1 802C GRSUB2 802E GRSUB3 008B GVWITE 0086 GWRITE 6036 GWSUB BD0B HAGAIN AB03 HCHAR AB0A HCHAR1 AB12 HCHAR2 BD18 HDONE BAB7 HEXAGN BB57 HEXDON BB02 HEXNS BB0A HEXNS2 BB49 HEXS0 BB43 HEXS1 BB3A HEXS2 BB34 HEXS3 BB2B HEXS4 BB5E HEXSN BB6F HEXSN2 BB7E HEXSN3 BB8B HEXSN4 BB14 HEXSTR B642 HFMT BC88 HPAGIN BCA6 HPOUT BC9C HPUTLP BC96 HPUTS ACD6 HVCHR BCE7 HVGETS BC5A HVPNUM BC68 HVPUTN 002D HYPEN 0084 IFZ 00A3 IMAGEZ B7F9 INOALL 8006 INPUT 03AA INPUTP A195 INPUTX 0092 INPUTZ 0004 INSRT A995 INTARG 00F5 INTERZ 8338 INTRIN A28D INTRND 00CF INTZ B7E0 INVAGN B807 INVLP B813 INVNOK 0084 IO BB98 IOAGN BC2B IODONE 833C IOSTRT B7B1 J1 B7B3 J2 B7BF J3 B690 JOYAGN AC6B JOYST 8377 JOYX A9AA JOYXY 8376 JOYY AC26 KEY AC3D KEY1B AC61 KEY1C AC65 KEY2 AC67 KEY2A B686 KEYAGN 8374 KEYBD A9C0 KEYJOY B6C4 KEYSTR 6022 KILSYM B985 LCOMMA B96D LDIAG A4F3 LEN01 A4FB LEN02 8360 LENCST 8362 LENWST 00D5 LENZ 003C LESS 00BF LESSZ 008D LETZ A8D3 LINE A6A4 LINEGP A026 LINK1 B825 LINK10 B864 LINK11 B898 LINK12 B907 LINK13 B963 LINK14 B98C LINK15 B9B5 LINK16 BAAC LINK17 BB8E LINK18 BC7C LINK19 BCAD LINK1A BCFF LINK1B BD22 LINK1C BD5A LINK1D BD8A LINK1E BD96 LINK1F A030 LINK2 BDA6 LINK20 BDB2 LINK21 BDC3 LINK22 BDFF LINK23 BE0C LINK24 BE1A LINK25 BE27 LINK26 BE54 LINK27 BE60 LINK28 BEA2 LINK29 A03A LINK3 A044 LINK4 A04E LINK5 A058 LINK6 A062 LINK7 A06B LINKA A073 LINKB A07D LINKC A088 LINKD A094 LINKE AE06 LINKS1 AE11 LINKS2 AE1F LINKS3 AE2C LINKS4 AE36 LINKS5 AE42 LINKS6 AE4D LINKS7 AE58 LINKS8 AE64 LINKS9 AE71 LINKSA AE79 LINKSB AE83 LINKSC B71F LINKSD B762 LINKSE B7D1 LINKSF 8030 LINPUT A1A7 LINPUX 00AA LINPUZ 8312 LINUM 0002 LISTZ A3FB LITS05 A42C LITS06 A404 LITS07 A406 LITS08 A411 LITS09 B974 LLPD 8336 LNBUF A6AE LNGP1 A6C2 LNGP2 A6E6 LNGP2B A6FA LNGP4 AB1E LNKRT2 AB1A LNKRTN 00C9 LNZ B4EC LOADAD 00D0 LOGZ B430 LOOKUP B1EA LOOP1 B22C LOOPR BD31 LP1 BD0E LP2 AC89 LPAR 00B7 LPARZ 8348 LSUBP A26D MAXMIN 00DF MAXZ 0072 MEMCHK 0008 MERGEZ 002D MINUS 00C2 MINUSZ 00E0 MINZ 8302 MNUM 837A MOTION B9C2 MOVESA B9ED MOVESB BA08 MOVESC BAA5 MOVESD BA05 MOVESN B9E7 MOVESX 039E MRGPAB 6048 MSGBRK 6053 MSGTA BA1B MTYPE BA25 MTYPE0 BA2D MTYPE1 BA3B MTYPE2 BA48 MTYPE3 BA52 MTYPE4 BA5B MTYPE5 BA6A MTYPE6 BA78 MTYPE7 BA82 MTYPE8 BA8A MTYPE9 BA98 MTYPEA 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0080 EQUATES EXEC-359 BA13 MTYPES 00C3 MULTZ 0088 MVDN 0089 MVUP A68B NBREAK 03BE NEWTOP B472 NEXT B1B0 NEXT1 B1C5 NEXT2 0096 NEXTZ B5FF NGOOD B601 NGOOD1 0039 NINE 02E2 NLNADD A258 NMAX A25E NMAXZ1 A265 NMIN 8314 NMLEN 830C NMPTR B788 NOALL B415 NOTIME 0374 NOTONE 00BD NOTZ A248 NPI B70C NR 800E NREAD A18C NREADX A29F NRND A37F NRNDMZ A681 NTRACE 8328 NUDTAB A147 NUDTB B0EC NULRTN 0023 NUMBER 00FD NUMBEZ 0000 NUMBR 00C8 NUMCOZ B419 NUMERC 00E8 NUMERZ B5C5 NUMFCH A9DD NUMVAR 00C8 NUMZ A69D NUNBRK A686 NUNTRC B780 NXALL B26B NXTPAR B4DC NXTPHR 0060 OFFSET 03BC OLDTOP 0005 OLDZ A218 ONBRK 0378 ONECHR A1DA ONERR A1F2 ONERR2 A206 ONERR4 A1AA ONWARN A1CF ONWRN5 A1D1 ONWRN7 009B ONZ 8008 OPEN A198 OPENX 009F OPENZ 8317 OPTFLG 009E OPTIOZ 00BA ORZ 00F7 OUTPUZ AFE1 OVER 8304 PABPTR 0001 PARCOM A565 PARFF 0074 PARSE 002E PERIOD 00FB PERMAZ 0079 PGMCHR 832C PGMPTR 8352 PHADDR 835D PHDATA 8300 PHLEN 8301 PHRADD B334 PHRASE 00DD PIZ 002B PLUS 00C1 PLUSZ A5BD POS01 A5F8 POS02 A606 POS04 A615 POS06 A617 POS08 A61C POS10 A624 POS12 00D9 POSZ B0F4 PREPN 8344 PRGFLG 8004 PRINT A18F PRINTX 009C PRINTZ 83CE PRTNFN 835E PTCBED 830E PTCCIP 8308 PTCCIS 8314 PTCCPH 8304 PTEBSL 8312 PTFBPH 8300 PTFBSL 830C PTFCIP 8306 PTFCIS B3EF PTIME 8302 PTLBSL 834F PTLCIL 8310 PTLCIP 830A PTLCIS 8316 PTLCPH A430 PUSSTR B637 PUTLP 0022 QUOTE 8389 RAMFLG 8386 RAMFRE 830A RAMPTR 8384 RAMTOP ACA0 RAN16 8378 RANDOM 0095 RANDOZ 0002 RANGE B0BD RANGEV B9AE RCOMMA B996 RDIAG 8358 READ B51E READAD 6A86 READL1 0097 READZ 8022 REC 0006 RECALL 8307 RECLEN A189 RECX 00DE RECZ 00F4 RELATZ 009A REMZ 0006 RESEQZ 800C RESTOR A192 RESTOX 0094 RESTOZ 0088 RETURZ 8375 RKEY B99D RLPD B771 RMAGN B797 RMALL B79F RMOTLP A357 RNDA1 A34F RNDA2 B2FE RNDAG A367 RNDC1 A35F RNDC2 A377 RNDEM A36F RNDEP A3C0 RNDM1 A3D2 RNDMZ 03A5 RNDX1 03A0 RNDX2 00D7 RNDZ B5DF ROWCOL 00B6 RPARZ A628 RPTZ01 A667 RPTZ02 00E1 RPTZZ B6CA RSCAN B6D7 RSCAN2 B6E6 RSCAN3 B6E7 RSCAN4 B6EC RSCAN5 8388 RSTK 0082 RTNB 8326 RTNG A5B9 RTNSET 00A9 RUNZ BEB7 RXBFIL BDBA RXBNEW BE9F RXBRUN BE97 RXBXBP B891 S00T10 B7CA S1ET9F 000B SADD 0388 SAVEVP 0007 SAVEZ B107 SAY 0384 SBUFLV 007D SCHSYM 008F SCNSMT B8AA SCOL10 B8DA SCOL20 02E0 SCRNBS 0083 SCROLL B458 SEARCH 0003 SEETWO A490 SEGZ01 A4D4 SEGZ06 A4EF SEGZ08 00D8 SEGZZ 003B SEMICO 00B4 SEMICZ 00F6 SEQUEZ B330 SETCB B551 SETRW 0386 SEXTRM 0398 SFLAG 00D1 SGNZZ 00D2 SINZ 03B4 SIZCCP 00EB SIZEZ 03B6 SIZREC 03B8 SIZXPT 0396 SLSUBP 007B SMB 831E SMTSRT AADF SND05 B623 SNDASS B61A SNDER AA35 SNDREG BBB6 SOG AA3E SOUND AA77 SOUND1 AABF SOUND2 AAA6 SOUND3 AADD SOUND5 AAEE SOUND6 BBBB SOV 8300 SP00 8302 SP02 8304 SP04 8306 SP06 0020 SPACE B69D SPAR B6A7 SPAR1 B6BF SPAR2 B089 SPCHR A989 SPCOL AEC3 SPDEL1 AEEF SPDEL2 B1CA SPEAK 007E SPEED B260 SPGET 0382 SPGMPT B563 SPGS B590 SPGS1 B59B SPGS2 B5A7 SPGS3 B5B0 SPGS4 B57D SPGSA 8369 SPKSTS 834B SPLFLG B06C SPLOC B09B SPMOVE B0AA SPMOVF 03AA SPNUM B042 SPNUM1 B048 SPNUM2 B04F SPNUM3 B054 SPNUM4 B05A SPNUM5 B04A SPNUM6 AF40 SPRCOI AEC0 SPRDEL 6016 SPRINT AFA0 SPRLC2 AF9D SPRLOC AF75 SPRMAG AF8D SPRMOV AF90 SPRMV2 AF93 SPRMV3 AF96 SPRMV4 AF02 SPRP02 AF33 SPRP03 AFB1 SPRPAT AEFF SPRPOS AFB4 SPRPT2 0300 SPRSAL AE95 SPRT3 AEAA SPRT4 AE8F SPRTE 07FF SPRVB 8308 SPSAL 830A SPTMP 00D3 SQRZ AA13 SQU05 A9FC SQUISH 8020 SRDATA 831C SREF B81A SSDSLL 0082 SSEPZ 039A SSTEMP 039C SSTMP2 000C SSUB 830A STADDR 0372 START B536 STDATA 00B2 STEPZ 83BD STKMAX 83AF STKMIN 8330 STLN 0098 STOPZ 8302 STPT 831A STREND B5B6 STRFCH B5BC STRGET 00C7 STRINZ 8364 STRLEN 8312 STRPTR 8318 STRSP 0065 STRVAL A52B STRZ01 00DB STRZZ 8324 STVSPT B64D SUBLP3 00A8 SUBNDZ B5B5 SUBRTN 833A SUBTAB 00A7 SUBXTZ 00A1 SUBZ B835 SWCHAG 007A SYM 0376 SYMBOL 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0081 EQUATES EXEC-359 833E SYMTAB 0000 SYNCHK 63A5 SZNEW 601E SZRUN A186 SZRUNX 65C9 SZSIZE 0392 TABSAV 00FC TABZ 00D4 TANZ 8354 TEMP1 8356 TEMP2 8364 TEMP4 8366 TEMP5 8368 TEMP6 00B0 THENZ 8379 TIMER B38B TIMING 8351 TIMLEN 6030 TOPL02 601A TOPL10 63DD TOPL15 6372 TOPLEV 8310 TOPSTK 834C TOTTIM 00B1 TOZ 0090 TRACEZ 0083 TREMZ B432 TRYAGN 00EA UALPHZ A6FC UBSUB A70C UBSUB1 A717 UDF A6F7 UNBK01 008F UNBREZ 00C8 UNQSTZ 0091 UNTRAZ 000B UPARR 00F8 UPDATZ 000B UPMV 00ED USINGZ BD2E VAGAIN 00DA VAL A555 VAL01 A571 VALCD 03B2 VALIDL 03B0 VALIDP 00FE VALIDZ 8300 VAR0 830B VAR2 830E VAR4 8310 VAR5 8311 VAR6 8312 VAR7 8314 VAR9 832A VARA 8308 VARC 00F3 VARIAZ 8301 VARV 8320 VARW 8304 VARY 8306 VARY2 AB26 VCHAR AB2D VCHAR1 AB3F VCHAR2 BD44 VDONE 837B VDPSTS 837B VDPSTT AA1F VERS B647 VFMT 008A VGWITE BCB9 VPAGIN 0078 VPOP BCE0 VPOUT 0077 VPUSH BCCD VPUTLP BCC7 VPUTS 0958 VRAMVS 0379 VRMSND 03C0 VROAZ 001C VWIDTH B546 WAIT A0D4 WARNGZ 00A6 WARNZ 6A82 WARNZZ 835A WRITE A6F1 WRNLNF A0D9 WRNN01 A8F1 WRNNO A457 WRNST1 A641 WRNST2 A29A X1SEED 0003 X2 A295 X2SEED BE5B XBMENU BE23 XEAED 8316 XFLAG A684 XMLCON 00BC XORZ AB17 XPTRTN 0030 ZERO B68D ZJOYST B683 ZKEY B6FD ZSCOI B712 ZSDIST 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0082 EQUATES EXEC-359 Symbol Table #2 (New,value) 0000 NUMBR 0000 SYNCHK 0001 FILSPC 0001 PARCOM 0002 BREAK 0002 CSTRIN 0002 LISTZ 0002 RANGE 0003 DLETE 0003 SEETWO 0003 X2 0004 INSRT 0005 OLDZ 0006 FADD 0006 RECALL 0006 RESEQZ 0007 CLRLN 0007 SAVEZ 0008 BACK 0008 FMUL 0008 MERGEZ 0009 FDIV 0009 FORW 000A DOWN 000A DWNARR 000A FCOMP 000B SADD 000B UPARR 000B UPMV 000C SSUB 000D CHRTN 0010 CSNUM 0012 CFI 0012 FLTINT 001C VWIDTH 0020 BKGD 0020 SPACE 0022 GRINT 0022 QUOTE 0023 NUMBER 0024 DOLLAR 002B PLUS 002C COMMAT 002D HYPEN 002D MINUS 002E PERIOD 0030 ZERO 0039 NINE 003A COLON 003B SEMICO 003C LESS 003E GREAT 0041 A 0046 F 0060 OFFSET 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 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 VAL 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 0372 START 0374 NOTONE 0376 SYMBOL 0378 ONECHR 0379 VRMSND 0382 SPGMPT 0384 SBUFLV 0386 SEXTRM 0388 SAVEVP 038A ERRLN 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 03B8 SIZXPT 03BA CSNTP1 03BC CPTEMP 03BC OLDTOP 03BE NEWTOP 03C0 VROAZ 07FF SPRVB 0820 CRNBUF 08BE CRNEND 0958 VRAMVS 6016 SPRINT 6018 CHRTBL 601A TOPL10 601C CHRTAB 601E SZRUN 6022 KILSYM 602E AUTO1 6030 TOPL02 6032 EDITLN 6034 GRSUB1 6036 GWSUB 6048 MSGBRK 6053 MSGTA 6372 TOPLEV 63A5 SZNEW 63DD TOPL15 65C9 SZSIZE 6A78 CHKEND 6A7C DISO 6A7E ENTER 6A80 ENT09 6A82 WARNZZ 6A84 ERRZ 6A84 ERRZZ 6A86 READL1 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 802C GRSUB2 802E GRSUB3 8030 LINPUT 8300 PHLEN 8300 PTFBSL 8300 SP00 8300 VAR0 8301 PHRADD 8301 VARV 8302 AAA1 8302 ACCUM 8302 MNUM 8302 PTLBSL 8302 SP02 8302 STPT 8304 PABPTR 8304 PTEBSL 8304 SP04 8304 VARY 8306 CCPPTR 8306 DFLTLM 8306 PTFCIS 8306 SP06 8306 VARY2 8307 RECLEN 8308 CCC1 8308 CCPADD 8308 CCPADR 8308 PTCCIS 8308 SPSAL 8308 VARC 830A CALIST 830A PTLCIS 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0083 EQUATES EXEC-359 830A RAMPTR 830A SPTMP 830A STADDR 830B VAR2 830C BBB1 830C BYTES 830C NMPTR 830C PTFCIP 830E CHSAV 830E CURINC 830E PTCCIP 830E VAR4 8310 PTLCIP 8310 TOPSTK 8310 VAR5 8311 VAR6 8312 LINUM 8312 PTFBPH 8312 STRPTR 8312 VAR7 8314 CURLIN 8314 NMLEN 8314 PTCCPH 8314 VAR9 8316 PTLCPH 8316 XFLAG 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 PTCBED 835F ARG3 8360 ARG4 8360 LENCST 8361 ARG5 8362 ARG6 8362 LENWST 8363 ARG7 8364 ARG8 8364 STRLEN 8364 TEMP4 8366 BYTE1 8366 TEMP5 8367 ARG11 8367 BYTE2 8368 BYTE3 8368 TEMP6 8369 SPKSTS 836B ARG15 836C ARG16 8374 KEYBD 8375 RKEY 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 83CE PRTNFN A01C GA01C A01E GA01E A026 LINK1 A030 LINK2 A03A LINK3 A044 LINK4 A04E LINK5 A058 LINK6 A062 LINK7 A06B LINKA A073 LINKB A07D LINKC A088 LINKD A094 LINKE A09C EXEC A0A9 EXEC1 A0AE GA0AE A0B2 GA0B2 A0BC EXEC20 A0D4 WARNGZ A0D9 WRNN01 A0DF EXECND A0E9 ERRRDY A0ED EXECTR A102 GA102 A116 CLRRTN A11A EXECBK A127 EXEC6C A12B EXEC6D A143 ERRBRK A147 NUDTB A183 EOFX A186 SZRUNX A189 RECX A18C NREADX A18F PRINTX A192 RESTOX A195 INPUTX A198 OPENX A19B CLOSEX A19E ACCEPX A1A1 DISPLX A1A4 DELETX A1A7 LINPUX A1AA ONWARN A1B7 GA1B7 A1C4 GA1C4 A1CF ONWRN5 A1D1 ONWRN7 A1DA ONERR A1F2 ONERR2 A206 ONERR4 A20E GA20E A216 GA216 A218 ONBRK A225 GA225 A22D GA22D A22F GPLCAL A248 NPI A250 CONPI A258 NMAX A25E NMAXZ1 A263 GA263 A265 NMIN A26D MAXMIN A28D INTRND A295 X2SEED A29A X1SEED A29F NRND A34F RNDA2 A357 RNDA1 A35F RNDC2 A367 RNDC1 A36F RNDEP A377 RNDEM A37F NRNDMZ A3B6 GA3B6 A3C0 RNDM1 A3D2 RNDMZ A3ED CKSTNM A3F3 FLT1 A3FB LITS05 A404 LITS07 A406 LITS08 A411 LITS09 A420 GA420 A42B GA42B A42C LITS06 A430 PUSSTR A438 CONCAT A457 WRNST1 A45B GA45B A48E CONC06 A490 SEGZ01 A4D4 SEGZ06 A4EF SEGZ08 A4F3 LEN01 A4FB LEN02 A4FF CHRZ01 A51A ASC01 A52B STRZ01 A53E GA53E A555 VAL01 A565 PARFF A571 VALCD A57C GA57C A5A4 GA5A4 A5AE GA5AE A5B9 RTNSET A5BD POS01 A5F8 POS02 A606 POS04 A615 POS06 A617 POS08 A61C POS10 A624 POS12 A628 RPTZ01 A641 WRNST2 A649 GA649 A659 GA659 A667 RPTZ02 A679 GA679 A681 NTRACE A684 XMLCON A686 NUNTRC A68B NBREAK A699 ERROLP A69D NUNBRK A6A4 LINEGP A6AE LNGP1 A6C2 LNGP2 A6D1 GA6D1 A6DA GA6DA A6E6 LNGP2B A6F1 WRNLNF A6F7 UNBK01 A6FA LNGP4 A6FC UBSUB A6FF GA6FF A70C UBSUB1 A717 UDF A720 GA720 A73B GA73B A79C GA79C A79F GA79F A7E2 GA7E2 A7F6 GA7F6 A7FC GA7FC A80A DELINK A833 GA833 A846 GA846 A84A GA84A A84C GA84C A856 GA856 A85B ATTNUT A86E DATAST A887 GA887 A889 DATST1 A88A ASC A897 GA897 A8A5 GA8A5 A8AB ERORZ A8D3 LINE A8E5 CONV1 A8F1 WRNNO A8F9 GA8F9 A8FA GCHAR A8FD GCHAR2 A919 GA919 A91D COLOR A921 COL08 A934 COL09 A93C COL10 A949 COL20 A952 COL21 A980 COL22 A989 SPCOL A995 INTARG A9AA JOYXY A9B5 GA995 A9BD GA99D A9C0 KEYJOY A9DD NUMVAR A9EA ATTREG 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0084 EQUATES EXEC-359 A9F6 COMB A9FC SQUISH AA13 SQU05 AA18 CLEAR AA1F VERS AA2D FLTS AA35 SNDREG AA3E SOUND AA59 GAA39 AA6D GAA4D AA77 SOUND1 AAA6 SOUND3 AABF SOUND2 AADD SOUND5 AADF SND05 AAEE SOUND6 AB03 HCHAR AB0A HCHAR1 AB12 HCHAR2 AB17 XPTRTN AB1A LNKRTN AB1E LNKRT2 AB26 VCHAR AB2D VCHAR1 AB3F VCHAR2 AB46 CHARLY AB49 CHAR5 AB5E GAB1F AB67 GAB28 AB89 CHAR40 ABAA GAB6B ABB8 CHAR50 ABC1 GAB82 ABC3 GAB84 ABCA CHARL2 ABE5 CHARL3 ABF0 GABB1 AC02 GABC3 AC0D CHRFIL AC1F CHARL4 AC26 KEY AC29 GABD1 AC3D KEY1B AC5C GAC04 AC5F GAC07 AC61 KEY1C AC65 KEY2 AC67 KEY2A AC6B JOYST AC6E GAC16 AC89 LPAR AC94 CPAR AC98 GAC35 ACA0 RAN16 ACA9 GPHV ACAC GPHVRC ACC9 BORDER ACD6 HVCHR ACF8 GAC95 ACF9 ERRWXY ACFC GAC99 AD12 GACAF AD1D GACBA AD28 GACC5 AD31 GACCE AD33 GACD0 AD3F ERR10 AD66 GAD03 AD6E GAD0B ADA1 GAD3E ADA5 GAD42 ADAA ERRCOM ADAF ERRC05 ADBA ERRSYN ADBE ERRSNM ADC2 ERRMUV ADC6 ERRMEM ADCA ERRSO ADCE ERRNWF ADD2 ERRFNN ADD6 ERRSNS ADDA ERRRSC ADDE ERRRWG ADE2 ERRBS ADE6 ERRLNF ADEA ERRBA ADEE ERRBV ADF2 ERRIAL ADF6 ERRSNF AE00 CHAR1 AE02 CHAR2 AE06 LINKS1 AE11 LINKS2 AE1F LINKS3 AE2C LINKS4 AE36 LINKS5 AE42 LINKS6 AE4D LINKS7 AE58 LINKS8 AE64 LINKS9 AE71 LINKSA AE79 LINKSB AE83 LINKSC AE8F SPRTE AE95 SPRT3 AEAA SPRT4 AEBB GAEBB AEC0 SPRDEL AEC3 SPDEL1 AEE1 GAEE1 AEEF SPDEL2 AEF6 GAEF6 AEFD GAEFD AEFF SPRPOS AF02 SPRP02 AF1C GAF1C AF1E GAF1E AF33 SPRP03 AF3D GAF3D AF40 SPRCOI AF56 GAF56 AF6C GAF6C AF75 SPRMAG AF8D SPRMOV AF90 SPRMV2 AF93 SPRMV3 AF96 SPRMV4 AF9D SPRLOC AFA0 SPRLC2 AFB1 SPRPAT AFB4 SPRPT2 AFC1 DIST AFC4 GAFC4 AFE1 OVER AFE5 GAFE5 AFE9 CODIST B011 GB011 B017 GB017 B029 CHRSET B042 SPNUM1 B048 SPNUM2 B04A SPNUM6 B04F SPNUM3 B054 SPNUM4 B05A SPNUM5 B06C SPLOC B089 SPCHR B09B SPMOVE B0AA SPMOVF B0BC GB0BD B0BD RANGEV B0DA GB0DB B0E0 GB0E1 B0E1 COMMA B0E4 COMMA2 B0EC NULRTN B0EF ASSRTN B0F1 GB0F2 B0F4 PREPN B107 SAY B139 DIRSPK B157 GB158 B16F GB170 B172 GB173 B17D GB17E B187 GB188 B195 GB196 B19F GB1A0 B1A6 GB1A7 B1B0 NEXT1 B1C5 NEXT2 B1CA SPEAK B1CD GB1CE B1EA LOOP1 B1FB GB1FC B1FD GB1FE B210 DIRSPH B22C LOOPR B240 GB241 B254 CONTIN B257 GB258 B260 SPGET B26B NXTPAR B29B GB29C B2A9 GB2AA B2EA GB2EB B2FE RNDAG B315 GB316 B317 GB318 B31E GETPRM B330 SETCB B334 PHRASE B33B GB33C B345 GB346 B34E GB34F B351 GB352 B361 FNDNUM B36F GB370 B37B GB37C B38A GB38B B38B TIMING B39A GB39B B39B GETTIM B3AB GB3AC B3B8 GB3B9 B3C3 GB3C4 B3C4 GB3C5 B3D3 GB3D4 B3DC GB3DD B3EF PTIME B3F3 GB3F4 B403 GB404 B40C GB40D B415 NOTIME B419 NUMERC B42F GB430 B430 LOOKUP B432 TRYAGN B44D GB44E B457 FOUND B458 SEARCH B472 NEXT B48C GB48D B497 GB498 B4A0 GB4A1 B4BF GB4C0 B4C5 GB4C6 B4D0 GB4D1 B4DC NXTPHR B4E7 GB4E8 B4EC LOADAD B51E READAD B536 STDATA B546 WAIT B551 SETRW B558 ERRSSL B55C GCHARA B563 SPGS B57D SPGSA B590 SPGS1 B59B SPGS2 B5A7 SPGS3 B5B0 SPGS4 B5B5 SUBRTN B5B6 STRFCH B5BC STRGET B5C5 NUMFCH B5CE CFIFCH B5D6 GETNUM B5DF ROWCOL B5FF NGOOD B601 NGOOD1 B61A SNDER B621 CIFSND B623 SNDASS B626 GETLP B637 PUTLP B642 HFMT B647 VFMT B64D SUBLP3 B654 CLRFAC B65C ERRFE B660 DSKDSR B66B DSRDSS B683 ZKEY B686 KEYAGN B68D ZJOYST B690 JOYAGN B69D SPAR B6A7 SPAR1 B6BF SPAR2 B6C4 KEYSTR B6CA RSCAN B6D7 RSCAN2 B6E6 RSCAN3 B6E7 RSCAN4 B6EC RSCAN5 B6F7 CPAR2 B6FD ZSCOI B700 COINLP B70C NR B70F AR B712 ZSDIST B715 DISLP B71F LINKSD B72E GMAGN B739 GMO1 B748 GMO2 B754 GMO3 B762 LINKSE B771 RMAGN B780 NXALL B788 NOALL B797 RMALL B79F RMOTLP B7B1 J1 B7B3 J2 B7BF J3 B7CA S1ET9F B7D1 LINKSF B7E0 INVAGN B7F9 INOALL B807 INVLP B813 INVNOK B81A SSDSLL B825 LINK10 B835 SWCHAG B864 LINK11 B873 DCHAGN B891 S00T10 B898 LINK12 B8AA SCOL10 B8DA SCOL20 B907 LINK13 B918 DCOL10 B93E DCOL20 B963 LINK14 B96D LDIAG B974 LLPD B985 LCOMMA 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0085 EQUATES EXEC-359 B98C LINK15 B996 RDIAG B99D RLPD B9AE RCOMMA B9B5 LINK16 B9C2 MOVESA B9E7 MOVESX B9ED MOVESB BA05 MOVESN BA08 MOVESC BA13 MTYPES BA1B MTYPE BA25 MTYPE0 BA2D MTYPE1 BA3B MTYPE2 BA48 MTYPE3 BA52 MTYPE4 BA5B MTYPE5 BA6A MTYPE6 BA78 MTYPE7 BA82 MTYPE8 BA8A MTYPE9 BA98 MTYPEA BAA5 MOVESD BAAC LINK17 BAB7 HEXAGN BB02 HEXNS BB0A HEXNS2 BB14 HEXSTR BB2B HEXS4 BB34 HEXS3 BB3A HEXS2 BB43 HEXS1 BB49 HEXS0 BB57 HEXDON BB5E HEXSN BB6F HEXSN2 BB7E HEXSN3 BB8B HEXSN4 BB8E LINK18 BB98 IOAGN BBB6 SOG BBBB SOV BBC0 CRUI BBDB CRUI16 BBEB CRUO BC01 CRUO16 BC10 CRUO8 BC15 CSW BC1D CSR BC25 CSV BC2B IODONE BC32 CRUTMP BC3A CRUSET BC50 CSLOAD BC5A HVPNUM BC68 HVPUTN BC7C LINK19 BC88 HPAGIN BC96 HPUTS BC9C HPUTLP BCA6 HPOUT BCAD LINK1A BCB9 VPAGIN BCC7 VPUTS BCCD VPUTLP BCE0 VPOUT BCE7 HVGETS BCFF LINK1B BD0B HAGAIN BD0E LP2 BD18 HDONE BD22 LINK1C BD2E VAGAIN BD31 LP1 BD44 VDONE BD4E CPUPGM BD5A LINK1D BD69 EXAGN BD8A LINK1E BD96 LINK1F BDA6 LINK20 BDB2 LINK21 BDBA RXBNEW BDC3 LINK22 BDCF BIASAG BDDE BIASLP BDEB BIASM BDEE BIASSV BDFF LINK23 BE0C LINK24 BE1A LINK25 BE23 XEAED BE27 LINK26 BE2E EASAVE BE4E EAMENU BE54 LINK27 BE5B XBMENU BE60 LINK28 BE97 RXBXBP BE9F RXBRUN BEA2 LINK29 BEB7 RXBFIL E025 GE025 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0086 EQUATES EXEC-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 0087 EQUATES EXEC-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 [2750] 925D BC,E0,0D ST @CHAT,V@NLEN(@PABPTR) Copy name length to PAB 9260 04,42 [2751] 9262 BD,0A,E0 DST V@NLEN-1(@PABPTR),@STADDR Avoid problems(bugs!) 9265 0C,04 [2752] 9267 8E,80,89 CZ @RAMFLG If ERAM not exist or imperati [2753] 926A 52,75 BR G9275 [2754] 926C 34,0A,E0 MOVE @STADDR,V*PGMPTR,V@NLEN+1(@PABPTR) 926F 0E,04,B0 9272 2C