99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0001 Version 2.0 (Weiand 1985) Options : LCSFPF [0001] *********************************************************** [0002] TITL 'MYXB4' [0003] GROM >8000 [0004] *********************************************************** [0005] TITL 'EQUATES FLMGR-359' [0006] *********************************************************** [0007] A040 CPUBAS EQU >A040 Expansion RAM base [0008] *********************************************************** [0009] * GROM ADDRESSES [0010] 6038 MZMSG EQU >6038 Start of message area [0011] *********************************************************** [0012] 7A06 GTLIST EQU >7A06 GKXB address [0013] CB00 KEYTAB EQU >CB00 [0014] CD77 ERRTAB EQU >CD77 [0015] CE1F TRACBK EQU >CE1F [0016] CF68 RETNOS EQU >CF68 [0017] 76EB EDTZZ0 EQU >76EB Edit a line or display it tab [0018] 76F7 EDTZ00 EQU >76F7 Edit a line or display it [0019] 7795 SAVLIN EQU >7795 Save input line address [0020] *********************************************************** [0021] * EQUATES FOR ROUTINES FROM OTHER GROM SECTIONS [0022] [0023] 6012 TOPL15 EQU >6012 RETURN FROM OLD or SAVE [0024] 6014 INITPG EQU >6014 Initialize program space [0025] 601A TOPL10 EQU >601A Return to main and re-init [0026] 6022 KILSYM EQU >6022 KILL SYMBOL TABLE ROUTINE [0027] 602E AUTO1 EQU >602E Get arguments for LIST comman [0028] 6030 TOPL02 EQU >6030 RTN address for failing AUTOL [0029] 6032 EDITLN EQU >6032 Edit a line into the program [0030] 6036 GWSUB EQU >6036 Write a few bytes of data to [0031] 6053 MSGTA EQU >6053 Message "try again" [0032] [0033] 6A74 LLIST EQU >6A74 List a line [0034] 6A76 READLN EQU >6A76 Read a line from keyboard [0035] 6A82 WARNZZ EQU >6A82 WARNING MESSAGE ROUTINE [0036] 6A84 ERRZZ EQU >6A84 ERROR MESSAGE ROUTINE [0037] 6A84 ERRZ EQU >6A84 ERRor routine [0038] 6A86 READL1 EQU >6A86 Read a line from keyboard [0039] [0040] A002 LITS05 EQU >A002 Literal string common code [0041] A004 EXEC EQU >A004 [0042] A006 LINE EQU >A006 GET LINE NUMBER ROUTINE [0043] A008 DATAST EQU >A008 SEARCH FOR NEXT "DATA" STATEM [0044] A00A ASC EQU >A00A [0045] A00C EXEC1 EQU >A00C EXECute a program statememt [0046] A00E EXEC6D EQU >A00E [0047] A010 DELINK EQU >A010 [0048] A012 CONVER EQU >A012 CONVERT WITH WARNING [0049] A014 SQUISH EQU >A014 [0050] A016 VALCD EQU >A016 CONVERT STRING TO NUMBER [0051] A018 INTRND EQU >A018 Initilize random number [0052] A020 UBSUB EQU >A020 CLEAR BREAKPOINTS IN LN # TAB [0053] A026 LINK1 EQU >A026 LINK to subprogram [0054] [0055] 0022 ATNZZ EQU >0022 Arctangent routine [0056] *********************************************************** [0057] * Equates for routine in MONITOR [0058] 0010 CALDSR EQU >10 CALL DEVICE SERVICE ROUTINE [0059] 0012 CFI EQU >12 CONVERT TO TWO BYTE INTEGER [0060] 0034 TONE1 EQU >34 ACCEPT TONE [0061] 0036 TONE2 EQU >36 BAD TONE [0062] 0018 CHAR2Z EQU >18 CHARACTER TABLE ADDRESS [0063] 004A CHAR3Z EQU >4A CHARACTER TABLE ADDRESS [0064] *********************************************************** [0065] * Equates for XMLs 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0002 EQUATES FLMGR-359 [0066] 0000 SYNCHK EQU >00 SYNCHK XML selector [0067] 0001 FILSPC EQU >01 Fill-space utility [0068] 0002 CSTRIN EQU >02 Copy-string utility [0069] 0003 SEETWO EQU >03 SEETWO XML selector [0070] 0070 COMPCT EQU >70 PREFORM A GARBAGE COLLECTION [0071] 0071 GETSTR EQU >71 SYSTEM GET STRING [0072] 0072 MEMCHK EQU >72 MEMORY check routine: VDP [0073] 0073 CNS EQU >73 Convert number to string * Warning - Default changed in 0073 [0074] 0074 PARSE EQU >74 Parse a value [0075] 0075 CONT EQU >75 Continue parsing [0076] 0077 VPUSH EQU >77 Push on value stack [0077] 0078 VPOP EQU >78 Pop off value stack [0078] 0079 PGMCHR EQU >79 GET PROGRAM CHARACTER [0079] 007A SYM EQU >7A Find SYMBOL entry [0080] 007B SMB EQU >7B Also for ARRAYS [0081] 007C ASSGNV EQU >7C Assign VARIABLE [0082] 007D SCHSYM EQU >7D Search symbol table [0083] 007E SPEED EQU >7E SPEED UP XML [0084] 007F CRUNCH EQU >7F Crunch an input line [0085] 0080 CIF EQU >80 Convert INTEGER to FLOATING P [0086] 0081 CONTIN EQU >81 Continue after a break [0087] 0083 SCROLL EQU >83 SCROLL THE SCREEN [0088] 0084 IO EQU >84 IO utility (KW table search) [0089] 0085 GREAD EQU >85 READ DATA FROM ERAM [0090] 0086 GWRITE EQU >86 WRITE DATA TO ERAM [0091] 0087 DELREP EQU >87 REMOVE CONTENT FROM VDP/ERAM [0092] 0088 MVDN EQU >88 MOVE DATA IN VDP/ERAM [0093] 0089 MVUP EQU >89 MOVE DATA IN VDP/ERAM [0094] 008A VGWITE EQU >8A MOVE DATA FROM VDP TO ERAM [0095] 008B GVWITE EQU >8B WRITE DATA FROM GRAM TO VRAM [0096] 008C GREAD1 EQU >8C READ DATA FROM ERAM [0097] 008E GDTECT EQU >8E ERAM DETECT&ROM PAGE 1 ENABLE [0098] 008F SCNSMT EQU >8F SCAN STATEMENT FOR PRESCAN [0099] *********************************************************** [0100] [0101] * Temporary workspaces in EDIT [0102] 8300 VAR0 EQU >8300 TEMPORARY [0103] 8301 VARV EQU >8301 TEMPORARY [0104] 8302 ACCUM EQU >8302 # OF BYTES ACCUMULATOR (4 BYTE [0105] 8302 STPT EQU >8302 TWO BYTES [0106] 8302 MNUM EQU >8302 Ussually a counter [0107] 8302 AAA1 EQU >8302 [0108] 8304 VARY EQU >8304 [0109] 8304 PABPTR EQU >8304 Pointer to current PAB [0110] 8306 VARY2 EQU >8306 Use in MVDN only [0111] 8306 DFLTLM EQU >8306 Default array limit (10) [0112] 8306 CCPPTR EQU >8306 OFFSET WITHIN RECORED (1) [0113] * or Pointer to current column [0114] 8307 RECLEN EQU >8307 LENGTH OF CURRENT RECORD (1) [0115] 8308 CCPADR EQU >8308 RAM address of current refs [0116] * or Actual buffer address or c [0117] 8308 VARC EQU >8308 [0118] 8308 CCPADD EQU >8308 RAM address of current color [0119] 8308 CCC1 EQU >8308 [0120] 830A CALIST EQU >830A Call list for resolving refs [0121] 830A RAMPTR EQU >830A Pointer for crunching [0122] 830A STADDR EQU >830A Start address - usually for co [0123] 830C BYTES EQU >830C BYTE COUNTER [0124] * or String length for GETSTR [0125] 830C NMPTR EQU >830C Pointer save for pscan [0126] 830C BBB1 EQU >830C [0127] 830E CHSAV EQU >830E [0128] 830E CURINC EQU >830E Increment for auto-num mode 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0003 EQUATES FLMGR-359 [0129] 830E VAR4 EQU >830E [0130] 8310 TOPSTK EQU >8310 Top of data stack pointer [0131] 8310 VAR5 EQU >8310 [0132] 8311 VAR6 EQU >8311 [0133] 8312 LINUM EQU >8312 Used to determine end of scan [0134] 8314 NMLEN EQU >8314 Current line for auto-num [0135] 8314 CURLIN EQU >8314 Current line for auto-num [0136] * or Starting line number for L [0137] 8316 VAR9 EQU >8316 [0138] 8316 XFLAG EQU >8316 SCAN FLAG-BITS USED AS BELOW [0139] 8317 DSRFLG EQU >8317 INTERNAL =60, EXTERNAL =0 (1) [0140] 8317 OPTFLG EQU >8317 Option flag byte during OPEN [0141] 8317 FORNET EQU >8317 Nesting level of for/next [0142] 8317 FNUM EQU >8317 Current file number for search [0143] [0144] *********************************************************** [0145] * Permanent workspace variables [0146] 8318 STRSP EQU >8318 String space begining [0147] 831A STREND EQU >831A String space ending [0148] 831C SREF EQU >831C Temporary string pointer [0149] 831E SMTSRT EQU >831E Start of current statement [0150] 8320 VARW EQU >8320 Screen address (CURSOR) [0151] 8322 ERRCOD EQU >8322 Return error code from ALC [0152] 8324 STVSPT EQU >8324 Value-stack base [0153] 8326 RTNG EQU >8326 Return vector from 9900 code [0154] 8328 NUDTAB EQU >8328 Start of NUD table [0155] 832A VARA EQU >832A Ending display location [0156] 832C PGMPTR EQU >832C Program text pointer (TOKEN) [0157] 832E EXTRAM EQU >832E Line number table pointer [0158] 8330 STLN EQU >8330 Start of line number table [0159] 8332 ENLN EQU >8332 End of line number table [0160] 8334 DATA EQU >8334 Data pointer for READ [0161] 8336 LNBUF EQU >8336 Line table pointer for READ [0162] 8338 INTRIN EQU >8338 Add of intrinsic poly constant [0163] 833A SUBTAB EQU >833A Subprogram symbol table [0164] 833C IOSTRT EQU >833C PAB list/Start of I/O chain [0165] 833E SYMTAB EQU >833E Symbol table pointer [0166] 8340 FREPTR EQU >8340 Free space pointer [0167] 8342 CHAT EQU >8342 Current charater/token [0168] 8343 BASE EQU >8343 OPTION BASE value [0169] 8344 PRGFLG EQU >8344 Program/imperative flag [0170] 8345 FLAG EQU >8345 General 8-bit flag [0171] 8346 BUFLEV EQU >8346 Crunch-buffer destruction leve [0172] 8348 LSUBP EQU >8348 Last subprogram block on stack [0173] * FAC EQU >834A Floating-point ACcurmulator [0174] 834B FAC1 EQU FAC+1 [0175] 834C FAC2 EQU FAC+2 [0176] 834C AAA EQU FAC+2 [0177] 834D FAC3 EQU FAC+3 [0178] 834E FAC4 EQU FAC+4 [0179] 834E CCC EQU FAC+4 [0180] 834E FFF EQU FAC+4 [0181] 834F FAC5 EQU FAC+5 [0182] 8350 FAC6 EQU FAC+6 [0183] 8350 BBB EQU FAC+6 [0184] 8350 EEE EQU FAC+6 [0185] 8351 FAC7 EQU FAC+7 [0186] 8352 FAC8 EQU FAC+8 [0187] 8353 FAC9 EQU FAC+9 [0188] 8354 FAC10 EQU FAC+10 [0189] 8354 DDD1 EQU FAC+10 [0190] 8355 FAC11 EQU FAC+11 [0191] 8356 FAC12 EQU FAC+12 [0192] 8356 FFF1 EQU FAC+12 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0004 EQUATES FLMGR-359 [0193] 8357 FAC13 EQU FAC+13 [0194] 8358 FAC14 EQU FAC+14 [0195] 8358 EEE1 EQU FAC+14 [0196] 8359 FAC15 EQU FAC+15 [0197] 835A FAC16 EQU FAC+16 [0198] 835B FAC17 EQU FAC+17 [0199] * ARG EQU >835C Floating-point ARGument [0200] 835D ARG1 EQU ARG+1 [0201] 835E ARG2 EQU ARG+2 [0202] 835F ARG3 EQU ARG+3 [0203] 8360 ARG4 EQU ARG+4 [0204] 8361 ARG5 EQU ARG+5 [0205] 8362 ARG6 EQU ARG+6 [0206] 8363 ARG7 EQU ARG+7 [0207] 8364 ARG8 EQU ARG+8 [0208] 8364 XSTLN EQU >8364 GKXB variable [0209] 8366 TEMP5 EQU >8366 [0210] 8367 ARG11 EQU ARG+11 [0211] 836B ARG15 EQU ARG+15 [0212] 836C ARG16 EQU ARG+16 [0213] * VSPTR EQU >836E Value stack pointer [0214] *********************************************************** [0215] * GPL Status Block [0216] 8372 STACK EQU >8372 STACK FOR DATA [0217] 8374 KEYBD EQU >8374 KEYBOARD SELCTION [0218] 8375 RKEY EQU >8375 KEY CODE [0219] 8376 EXPZ EQU >8376 Exponent in floating-point [0220] 8378 RANDOM EQU >8378 RANDOM NUMBER GENERATOR [0221] 8379 TIMER EQU >8379 TIMING REGISTER [0222] 837A MOTION EQU >837A NUMBER OF MOVING SPRITES [0223] 837B VDPSTS EQU >837B VDP STATUS REGISTER [0224] 837C ERCODE EQU >837C STATUS REGISTER [0225] *********************************************************** [0226] 8384 RAMTOP EQU >8384 Highest address in ERAM [0227] 8386 RAMFRE EQU >8386 Free pointer in the ERAM [0228] 8388 RSTK EQU >8388 Subroutine stack base [0229] * (Starts at >8A) [0230] 8389 RAMFLG EQU >8389 ERAM flag [0231] 83AF STKMIN EQU >83AF Base of data stack [0232] 83BD STKMAX EQU >83BD Top of data stack [0233] 83CE PRTNFN EQU >83CE Sound - previous tone finished [0234] *********************************************************** [0235] * VDP addresses [0236] 02E0 SCRNBS EQU >02E0 Screen base addr for last lin [0237] 02E2 NLNADD EQU >02E2 New LiNe ADDress [0238] 02FE ENDSCR EQU >02FE END of SCReen address [0239] 0371 LODFLG EQU >0371 Auto-boot needed flag [0240] 0372 START EQU >0372 Line to start execution at [0241] * Temporary [0242] 0374 NOTONE EQU >0374 NO-TONE for SIZE in ACCEPT us [0243] * in FLMGRS (4 bytes used) [0244] 0376 SYMBOL EQU >0376 Saved symbol table pointer [0245] 0382 SPGMPT EQU >0382 Saved PGMPTR for continue [0246] 0384 SBUFLV EQU >0384 Saved BUFLEV for contiue [0247] 0386 SEXTRM EQU >0386 Saved EXTRAM for continue [0248] 0388 SAVEVP EQU >0388 Saved VSPRT for continue [0249] 038A ERRLN EQU >038A On-error line pointer [0250] 038C BUFSRT EQU >038C Edit recall start addr (VARW) [0251] 038E BUFEND EQU >038E Edit recall end addr (VARA) [0252] 0390 CSNTMP EQU >0390 Use as temporary stored place [0253] * or CSN TEMPORARY FOR FAC12 [0254] 0392 TABSAV EQU >0392 Saved main symbol table ponte [0255] 0394 AUTTMP EQU >0394 AUTOLD TEMPORARY IN SIDE ERRZ [0256] 0396 SLSUBP EQU >0396 Saved LSUBP for continue 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0005 EQUATES FLMGR-359 [0257] 0398 SFLAG EQU >0398 Saved on-warning/break bits [0258] 039A SSTEMP EQU >039A To save subprogram program ta [0259] 039C SSTMP2 EQU >039C Same as above. Used in SUBPRO [0260] 039E MRGPAB EQU >039E MERGEd temporary for pab ptr [0261] 03AA INPUTP EQU >03AA INPUT TEMPORARY FOR PTR TO PR [0262] 03AC ACCVRW EQU >03AC Temoporary used in ERRZZ, als [0263] * used in FLMGRS [0264] * or temporary for @VARW, @VARA [0265] 03AE ACCVRA EQU >03AE TRY AGAIN [0266] 03B0 VALIDP EQU >03B0 Use as two values passing fro [0267] * or PTR TO STANDARD STRING IN VAL [0268] 03B2 VALIDL EQU >03B2 VALIDATE code to READL1 [0269] * or Length of string in validate [0270] 03B4 SIZCCP EQU >03B4 SIZE TEMPORARY FOR CCPADR [0271] 03B6 SIZREC EQU >03B6 SIZE TEMPORARY FOR RECLEN [0272] * Also used as temporary in RELO [0273] *---------------------------------------------------------- [0274] * Added 6/8/81 for NOPSCAN feature [0275] 03B7 PSCFG EQU >03B7 [0276] *---------------------------------------------------------- [0277] 03B7 ACCTRY EQU >03B7 ACCEPT "TRY AGAIN" FLAG [0278] 03B8 SIZXPT EQU >03B8 Save XPT in SIZE when "try ag [0279] 03B9 SAPROT EQU >03B9 PROTECTION flag in SAVE [0280] 03BA CSNTP1 EQU >03BA CSN TEMPORARY FOR FAC10 [0281] *---------------------------------------------------------- [0282] * Flag 0: 99/4 console, 5/29/81 [0283] * 1: 99/4A console [0284] 03BB CONFLG EQU >03BB [0285] *---------------------------------------------------------- [0286] 03BC OLDTOP EQU >03BC Temporary used in ERRZZ, also [0287] * or Old top of memory for RELOCA [0288] 03BC CPTEMP EQU >03BC CCPPTR, RECLEN temp in INPUT [0289] 03BE NEWTOP EQU >03BE New top of memory for RELOCA [0290] 0820 CRNBUF EQU >0820 CRuNch BUFfer address [0291] 08BE CRNEND EQU >08BE CRuNch buffer END [0292] 08C0 RECBUF EQU >08C0 Edit RECall BUFfer [0293] 0958 VRAMVS EQU >0958 Default base of value stack [0294] [0295] *********************************************************** [0296] * IMMEDITATE VALUES [0297] 0000 NUMBR EQU >00 NUMERIC validate [0298] 0002 LISTZ EQU >02 [0299] 0005 OLDZ EQU >05 [0300] 0006 RESEQZ EQU >06 [0301] 0007 SAVEZ EQU >07 [0302] 0008 MERGEZ EQU >08 [0303] 000A DWNARR EQU >0A [0304] 000B UPARR EQU >0B [0305] 000D CHRTN EQU >0D [0306] 0020 BKGD EQU >20 BACKGROUND CHARACTER [0307] 0060 OFFSET EQU >60 OFFSET FOR VIDEO TABLES [0308] 0065 STRVAL EQU >65 Value in accum. is string val [0309] *********************************************************** [0310] * Editting command equates [0311] 0002 BREAK EQU >02 Break key [0312] 0003 DLETE EQU >03 Delete key [0313] 0004 INSRT EQU >04 Insert key [0314] 0006 RECALL EQU >06 Edit-buffer recall [0315] 0007 CLRLN EQU >07 Clear-line key [0316] 0008 BACK EQU >08 Back-space key [0317] 0009 FORW EQU >09 Forward-space key [0318] 000A DOWN EQU >0A Down-arrow key [0319] 000B UPMV EQU >0B Up-arrow key [0320] 001C VWIDTH EQU >1C Screen width (PRINT) 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0006 EQUATES FLMGR-359 [0321] 0020 SPACE EQU >20 Space key [0322] 0022 QUOTE EQU >22 " [0323] 0024 DOLLAR EQU >24 $ [0324] 007E CURSOR EQU >1E+OFFSET CURSOR [0325] 007F EDGECH EQU >1F+OFFSET EDGE character [0326] 002C COMMA EQU >2C , [0327] 002D MINUS EQU >2D - [0328] *********************************************************** [0329] * PAB offset [0330] 0000 CZOPEN EQU 0 OPEN CODE [0331] 0001 CZCLOS EQU 1 CLOSE CODE [0332] 0002 FIL EQU 2 File number within BASIC(0-25 [0333] 0002 CZREAD EQU 2 READ CODE [0334] 0003 OFS EQU 3 Offset within record [0335] 0003 CZWRIT EQU 3 WRITE CODE [0336] 0004 COD EQU 4 I/O code [0337] 0004 CZREST EQU 4 RESTORE/REWIND CODE [0338] 0005 FLG EQU 5 I/O mode flag byte [0339] 0005 CZLOAD EQU 5 LOAD CODE [0340] 0006 BUF EQU 6 Start of data buffer [0341] 0006 CZSAVE EQU 6 SAVE CODE [0342] 0007 CZDELE EQU 7 DELETE CODE [0343] 0008 LEN EQU 8 Record length [0344] 0008 CZSCR EQU 8 SCRATCH CODE [0345] 0009 CNT EQU 9 Character count [0346] 0009 CZSTAT EQU 9 STATUS CODE [0347] 000A RNM EQU 10 Record number [0348] 000C SCR EQU 12 Screen base offset [0349] 000D NLEN EQU 13 Length of file descriptor [0350] 000E PABLEN EQU 14 PAB LENGTH [0351] *********************************************************** [0352] * BASIC TOKEN TABLE [0353] * EQU >80 spare token [0354] 0081 ELSEZ EQU >81 ELSE [0355] 0082 SSEPZ EQU >82 :: [0356] 0083 TREMZ EQU >83 $ [0357] 0084 IFZ EQU >84 IF [0358] 0085 GOZ EQU >85 GO [0359] 0086 GOTOZ EQU >86 GOTO [0360] 0087 GOSUBZ EQU >87 GOSUB [0361] 0088 RETURZ EQU >88 RETURN [0362] 0089 DEFZ EQU >89 DEF [0363] 008A DIMZ EQU >8A DIM [0364] 008B ENDZ EQU >8B END [0365] 008C FORZ EQU >8C FOR [0366] 008D LETZ EQU >8D LET [0367] 008E BREAKZ EQU >8E BREAK [0368] 008F UNBREZ EQU >8F UNBREAK [0369] 0090 TRACEZ EQU >90 TRACE [0370] 0091 UNTRAZ EQU >91 UNTRACE [0371] 0092 INPUTZ EQU >92 INPUT [0372] 0093 DATAZ EQU >93 DATA [0373] 0094 RESTOZ EQU >94 RESTORE [0374] 0095 RANDOZ EQU >95 RANDOMIZE [0375] 0096 NEXTZ EQU >96 NEXT [0376] 0097 READZ EQU >97 READ [0377] 0098 STOPZ EQU >98 STOP [0378] 0099 DELETZ EQU >99 DELETE [0379] 009A REMZ EQU >9A REM [0380] 009B ONZ EQU >9B ON [0381] 009C PRINTZ EQU >9C PRINT [0382] 009D CALLZ EQU >9D CALL [0383] 009E OPTIOZ EQU >9E OPTION [0384] 009F OPENZ EQU >9F OPEN 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0007 EQUATES FLMGR-359 [0385] 00A0 CLOSEZ EQU >A0 CLOSE [0386] 00A1 SUBZ EQU >A1 SUB [0387] 00A2 DISPLZ EQU >A2 DISPLAY [0388] 00A3 IMAGEZ EQU >A3 IMAGE [0389] 00A4 ACCEPZ EQU >A4 ACCEPT [0390] 00A5 ERRORZ EQU >A5 ERROR [0391] 00A6 WARNZ EQU >A6 WARNING [0392] 00A7 SUBXTZ EQU >A7 SUBEXIT [0393] 00A8 SUBNDZ EQU >A8 SUBEND [0394] 00A9 RUNZ EQU >A9 RUN [0395] 00AA LINPUZ EQU >AA LINPUT [0396] * EQU >AB spare token (LIBRARY) [0397] * EQU >AC spare token (REAL) [0398] * EQU >AD spare token (INTEGER) [0399] * EQU >AE spare token (SCRATCH) [0400] * EQU >AF spare token [0401] 00B0 THENZ EQU >B0 THEN [0402] 00B1 TOZ EQU >B1 TO [0403] 00B2 STEPZ EQU >B2 STEP [0404] 00B3 COMMAZ EQU >B3 , [0405] 00B4 SEMICZ EQU >B4 ; [0406] 00B5 COLONZ EQU >B5 : [0407] 00B6 RPARZ EQU >B6 ) [0408] 00B7 LPARZ EQU >B7 ( [0409] 00B8 CONCZ EQU >B8 & (CONCATENATE) [0410] * EQU >B9 spare token [0411] 00BA ORZ EQU >BA OR [0412] 00BB ANDZ EQU >BB AND [0413] 00BC XORZ EQU >BC XOR [0414] 00BD NOTZ EQU >BD NOT [0415] 00BE EQUALZ EQU >BE = [0416] 00BF LESSZ EQU >BF < [0417] 00C0 GREATZ EQU >C0 > [0418] 00C1 PLUSZ EQU >C1 + [0419] 00C2 MINUSZ EQU >C2 - [0420] 00C3 MULTZ EQU >C3 * [0421] 00C4 DIVIZ EQU >C4 / [0422] 00C5 CIRCUZ EQU >C5 ^ [0423] * EQU >C6 spare token [0424] 00C7 STRINZ EQU >C7 QUOTED STRING [0425] 00C8 UNQSTZ EQU >C8 UNQUOTED STRING [0426] 00C8 NUMZ EQU >C8 ALSO NUMERICAL STRING [0427] 00C8 NUMCOZ EQU >C8 ALSO UNQUOTED STRING [0428] 00C9 LNZ EQU >C9 LINE NUMBER CONSTANT [0429] * EQU >CA spare token [0430] 00CB ABSZ EQU >CB ABS [0431] 00CC ATNZ EQU >CC ATN [0432] 00CD COSZ EQU >CD COS [0433] 00CE EXPZZ EQU >CE EXP [0434] 00CF INTZ EQU >CF INT [0435] 00D0 LOGZ EQU >D0 LOG [0436] 00D1 SGNZZ EQU >D1 SGN [0437] 00D2 SINZ EQU >D2 SIN [0438] 00D3 SQRZ EQU >D3 SQR [0439] 00D4 TANZ EQU >D4 TAN [0440] 00D5 LENZ EQU >D5 LEN [0441] 00D6 CHRZZ EQU >D6 CHR$ [0442] 00D7 RNDZ EQU >D7 RND [0443] 00D8 SEGZZ EQU >D8 SEG$ [0444] 00D9 POSZ EQU >D9 POS [0445] 00DA VAL EQU >DA VAL [0446] 00DB STRZZ EQU >DB STR$ [0447] 00DC ASCZ EQU >DC ASC [0448] 00DD PIZ EQU >DD PI 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0008 EQUATES FLMGR-359 [0449] 00DE RECZ EQU >DE REC [0450] 00DF MAXZ EQU >DF MAX [0451] 00E0 MINZ EQU >E0 MIN [0452] 00E1 RPTZZ EQU >E1 RPT$ [0453] * EQU >E2 unused [0454] * EQU >E2 unused [0455] * EQU >E3 unused [0456] * EQU >E4 unused [0457] * EQU >E5 unused [0458] * EQU >E6 unused [0459] * EQU >E7 unused [0460] 00E8 NUMERZ EQU >E8 NUMERIC [0461] 00E9 DIGITZ EQU >E9 DIGIT [0462] 00EA UALPHZ EQU >EA UALPHA [0463] 00EB SIZEZ EQU >EB SIZE [0464] 00EC ALLZ EQU >EC ALL [0465] 00ED USINGZ EQU >ED USING [0466] 00EE BEEPZ EQU >EE BEEP [0467] 00EF ERASEZ EQU >EF ERASE [0468] 00F0 ATZ EQU >F0 AT [0469] 00F1 BASEZ EQU >F1 BASE [0470] * EQU >F2 spare token (TEMPORARY) [0471] 00F3 VARIAZ EQU >F3 VARIABLE [0472] 00F4 RELATZ EQU >F4 RELATIVE [0473] 00F5 INTERZ EQU >F5 INTERNAL [0474] 00F6 SEQUEZ EQU >F6 SEQUENTIAL [0475] 00F7 OUTPUZ EQU >F7 OUTPUT [0476] 00F8 UPDATZ EQU >F8 UPDATE [0477] 00F9 APPENZ EQU >F9 APPEND [0478] 00FA FIXEDZ EQU >FA FIXED [0479] 00FB PERMAZ EQU >FB PERMANENT [0480] 00FC TABZ EQU >FC TAB [0481] 00FD NUMBEZ EQU >FD # [0482] 00FE VALIDZ EQU >FE VALIDATE [0483] * EQU >FF ILLEGAL VALUE [0484] *********************************************************** [0485] TITL 'FLMGR-359' [0486] *********************************************************** [0487] * GROM HEADER [0488] *********************************************************** [0489] * Branch table routines [0490] *********************************************************** [0491] 8000 42,57 BR DISPL1 DISPLAY routine [0492] 8002 41,7C BR DELET DELETE routine [0493] 8004 42,66 BR PRINT PRINT routine [0494] 8006 45,F0 BR INPUT INPUT routine (not yet impele [0495] 8008 40,32 BR OPEN OPEN routine [0496] 800A 41,96 BR CLOSE CLOSE routine [0497] 800C 41,FC BR RESTOR RESTORE routine [0498] 800E 4B,3A BR READ READ routine [0499] 8010 53,08 BR GETDAT Get DATA from ERAM/VDP (not u [0500] 8012 41,F4 BR CLSALL CLOSE ALL OPEN FILES subrouti [0501] 8014 4D,B8 BR SAVE SAVE routine [0502] 8016 4B,C4 BR OLD LOAD routine [0503] 8018 50,68 BR LIST LIST routine [0504] 801A 56,A5 BR OUTREC Output record routine [0505] 801C 51,DE BR EOF End of file routine [0506] 801E 49,6B BR ACCEPT ACCEPT routine [0507] 8020 4B,96 BR SRDATA Search "DATAZ" routine [0508] 8022 51,CA BR SUBREC RECORD routine [0509] 8024 55,AD BR CHKEND Check EOS [0510] 8026 4B,CA BR OLD1 A subroutine for LOAD [0511] 8028 50,02 BR MERGE MERGE a program [0512] 802A 51,79 BR GRMLST List a line out of ERAM 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0009 FLMGR-359 [0513] 802C 51,A4 BR GRSUB2 Read 2 bytes of data from ERA [0514] 802E 51,BC BR GRSUB3 Read 2 bytes of data from ERA [0515] * with resetting possible break [0516] 8030 48,41 BR LINPUT LINPUT statement [0517] *********************************************************** [0518] * OPEN STATEMENT HANDLER [0519] * Handle the BASIC OPNE statement. A legal syntax can only [0520] * be something like [0521] * OPEN #{exp}:{string-exp}[,{open-options}] [0522] * in which {open-option} is any of the following [0523] * DISPLAY, INPUT, VARIABLE, RELATIVE, INTERNAL, SEQUENTIAL, [0524] * OUTPUT, UPDATE, APPEND, FIXED or PERMANENT [0525] * [0526] * Each keyword can only be used once, which is being checke [0527] * with an OPTFLG-bit. For each specific option please refer [0528] * to the related routine. [0529] * Scanning stops as soon as no next field starting with a [0530] * comma can be found. [0531] * NOTE: After the actual DSR OPEN has been preformed, the [0532] * length of the record, whether VARIABLE or FIXED, [0533] * has to be non-zero. A zero length will cause an [0534] * INCORRECT STATEMENT error. [0535] *********************************************************** [0536] 8032 06,93,55 OPEN CALL CHKFN See if we specified any file [0537] 8035 77,D7 BS ERRFE Definitely not... no # or #0 [0538] 8037 06,93,71 CALL CHKCON Check and search given filenu [0539] 803A 77,D7 BS ERRFE *** FILE NUMBER EXISTS *** [0540] * ERROR IF NOT STOPPED ON COLON [0541] 803C 0F,7E XML SPEED Must be at a [0542] 803E 00 BYTE SYNCHK * colon or else [0543] 803F B5 BYTE COLONZ * its an error [0544] 8040 06,96,5A CALL PARFN Parse filename and create PAB [0545] 8043 93,2C DDEC @PGMPTR Backup pgm pointer for next t [0546] 8045 0F,79 OPTION XML PGMCHR Get next program character [0547] * Next field should start with a comma [0548] 8047 D6,42,B3 OPTIZ0 CEQ COMMAZ,@CHAT [0549] 804A 41,0D BR CHECK [0550] * Enter HERE after comma exit in "SEQUENTIAL" [0551] 804C 0F,79 OPTIZ1 XML PGMCHR Next token please... [0552] * Treat DISPLAY and INPUT as special cases [0553] 804E D6,42,A2 CEQ DISPLZ,@CHAT [0554] 8051 60,EA BS OPTZ6 [0555] 8053 D6,42,92 CEQ INPUTZ,@CHAT [0556] 8056 60,F4 BS OPTZ7 [0557] 8058 A6,42,F3 SUB VARIAZ,@CHAT Reduce keyword offset to 0 [0558] 805B CA,42,09 CHE 9,@CHAT Keyword to high [0559] 805E 61,06 BS OPERR [0560] 8060 8A,42 CASE @CHAT JUST IN CASE [0561] 8062 40,BE BR OPTZ01 Option VARIABLE [0562] 8064 40,7C BR OPTZ02 RELATIVE [0563] 8066 40,E5 BR OPTZ03 INTERNAL [0564] 8068 40,81 BR OPTZ1 SEQUENTIAL [0565] 806A 40,A8 BR OPTZ2 OUTPUT [0566] 806C 40,AD BR OPTZ3 UPDATE [0567] 806E 40,B7 BR OPTZ4 APPEND [0568] 8070 40,C3 BR OPTZ5 FIXED [0569] * BR OPTZ0 PERMANENT <<<<<< [0570] * CASE 0 - "PERMANENT" ************************************ [0571] * Only check for multiple usage. Since PERMANENT is the [0572] * default, we might as well ignore it... [0573] 8072 DA,17,04 OPTZ0 CLOG >04,@OPTFLG [0574] 8075 41,06 BR OPERR [0575] 8077 B6,17,04 OR >04,@OPTFLG Not used ... use now [0576] 807A 40,45 BR OPTION Treat as simple default 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0010 FLMGR-359 [0577] * CASE 2 - "RELATIVE" ************************************* [0578] * Select relative record file in PAB and fall through in [0579] * SEQUENTIAL code for multiple usage check. Also handle [0580] * initial file-size there. [0581] 807C B6,E0,05 OPTZ02 OR >01,V@FLG(@PABPTR) Indicate RELATIVE RECORD 807F 04,01 [0582] * CASE 4 - "SEQUENTIAL" *********************************** [0583] * Checks for multiple usage. Remainder of syntax demads th [0584] * we have something like: [0585] * [{numeric expression}],... [0586] * In case only a comma is found, we use the default. [0587] * Everything else has to be evaluated as a numeric [0588] * expression, convertable to a 16-bit integer value. [0589] 8081 DA,17,08 OPTZ1 CLOG >08,@OPTFLG [0590] 8084 41,06 BR OPERR [0591] 8086 B6,17,08 OR >08,@OPTFLG First time usage, ok [0592] 8089 0F,79 XML PGMCHR Check next token for default [0593] * Comma means default has been used [0594] 808B D6,42,B3 CEQ COMMAZ,@CHAT [0595] 808E 60,4C BS OPTIZ1 [0596] 8090 06,95,AD CALL CHKEND Check for end of statement [0597] 8093 61,0D BS CHECK [0598] 8095 06,80,9F CALL CHKPAR Preform combined checking & p [0599] 8098 BD,E0,0A DST @FAC,V@RNM(@PABPTR) Non-zero result 809B 04,4A [0600] 809D 40,47 BR OPTIZ0 Scan other options [0601] * Parse and check a numeric argument in here.... [0602] 809F 0F,74 CHKPAR XML PARSE If not ... parse up to comma [0603] 80A1 B3 BYTE COMMAZ [0604] 80A2 06,93,5C CALL CHKCNV Check and convert to integer [0605] 80A5 61,06 BS OPERR Oops..., someone made a mista [0606] 80A7 00 RTN Return to caller [0607] * CASE 5 - "OUTPUT" *************************************** [0608] * Select mode code "01" and check for multiple usage. Use [0609] * MFLAG bit in OPTFLG for checking. [0610] 80A8 B6,E0,05 OPTZ2 OR >02,V@FLG(@PABPTR) Mode code = 01 80AB 04,02 [0611] * CASE 6 - "UPDATE" *************************************** [0612] * Default ... Check for multiple usage only... [0613] * Test for previous usage of any mode setting [0614] 80AD DA,17,01 OPTZ3 CLOG >01,@OPTFLG [0615] 80B0 41,06 BR OPERR [0616] 80B2 B6,17,01 OR >01,@OPTFLG If not... set "MODE USED" bit [0617] 80B5 40,45 BR OPTION Continue option scan [0618] * CASE 7 - "APPEND" *************************************** [0619] * Mode code "11" indicates APPEND mode. [0620] 80B7 B6,E0,05 OPTZ4 OR >06,V@FLG(@PABPTR) Mode code = 11 80BA 04,06 [0621] 80BC 40,AD BR OPTZ3 [0622] * CASE 1 - "VARIABLE" ************************************* [0623] * Change record type to VARIABLE and continue as FIXED [0624] 80BE B6,E0,05 OPTZ01 OR >10,V@FLG(@PABPTR) Indicate variable length mo 80C1 04,10 [0625] * CASE 8 - "FIXED" **************************************** [0626] * Fixed is default. Don't change anything, unless argument [0627] * is given. In this case evaluate as numeric expression an [0628] * check for 8-bit integer range... [0629] * This routine is also used for VARIABLE !!!!! [0630] 80C3 0F,79 OPTZ5 XML PGMCHR Get next character [0631] 80C5 D6,42,B3 CEQ COMMAZ,@CHAT Could be some argument [0632] 80C8 60,DB BS OPTZ55 [0633] 80CA 06,95,AD CALL CHKEND Could also be end of statemen [0634] 80CD 60,DB BS OPTZ55 It is an EOS [0635] 80CF 06,80,9F CALL CHKPAR Check & parse expression 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0011 FLMGR-359 [0636] * Check for byte overflow (records can only be up to 255 [0637] * bytes in length) [0638] 80D2 8E,4A CZ @FAC [0639] 80D4 41,06 BR OPERR [0640] 80D6 BC,E0,08 ST @FAC1,V@LEN(@PABPTR) Select non-zero rec-size 80D9 04,4B [0641] 80DB DA,17,10 OPTZ55 CLOG >10,@OPTFLG [0642] 80DE 41,06 BR OPERR [0643] 80E0 B6,17,10 OR >10,@OPTFLG Prevent to much usage of mode [0644] 80E3 40,47 BR OPTIZ0 Continue option scan [0645] * CASE 3 - "INTERNAL" ************************************* [0646] * Select INTERANL file type and continue in DIPLAY [0647] 80E5 B6,E0,05 OPTZ03 OR 8,V@FLG(@PABPTR) Select INTERNAL type 80E8 04,08 [0648] * CASE 9 - "DISPLAY" ************************************** [0649] * Default. Only check for multiple usage of either DISPLAY [0650] * or INTERNAL... [0651] 80EA DA,17,02 OPTZ6 CLOG >02,@OPTFLG [0652] 80ED 41,06 BR OPERR [0653] 80EF B6,17,02 OR >02,@OPTFLG Else set "DISPLAY/INTERAL" fl [0654] 80F2 40,45 BR OPTION Continue... DISPLAY is defaul [0655] * CASE 10 "INPUT" ***************************************** [0656] * Same as any other I/O type definition. Mode code "10" .. [0657] * Continue in OPTZ3 [0658] 80F4 B6,E0,05 OPTZ7 OR >04,V@FLG(@PABPTR) Mode code = 10 80F7 04,04 [0659] 80F9 40,AD BR OPTZ3 [0660] * CLRFRE deallocates previously alocated (parts of) PAB's a [0661] * return with an error message [0662] 80FB 86,02 CLRFRE CLR @MNUM Undo any allocation [0663] 80FD BC,03,E0 ST V@OFS(@PABPTR),@MNUM+1 We need the length for 8100 03,04 [0664] * that [0665] * V@OFS(@PABPTR) Was set up in PARFN routine [0666] 8102 A1,40,02 DADD @MNUM,@FREPTR Update the first free world [0667] 8105 00 RTN And return [0668] 8106 06,80,FB OPERR CALL CLRFRE First undo the allocation [0669] 8109 06,6A,84 ERRSYN CALL ERRZZ Then give an error [0670] 810C 03 BYTE 3 * SYNTAX ERROR [0671] * Continue with CHECK to conplete the actual OPEN [0672] 810D 06,95,AD CHECK CALL CHKEND Check EOS [0673] 8110 41,06 BR OPERR Not EOS : SYNTAX ERROR [0674] * If the user hasn't specified VARIABLE or FIXED, the [0675] * default specification depends on the file type. [0676] * Change current default (=VARIABLE) to FIXED for [0677] * RELATIVE files. [0678] 8112 DA,E0,05 CLOG >01,V@FLG(@PABPTR) RELATIVE RECORD 8115 04,01 [0679] 8117 61,27 BS G8127 [0680] 8119 DA,E0,05 CLOG >10,V@FLG(@PABPTR) VARIABLE RECORD 811C 04,10 [0681] 811E 61,25 BS G8125 [0682] 8120 06,80,FB FILZZ CALL CLRFRE Undo the PAB allocation [0683] 8123 57,D7 BR ERRFE FILE ERROR [0684] 8125 41,31 G8125 BR G8131 Sequential file, check rec. m [0685] 8127 DA,17,10 G8127 CLOG >10,@OPTFLG No definition yet [0686] 812A 41,31 BR G8131 [0687] 812C B6,E0,05 OR >10,V@FLG(@PABPTR) Force VARIABLE mode 812F 04,10 [0688] 8131 06,97,6B G8131 CALL CDSR Call the DSR, return with err [0689] 8134 57,94 BR ERRZ2B indication in COND... [0690] 8136 87,E0,0A DCLR V@RNM(@PABPTR) Make sure we start with recor 8139 04 [0691] * Check for undefined record length. The record length for 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0012 FLMGR-359 [0692] * any type might be defined by the DSR [0693] 813A 8E,E0,08 CZ V@LEN(@PABPTR) 813D 04 [0694] 813E 61,20 BS FILZZ [0695] 8140 BC,03,E0 ST V@LEN(@PABPTR),@MNUM+1 Get record length 8143 08,04 [0696] 8145 86,02 CLR @MNUM Create two byte result and [0697] 8147 86,E0,03 CLR V@OFS(@PABPTR) allocate - remove offset for 814A 04 [0698] * later use [0699] 814B BD,4A,02 DST @MNUM,@FAC - prepare for space claim [0700] * Check for special case : no PAB's yet [0701] 814E 8F,3C DCZ @IOSTRT [0702] 8150 41,57 BR G8157 [0703] 8152 BD,3C,04 DST @PABPTR,@IOSTRT Simply enter the first pointe [0704] 8155 41,69 BR G8169 [0705] 8157 BD,0A,3C G8157 DST @IOSTRT,@STADDR Search for the end of the cha [0706] 815A 8F,B0,0A G815A DCZ V*STADDR [0707] 815D 61,65 BS G8165 [0708] 815F BD,0A,B0 DST V*STADDR,@STADDR Keep on deferring 8162 0A [0709] 8163 41,5A BR G815A [0710] 8165 BD,B0,0A G8165 DST @PABPTR,V*STADDR Update last chain link 8168 04 [0711] 8169 BD,E0,06 G8169 DST @PABPTR,V@BUF(@PABPTR) Set empty buffer first 816C 04,04 [0712] 816E 0F,72 XML MEMCHK Check memory overflow & strin [0713] 8170 77,C7 BS ERRMEM * MEMORY FULL [0714] 8172 A5,40,02 DSUB @MNUM,@FREPTR Compute buffer entry address [0715] 8175 A5,E0,06 DSUB @MNUM,V@BUF(@PABPTR) Correct buffer address in 8178 04,02 [0716] 817A 0F,75 XML CONT Return to the parser [0717] *********************************************************** [0718] * DELETE ROUTINE [0719] * Use file # 0 for this operation. Parse the file name [0720] * string-expression as usual, and delete the PAB before [0721] * actually calling the DSR. [0722] *********************************************************** [0723] 817C 86,17 DELET CLR @FNUM Create file #0 - non-existing [0724] 817E 06,96,5A CALL PARFN Handle as normal PAB OPEN [0725] 8181 06,95,AD CALL CHKEND Check EOS first [0726] 8184 41,06 BR OPERR Not EOS : go undo PAB allocat [0727] * and print SYNTAX ERROR [0728] 8186 86,02 CLR @MNUM * Delete PAB again before calling [0729] 8188 BC,03,E0 ST V@OFS(@PABPTR),@MNUM+1 Create double byte PAB 818B 03,04 [0730] 818D A1,40,02 DADD @MNUM,@FREPTR Update free word pointer [0731] 8190 06,97,5E CALL IOCALL Preform I/O call for actual d [0732] 8193 07 BYTE CZDELE [0733] 8194 0F,75 XML CONT [0734] *********************************************************** [0735] * CLOSE ROUTINE [0736] * Syntax could be [0737] * CLOSE #{ num exp } or CLOSE #{ num exp }:DELETE [0738] * [0739] * Possibly output pending records before closing or [0740] * deleting the file. [0741] *********************************************************** [0742] 8196 06,93,55 CLOSE CALL CHKFN Check for "no #" / "#0" cases [0743] 8199 77,D7 BS ERRFE Not for "CLOSE" you don't [0744] 819B 06,93,71 CALL CHKCON Check file number etc... [0745] 819E 57,D7 BR ERRFE *** FILE NUMBER NOT IN SYSTEM [0746] 81A0 06,93,90 CALL OUTEOF Output pending records [0747] 81A3 BE,E0,04 ST CZCLOS,V@COD(@PABPTR) Default to CLOSE I/O code 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0013 FLMGR-359 81A6 04,01 [0748] 81A8 D6,42,B5 CEQ COLONZ,@CHAT Check for ":DELETE" spec. [0749] 81AB 41,B8 BR G81B8 [0750] 81AD 0F,79 XML PGMCHR Request next input token [0751] 81AF 0F,7E XML SPEED Must be at a [0752] 81B1 00 BYTE SYNCHK * "DELETE" else [0753] 81B2 99 BYTE DELETZ * its an error [0754] 81B3 BE,E0,04 ST CZDELE,V@COD(@PABPTR) Change CLOSE to DELETE 81B6 04,07 [0755] 81B8 06,95,AD G81B8 CALL CHKEND EOS? [0756] 81BB 41,09 BR ERRSYN NO:SYNTAX ERROR [0757] 81BD 06,97,6B CALL CDSR Call DSR with whatever we hav [0758] 81C0 41,C7 BR CLOSZ1 Reset means error.... [0759] 81C2 06,93,A6 CALL DELPAB Delete PAB and data-buffer [0760] 81C5 0F,75 XML CONT Return to parser routine [0761] 81C7 BD,5C,E0 CLOSZ1 DST V@4(@PABPTR),@ARG Save error code for message 81CA 04,04 [0762] 81CC 06,93,A6 CALL DELPAB Now delete the PAB [0763] 81CF BD,04,40 DST @FREPTR,@PABPTR Store error-code in free memo [0764] 81D2 A7,04,00 DSUB 6,@PABPTR Create standard size PAB 81D5 06 [0765] 81D6 BD,E0,04 DST @ARG,V@4(@PABPTR) Copy error-code 81D9 04,5C [0766] 81DB 57,BB BR ERRIO Exit to error-routine [0767] *********************************************************** [0768] * CLOSE ALL ROUTINE [0769] * CLOSE all the existing PABs ... ignore errors [0770] * [0771] * NOTE: "CLSLBL" is used in the I/O error routine to [0772] * determine if a warning should be given rather than [0773] * an error. [0774] *********************************************************** [0775] 81DD BD,04,B0 G81DD DST V*PABPTR,@PABPTR 81E0 04 [0776] 81E1 8F,B0,04 CLSAZ0 DCZ V*PABPTR Find last PAB in chain [0777] 81E4 41,DD BR G81DD [0778] 81E6 06,93,90 CALL OUTEOF Take care of pending records [0779] 81E9 BE,E0,04 CLSLBL ST CZCLOS,V@COD(@PABPTR) Select CLOSE code 81EC 04,01 [0780] 81EE 06,97,6B CALL CDSR CLOSE to DSR routine [0781] 81F1 06,93,A6 CALL DELPAB Delete PAB - ignore CLOSE err [0782] 81F4 BD,04,3C CLSALL DST @IOSTRT,@PABPTR Start at beginning of chain [0783] 81F7 8F,3C DCZ @IOSTRT Continue until done [0784] 81F9 41,E1 BR CLSAZ0 [0785] 81FB 00 RTN And return [0786] *********************************************************** [0787] * RESTORE ROUTINE [0788] * RESTORE can have any of four forms: [0789] * [0790] * RESTORE Restore to first DATA [0791] * RESTORE 20 Restore DATA pointer [0792] * RESTORE #1 Rewind file number 1 [0793] * RESTORE #1, REC 2 Position file 1 at record 2 [0794] *********************************************************** [0795] 81FC 87,4A RESTOR DCLR @FAC Assume simple RESTORE [0796] 81FE D6,42,FD CEQ NUMBEZ,@CHAT [0797] 8201 42,1F BR OLDCD [0798] 8203 06,93,55 CALL CHKFN Check for # [0799] 8206 8F,4A DCZ @FAC Found equivalent of #0 [0800] 8208 62,27 BS OLDCZ0 [0801] 820A 06,93,71 CALL CHKCON Check and decode file # [0802] 820D 57,D7 BR ERRFE Give error if file not there [0803] 820F 06,93,90 CALL OUTEOF Output pending record [0804] 8212 87,E0,0A DCLR V@RNM(@PABPTR) Initialize to record 0 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0014 FLMGR-359 8215 04 [0805] 8216 06,94,C2 CALL PARREC Parse possible record clause [0806] 8219 06,97,5E CALL IOCALL Call DSR routine with [0807] 821C 04 BYTE CZREST * RESTORE I/O code [0808] 821D 0F,75 XML CONT Return if no error found [0809] * Following code is for handling RESTORE to line number [0810] * within program [0811] 821F 06,95,AD OLDCD CALL CHKEND Check for start with end [0812] 8222 62,27 BS OLDCZ0 If we have anything else [0813] 8224 06,A0,06 CALL LINE in FAC (double) [0814] 8227 D5,30,32 OLDCZ0 DCEQ @ENLN,@STLN [0815] 822A 42,33 BR G8233 [0816] 822C 06,6A,82 WRNNPP CALL WARNZZ * NO PROGRAM PRESENT * [0817] 822F 1D BYTE 29 [0818] 8230 05,60,12 B TOPL15 Go back to toplevel [0819] 8233 BD,36,32 G8233 DST @ENLN,@LNBUF Start at beginning of program [0820] 8236 A7,36,00 DSUB 3,@LNBUF Backup for first line number 8239 03 [0821] * Check against given line number [0822] 823A 06,91,BC OLDCZ1 CALL GRSUB3 Read 2 bytes of line ptr from [0823] * line # table which is in ERA [0824] 823D 36 BYTE LNBUF * Source address on ERAM/VDP [0825] * @EEE1: Destination addr on CP [0826] 823E C5,4A,58 DCH @EEE1,@FAC Try to get something higher [0827] 8241 42,4E BR G824E [0828] 8243 D5,36,30 DCEQ @STLN,@LNBUF Last line in program [0829] 8246 77,D3 BS ERRDAT [0830] 8248 A7,36,00 DSUB 4,@LNBUF Get next entry in line # tabl 824B 04 [0831] 824C 42,3A BR OLDCZ1 Try again with next line [0832] 824E A3,36,00 G824E DADD 3,@LNBUF Undo subtraction 8251 03 [0833] 8252 06,A0,08 CALL DATAST Setup pointer for READ [0834] 8255 0F,75 XML CONT Continue PARSE [0835] *********************************************************** [0836] * DISPLAY ROUTINE [0837] * DISPLAY handles all random screen access stuff.. [0838] * the AT-clause, and the BEEP, ERASE ALL and SIZE clause. [0839] *********************************************************** [0840] 8257 06,94,EF DISPL1 CALL DISACC Evaluate DISPLAY options [0841] 825A 63,95 BS EOLEX EXIT directly on end-of-state [0842] * If anything is specified it has to be a colon [0843] 825C 8E,04 CZ @PABPTR Nothing was specified [0844] 825E 62,C4 BS PRINZ1 [0845] * At this point we MUST have a colon, or else we error off [0846] * (SYNTAX ERROR) [0847] 8260 0F,7E XML SPEED Check for a colon [0848] 8262 00 BYTE SYNCHK * and continue [0849] 8263 B5 BYTE COLONZ * it approved [0850] 8264 42,C4 BR PRINZ1 Continue with PRINT items [0851] *********************************************************** [0852] * PRINT ROUTINE [0853] * MAIN-HANDLER FOR ALL PRINT-FUNCTIONS [0854] *********************************************************** [0855] 8266 06,97,3F PRINT CALL INITKB Initialize keyboard I/O [0856] 8269 D6,42,FD CEQ NUMBEZ,@CHAT Could still be anything [0857] 826C 42,C4 BR PRINZ1 [0858] 826E 06,93,55 CALL CHKFN Check if default or open chan [0859] 8271 8F,4A DCZ @FAC Default intended [0860] 8273 62,A5 BS PRNZ10 [0861] 8275 06,93,71 CALL CHKCON Check and convert expression [0862] 8278 57,D7 BR ERRFE Error if PAB not in system [0863] * PRINT allowed in output, append or update modes [0864] * Not allowed in input mode 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0015 FLMGR-359 [0865] 827A DA,E0,05 CLOG >04,V@FLG(@PABPTR) 827D 04,04 [0866] 827F 62,88 BS G8288 [0867] 8281 DA,E0,05 CLOG >02,V@FLG(@PABPTR) 8284 04,02 [0868] 8286 77,D7 BS ERRFE [0869] 8288 D6,E0,04 G8288 CEQ CZREAD,V@COD(@PABPTR) 828B 04,02 [0870] 828D 42,93 BR G8293 [0871] 828F 86,E0,03 CLR V@OFS(@PABPTR) Unpend pending INPUTs 8292 04 [0872] 8293 BE,E0,04 G8293 ST CZWRIT,V@COD(@PABPTR) uncomplete PRINTs 8296 04,03 [0873] 8298 06,96,F5 CALL PRINIT Initialize some variables [0874] * Next character has to be either EOL, COMMA, or COLON [0875] 829B 06,95,AD CALL CHKEND [0876] 829E 63,95 BS EOLEX exit on end of statement [0877] 82A0 06,94,C2 CALL PARREC Parse possible record clause [0878] 82A3 62,B1 BS PRINZ0 found "," but no REC clause [0879] 82A5 06,95,AD PRNZ10 CALL CHKEND [0880] 82A8 63,95 BS EOLEX Exit on end of statement for [0881] * "PRINT #0" or "PRINT file position" [0882] 82AA D6,42,B3 CEQ COMMAZ,@CHAT [0883] 82AD 42,BE BR G82BE [0884] 82AF 0F,79 XML PGMCHR Get next in line [0885] 82B1 8E,04 PRINZ0 CZ @PABPTR For "PRINT #0" [0886] 82B3 63,CF BS USING [0887] * Interal type of file? [0888] 82B5 DA,E0,05 CLOG >08,V@FLG(@PABPTR) 82B8 04,08 [0889] 82BA 57,D7 BR ERRFE [0890] 82BC 43,CF BR USING Execute USING clause [0891] 82BE 0F,7E G82BE XML SPEED Must be at a [0892] 82C0 00 BYTE SYNCHK * colon at this point [0893] 82C1 B5 BYTE COLONZ * and error off on others [0894] 82C2 42,C9 BR CONPRT Make it a short branched ELSE [0895] 82C4 D6,42,ED PRINZ1 CEQ USINGZ,@CHAT [0896] 82C7 63,CF BS USING End standard initialization [0897] * Test standard separators [0898] 82C9 06,96,27 CONPRT CALL TSTSEP Test separator character [0899] 82CC D6,42,FC CEQ TABZ,@CHAT Handle TABs [0900] 82CF 63,2D BS PRTAB [0901] * At this point we've checked TAB and ; , : [0902] * The only remaining print items have to be expressions [0903] * All expressions are being handled below. [0904] * If the result of the expression is a numeric, the string [0905] * is transformed into a string and printed. Strings are [0906] * printed "as is". [0907] * The code for strings and converted numerics cannot be ma [0908] * common, since numerics may require an extra space behind [0909] * the item, depending upon the current position in the reco [0910] * Either way, the string is chunked up into little pieces [0911] * it won't fit in an empty record. [0912] 82D1 0F,74 XML PARSE Evaluate the expression [0913] 82D3 B5 BYTE COLONZ [0914] * Special code for INTERNAL file handling [0915] * Translate numeric datums into string format and indicate [0916] * length 8. Then check to see if the item fits within the [0917] * current record. If not, it is an error, since each item [0918] * has to fit. [0919] 82D4 06,83,C5 CALL TSTINT Test for internal files [0920] 82D7 63,03 BS OTHEZ1 Nope, something different [0921] 82D9 D6,4C,65 CEQ STRVAL,@FAC2 Change numerics [0922] 82DC 62,EC BS G82EC 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0016 FLMGR-359 [0923] 82DE BE,56,08 ST 8,@FAC12 To string length 8 [0924] 82E1 35,00,08 MOVE 8,@FAC,@ARG Save in ARG 82E4 5C,4A [0925] 82E6 BE,55,5C ST ARG,@FAC11 And use this as source [0926] 82E9 06,96,0B CALL RSTRING Reserve some string space [0927] 82EC BC,5C,07 G82EC ST @RECLEN,@ARG Compute remaining space to EO [0928] 82EF A4,5C,06 SUB @CCPPTR,@ARG for space checking [0929] 82F2 90,5C INC @ARG Make it real space [0930] 82F4 C8,51,5C CHE @ARG,@FAC7 Not enough!!!!! [0931] 82F7 77,D7 BS ERRFE [0932] * The = check includes length byte [0933] 82F9 BC,B0,08 ST @FAC7,V*CCPADR Prestore string length 82FC 51 [0934] 82FD 91,08 DINC @CCPADR Update actual RAM address [0935] 82FF 90,06 INC @CCPPTR and internal column pointer [0936] 8301 43,08 BR OTHEZ0 [0937] 8303 D6,4C,65 OTHEZ1 CEQ STRVAL,@FAC2 Print the string result [0938] 8306 43,0D BR G830D [0939] 8308 06,97,0E OTHEZ0 CALL OSTRNG Output the string to the reco [0940] 830B 43,28 BR CHKSEP [0941] 830D 86,55 G830D CLR @FAC11 Select standard BASIC format [0942] 830F 0F,73 XML CNS Convert number to string [0943] 8311 06,96,0B CALL RSTRING Reserve and copy string [0944] 8314 06,97,0E CALL OSTRNG Output the string [0945] * Possibly add an extra space if we're not at the end of th [0946] * current record. [0947] 8317 C8,07,06 CHE @CCPPTR,@RECLEN Enough space left [0948] 831A 43,28 BR CHKSEP [0949] 831C BE,B0,08 ST SPACE,V*CCPADR Add trailing space 831F 20 [0950] 8320 A0,B0,08 ADD @DSRFLG,V*CCPADR Take care of screen I/O 8323 17 [0951] 8324 91,08 DINC @CCPADR Update current column address [0952] 8326 90,06 INC @CCPPTR and base 1 pointer [0953] 8328 06,96,27 CHKSEP CALL TSTSEP Check for legal delimiter [0954] 832B 41,09 BR ERRSYN Illegal delimiter. SYNTAX ERR [0955] * Unconditional branch [0956] * PRTAB - Print TAB as part of PRINT command [0957] 832D 06,83,C5 PRTAB CALL TSTINT Watch out for INTERAL file ty [0958] 8330 57,D7 BR ERRFE They can't handle TABs [0959] 8332 0F,79 XML PGMCHR Skip TAB keyword [0960] 8334 D6,42,B7 CEQ LPARZ,@CHAT [0961] 8337 41,09 BR ERRSYN [0962] 8339 0F,74 XML PARSE Parse TAB expression [0963] 833B B6 BYTE RPARZ [0964] 833C 06,94,B8 CALL CNVDEF Check and convert to integer [0965] 833F BC,4C,07 ST @RECLEN,@FAC2 Set modulo number [0966] 8342 06,96,1A CALL COMMOD Compute remainder [0967] 8345 C4,06,4B CH @FAC1,@CCPPTR Position on next output recor [0968] 8348 43,4F BR G834F [0969] 834A 06,96,A5 CALL OUTREC Output current record - no pe [0970] 834D 63,28 BS CHKSEP react on SIZE block!!! [0971] 834F D4,06,4B G834F CEQ @FAC1,@CCPPTR Stay here [0972] 8352 63,28 BS CHKSEP [0973] 8354 BC,03,4B ST @FAC1,@MNUM+1 Fill with spaces [0974] 8357 0F,84 XML IO OK, go ahead... fill'r up [0975] 8359 01 BYTE FILSPC [0976] 835A 43,28 BR CHKSEP And check separator again [0977] * Comma is similar to TAB, except that it generates at leas [0978] * one space. The exact number of spaces generated depends [0979] * upon the current position within the record. If the next [0980] * fixed tab-position is outside the record, the record, the [0981] * current record is output and the column pointer is reset [0982] * to column 1 of the next record. 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0017 FLMGR-359 [0983] 835C BC,03,06 PRTCOM ST @CCPPTR,@MNUM+1 Compute initial # of spaces [0984] 835F 92,03 DEC @MNUM+1 Decrecment for 0 origin [0985] 8361 86,02 CLR @MNUM Clear high byte of double [0986] 8363 AE,02,0E DIV 14,@MNUM TABs are 14 spaces apart [0987] 8366 90,02 INC @MNUM Compute next TAB-stop [0988] 8368 AA,02,0E MUL 14,@MNUM and actual position [0989] 836B C4,07,03 CH @MNUM+1,@RECLEN Within this record [0990] 836E 43,77 BR PRCOL [0991] 8370 90,03 INC @MNUM+1 Convert to real position [0992] 8372 0F,84 XML IO Fill spaces to new location [0993] 8374 01 BYTE FILSPC [0994] 8375 43,7A BR PRSEM Outside current record [0995] * The ":" (colon) separator is used to output the current [0996] * record, and proceed to position 1 of the next record. [0997] 8377 06,96,A5 PRCOL CALL OUTREC Output the current record [0998] * The ";" (semi-colon) generates the null string. Since all [0999] * print items should be separated by a separator, this one [1000] * has been introduced to separate without moving to another [1001] * position. Notice that all separators join up here. [1002] 837A 0F,79 PRSEM XML PGMCHR Skip the separator [1003] 837C 06,95,AD CALL CHKEND Exit on end of line [1004] 837F 42,C9 BR CONPRT Continue if not end of line [1005] 8381 8E,17 PRSMZ1 CZ @DSRFLG For screen output continue [1006] 8383 63,A4 BS PREXIT [1007] 8385 DA,04,08 CLOG >08,@PABPTR Check SIZE clause [1008] 8388 63,A4 BS PREXIT [1009] 838A 06,96,A5 CALL OUTREC Output current record (blank [1010] 838D BC,06,09 ST @CCPADR+1,@CCPPTR Compute correct value for CCP [1011] 8390 A6,06,E1 SUB >E1,@CCPPTR Subtract current screen base [1012] 8393 43,A4 BR PREXIT and exit form this command [1013] * End of line exit routine for PRINT statement [1014] 8395 8E,17 EOLEX CZ @DSRFLG I/O - remove blocks if [1015] 8397 63,A1 BS G83A1 [1016] 8399 DA,04,04 CLOG >04,@PABPTR " AT" clause unused [1017] 839C 43,A1 BR G83A1 [1018] 839E B2,04,E7 AND >E7,@PABPTR remove flag 3 (SIZE used) [1019] 83A1 06,96,A5 G83A1 CALL OUTREC Output pending record [1020] * Continue here if record remains pending [1021] 83A4 8E,17 PREXIT CZ @DSRFLG Regular file/device I/O [1022] 83A6 43,B1 BR G83B1 [1023] 83A8 92,06 DEC @CCPPTR Back to actual offset [1024] 83AA BC,E0,03 ST @CCPPTR,V@OFS(@PABPTR) Save for next statement 83AD 04,06 [1025] 83AF 0F,75 XML CONT Continue with next statement [1026] * End external I/O handling [1027] * Reset of code is for internal I/O handling (VDP) [1028] 83B1 DA,04,04 G83B1 CLOG >04,@PABPTR Is not used [1029] 83B4 43,BB BR G83BB [1030] 83B6 BC,7F,06 ST @CCPPTR,@XPT Save current value of pointer [1031] 83B9 94,7F INCT @XPT CCPPTR: 1-28 [1032] 83BB DA,04,02 G83BB CLOG >02,@PABPTR Used BEEP clause [1033] 83BE 63,C3 BS G83C3 [1034] 83C0 06,00,34 CALL TONE1 ---------- BEEP ------------ [1035] 83C3 0F,75 G83C3 XML CONT Continue in PARSE routine [1036] * TSTINT - test for INTERAL type files, set COND if file [1037] * is NOT INTERNAL [1038] 83C5 8E,17 TSTINT CZ @DSRFLG Couldn't possibly be INTERNAL [1039] 83C7 53,8C BR RTC [1040] 83C9 DA,E0,05 CLOG >08,V@FLG(@PABPTR) Set COND according to bit 3 83CC 04,08 [1041] 83CE 01 RTNC Return without changing COND [1042] ********* PRINT / DISPLAY USING SECTION ******************* [1043] * Arrive here after the keyword "USING" has been rejected. [1044] 83CF 0F,7E USING XML SPEED 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0018 FLMGR-359 [1045] 83D1 00 BYTE SYNCHK * Get first character of format [1046] 83D2 ED BYTE USINGZ * after (double) checking USIN [1047] 83D3 D6,42,C9 CEQ LNZ,@CHAT Pick up the line number [1048] 83D6 44,30 BR G8430 [1049] 83D8 0F,79 XML PGMCHR Get high address [1050] 83DA BC,4A,42 ST @CHAT,@FAC [1051] 83DD 0F,79 XML PGMCHR and low address [1052] 83DF BC,4B,42 ST @CHAT,@FAC1 [1053] 83E2 0F,79 XML PGMCHR get next program character [1054] 83E4 BD,4C,2E DST @EXTRAM,@FAC2 in SEETWO : EXTRAM value w [1055] * changed [1056] 83E7 0F,7E XML SPEED [1057] 83E9 03 BYTE SEETWO * Find the line # in the progr [1058] 83EA C1,4C,2E DEX @EXTRAM,@FAC2 result in SEETWO is in EXTRA [1059] * and restore EXTRAM value [1060] 83ED 44,5E BR USNGZ1 has to match exactly [1061] 83EF 95,4C DINCT @FAC2 Move up to the pointer field [1062] 83F1 BD,52,34 DST @DATA,@FAC8 Save DATA pointer for READ fi [1063] 83F4 06,91,A4 CALL GRSUB2 Read 2 bytes of data from ERA [1064] 83F7 4C BYTE FAC2 * @FAC2 : Source address on ERA [1065] 83F8 BD,34,58 DST @EEE1,@DATA @EEE1 : Destination addr. on [1066] * Put it in @DATA [1067] 83FB BE,4C,A3 ST IMAGEZ,@FAC2 Search for an IMAGE token [1068] 83FE 06,8B,99 CALL SEARCH at beginning of an statement [1069] 8401 64,5E BS USNGZ1 Error if not found on this li [1070] 8403 06,93,04 CALL GETGFL Get first part of format stri [1071] 8406 06,93,23 CALL CHKSTR Prepare data for string assig [1072] 8409 BD,0C,50 DST @FAC6,@BYTES Copy actual string length in [1073] 840C BD,34,52 DST @FAC8,@DATA Restore original DATA pointer [1074] 840F 06,92,CD CALL CTSTR Create a temporary string [1075] 8412 8F,50 DCZ @FAC6 [1076] 8414 64,2E BS G842E [1077] 8416 8E,80,84 CZ @RAMTOP Data from RAM [1078] 8419 44,23 BR G8423 [1079] 841B 34,50,B0 MOVE @FAC6,V*TEMP5,V*SREF 841E 1C,B0,66 [1080] 8421 44,2E BR G842E [1081] 8423 BD,56,50 G8423 DST @FAC6,@FFF1 FFF1 : byte count [1082] 8426 BD,54,66 DST @TEMP5,@DDD1 DDD1 : source address in ERAM [1083] 8429 BD,58,1C DST @SREF,@EEE1 EEE1 : destination address on [1084] 842C 0F,8B XML GVWITE Write data from ERAM to VDP [1085] 842E 44,38 G842E BR G8438 [1086] 8430 0F,74 G8430 XML PARSE Parse up to the ending ":" [1087] 8432 B5 BYTE COLONZ [1088] 8433 D6,4C,65 CEQ STRVAL,@FAC2 * IMAGE ERROR * [1089] 8436 44,5E BR USNGZ1 [1090] 8438 D6,42,B5 G8438 CEQ COLONZ,@CHAT Probably no variable list [1091] 843B 64,48 BS G8448 [1092] 843D 06,95,AD CALL CHKEND We better check that through [1093] 8440 41,09 BR ERRSYN something sneaky sneaked in [1094] 8442 8E,51 CZ @FAC7 End of line exit [1095] 8444 63,95 BS EOLEX [1096] 8446 44,63 BR G8463 Look for format item [1097] 8448 8E,51 G8448 CZ @FAC7 Exclude null strings [1098] 844A 64,5E BS USNGZ1 [1099] 844C BD,5C,4E DST @FAC4,@ARG Get start address for string [1100] 844F BC,5E,51 ST @FAC7,@ARG2 Get format string length [1101] 8452 D6,B0,5C USNGZ0 CEQ >23,V*ARG Found no format item yet 8455 23 [1102] 8456 64,60 BS G8460 [1103] 8458 91,5C DINC @ARG Try next address [1104] 845A 92,5E DEC @ARG2 Update address [1105] 845C 44,52 BR USNGZ0 Try up to the end of the stri [1106] 845E 57,C3 USNGZ1 BR ERRIM * IMAGE ERROR 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0019 FLMGR-359 [1107] * Now we're sure that we have at least one legal format ite [1108] * (anything with a "#" in it) [1109] 8460 BE,42,B3 G8460 ST COMMAZ,@CHAT Fake comma seperator for prin [1110] 8463 0F,77 G8463 XML VPUSH Current string might be tempo [1111] 8465 BD,0C,50 DST @FAC6,@BYTES Create a workstring for outpu [1112] 8468 90,0D INC @BYTES+1 Create space for end of strin [1113] 846A 0C CARRY String would be too long [1114] 846B 64,5E BS USNGZ1 [1115] 846D 0F,71 XML GETSTR Length whold equal format str [1116] 846F BD,14,1C DST @SREF,@CURLIN Create a temporary string [1117] 8472 A1,1C,50 DADD @FAC6,@SREF Compute last position in stri [1118] 8475 86,B0,1C CLR V*SREF Set end of string indicator [1119] 8478 BD,4E,E0 USNGZ3 DST V@4(@VSPTR),@FAC4 Update FAC4 area in case garb 847B 04,6E [1120] 847D 34,50,B0 MOVE @FAC6,V*FAC4,V*CURLIN Copy format 8480 14,B0,4E [1121] 8483 BD,4E,14 DST @CURLIN,@FAC4 Complete preps for VPUSH [1122] 8486 BF,4A,00 DST >001C,@FAC SREF = >001C 8489 1C [1123] 848A 91,50 DINC @FAC6 Include 0 in string length [1124] 848C 0F,77 XML VPUSH Make the string temporary [1125] 848E BD,14,E0 DST V@4(@VSPTR),@CURLIN Update current line pointer 8491 04,6E [1126] 8493 D6,B0,14 USNGZ4 CEQ >23,V*CURLIN Try to locate the next format 8496 23 [1127] 8497 64,C3 BS G84C3 [1128] 8499 8E,B0,14 CZ V*CURLIN Not end of string yet [1129] 849C 64,A2 BS G84A2 [1130] 849E 91,14 DINC @CURLIN Update pointer if not found [1131] 84A0 44,93 BR USNGZ4 and continue searching [1132] 84A2 D6,42,B3 G84A2 CEQ COMMAZ,@CHAT Stop on last variable [1133] 84A5 45,C3 BR USNGZ9 [1134] 84A7 0F,78 XML VPOP Restore original workstring d [1135] 84A9 BC,0C,51 ST @FAC7,@BYTES Pring the current format stri [1136] 84AC 92,0C DEC @BYTES Don't count the last "0" [1137] 84AE BE,03,01 ST 1,@MNUM+1 Indicate direct output withou [1138] 84B1 06,97,18 CALL CHKRZ0 Copy string to output record [1139] 84B4 06,96,A5 CALL OUTREC Also output current record [1140] * FAC still contains the right data, however it is easier j [1141] * to copy the original string again. [1142] 84B7 BD,14,4E DST @FAC4,@CURLIN Reconstruct CRULIN [1143] 84BA 0F,78 XML VPOP Copy original string info [1144] 84BC 0F,77 XML VPUSH Without actually removing it [1145] 84BE A5,14,50 DSUB @FAC6,@CURLIN Reconstruct start address [1146] 84C1 44,78 BR USNGZ3 Continue for the next variabl [1147] 84C3 D5,14,E0 G84C3 DCEQ V@4(@VSPTR),@CURLIN Avoid "#" as count 84C6 04,6E [1148] 84C8 64,E9 BS USNZ42 [1149] 84CA 93,14 DDEC @CURLIN Backup to the sign [1150] 84CC D6,B0,14 CEQ >2E,V*CURLIN Used ".#####" 84CF 2E [1151] 84D0 44,DB BR G84DB [1152] 84D2 D5,14,E0 DCEQ V@4(@VSPTR),@CURLIN 84D5 04,6E [1153] 84D7 64,E9 BS USNZ42 [1154] 84D9 93,14 DDEC @CURLIN Avoid checking count bit [1155] 84DB D6,B0,14 G84DB CEQ >2D,V*CURLIN Check for minus 84DE 2D [1156] 84DF 64,E9 BS USNZ42 [1157] 84E1 D6,B0,14 CEQ >2B,V*CURLIN Check for plus 84E4 2B [1158] 84E5 64,E9 BS USNZ42 [1159] 84E7 91,14 DINC @CURLIN It's neither, so we undo [1160] * Check for availability of variables 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0020 FLMGR-359 [1161] 84E9 D6,42,B3 USNZ42 CEQ COMMAZ,@CHAT Exit if no more pt item [1162] 84EC 45,C3 BR USNGZ9 [1163] 84EE 0F,79 XML PGMCHR Get next expression [1164] 84F0 A5,14,E0 DSUB V@4(@VSPTR),@CURLIN Make CURLIN offset for 84F3 04,6E [1165] * garbage collection [1166] 84F5 0F,74 XML PARSE Parse up to ";" or "," [1167] 84F7 B4 BYTE SEMICZ [1168] 84F8 A1,14,E0 DADD V@4(@VSPTR),@CURLIN Reconstruct new CLN after 84FB 04,6E [1169] * garbage collection [1170] 84FD 87,52 DCLR @FAC8 Start with clean sheet for co [1171] 84FF 87,55 DCLR @FAC11 [1172] 8501 86,57 CLR @FAC13 [1173] 8503 BD,0E,14 DST @CURLIN,@VAR4 Now start checking process [1174] 8506 D6,B0,14 CEQ >2E,V*CURLIN 8509 2E [1175] 850A 65,33 BS USNGZ5 [1176] 850C D6,B0,14 CEQ >23,V*CURLIN Has to be "+" or "-" 850F 23 [1177] 8510 65,27 BS G8527 [1178] 8512 D6,B0,14 CEQ >2D,V*CURLIN 8515 2D [1179] 8516 45,1B BR G851B [1180] 8518 B6,55,02 OR >02,@FAC11 Set explict sign flag for CNS [1181] 851B D6,B0,14 G851B CEQ >2B,V*CURLIN 851E 2B [1182] 851F 45,27 BR G8527 [1183] 8521 B6,55,02 OR >02,@FAC11 Set explict sign flag for CNS [1184] 8524 B6,55,04 OR >04,@FAC11 Set positive sign flag for CN [1185] 8527 06,85,E5 G8527 CALL ACCNM Accept first character plus " [1186] 852A BC,56,53 ST @FAC9,@FAC12 Set up FAC12 for CNS [1187] 852D D6,B0,0E CEQ >2E,V*VAR4 Found decimal point 8530 2E [1188] 8531 45,40 BR G8540 [1189] 8533 86,53 USNGZ5 CLR @FAC9 Prepare for use as counter of [1190] * of # sign after decimal poin [1191] 8535 06,85,E5 CALL ACCNM Accept some more "#"'s [1192] 8538 BC,57,53 ST @FAC9,@FAC13 Set up FAC13 for CNS [1193] 853B A0,53,56 ADD @FAC12,@FAC9 FAC9 now contains the total n [1194] * of "#" sign, decimal point a [1195] * maybe a sign bit [1196] 853E 92,53 DEC @FAC9 Exclude the decimal point [1197] 8540 D7,B0,0E G8540 DCEQ >5E5E,V*VAR4 Attempt to decode ^^ 8543 5E,5E [1198] 8545 45,64 BR USNZ55 [1199] 8547 95,0E DINCT @VAR4 Update address [1200] 8549 D7,B0,0E DCEQ >5E5E,V*VAR4 854C 5E,5E [1201] 854E 45,62 BR G8562 [1202] 8550 95,0E DINCT @VAR4 Update address [1203] 8552 B6,55,08 OR >08,@FAC11 Set E-format bit for CNS [1204] 8555 D6,B0,0E CEQ >5E,V*VAR4 8558 5E [1205] 8559 45,64 BR USNZ55 [1206] 855B 91,0E DINC @VAR4 Update end address [1207] 855D B6,55,10 OR >10,@FAC11 Set extended E-format bit for [1208] 8560 45,64 BR USNZ55 [1209] 8562 97,0E G8562 DDECT @VAR4 Correct for previous errors [1210] * At this point, CURLIN is pointing at the first item of th [1211] * format, VAR4 is pointing at the character following the i [1212] 8564 CA,4C,64 USNZ55 CHE >64,@FAC2 Detected numerical argument [1213] 8567 65,96 BS G8596 [1214] 8569 DA,55,02 CLOG >02,@FAC11 Exclude the sign count 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0021 FLMGR-359 [1215] 856C 65,70 BS G8570 [1216] 856E 92,53 DEC @FAC9 FAC9 : Number of significant [1217] 8570 DA,55,08 G8570 CLOG >08,@FAC11 If E-format is used [1218] 8573 65,7C BS G857C [1219] 8575 CE,53,0A CGT >0A,@FAC9 More than 10 significant digi [1220] 8578 77,C3 BS ERRIM [1221] 857A 45,81 BR G8581 [1222] 857C CE,53,0E G857C CGT 14,@FAC9 More than 14 significant digi [1223] 857F 77,C3 BS ERRIM [1224] 8581 B6,55,01 G8581 OR >01,@FAC11 Set fixed format output it fo [1225] 8584 0F,73 XML CNS Convert number to fixed forma [1226] * FAC11 points to the beginning of the string after supress [1227] * leading 0's, FAC12 contains the length of the string [1228] 8586 BC,57,55 ST @FAC11,@FAC13 FAC13 now point to beginning [1229] * the string [1230] 8589 86,55 CLR @FAC11 Clear high byte [1231] 858B 34,55,B0 MOVE @FAC11,*FAC13,V*CURLIN Copy the result string f 858E 14,90,57 [1232] * temporary [1233] 8591 BD,14,0E DST @VAR4,@CURLIN Move pointer behind print fie [1234] 8594 44,93 BR USNGZ4 Continue after printing [1235] 8596 BD,54,0E G8596 DST @VAR4,@FAC10 Compute total length [1236] 8599 A5,54,14 DSUB @CURLIN,@FAC10 [1237] 859C C4,51,55 CH @FAC11,@FAC7 String exceeds limits [1238] 859F 45,B1 BR G85B1 [1239] 85A1 BE,00,2A ST >2A,@VAR0 Prepare a "*****.." string [1240] 85A4 BC,B0,14 G85A4 ST @VAR0,V*CURLIN Fill the remainder of field 85A7 00 [1241] 85A8 91,14 DINC @CURLIN Up to the end [1242] 85AA D5,14,0E USNZ67 DCEQ @VAR4,@CURLIN Which is stored in VAR4 [1243] 85AD 45,A4 BR G85A4 [1244] 85AF 44,93 BR USNGZ4 [1245] 85B1 8F,50 G85B1 DCZ @FAC6 [1246] 85B3 65,BE BS USNZ68 [1247] 85B5 34,50,B0 MOVE @FAC6,V*FAC4,V*CURLIN Copy result string 85B8 14,B0,4E [1248] 85BB A1,14,50 DADD @FAC6,@CURLIN And update address in string [1249] 85BE BE,00,20 USNZ68 ST SPACE,@VAR0 Fill remainder with spaces [1250] 85C1 45,AA BR USNZ67 [1251] 85C3 0F,78 USNGZ9 XML VPOP Temporary string back out [1252] 85C5 BC,0C,15 ST @CURLIN+1,@BYTES Output up to the current [1253] * position [1254] 85C8 A4,0C,4F SUB @FAC5,@BYTES Create one byte result [1255] 85CB 65,D3 BS USNZ95 Avoid empty strings [1256] 85CD BE,03,01 ST 1,@MNUM+1 Prevent skip if field too sma [1257] 85D0 06,97,18 CALL CHKRZ0 Preform all nomal I/O stuff [1258] 85D3 0F,78 USNZ95 XML VPOP Remove source format string [1259] 85D5 06,95,AD CALL CHKEND Check for end of line exit [1260] 85D8 63,95 BS EOLEX Take end of line exit [1261] 85DA 0F,7E XML SPEED [1262] 85DC 00 BYTE SYNCHK * Then it HAS to be a ";" [1263] 85DD B4 BYTE SEMICZ [1264] 85DE 06,95,AD CALL CHKEND Now - must be EOS [1265] 85E1 63,81 BS PRSMZ1 Supressed end of record, make [1266] * it a pending record [1267] 85E3 41,09 BR ERRSYN SYNTAX ERROR [1268] * Collect string of "#"'s [1269] 85E5 90,53 ACCNM INC @FAC9 Update item count [1270] 85E7 91,0E DINC @VAR4 and item address [1271] 85E9 D6,B0,0E CEQ >23,V*VAR4 Decode as many "#"'s as 85EC 23 [1272] * possible [1273] 85ED 65,E5 BS ACCNM [1274] 85EF 00 RTN Return from duty 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0022 FLMGR-359 [1275] *********************************************************** [1276] * INPUT ROUTINE [1277] * First check for file or screen I/O. If file I/O then chec [1278] * for pending output and print that. If screen I/O then [1279] * check for input prompt: [1280] * Next collect the INPUT variable list on the V-stack. Get [1281] * enough input form either file or keyboard, and compare [1282] * types with entries on V-stack. After verification and [1283] * approval, assign the values. [1284] *********************************************************** [1285] 85F0 06,97,3F INPUT CALL INITKB Assume keyboard INPUT [1286] 85F3 D6,42,FD CEQ NUMBEZ,@CHAT Might be #0 or #1-255 [1287] 85F6 47,5A BR G875A [1288] 85F8 06,93,55 CALL CHKFN Check for default #0 [1289] 85FB 8F,4A DCZ @FAC If luno #0 [1290] 85FD 46,0B BR G860B [1291] 85FF BD,A3,AA DST @PGMPTR,V@INPUTP Save PGMPTR for "try again" 8602 2C [1292] 8603 91,A3,AA DINC V@INPUTP Pass the ":" for the [1293] * "prompt" code handler [1294] * later, (using #0 will not [1295] * take care the prompt in [1296] * INPUT) [1297] 8606 06,89,2D CALL INPUZ2 #0 is equivalent to no # [1298] 8609 47,68 BR INPZ2 [1299] 860B 06,88,E8 G860B CALL INSU1 Get info about file [1300] * INTERNAL files get special treatment [1301] 860E DA,E0,05 CLOG >08,V@FLG(@PABPTR) INTERNAL file 8611 04,08 [1302] 8613 66,AD BS G86AD [1303] 8615 8E,E0,03 CZ V@OFS(@PABPTR) Fresh start 8618 04 [1304] 8619 46,1E BR G861E [1305] 861B 06,97,65 INTRZ0 CALL IOCLZ1 Get a new record through [1306] * the DSR [1307] 861E BC,2B,E0 G861E ST V@OFS(@PABPTR),@VARA+1 Regain possible offset 8621 03,04 [1308] 8623 86,2A CLR @VARA Make that a two byte constant [1309] 8625 BD,66,E0 DST V@BUF(@PABPTR),@TEMP5 Get first address 8628 06,04 [1310] 862A A1,66,2A DADD @VARA,@TEMP5 Compute actual address [1311] * within record [1312] 862D 06,97,E3 INTRZ1 CALL BUG01 Get the symbol table entry [1313] * Above call fixes bug, of the given variable [1314] 8630 0F,77 XML VPUSH And save it on the stack [1315] 8632 87,0C DCLR @BYTES Assume no data available [1316] 8634 C8,2B,E0 CHE V@CNT(@PABPTR),@VARA+1 Pick up data 8637 09,04 [1317] 8639 66,43 BS G8643 [1318] 863B BC,0D,B0 ST V*TEMP5,@BYTES+1 Length byte first 863E 66 [1319] 863F 91,66 DINC @TEMP5 Update both actual address [1320] 8641 90,2B INC @VARA+1 and offset [1321] 8643 D6,4C,65 G8643 CEQ >65,@FAC2 Has to be string variable [1322] 8646 46,50 BR G8650 [1323] 8648 BD,50,0C DST @BYTES,@FAC6 Set length of string [1324] 864B 06,92,DE CALL CTMPST Create temporary string [1325] 864E 46,7E BR G867E [1326] 8650 D6,0D,08 G8650 CEQ >08,@BYTES+1 * FILE ERROR [1327] 8653 57,D7 BR ERRFE [1328] 8655 34,0C,4A MOVE @BYTES,V*TEMP5,@FAC Copy value 8658 B0,66 [1329] 865A 8F,4A DCZ @FAC Watch out for non-scaled stuf [1330] 865C 66,7C BS G867C 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0023 FLMGR-359 [1331] 865E BE,5C,51 ST FAC7,@ARG Test for legal numeric [1332] 8661 C6,90,5C G8661 CH 99,*ARG * FILE ERROR 8664 63 [1333] 8665 77,D7 BS ERRFE [1334] 8667 92,5C DEC @ARG Next digit for test [1335] 8669 D6,5C,4B CEQ FAC1,@ARG [1336] 866C 46,61 BR G8661 [1337] 866E BD,5C,4A DST @FAC,@ARG Copy in ARG for some testing [1338] 8671 81,5C DABS @ARG Be sure we're positive [1339] * If first byte after expon. byte=0 : incorrect [1340] * normalization has occured : FILE ERROR [1341] * Or >99 : illegal numeric : FILE ERROR [1342] 8673 92,5D DEC @ARG1 0 would cause underflow here [1343] 8675 C6,5D,62 CH 98,@ARG1 [1344] 8678 77,D7 BS ERRFE [1345] 867A 46,7E BR G867E [1346] 867C 87,4C G867C DCLR @FAC2 Be sure FAC2 = 0 (no strings) [1347] 867E A1,66,0C G867E DADD @BYTES,@TEMP5 Update address and [1348] 8681 A0,2B,0D ADD @BYTES+1,@VARA+1 offset again [1349] 8684 0F,7C XML ASSGNV Assign value to variable [1350] 8686 86,E0,03 CLR V@OFS(@PABPTR) Undo allocated offsets 8689 04 [1351] 868A D6,42,B3 CEQ COMMAZ,@CHAT [1352] 868D 46,AB BR G86AB [1353] 868F 0F,79 XML PGMCHR Get next text character [1354] 8691 06,95,AD CALL CHKEND Check for end of statement [1355] 8694 66,9F BS INTRZ2 OK, EOS is fine [1356] 8696 C8,2B,E0 CHE V@CNT(@PABPTR),@VARA+1 8699 09,04 [1357] 869B 66,1B BS INTRZ0 [1358] 869D 46,2D BR INTRZ1 Still something left [1359] 869F C8,2B,E0 INTRZ2 CHE V@CNT(@PABPTR),@VARA+1 86A2 09,04 [1360] 86A4 66,AB BS G86AB [1361] 86A6 BC,E0,03 ST @VARA+1,V@OFS(@PABPTR) Save value of offset 86A9 04,2B [1362] 86AB 0F,75 G86AB XML CONT And CONTINUE [1363] 86AD 06,92,8A G86AD CALL GETVAR Collect variable list on stac [1364] 86B0 BD,14,0A DST @STADDR,@CURLIN Save it in temp [1365] 86B3 BF,0A,08 DST CRNBUF,@RAMPTR Initialize crunch buffer poin 86B6 20 [1366] 86B7 86,07 CLR @RECLEN Initialize field counter [1367] 86B9 BE,E0,04 ST CZREAD,V@COD(@PABPTR) Select READ operation 86BC 04,02 [1368] 86BE 8E,E0,03 CZ V@OFS(@PABPTR) 86C1 04 [1369] 86C2 46,E9 BR INPZ31 [1370] 86C4 46,CC BR INPZ3 Adjust for used record usage [1371] 86C6 BE,EF,FF G86C6 ST COMMAZ,V@-1(@RAMPTR) Fake legal separator 86C9 FF,0A,B3 [1372] 86CC 06,97,65 INPZ3 CALL IOCLZ1 Get next input record [1373] 86CF 86,E0,03 CLR V@OFS(@PABPTR) Reset offset within record 86D2 04 [1374] 86D3 06,88,27 CALL RECENT [1375] 86D6 BC,2A,E0 ST V@CNT(@PABPTR),@VARA Get record length 86D9 09,04 [1376] 86DB 8E,2A G86DB CZ @VARA [1377] 86DD 66,E9 BS INPZ31 [1378] 86DF A2,B0,20 ADD OFFSET,V*VARW Add video offset for normal 86E2 60 [1379] 86E3 91,20 DINC @VARW Screen-type crunch - proceed [1380] 86E5 92,2A DEC @VARA for entire record [1381] 86E7 46,DB BR G86DB [1382] 86E9 06,88,27 INPZ31 CALL RECENT Compute actual record entry 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0024 FLMGR-359 [1383] 86EC BC,2B,E0 ST V@CNT(@PABPTR),@VARA+1 Compute end of record 86EF 09,04 [1384] 86F1 86,2A CLR @VARA Make that a double byte [1385] 86F3 A1,2A,E0 DADD V@BUF(@PABPTR),@VARA Add buffer start addr 86F6 06,04 [1386] 86F8 93,2A DDEC @VARA Point to last position in rec [1387] 86FA 86,11 CLR @VAR6 Assume no values input [1388] 86FC 0F,7F XML CRUNCH Scan data fields as in DATA s [1389] 86FE 01 BYTE 1 * Indicate input stmt crunch [1390] 86FF 8F,22 DCZ @ERRCOD If some crunch error [1391] 8701 57,CF BR ERRINP [1392] 8703 90,11 INC @VAR6 Get correct # of fields (one [1393] 8705 A0,07,11 ADD @VAR6,@RECLEN Update # of fields up to now [1394] 8708 C8,07,10 CHE @VAR5,@RECLEN OK, THAT'S ENOUGH!!!! [1395] 870B 46,C6 BR G86C6 [1396] 870D 97,2C DDECT @PGMPTR Backup program pointer [1397] 870F 0F,79 XML PGMCHR Re-inspect last token before [1398] 8711 06,88,27 CALL RECENT Precompute record entry [1399] 8714 86,E0,03 CLR V@OFS(@PABPTR) Assume no pending record 8717 04 [1400] 8718 D6,42,B3 CEQ COMMAZ,@CHAT Make record pending [1401] 871B 47,52 BR G8752 [1402] 871D D4,07,10 CEQ @VAR5,@RECLEN Enough left pending [1403] 8720 67,52 BS G8752 [1404] 8722 A4,07,10 SUB @VAR5,@RECLEN Compute remaining # of fields [1405] 8725 A4,11,07 SUB @RECLEN,@VAR6 # of fields used in last reco [1406] 8728 D6,B0,20 INPZ32 CEQ >82,V*VARW +OFFSET 872B 82 [1407] 872C 47,3A BR G873A Skip quoted strings [1408] 872E 91,20 G872E DINC @VARW [1409] 8730 D6,B0,20 CEQ >82,V*VARW +OFFSET 8733 82 [1410] 8734 47,2E BR G872E [1411] 8736 91,20 DINC @VARW [1412] 8738 47,28 BR INPZ32 Search for Nth data item [1413] 873A 91,20 G873A DINC @VARW Update pointer [1414] 873C D6,EF,FF CEQ >8C,V@-1(@VARW) * ","+OFFSET = >8C 873F FF,20,8C [1415] 8742 47,3A BR G873A [1416] 8744 92,11 DEC @VAR6 Commas denote end of field [1417] 8746 47,28 BR INPZ32 Continue until done [1418] 8748 A5,20,E0 DSUB V@BUF(@PABPTR),@VARW Compute current offset 874B 06,04 [1419] 874D BC,E0,03 ST @VARW+1,V@OFS(@PABPTR) Store for next round 8750 04,21 [1420] 8752 BC,11,10 G8752 ST @VAR5,@VAR6 Copy # of variables for check [1421] 8755 BD,0A,14 DST @CURLIN,@STADDR Restore from temp [1422] 8758 47,86 BR G8786 [1423] 875A 06,97,3F G875A CALL INITKB Initialize some variables for [1424] 875D BD,A3,AA DST @PGMPTR,V@INPUTP Save for "try agian" case 8760 2C [1425] 8761 BD,A3,BC DST @CCPPTR,V@CPTEMP Save CCPPTR, RECLEN for "try 8764 06 [1426] * Entry point for "try again" case [1427] 8765 06,89,06 INPZ33 CALL INSUB1 Put out prompt [1428] 8768 06,92,8A INPZ2 CALL GETVAR Get variable list on V-stack [1429] 876B 06,89,3B INPUZ3 CALL INSUB2 Read from the screen [1430] 876E 86,11 CLR @VAR6 Assume no values input [1431] 8770 0F,7F XML CRUNCH Crunch the input line [1432] 8772 01 BYTE 1 * Indicate input stmt scan [1433] 8773 BD,0A,14 DST @CURLIN,@STADDR Restore from temp [1434] 8776 8F,22 DCZ @ERRCOD If got some crunch error [1435] 8778 47,BB BR WRNINP [1436] 877A 0F,83 XML SCROLL Scroll up after crunching 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0025 FLMGR-359 [1437] 877C BE,7F,03 ST 3,@XPT Reset XPT too - pending recor [1438] 877F 90,11 INC @VAR6 # fields = # of commas + 1 [1439] 8781 D4,10,11 CEQ @VAR6,@VAR5 # of variables wrong [1440] 8784 47,BB BR WRNINP [1441] * Once we're here, all information should be availiable [1442] * After type verification for input and variables, push [1443] * all value entries on the V-stack. [1444] * VAR6 = VAR5 = number of variables [1445] 8786 BD,14,34 G8786 DST @DATA,@CURLIN Save current DATA pointer [1446] 8789 BF,34,08 DST CRNBUF,@DATA Get crunch entry 878C 20 [1447] 878D BD,02,0E DST @VAR4,@MNUM Get entry in V-stack before P [1448] 8790 A3,02,00 INPUZ4 DADD 8,@MNUM Point to first symbol table e 8793 08 [1449] 8794 BD,06,B0 DST V*MNUM,@CCPPTR Get immedediate result 8797 02 [1450] 8798 06,93,0C CALL GETRAM Get value descriptor from RAM [1451] 879B DA,B0,06 CLOG >80,V*CCPPTR Numerical value 879E 80 [1452] 879F 47,CF BR G87CF [1453] 87A1 06,92,EC CALL CHKNUM Check entered value against n [1454] 87A4 47,B4 BR INPUZ5 Found error [1455] 87A6 8E,17 CZ @DSRFLG Do not check overflow in file [1456] * supply machine infinity with [1457] * appropriate sign and continu [1458] 87A8 67,D4 BS INPUZ6 [1459] 87AA 8E,A3,BA CZ V@CSNTP1 Watch out for overflow in scr [1460] 87AD 67,D4 BS INPUZ6 [1461] 87AF BD,34,14 DST @CURLIN,@DATA Restore DATA pointer [1462] 87B2 47,BF BR WRZZ5 Ask for input re-enter [1463] 87B4 8E,17 INPUZ5 CZ @DSRFLG FILE I/O IS FATAL [1464] 87B6 77,CF BS ERRINP [1465] 87B8 BD,34,14 DST @CURLIN,@DATA Restore DATA pointer on error [1466] 87BB 06,6A,82 WRNINP CALL WARNZZ Go here for simple warnings t [1467] 87BE 20 BYTE 32 * INPUT ERROR - TRY AGAIN [1468] 87BF 06,88,3A WRZZ5 CALL SCRZ Scroll the screen and reset C [1469] 87C2 BD,2C,A3 DST V@INPUTP,@PGMPTR Restore ptr to "prompt" if an 87C5 AA [1470] 87C6 BD,06,A3 DST V@CPTEMP,@CCPPTR Restore CCPPTR, RECLEN, for t 87C9 BC [1471] 87CA BD,6E,0E DST @VAR4,@VSPTR Restore original stack ptr [1472] 87CD 47,65 BR INPZ33 [1473] 87CF 06,93,23 G87CF CALL CHKSTR Check string input [1474] 87D2 67,B4 BS INPUZ5 ERROR ... CHECK I/O TYPE [1475] 87D4 06,93,0C INPUZ6 CALL GETRAM Get separation character (RAM [1476] 87D7 D6,01,B3 CEQ COMMAZ,@VAR0+1 [1477] 87DA 67,E6 BS G87E6 [1478] 87DC 92,11 DEC @VAR6 Has to be end of data [1479] 87DE 47,B4 BR INPUZ5 If not ... ERROR [1480] 87E0 8E,01 CZ @VAR0+1 [1481] 87E2 47,B4 BR INPUZ5 [1482] 87E4 47,EA BR G87EA [1483] 87E6 92,11 G87E6 DEC @VAR6 Count number of value entries [1484] 87E8 47,90 BR INPUZ4 Continue [1485] * Assign cycle - assign values to variables because it resc [1486] * the program line, this code can not be udes for inperativ [1487] * statements , since the crunch buffer get's destroyed on [1488] * input. The rescan is necessary because subscripts should [1489] * evaluated AFTER all previous values have been assigned. i [1490] * INPUT I,A(I) with values 2,3 [1491] * Should assign value 3 to A(2) !!!!!!!!! [1492] * No error-checking is done here, since types are already [1493] * validated. We might get subscripts out of range though!!! [1494] 87EA BF,34,08 G87EA DST CRNBUF,@DATA Prepare for input rescan 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0026 FLMGR-359 87ED 20 [1495] 87EE BD,2C,0A DST @STADDR,@PGMPTR Restore token pointer for res [1496] 87F1 93,2C DDEC @PGMPTR Backup on token [1497] 87F3 BD,6E,0E DST @VAR4,@VSPTR Restore original stack pointe [1498] 87F6 0F,79 INPZ65 XML PGMCHR Get next program characters [1499] 87F8 06,95,AD CALL CHKEND Might have , before EOS [1500] 87FB 68,22 BS INPUZ7 [1501] 87FD 06,97,E3 CALL BUG01 Rescan variable name [1502] * Above call fixes bug. Get correct entry for arrays [1503] 8800 0F,77 XML VPUSH Save on stack for ASSGNV [1504] 8802 06,93,0C CALL GETRAM Get first token of input valu [1505] 8805 D6,4C,65 CEQ STRVAL,@FAC2 Numerical case [1506] 8808 68,0F BS G880F [1507] 880A 06,92,EC CALL CHKNUM Check for numerical value [1508] 880D 68,18 BS INPZ67 COND should be set (valid num [1509] 880F 06,93,23 G880F CALL CHKSTR Get the correct string value [1510] 8812 BD,0C,50 DST @FAC6,@BYTES Length for temporary string [1511] 8815 06,92,DE CALL CTMPST Create temporary string [1512] 8818 0F,7C INPZ67 XML ASSGNV Assign value to variable [1513] 881A 06,93,0C CALL GETRAM Skip separator (already check [1514] 881D 06,95,AD CALL CHKEND Check for end to statement [1515] 8820 47,F6 BR INPZ65 Found it [1516] 8822 BD,34,14 INPUZ7 DST @CURLIN,@DATA Restore DATA pointer [1517] 8825 0F,75 XML CONT Contiue in PARSE [1518] 8827 BC,21,E0 RECENT ST V@OFS(@PABPTR),@VARW+1 Get record offset 882A 03,04 [1519] 882C 86,20 CLR @VARW Double byte value required [1520] 882E A1,20,E0 DADD V@BUF(@PABPTR),@VARW Got it 8831 06,04 [1521] 8833 00 RTN AND NOW, THE END IS NEAR... [1522] 8834 C7,08,02 CHKRM DCH SCRNBS+29,@CCPADR Not enough room for "?" 8837 FD [1523] 8838 48,40 BR G8840 [1524] 883A 0F,83 SCRZ XML SCROLL Scroll one line for "?" [1525] 883C BF,08,02 DST SCRNBS+2,@CCPADR and update CCPADR accordingl 883F E2 [1526] 8840 00 G8840 RTN [1527] *********************************************************** [1528] * LINPUT ROUTINE [1529] * If file-I/O then [1530] * Get file number and check it [1531] * Internal file not allowed [1532] * End if [1533] * Get variable info [1534] * Must be string variable [1535] * If file I/O then [1536] * If no-partial-record of REC clause included [1537] * Read new record [1538] * End if [1539] * Set up copy pointers [1540] * Else [1541] * Call readline to read from keyboard [1542] * Copy to crunch buffer adjustin g for screen offset [1543] * End if [1544] * Get string of proper length [1545] * Move data into string [1546] * Assign string [1547] * Done. [1548] *********************************************************** [1549] 8841 06,97,3F LINPUT CALL INITKB Assume input from keyboard [1550] 8844 D6,42,FD CEQ NUMBEZ,@CHAT If "#" - then device [1551] 8847 48,5C BR G885C [1552] 8849 06,93,55 CALL CHKFN Check for default = 0 [1553] 884C 8F,4A DCZ @FAC #0 is assumed 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0027 FLMGR-359 [1554] 884E 68,5F BS LINP10 [1555] 8850 06,88,E8 CALL INSU1 Parse the device # [1556] 8853 DA,E0,05 CLOG >08,V@FLG(@PABPTR) 8856 04,08 [1557] 8858 57,D7 BR ERRFE [1558] 885A 48,5F BR LINP10 [1559] 885C 06,89,06 G885C CALL INSUB1 Handle possible prompt [1560] 885F BD,0E,6E LINP10 DST @VSPTR,@VAR4 Save original V-pointer [1561] * incase BREAK in READLN [1562] 8862 06,97,E3 CALL BUG01 Get info about the symbol [1563] * Above call fixes bug. Get value pointer and type [1564] 8865 D6,4C,65 CEQ STRVAL,@FAC2 Must be string [1565] 8868 57,DF BR ERRMUV [1566] 886A 0F,77 XML VPUSH [1567] 886C 8E,17 CZ @DSRFLG If device I/O [1568] 886E 48,AF BR G88AF [1569] 8870 8E,E0,03 CZ V@OFS(@PABPTR) If new record 8873 04 [1570] 8874 48,7B BR G887B [1571] 8876 06,97,65 CALL IOCLZ1 Read the record [1572] 8879 48,93 BR G8893 [1573] 887B BC,0C,E0 G887B ST V@CNT(@PABPTR),@BYTES Get length of record 887E 09,04 [1574] 8880 BD,66,E0 DST V@BUF(@PABPTR),@TEMP5 Get address of buffer 8883 06,04 [1575] 8885 8E,0C G8885 CZ @BYTES While characters in buffer [1576] 8887 68,93 BS G8893 [1577] 8889 A6,B0,66 SUB OFFSET,V*TEMP5 Remove INPUT's offset 888C 60 [1578] 888D 91,66 DINC @TEMP5 Increment pointer [1579] 888F 92,0C DEC @BYTES Decrement count [1580] 8891 48,85 BR G8885 Drop out directly when done [1581] 8893 86,66 G8893 CLR @TEMP5 Need a word value [1582] 8895 BC,67,E0 ST V@OFS(@PABPTR),@TEMP5+1 Restore value 8898 03,04 [1583] 889A 86,0C CLR @BYTES Need a word value [1584] 889C BC,0D,E0 ST V@CNT(@PABPTR),@BYTES+1 Get the length 889F 09,04 [1585] 88A1 A5,0C,66 DSUB @TEMP5,@BYTES Calcualte length [1586] 88A4 A1,66,E0 DADD V@BUF(@PABPTR),@TEMP5 Current buffer address 88A7 06,04 [1587] 88A9 86,E0,03 CLR V@OFS(@PABPTR) Read next record next time 88AC 04 [1588] 88AD 48,E1 BR G88E1 Else if keyboard input [1589] 88AF 06,89,3B G88AF CALL INSUB2 Clear line and call READLN [1590] 88B2 87,0C DCLR @BYTES Initialize byte counter [1591] 88B4 BD,66,0A DST @RAMPTR,@TEMP5 Initialize "crunch" pointer [1592] 88B7 D6,B0,2A CEQ SPACE+OFFSET,V*VARA If space 88BA 80 [1593] 88BB 48,BF BR G88BF [1594] 88BD 93,2A DDEC @VARA Don't include space on end [1595] 88BF CD,20,2A G88BF DCGT @VARA,@VARW While not at end [1596] 88C2 68,DC BS G88DC [1597] 88C4 BC,00,B0 ST V*VARW,@VAR0 Get the character 88C7 20 [1598] 88C8 D6,00,7F CEQ EDGECH,@VAR0 If not at edge character [1599] 88CB 68,D8 BS G88D8 [1600] 88CD A6,00,60 SUB OFFSET,@VAR0 Subtract screen offset [1601] 88D0 BC,B0,0A ST @VAR0,V*RAMPTR And put into crunch buffer 88D3 00 [1602] 88D4 91,0C DINC @BYTES Count it [1603] 88D6 91,0A DINC @RAMPTR And update "crunch" pointer [1604] 88D8 91,20 G88D8 DINC @VARW Update input pointer [1605] 88DA 48,BF BR G88BF 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0028 FLMGR-359 [1606] 88DC 0F,83 G88DC XML SCROLL Scroll the screen [1607] 88DE BE,7F,03 ST 3,@XPT Initialize x-pointer [1608] 88E1 06,92,DE G88E1 CALL CTMPST Create temporary string [1609] 88E4 0F,7C XML ASSGNV Assign the value to it [1610] 88E6 0F,75 XML CONT And continue execution [1611] * Get file number and info about the file [1612] 88E8 06,93,71 INSU1 CALL CHKCON Check & convert & search [1613] 88EB 57,D7 BR ERRFE Give error if required [1614] * INPUT allowed for input and update modes [1615] 88ED DA,E0,05 CLOG >02,V@FLG(@PABPTR) 88F0 04,02 [1616] 88F2 57,D7 BR ERRFE [1617] 88F4 06,93,90 CALL OUTEOF Output pending PRINT stuff [1618] 88F7 BE,E0,04 ST CZREAD,V@COD(@PABPTR) Ensure read operation 88FA 04,02 [1619] 88FC 06,94,C2 CALL PARREC Parse REC clause [1620] 88FF 0F,7E XML SPEED Must be at a [1621] 8901 00 BYTE SYNCHK * colon else [1622] 8902 B5 BYTE COLONZ * its and error [1623] 8903 86,17 CLR @DSRFLG Clear keyboard input flag [1624] 8905 00 RTN [1625] * Parse and put out input prompt [1626] 8906 BD,0A,2C INSUB1 DST @PGMPTR,@STADDR Save pointer for prompt check [1627] 8909 93,0A DDEC @STADDR Backup to previous token [1628] * Go into a tight loop [1629] 890B 06,95,BA G890B CALL NXTCHR Get next program character [1630] 890E 69,27 BS INPZ37 Detected end of statement [1631] 8910 D6,42,B5 CEQ COLONZ,@CHAT Stop if we find a colon [1632] 8913 49,0B BR G890B [1633] 8915 BD,2C,0A DST @STADDR,@PGMPTR Backup for actual prompt scan [1634] 8918 0F,79 XML PGMCHR Jump into 1st char of prompt [1635] 891A 0F,74 XML PARSE And try to decode string expr [1636] 891C B5 BYTE COLONZ [1637] 891D D6,4C,65 CEQ STRVAL,@FAC2 Number prompt illegal [1638] 8920 57,BF BR ERRSNM [1639] 8922 06,97,0E CALL OSTRNG Output the given prompt [1640] 8925 49,36 BR INPZ39 Exit without prompt backup [1641] 8927 BD,2C,0A INPZ37 DST @STADDR,@PGMPTR Backup to beginning of line [1642] 892A BE,42,B5 ST COLONZ,@CHAT Fake prompt with ":" [1643] 892D 06,88,34 INPUZ2 CALL CHKRM Check for room for ? [1644] 8930 BE,B0,08 ST >9F,V*CCPADR Display ? 8933 9F [1645] 8934 95,08 DINCT @CCPADR Count it too [1646] 8936 0F,7E INPZ39 XML SPEED Must be at a [1647] 8938 00 BYTE SYNCHK * colon else [1648] 8939 B5 BYTE COLONZ * its an error [1649] 893A 00 RTN [1650] * Issue 'BEEP' and call read line to read form screen [1651] 893B 06,88,34 INSUB2 CALL CHKRM Check for room for answer [1652] 893E BD,20,08 DST @CCPADR,@VARW Copy current cursor position [1653] 8941 BE,B0,08 G8941 ST >80,V*CCPADR Clear the remainder 8944 80 [1654] 8945 91,08 DINC @CCPADR of the current line [1655] 8947 CB,08,02 DCHE >02FE,@CCPADR Stop if we're there 894A FE [1656] 894B 49,41 BR G8941 [1657] 894D BF,A2,FE DST >7F7F,V@>02FE Replace edgechars 8950 7F,7F [1658] 8952 8E,80,CE CZ @PRTNFN If previous tone finished [1659] 8955 49,5A BR G895A [1660] 8957 06,00,34 CALL TONE1 ---------- BEEP ------------- [1661] 895A C1,6E,0E G895A DEX @VAR4,@VSPTR Don't destroy V-stack on BREA [1662] 895D 06,6A,76 CALL READLN Input a line from the keyboar [1663] 8960 C1,6E,0E DEX @VAR4,@VSPTR Restore V-stack pointer 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0029 FLMGR-359 [1664] 8963 BD,14,0A DST @STADDR,@CURLIN Save in a temp [1665] 8966 BF,0A,08 DST CRNBUF,@RAMPTR Init crunch buffer pointer 8969 20 [1666] 896A 00 RTN [1667] *********************************************************** [1668] * ACCEPT STATEMENT [1669] * Accept input anywhere on the screen. The total number of [1670] * input variables is limited to one. On an ACCEPT AT( , ), [1671] * the maximum number that can be accepted is up to the righ [1672] * margin!!!! If SIZE() is used, the maximum number is [1673] * limited to the given SIZE, or to the number of characters [1674] * remaining on the line, whichever is the lesser. [1675] *********************************************************** [1676] 896B 86,A3,B7 ACCEPT CLR V@ACCTRY Clear "try again" flag [1677] 896E 06,94,EF CALL DISACC Use common code for DISPLAY/A [1678] 8971 61,09 BS ERRSYN COND set means end of statem [1679] 8973 BE,63,FF ST >FF,@ARG7 Assume we don't have VALIDATE [1680] ************ VALIDATE OPTION HANDLING ********************* [1681] 8976 D6,42,FE CEQ VALIDZ,@CHAT Detected VALIDATE option [1682] 8979 49,FD BR G89FD [1683] 897B 0F,79 XML PGMCHR Next character should start o [1684] 897D D6,42,B7 CEQ LPARZ,@CHAT "* SYNTAX ERROR *" [1685] 8980 41,09 BR ERRSYN [1686] 8982 B6,04,40 OR >40,@PABPTR Indicate usage of validate cl [1687] 8985 BF,2A,00 DST 1,@VARA Use VARA as length of option 8988 01 [1688] 8989 87,20 DCLR @VARW VARW= options used, VARW+1=#0 [1689] * stack entries for strings [1690] 898B 0F,79 G898B XML PGMCHR Skip separator token [1691] 898D CA,42,E8 CHE NUMERZ,@CHAT Could be valid option [1692] 8990 49,AA BR G89AA [1693] 8992 CA,42,EB CHE UALPHZ+1,@CHAT It is .... [1694] 8995 69,AA BS G89AA [1695] 8997 BE,5C,01 ST 1,@ARG Select bit 0 as number option [1696] 899A A6,42,E8 SUB NUMERZ,@CHAT Create correct offset [1697] 899D 69,A2 BS SETVW Skip the shift stat. [1698] 899F E0,5C,42 SLL @CHAT,@ARG Then select whatever option w [1699] 89A2 B4,20,5C SETVW OR @ARG,@VARW Remember options in VARW [1700] * stack entries for strings [1701] 89A5 0F,79 XML PGMCHR Get next token [1702] 89A7 05,89,C4 B VLIDZ0 Must use a long branch here [1703] 89AA 0F,74 G89AA XML PARSE Try to decode a string expres [1704] 89AC B6 BYTE RPARZ [1705] 89AD D6,4C,65 CEQ STRVAL,@FAC2 String-number mismatch [1706] 89B0 57,BF BR ERRSNM [1707] 89B2 8E,51 CZ @FAC7 Only count non-null strings [1708] 89B4 69,C4 BS VLIDZ0 [1709] 89B6 A0,2B,51 ADD @FAC7,@VARA+1 Now watch out for overflow [1710] 89B9 0C CARRY Sting truncated [1711] 89BA 49,C0 BR G89C0 [1712] 89BC 06,6A,84 CALL ERRZZ * STRING TRUNCATED ERROR * [1713] 89BF 13 BYTE 19 [1714] 89C0 0F,77 G89C0 XML VPUSH Push the result for future re [1715] 89C2 90,21 INC @VARW+1 Count number of entries on st [1716] 89C4 D6,42,B3 VLIDZ0 CEQ COMMAZ,@CHAT Evaluate all fields [1717] 89C7 69,8B BS G898B [1718] 89C9 0F,7E XML SPEED [1719] 89CB 00 BYTE SYNCHK * Check for ")" on end [1720] 89CC B6 BYTE RPARZ * If not, "* SYNTAX ERROR *" [1721] 89CD 06,94,F2 CALL DISPZ1 Try to evaluate further optio [1722] 89D0 61,09 BS ERRSYN Premature end of statement [1723] 89D2 BD,0C,2A DST @VARA,@BYTES Allocate string for character [1724] 89D5 0F,71 XML GETSTR [1725] 89D7 BD,5C,1C DST @SREF,@ARG Get start of allocated string 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0030 FLMGR-359 [1726] 89DA BC,B0,5C ST @VARW,V*ARG Get start of allocated string 89DD 20 [1727] 89DE 91,5C DINC @ARG Leave room form standard opti [1728] 89E0 8E,21 G89E0 CZ @VARW+1 Copy all available informatio [1729] 89E2 69,F3 BS G89F3 [1730] 89E4 0F,78 XML VPOP Regain stack-entry [1731] 89E6 34,50,B0 MOVE @FAC6,V*FAC4,V*ARG Copy string 89E9 5C,B0,4E [1732] 89EC A1,5C,50 DADD @FAC6,@ARG Update destination address [1733] 89EF 92,21 DEC @VARW+1 Count # of stack entries [1734] 89F1 49,E0 BR G89E0 [1735] 89F3 BD,A3,B0 G89F3 DST @SREF,V@VALIDP Copy start address of string 89F6 1C [1736] 89F7 BD,A3,B2 DST @VARA,V@VALIDL and total string length 89FA 2A [1737] 89FB 86,63 CLR @ARG7 Indicate VALIDATE usage of RE [1738] 89FD BD,20,08 G89FD DST @CCPADR,@VARW Save start address of the fie [1739] 8A00 BD,2A,20 DST @VARW,@VARA Set default highest address u [1740] 8A03 BD,5E,08 DST @CCPADR,@ARG2 Select absolute highest usabl [1741] 8A06 A3,5E,01 DADD 290,@ARG2 290=2+32*9 maximum of 254 cha 8A09 22 [1742] 8A0A C6,2B,FC CH >FC,@VARA+1 Start at the end of line [1743] 8A0D 4A,13 BR G8A13 [1744] 8A0F A3,5E,00 DADD 4,@ARG2 8A12 04 [1745] 8A13 8E,04 G8A13 CZ @PABPTR We used some options like AT, [1746] 8A15 6A,66 BS G8A66 [1747] 8A17 0F,7E XML SPEED [1748] 8A19 00 BYTE SYNCHK * Should always end on ":" [1749] 8A1A B5 BYTE COLONZ [1750] 8A1B DA,04,02 CLOG >02,@PABPTR Used BEEP clause [1751] 8A1E 6A,23 BS G8A23 [1752] 8A20 06,00,34 CALL TONE1 Wake up the user [1753] 8A23 DA,04,04 G8A23 CLOG >04,@PABPTR Used AT option, SIZE!!! [1754] 8A26 6A,35 BS G8A35 [1755] 8A28 DA,04,08 CLOG >08,@PABPTR Use defualt SIZE option [1756] 8A2B 4A,33 BR G8A33 [1757] 8A2D BE,05,1C ST VWIDTH,@PABPTR+1 Limit current record length [1758] 8A30 06,95,DF CALL SIZE1 [1759] 8A33 4A,47 G8A33 BR ACCPZ1 [1760] 8A35 DA,04,08 G8A35 CLOG >08,@PABPTR SIZE option used somewhere [1761] 8A38 6A,66 BS G8A66 [1762] * We're sure now that SIZE has been used WITHOUT the AT [1763] * option, this means that we should set XPT to point behind [1764] * the SIZE field. This can be done by adding the record [1765] * length to the current screen base address and the line's [1766] * screen base address [1767] 8A3A BC,7F,09 ST @CCPADR+1,@XPT Start of with current address [1768] 8A3D A0,7F,07 ADD @RECLEN,@XPT Add in the current record len [1769] 8A40 A6,7F,DF SUB >DF,@XPT And subtract the lower base a [1770] * Also adjust for edge characte [1771] 8A43 BC,A3,B8 ST @XPT,V@SIZXPT Save it for "try again" case 8A46 7F [1772] * in WARNING, XPT gets changed [1773] 8A47 BD,A3,B4 ACCPZ1 DST @CCPADR,V@SIZCCP Save for "try again" case 8A4A 08 [1774] 8A4B BC,A3,B6 ST @RECLEN,V@SIZREC Save for "try again" case 8A4E 07 [1775] *********************************************************** [1776] * ENTRY POINT FOR "TRY AGAIN" CASE WHEN SIZE OR ACCEPT USED [1777] *********************************************************** [1778] 8A4F DA,04,80 ACCPZ9 CLOG >80,@PABPTR Blank current field [1779] 8A52 4A,58 BR G8A58 [1780] 8A54 BE,B0,08 ST SPACE+OFFSET,V*CCPADR 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0031 FLMGR-359 8A57 80 [1781] 8A58 91,08 G8A58 DINC @CCPADR Update screen address [1782] 8A5A 92,07 DEC @RECLEN Reduce count, always at least [1783] 8A5C 4A,4F BR ACCPZ9 Loop until at end of field [1784] 8A5E 93,08 DDEC @CCPADR Fix end of field for maximum [1785] 8A60 BD,2A,08 DST @CCPADR,@VARA Set highest location availabl [1786] 8A63 BD,5E,2A DST @VARA,@ARG2 Also highest location availab [1787] * OK all set to go [1788] 8A66 D6,A3,B7 G8A66 CEQ 1,V@ACCTRY Skip if in "try again" 8A69 01 [1789] 8A6A 6A,74 BS ACCPZ7 [1790] 8A6C BD,0E,6E DST @VSPTR,@VAR4 Save first entry in V-stack [1791] 8A6F 06,97,E3 CALL BUG01 Collect the symbol designator [1792] * Above call fixes bug. Take care of arrays too [1793] 8A72 0F,77 XML VPUSH Save symbol table entry [1794] 8A74 BD,A3,AC ACCPZ7 DST @VARW,V@ACCVRW Save for trying again case 8A77 20 [1795] 8A78 BD,A3,AE DST @VARA,V@ACCVRA Save for trying again case 8A7B 2A [1796] *********************************************************** [1797] * ENTRY POINT FOR "TRY AGAIN" WHEN NEITHER SIZE OR ACCEPT I [1798] *********************************************************** [1799] * In case a CALL CLEAR or ERASE ALL or CALL HCHAR has just [1800] * processed, EDGE CHARS, are gone at the bottom line [1801] 8A7C DA,04,0C ACCPZ5 CLOG >0C,@PABPTR If AT/SIZE used, maximum fiel [1802] 8A7F 4A,86 BR AZ1 is line, so no need to worry [1803] * about it [1804] 8A81 BF,A2,FE DST >7F7F,V@>02FE Put the EDGE CHAR back 8A84 7F,7F [1805] 8A86 C1,0E,6E AZ1 DEX @VSPTR,@VAR4 Don't destroy V-stack on BREA [1806] 8A89 06,6A,86 CALL READL1 Ask for some input that can b [1807] * used [1808] 8A8C C1,0E,6E DEX @VSPTR,@VAR4 Resote V-stack pointer [1809] * At this point, VARA contains the highest location used, [1810] * and VARW contains the string's start address [1811] 8A8F D5,2A,20 ACCPZ2 DCEQ @VARW,@VARA Only non-empty string [1812] 8A92 6A,9E BS G8A9E [1813] 8A94 93,2A DDEC @VARA Go to the next position [1814] 8A96 D6,B0,2A CEQ SPACE+OFFSET,V*VARA 8A99 80 [1815] 8A9A 6A,8F BS ACCPZ2 [1816] 8A9C 91,2A DINC @VARA Back to the last space [1817] 8A9E 0F,78 G8A9E XML VPOP Check the symbol designator i [1818] 8AA0 0F,77 XML VPUSH a string or numeric variable [1819] 8AA2 D6,4C,65 CEQ >65,@FAC2 If numeric : empty string is [1820] 8AA5 6A,B2 BS G8AB2 [1821] 8AA7 D5,20,2A DCEQ @VARA,@VARW If an empty string was entere [1822] 8AAA 4A,B2 BR G8AB2 [1823] 8AAC 06,6A,82 CALL WARNZZ *** INPUT ERROR *** [1824] 8AAF 20 BYTE 32 [1825] 8AB0 4A,FC BR ACCPZ8 [1826] 8AB2 87,0C G8AB2 DCLR @BYTES Compute length of input strin [1827] 8AB4 BD,1C,20 DST @VARW,@SREF Use SREF as temporary variabl [1828] 8AB7 D5,1C,2A G8AB7 DCEQ @VARA,@SREF [1829] 8ABA 6A,C8 BS G8AC8 [1830] 8ABC D6,B0,1C CEQ EDGECH,V*SREF Exclude edge character 8ABF 7F [1831] 8AC0 6A,C4 BS G8AC4 [1832] 8AC2 91,0C DINC @BYTES [1833] 8AC4 91,1C G8AC4 DINC @SREF Decrement the counter [1834] 8AC6 4A,B7 BR G8AB7 [1835] 8AC8 06,92,D1 G8AC8 CALL CTSTR0 Create a temporary string [1836] 8ACB D5,20,2A ACCPZ3 DCEQ @VARA,@VARW [1837] 8ACE 6A,EB BS G8AEB 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0032 FLMGR-359 [1838] 8AD0 D6,B0,20 CEQ EDGECH,V*VARW Skip the edge character 8AD3 7F [1839] 8AD4 4A,DC BR G8ADC [1840] 8AD6 A3,20,00 DADD 4,@VARW 8AD9 04 [1841] 8ADA 4A,CB BR ACCPZ3 [1842] 8ADC BC,B0,1C G8ADC ST V*VARW,V*SREF Copy the string 8ADF B0,20 [1843] 8AE1 A6,B0,1C SUB OFFSET,V*SREF Subtract the screen offset 8AE4 60 [1844] 8AE5 91,20 DINC @VARW Update pointers [1845] 8AE7 91,1C DINC @SREF [1846] 8AE9 4A,CB BR ACCPZ3 Result can't be 0 [1847] 8AEB D6,4C,65 G8AEB CEQ STRVAL,@FAC2 Numerical variable [1848] 8AEE 6B,2A BS ACCPZ6 [1849] 8AF0 BE,4C,65 ST STRVAL,@FAC2 Create temp string [1850] 8AF3 06,A0,16 CALL VALCD Use VAL code for translation [1851] 8AF6 4B,2A BR ACCPZ6 No error - ok go on [1852] 8AF8 06,6A,82 WRNSNM CALL WARNZZ Error [1853] 8AFB 07 BYTE 7 * STRING NUMBER MISMATCH [1854] 8AFC DA,04,08 ACCPZ8 CLOG >08,@PABPTR If SIZE is used [1855] 8AFF 6B,0A BS G8B0A [1856] 8B01 DA,04,04 CLOG >04,@PABPTR Also AT is not used [1857] 8B04 4B,0A BR G8B0A [1858] 8B06 BC,7F,A3 ST V@SIZXPT,@XPT Restore XPT : in WARNING XPT 8B09 B8 [1859] 8B0A BD,20,A3 G8B0A DST V@ACCVRW,@VARW Restore @VARA, @VARW 8B0D AC [1860] 8B0E BD,2A,A3 DST V@ACCVRA,@VARA 8B11 AE [1861] 8B12 BE,A3,B7 ST 1,V@ACCTRY Set the "try again" flag 8B15 01 [1862] 8B16 DA,04,08 CLOG >08,@PABPTR If SIZE is not used [1863] 8B19 4B,20 BR G8B20 [1864] * IF ACCEPT ALSO NOT USED. GOTO "TRY AGAIN" FORM HERE [1865] 8B1B DA,04,04 CLOG >04,@PABPTR [1866] 8B1E 6A,7C BS ACCPZ5 [1867] * IF "EITHER SIZE OR ACCEPT IS USED" THEN [1868] 8B20 BD,08,A3 G8B20 DST V@SIZCCP,@CCPADR Restore CCPADR 8B23 B4 [1869] 8B24 BC,07,A3 ST V@SIZREC,@RECLEN Restore RECLEN 8B27 B6 [1870] 8B28 4A,4F BR ACCPZ9 Go blanking the field and [1871] * "try again" [1872] 8B2A 0F,7C ACCPZ6 XML ASSGNV Should be ok now [1873] 8B2C DA,04,0C CLOG >0C,@PABPTR Test usage of AT and/or SIZE [1874] 8B2F 4B,36 BR ACCPZ4 At least one of the two used [1875] 8B31 0F,83 XML SCROLL Scroll the screen up [1876] 8B33 BE,7F,03 ST 3,@XPT And reset XPT [1877] 8B36 0F,75 ACCPZ4 XML CONT [1878] *********************************************************** [1879] * READ STATEMENT [1880] * Assign DATA values to variables in READ-list one at a [1881] * time. Possibly search for new DATA statements if the [1882] * current DATA statement has been used. Be careful with [1883] * null entries...!!! [1884] *********************************************************** [1885] 8B38 0F,79 G8B38 XML PGMCHR Get character following "," [1886] 8B3A 06,97,E3 READ CALL BUG01 Get pointers and correct entr [1887] * Above call fixes bug. also allow for array variabl [1888] 8B3D 0F,77 XML VPUSH Push on Vstack for assignment [1889] 8B3F 8E,34 CZ @DATA DATA ERROR [1890] 8B41 77,D3 BS ERRDAT [1891] 8B43 06,93,04 CALL GETGFL Get next data item (RAM/GROM) 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0033 FLMGR-359 [1892] 8B46 D6,4C,65 CEQ STRVAL,@FAC2 [1893] 8B49 6B,6B BS G8B6B [1894] 8B4B D6,01,C8 CEQ NUMZ,@VAR0+1 Not a numeric [1895] 8B4E 57,BF BR ERRSNM [1896] * string-number mismatch error [1897] 8B50 06,93,2F CALL CHKSZ0 Build up string info [1898] 8B53 91,50 DINC @FAC6 Force legal delimiter on end [1899] 8B55 06,A0,02 CALL LITS05 Copy numeric into string spac [1900] 8B58 BD,56,1C DST @SREF,@FAC12 Copy string start address [1901] 8B5B A1,1C,50 DADD @FAC6,@SREF Compute end address of string [1902] 8B5E 93,1C DDEC @SREF Back up over delimiter [1903] 8B60 06,A0,12 CALL CONVER Convert string to number [1904] 8B63 D5,A3,90 DCEQ @SREF,V@CSNTMP WRONG!!!!!!! 8B66 1C [1905] 8B67 57,D3 BR ERRDAT [1906] 8B69 4B,73 BR G8B73 [1907] 8B6B 06,93,23 G8B6B CALL CHKSTR Check string input [1908] 8B6E 77,D3 BS ERRDAT Give error on error [1909] 8B70 06,A0,02 CALL LITS05 Allocate string in string spa [1910] 8B73 0F,7C G8B73 XML ASSGNV Assign variable [1911] 8B75 06,93,04 CALL GETGFL Get next datum from DATA stmt [1912] 8B78 D6,01,B3 CEQ COMMAZ,@VAR0+1 Has to be an end of DATA [1913] 8B7B 6B,8F BS G8B8F [1914] 8B7D 8E,01 CZ @VAR0+1 Check for end of data [1915] 8B7F 57,D3 BR ERRDAT [1916] 8B81 97,36 DDECT @LNBUF Pointer to line # of DATA stm [1917] 8B83 86,34 CLR @DATA Assume the worst - no more DA [1918] 8B85 D5,36,30 DCEQ @STLN,@LNBUF [1919] 8B88 6B,8F BS G8B8F [1920] 8B8A 93,36 DDEC @LNBUF Next line's 1st token address [1921] 8B8C 06,A0,08 CALL DATAST Get next DATA statement [1922] 8B8F D6,42,B3 G8B8F CEQ COMMAZ,@CHAT Worry about junk in CONT [1923] 8B92 6B,38 BS G8B38 [1924] 8B94 0F,75 XML CONT [1925] * SRDATA-Search for DATA statements (DATA statement must [1926] * be the only statement on one line) [1927] * SEARCH-also used for searching IMAGE statement. [1928] 8B96 BE,4C,93 SRDATA ST DATAZ,@FAC2 Search for a DATA token [1929] 8B99 C1,2C,34 SEARCH DEX @DATA,@PGMPTR Exchange with normal PC [1930] 8B9C C0,01,42 EX @CHAT,@VAR0+1 Preserve current PGM characte [1931] 8B9F 8E,44 CZ @PRGFLG If imperative statement [1932] 8BA1 4B,B3 BR G8BB3 [1933] 8BA3 8E,80,84 CZ @RAMTOP With ERAM : text itself in ER [1934] 8BA6 6B,B3 BS G8BB3 [1935] 8BA8 BE,80,89 ST >FF,@RAMFLG Fake RAMFLG in this case 8BAB FF [1936] 8BAC 0F,79 XML PGMCHR Get first character on the li [1937] 8BAE 86,80,89 CLR @RAMFLG Restore it back [1938] 8BB1 4B,B5 BR SRDAZ1 Skip that PGMCHR [1939] 8BB3 0F,79 G8BB3 XML PGMCHR Get first character on the li [1940] 8BB5 D4,42,4C SRDAZ1 CEQ @FAC2,@CHAT Search for specific token [1941] 8BB8 6B,BD BS SRDAZ0 [1942] 8BBA D4,00,00 CEQ @>8300,@>8300 Set COND if no DATA found [1943] 8BBD C1,2C,34 SRDAZ0 DEX @DATA,@PGMPTR Exchange won't affect the CON [1944] 8BC0 C0,01,42 EX @CHAT,@VAR0+1 Situation ok [1945] 8BC3 01 RTNC Return to caller with COND [1946] *********************************************************** [1947] * OLD STATEMENT [1948] * A normal load: [1949] * Get a program from an external device to VDP and [1950] * reinitialize the program pointers. Also update the line [1951] * pointer table, since the memory size of the machine on [1952] * which the program was created doesn't have to be the [1953] * same as on the current system!!!! Then check if ERAM 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0034 FLMGR-359 [1954] * existed, move it to ERAM if does exist (in relocated [1955] * from) [1956] * Load a sequential file: [1957] * When program is bigger than 13.5K and ERAM exists, [1958] * maximum-length record reads are preformed to read the [1959] * file and each record is copied into the ERAM as it is [1960] * read. [1961] *********************************************************** [1962] 8BC4 06,8B,CA OLD CALL OLD1 Make OLD1 a subroutine for LO [1963] 8BC7 05,60,12 B TOPL15 Go back to top level [1964] 8BCA 06,92,35 OLD1 CALL GPNAME Get program name & reinitiali [1965] 8BCD 0F,79 XML PGMCHR Check for EOL [1966] 8BCF BD,0A,04 DST @PABPTR,@STADDR Compute memory start address [1967] 8BD2 A1,0A,E0 DADD V@NLEN-1(@PABPTR),@STADDR Add PAB-name lengt 8BD5 0C,04 [1968] 8BD7 A3,0A,00 DADD PABLEN-4,@STADDR and PAB length 8BDA 0A [1969] 8BDB BD,E0,0A DST @>8370,V@RNM(@PABPTR) Compute # of availiable 8BDE 04,70 [1970] 8BE0 A5,E0,0A DSUB @STADDR,V@RNM(@PABPTR) 8BE3 04,0A [1971] 8BE5 91,E0,0A DINC V@RNM(@PABPTR) Include current address 8BE8 04 [1972] 8BE9 BD,E0,06 DST @STADDR,V@BUF(@PABPTR) for copy start 8BEC 04,0A [1973] 8BEE BE,E0,04 ST CZLOAD,V@COD(@PABPTR) Select LOAD I/O code 8BF1 04,05 [1974] 8BF3 06,97,6B CALL CDSR Call device service routine [1975] 8BF6 4C,63 BR OLDZ3 Not a program file, may be a [1976] * sequential file [1977] * STADDR still points to the info bytes [1978] 8BF8 BD,02,E0 DST V@2(@STADDR),@MNUM First test checksum 8BFB 02,0A [1979] 8BFD B9,02,E0 DXOR V@4(@STADDR),@MNUM which is a simple XOR 8C00 04,0A [1980] 8C02 D5,B0,0A DCEQ @MNUM,V*STADDR Try PROTECTION option 8C05 02 [1981] 8C06 6C,15 BS G8C15 [1982] 8C08 83,02 DNEG @MNUM [1983] 8C0A D5,B0,0A DCEQ @MNUM,V*STADDR No-ERROR 8C0D 02 [1984] 8C0E 4D,2D BR OLDER [1985] 8C10 B6,45,80 OR >80,@FLAG Yes, set LIST/EDIT PROTECTION [1986] 8C13 4C,17 BR G8C17 [1987] 8C15 86,45 G8C15 CLR @FLAG Otherwise clear protection [1988] 8C17 BD,32,E0 G8C17 DST V@2(@STADDR),@ENLN Copy new ENLN, 8C1A 02,0A [1989] 8C1C BD,30,E0 DST V@4(@STADDR),@STLN STLN and 8C1F 04,0A [1990] 8C21 BD,A3,BC DST V@6(@STADDR),V@OLDTOP top of memory info 8C24 E0,06,0A [1991] 8C27 A3,0A,00 DADD 8,@STADDR Point to program data 8C2A 08 [1992] 8C2B BD,A3,BE DST @>8370,V@NEWTOP Set up the new top 8C2E 70 [1993] 8C2F 06,8D,36 CALL RELOCA Relocate according to @>8370 [1994] 8C32 8E,80,84 OLDZ5 CZ @RAMTOP ERAM present? [1995] 8C35 6D,32 BS LRTOPZ [1996] * No, go back to toplevel [1997] * Yes, move from VDP to ERAM [1998] * (in relocated form) [1999] ************ Move to the ERAM from CPUBAS first *********** [2000] 8C37 BD,00,70 DST @>8370,@VAR0 [2001] 8C3A A5,00,30 DSUB @STLN,@VAR0 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0035 FLMGR-359 [2002] 8C3D 91,00 DINC @VAR0 # of bytes to move [2003] 8C3F BD,4E,00 DST @VAR0,@CCC @CCC : Byte count for VGWITE [2004] 8C42 BF,50,A0 DST CPUBAS,@BBB @BBB : Destination addr on ER 8C45 40 [2005] 8C46 BD,0A,50 DST @BBB,@STADDR For later use as the base of [2006] * current program image in REL [2007] 8C49 BD,4C,30 DST @STLN,@AAA @AAA : Source address on ERAM [2008] 8C4C 0F,8A XML VGWITE Move from VDP to ERAM [2009] 8C4E BD,A3,BC DST @>8370,V@OLDTOP Set up old memory top 8C51 70 [2010] 8C52 BD,A3,BE DST @RAMTOP,V@NEWTOP Set up new memory top 8C55 80,84 [2011] 8C57 06,8D,36 CALL RELOCA Relocate the program image [2012] 8C5A BD,80,86 OLDZ7 DST @STLN,@RAMFRE Reset the RAMFRE on ERAM 8C5D 30 [2013] 8C5E 93,80,86 DDEC @RAMFRE [2014] 8C61 4D,32 BR LRTOPZ Go back to toplevel [2015] *********************************************************** [2016] * At this point : if ERAM not exist - ERROR off else open [2017] * sequential file to load program to ERAM through VDP RAM [2018] *********************************************************** [2019] 8C63 8E,80,84 OLDZ3 CZ @RAMTOP [2020] 8C66 6D,2D BS OLDER [2021] * Set up PAB for OPEN [2022] * File type : Sequential file, [2023] * Mode of operation : Input [2024] * Date type : internal [2025] * Record type : Variable length records [2026] * Logical record length : 254 maximum [2027] 8C68 31,00,09 MOVE 9,G@PAB3,V@4(@PABPTR) Build the PAB << 8C6B E0,04,04 8C6E 8D,24 [2028] 8C70 BD,4A,70 DST @>8370,@FAC Compute the data buffer addre [2029] 8C73 A7,4A,00 DSUB 253,@FAC 8C76 FD [2030] 8C77 BD,4C,4A DST @FAC,@AAA Save it for later use in VGWI [2031] 8C7A BD,E0,06 DST @FAC,V@BUF(@PABPTR) 8C7D 04,4A [2032] 8C7F 06,97,6B CALL CDSR Call the device service routi [2033] 8C82 57,94 BR ERRZ2B Return with ERROR indication [2034] * in COND [2035] * Start to read in file [2036] 8C84 06,97,5E CALL IOCALL Read in the first record [2037] 8C87 02 BYTE CZREAD * [2038] * Check the control information [2039] 8C88 D6,E0,09 CEQ 10,V@CNT(@PABPTR) * 10 bytes contr info 8C8B 04,0A [2040] 8C8D 4D,2D BR OLDER [2041] * >ABCD is the flag set at SAVE time indicating a program f [2042] 8C8F D7,B0,4A DCEQ >ABCD,V*FAC 8C92 AB,CD [2043] 8C94 4D,2D BR OLDER [2044] 8C96 95,4A DINCT @FAC [2045] 8C98 BD,30,B0 DST V*FAC,@STLN Copy the new STLN 8C9B 4A [2046] 8C9C 95,4A DINCT @FAC [2047] 8C9E BD,32,B0 DST V*FAC,@ENLN ENLN too 8CA1 4A [2048] 8CA2 BD,02,32 DST @ENLN,@MNUM Test checksum [2049] 8CA5 B9,02,30 DXOR @STLN,@MNUM [2050] 8CA8 95,4A DINCT @FAC [2051] 8CAA D5,B0,4A DCEQ @MNUM,V*FAC Try PROTECTION option 8CAD 02 [2052] 8CAE 6C,BD BS G8CBD 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0036 FLMGR-359 [2053] 8CB0 83,02 DNEG @MNUM [2054] 8CB2 D5,B0,4A DCEQ @MNUM,V*FAC No, ERROR 8CB5 02 [2055] 8CB6 4D,2D BR OLDER [2056] 8CB8 B6,45,80 OR >80,@FLAG Yes, set LIST/EDIT PROTECTION [2057] 8CBB 4C,BF BR G8CBF [2058] 8CBD 86,45 G8CBD CLR @FLAG Otherwise clear protection fl [2059] 8CBF 95,4A G8CBF DINCT @FAC [2060] * Check is there enough memory in ERAM [2061] 8CC1 BD,02,B0 DST V*FAC,@MNUM Get the old top of memory out 8CC4 4A [2062] 8CC5 BD,A3,BC DST @MNUM,V@OLDTOP For later use in RELOCA 8CC8 02 [2063] 8CC9 A5,02,30 DSUB @STLN,@MNUM [2064] 8CCC 91,02 DINC @MNUM Total # of bytes in program [2065] 8CCE BD,08,02 DST @MNUM,@CCC1 For later use as the byte cou [2066] 8CD1 A3,02,A0 DADD CPUBAS,@MNUM Add the total # of bytes to C 8CD4 40 [2067] * Check if enough memory in ERAM [2068] 8CD5 0A GT Greater than >FFFF case [2069] 8CD6 6D,2D BS OLDER [2070] 8CD8 C5,02,80 DCH @RAMTOP,@MNUM Greater than >DFFF case 8CDB 84 [2071] 8CDC 6D,2D BS OLDER [2072] * Move to ERAM starting from CPUBAS first, [2073] * then relocate according the new top of memory in ERAM [2074] 8CDE BF,50,A0 OLZZ DST CPUBAS,@BBB @BBB : Destination addr in 8CE1 40 [2075] * ERAM FOR VGWITE [2076] 8CE2 BD,0A,50 DST @BBB,@STADDR For later use as base of the [2077] * current program image in ERAM RELOCA [2078] * DST >8370,@AAA @AAA has been set up before [2079] * DSUB 253,@AAA For copy start on VDP RAM [2080] * @CCC1 : Total # of bytes to move to ERAM, set up above [2081] 8CE5 06,97,5E CALL IOCALL Read in the second record [2082] 8CE8 02 BYTE CZREAD [2083] * Read in the file and each record [2084] * Should be a full (maximum length 254) record at this time [2085] * because program supposed to be bigger than 13.5K [2086] 8CE9 D6,E0,09 G8CE9 CEQ 254,V@CNT(@PABPTR) 8CEC 04,FE [2087] 8CEE 4D,2D BR OLDER [2088] 8CF0 BF,4E,00 DST 254,@CCC @CCC : # of bytes to move 8CF3 FE [2089] 8CF4 0F,8A XML VGWITE Move data from VDP to ERAM [2090] 8CF6 A3,50,00 DADD 254,@BBB Update the destination addres 8CF9 FE [2091] * on ERAM [2092] 8CFA A7,08,00 DSUB 254,@CCC1 # of bytes left to move 8CFD FE [2093] 8CFE 6D,16 BS OLDZ9 No more bytes to move [2094] 8D00 06,97,5E CALL IOCALL Read in the file and each rec [2095] 8D03 02 BYTE CZREAD * Copied into ERAM as it is rea [2096] 8D04 CB,08,00 DCHE 254,@CCC1 Leave the last record alone 8D07 FE [2097] 8D08 6C,E9 BS G8CE9 [2098] * The record length should be the same as the # of bytes le [2099] * to move at this time [2100] 8D0A D4,E0,09 CEQ @CCC1+1,V@CNT(@PABPTR) 8D0D 04,09 [2101] 8D0F 4D,2D BR OLDER [2102] 8D11 BD,4E,08 DST @CCC1,@CCC Set up byte count for the las [2103] 8D14 0F,8A XML VGWITE Move data from VDP to ERAM [2104] 8D16 06,97,5E OLDZ9 CALL IOCALL Close the file 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0037 FLMGR-359 [2105] 8D19 01 BYTE CZCLOS [2106] 8D1A BD,A3,BE DST @RAMTOP,V@NEWTOP New top of memory 8D1D 80,84 [2107] * V@OLDTOP : old top of memory, set up above [2108] * @STADDR : base of current program image in ERAM, set abo [2109] 8D1F 06,8D,36 CALL RELOCA Relocate the program [2110] 8D22 4C,5A BR OLDZ7 Go to set the RAMFRE and back [2111] * toplevel [2112] 8D24 00,1C,00 PAB3 BYTE >00,>1C,>00,>00,>FE,>00,>00,>00,OFFSET 8D27 00,FE,00 8D2A 00,00,60 [2113] * OLD error exit code, don't kill machine [2114] 8D2D 06,60,14 OLDER CALL INITPG Initialize program space [2115] 8D30 57,97 BR ERRZ2 And take error exit [2116] 8D32 06,60,22 LRTOPZ CALL KILSYM Release string space/symbol t [2117] 8D35 00 RTN [2118] *********************************************************** [2119] * RELOCATE THE PROGRAM IMAGE ACCORDING TO THE NEW TOP OF [2120] * MEMORY: [2121] * STLN : old STLN [2122] * ENLN : old ENLN [2123] * V@OLDTOP : old top of memory [2124] * V@NEWTOP : new top of memory [2125] * @STADDR : current base for the old image [2126] *********************************************************** [2127] 8D36 BD,A3,B4 RELOCA DST @PABPTR,V@SIZCCP Save in temp. 8D39 04 [2128] 8D3A BD,02,A3 DST V@OLDTOP,@MNUM Get the old top of memory 8D3D BC [2129] 8D3E BD,04,A3 DST V@NEWTOP,@PABPTR Get the new top of memory 8D41 BE [2130] 8D42 A5,32,02 DSUB @MNUM,@ENLN Compute ENLN relative to top [2131] 8D45 A5,30,02 DSUB @MNUM,@STLN Compute STLN relative to top [2132] 8D48 A5,0A,30 DSUB @STLN,@STADDR Highest memory address used [2133] 8D4B 87,02 DCLR @MNUM Total # of bytes to be moved [2134] 8D4D A5,02,30 DSUB @STLN,@MNUM STLN = -(# bytes -1) [2135] 8D50 91,02 DINC @MNUM Take care of that one [2136] 8D52 A1,32,04 DADD @PABPTR,@ENLN Compute new address of ENLN [2137] 8D55 A1,30,04 DADD @PABPTR,@STLN and STLN [2138] * @PABPTR : destination address, @STADDR : source address [2139] 8D58 BD,5C,02 DST @MNUM,@ARG @ARG : byte count [2140] 8D5B BD,00,0A DST @STADDR,@VAR0 @VAR0 : source addr for MVDN [2141] 8D5E BD,10,06 DST @CCPPTR,@VAR5 Save in temp (CCPPTR, VARY2 E [2142] 8D61 BD,06,04 DST @PABPTR,@VARY2 @VARY2 : destination addr for [2143] 8D64 D5,A3,BE DCEQ @RAMTOP,V@NEWTOP Relocate the program 8D67 80,84 [2144] 8D69 4D,6F BR G8D6F in ERAM [2145] 8D6B 0F,88 XML MVDN Move from lower memory to hig [2146] * memory one byte at a time [2147] 8D6D 4D,7E BR G8D7E [2148] 8D6F 87,A3,B6 G8D6F DCLR V@SIZREC Clear a temporary variable [2149] 8D72 C1,A3,B6 DEX @RAMTOP,V@SIZREC Save the RAMTOP, also fake as 8D75 80,84 [2150] * if ERAM not exist for MVDN in thi [2151] 8D77 0F,88 XML MVDN Move in VDP [2152] 8D79 C1,A3,B6 DEX @RAMTOP,V@SIZREC Restore RAMTOP 8D7C 80,84 [2153] 8D7E BD,06,10 G8D7E DST @VAR5,@CCPPTR Restore back [2154] * Update line # links according to new size [2155] 8D81 BD,02,A3 DST V@OLDTOP,@MNUM Old memory top 8D84 BC [2156] 8D85 A5,02,A3 DSUB V@NEWTOP,@MNUM Stop if sizes are same 8D88 BE [2157] 8D89 6D,B3 BS RELOZ1 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0038 FLMGR-359 [2158] 8D8B BD,0A,30 DST @STLN,@STADDR Start relocation at STLN [2159] 8D8E C9,32,0A OLDZ2 DCHE @STADDR,@ENLN and continue up to ENLN [2160] 8D91 4D,B3 BR RELOZ1 [2161] 8D93 95,0A DINCT @STADDR Skip the line # [2162] 8D95 D4,A3,BE CEQ @RAMTOP,V@NEWTOP If in ERAM 8D98 80,84 [2163] 8D9A 4D,AB BR G8DAB [2164] 8D9C 06,91,A4 CALL GRSUB2 Read the link out [2165] 8D9F 0A BYTE STADDR [2166] 8DA0 A5,58,02 DSUB @MNUM,@EEE1 Update [2167] 8DA3 06,60,36 CALL GWSUB Write it back [2168] 8DA6 0A,58,02 BYTE >0A,>58,>02 * STADDR,EEE1,2 [2169] 8DA9 4D,AF BR G8DAF [2170] 8DAB A5,B0,0A G8DAB DSUB @MNUM,V*STADDR Upadate the link 8DAE 02 [2171] 8DAF 95,0A G8DAF DINCT @STADDR Skip the link, next line # [2172] 8DB1 4D,8E BR OLDZ2 And continue until done [2173] 8DB3 BD,04,A3 RELOZ1 DST V@SIZCCP,@PABPTR Restore from temp 8DB6 B4 [2174] 8DB7 00 RTN [2175] *********************************************************** [2176] * SAVE STATEMENT [2177] * SAVE "NAME", MERGE : Save in crunched form in program [2178] * into a file one line at at time with the line number. [2179] * File opened with sequential accessed, variable-length [2180] * records (161 max), display type & output mode, move one [2181] * line number and one in text to the crunch buffer then [2182] * write to the file one line at a time. [2183] * A normal SAVE : When ERAM not exist or the size of the [2184] * program and line number table in ERAM can fit in VDP [2185] * (can be moved into VDP from ERAM once), then the save [2186] * statement saves a program image to an external device, [2187] * including all the information the system needs for [2188] * rebuilding the program image on a machine with a [2189] * different memory size, also included is a checksum for [2190] * rudimentary error checking and for PROTECTION VIOLATION [2191] * A sequential SAVE : Maximum-length records are performed [2192] * to write the file and each record is copied into the VDP [2193] * from ERAM before it is written. [2194] *********************************************************** [2195] 8DB8 DA,45,80 SAVE CLOG >80,@FLAG * PROTECTION VIOLATION [2196] 8DBB 57,DB BR ERRPV [2197] 8DBD 06,92,35 CALL GPNAME This will also close all file [2198] * Check SAVE "NAME", MERGE or SAVE "NAME", PROTECTED first [2199] 8DC0 86,A3,B9 CLR V@SAPROT Clear "PROTECTED" flag [2200] 8DC3 0F,79 XML PGMCHR [2201] 8DC5 8E,42 CZ @CHAT EOL? [2202] 8DC7 6E,2B BS SAZ1 Yes, no need to check any opt [2203] 8DC9 D6,42,B3 CEQ COMMAZ,@CHAT Has to be a comma here [2204] 8DCC 41,09 BR ERRSYN [2205] 8DCE D7,B0,2C DCEQ >C805,V*PGMPTR Unquoted string with length 5 8DD1 C8,05 [2206] * has to be MERGE at this time [2207] 8DD3 4D,F4 BR G8DF4 [2208] 8DD5 D7,E0,02 DCEQ >4D45,V@2(@PGMPTR) "ME" of MErge 8DD8 2C,4D,45 [2209] 8DDB 41,09 BR ERRSYN If not : SYNTAX ERROR [2210] 8DDD D7,E0,04 DCEQ >5247,V@4(@PGMPTR) "RG" of meRGe 8DE0 2C,52,47 [2211] 8DE3 41,09 BR ERRSYN If not : SYNTAX ERROR [2212] 8DE5 D6,E0,06 CEQ >45,V@6(@PGMPTR) "E" of mergE 8DE8 2C,45 [2213] 8DEA 41,09 BR ERRSYN If not : SYNTAX ERROR [2214] 8DEC 8E,E0,07 CZ V@7(@PGMPTR) Check for EOL 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0039 FLMGR-359 8DEF 2C [2215] 8DF0 41,09 BR ERRSYN Not EOL : SYNTAX ERROR [2216] 8DF2 4F,76 BR SAVMG Go to handle this option [2217] * Has to be PROTECTED option here, crunched as unquoted str [2218] 8DF4 D7,B0,2C G8DF4 DCEQ >C809,V*PGMPTR Unquoted string with length 9 8DF7 C8,09 [2219] * has to be PROTECTED [2220] 8DF9 41,09 BR ERRSYN [2221] 8DFB D7,E0,02 DCEQ >5052,V@2(@PGMPTR) "PR" of PRotected 8DFE 2C,50,52 [2222] 8E01 41,09 BR ERRSYN If not : SYNTAX ERROR [2223] 8E03 D7,E0,04 DCEQ >4F54,V@4(@PGMPTR) "OT" of prOTected 8E06 2C,4F,54 [2224] 8E09 41,09 BR ERRSYN If not : SYNTAX ERROR [2225] 8E0B D7,E0,06 DCEQ >4543,V@6(@PGMPTR) "EC" of protECted 8E0E 2C,45,43 [2226] 8E11 41,09 BR ERRSYN If not : SYNTAX ERROR [2227] 8E13 D7,E0,08 DCEQ >5445,V@8(@PGMPTR) "TE",of protecTEd 8E16 2C,54,45 [2228] 8E19 41,09 BR ERRSYN If not : SYNTAX ERROR [2229] 8E1B D6,E0,0A CEQ >44,V@10(@PGMPTR) "D" of protecteD 8E1E 2C,44 [2230] 8E20 41,09 BR ERRSYN If not : SYNTAX ERROR [2231] 8E22 8E,E0,0B CZ V@11(@PGMPTR) Check EOL 8E25 2C [2232] 8E26 41,09 BR ERRSYN [2233] 8E28 90,A3,B9 INC V@SAPROT [2234] *********************************************************** [2235] 8E2B 8E,80,84 SAZ1 CZ @RAMTOP If ERAM NOT present then [2236] 8E2E 4E,42 BR G8E42 [2237] ***** CLEAR THE BREAKPOINT IN VDP ALONE TO SPEED UP ******* [2238] 8E30 BD,52,30 DST @STLN,@FAC8 End of line # buffer [2239] 8E33 B2,B0,52 G8E33 AND >7F,V*FAC8 Clear the breakpoint 8E36 7F [2240] 8E37 A3,52,00 DADD 4,@FAC8 Move to the next one 8E3A 04 [2241] 8E3B C5,52,32 DCH @ENLN,@FAC8 Until done [2242] 8E3E 4E,33 BR G8E33 [2243] 8E40 4E,69 BR VSAVZ [2244] 8E42 06,A0,20 G8E42 CALL UBSUB Clear the breakpoint in ERAM [2245] 8E45 BD,02,80 DST @RAMTOP,@MNUM Top of memory in ERAM 8E48 84 [2246] 8E49 A5,02,30 DSUB @STLN,@MNUM [2247] 8E4C 91,02 DINC @MNUM # of bytes total in ERAM [2248] 8E4E BD,00,70 DST @>8370,@VAR0 Top of memory in VDP [2249] 8E51 A5,00,02 DSUB @MNUM,@VAR0 [2250] 8E54 91,00 DINC @VAR0 [2251] * Check is there enough memory in VDP to move the program [2252] * text and line number table from ERAM to VDP [2253] 8E56 0A GT Not enough memory in VDP for sur [2254] 8E57 4E,B7 BR GSAVE [2255] 8E59 BF,10,0A DST VRAMVS+64+256,@VAR5 * 64 bytes ar for safety bu 8E5C 98 [2256] * DSR routine give file error when loading a program which [2257] * VDP maximum size and was saved from VDP to be a program [2258] * on disk when ERAM not exist. In order to fix this proble [2259] * restrict the program memory to be 256 bytes less then th [2260] * real space in VDP when ERAM not exist. [2261] 8E5D C9,00,10 DCHE @VAR5,@VAR0 Not enough memory in VDP, do [2262] * sequential file save [2263] 8E60 4E,B7 BR GSAVE [2264] 8E62 A7,10,00 DSUB 10,@VAR5 * 10 bytes for control informat 8E65 0A [2265] 8E66 06,8F,4A CALL GVMOV Enough memory in VDP, move it 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0040 FLMGR-359 [2266] * over and do the normal save l [2267] **************** Without ERAM, or after GVMOV ************* [2268] **************** do the normal save ************* [2269] 8E69 BD,0A,40 VSAVZ DST @FREPTR,@STADDR Store additional control info [2270] 8E6C 93,0A DDEC @STADDR Back up some more for 2 byte [2271] 8E6E BD,B0,0A DST @>8370,V*STADDR First current top of memory 8E71 70 [2272] 8E72 97,0A DDECT @STADDR [2273] 8E74 BD,B0,0A DST @STLN,V*STADDR Then STLN 8E77 30 [2274] 8E78 97,0A DDECT @STADDR [2275] 8E7A BD,B0,0A DST @ENLN,V*STADDR Then ENLN 8E7D 32 [2276] 8E7E 97,0A DDECT @STADDR Then [2277] 8E80 BD,B0,0A DST @STLN,V*STADDR 8E83 30 [2278] 8E84 B9,B0,0A DXOR @ENLN,V*STADDR STLN XORed with ENLN 8E87 32 [2279] 8E88 D6,A3,B9 CEQ 1,V@SAPROT Check is there PROTECTED opti 8E8B 01 [2280] 8E8C 4E,91 BR G8E91 [2281] 8E8E 83,B0,0A DNEG V*STADDR Negate the CHECKSUM to indica [2282] * LIST/EDIT protection [2283] 8E91 BD,E0,06 G8E91 DST @STADDR,V@BUF(@PABPTR) Save start address in P 8E94 04,0A [2284] 8E96 93,0A DDEC @STADDR [2285] 8E98 BD,E0,0A DST @>8370,V@RNM(@PABPTR) Compute # of bytes used 8E9B 04,70 [2286] 8E9D A5,E0,0A DSUB @STADDR,V@RNM(@PABPTR) and store that in PAB 8EA0 04,0A [2287] 8EA2 8E,80,84 CZ @RAMTOP If ERAM exists then [2288] 8EA5 6E,AD BS G8EAD [2289] 8EA7 BD,30,0C DST @BBB1,@STLN Restore the original STLN, EN [2290] 8EAA BD,32,08 DST @CCC1,@ENLN which points to ERAM [2291] 8EAD 06,97,5E G8EAD CALL IOCALL Call Device Service Routine f [2292] 8EB0 06 BYTE CZSAVE * SAVE operation [2293] 8EB1 06,60,22 LRTOPL CALL KILSYM Release string space/symbol t [2294] 8EB4 05,60,12 B TOPL15 Go back to toplevel [2295] *********************************************************** [2296] * Open the sequential file, set the PAB [2297] * File type : sequential file [2298] * Mode of operation : output [2299] * Data type : internal [2300] * Record type : variable length records [2301] * Logical record length : 254 maximum [2302] 8EB7 31,00,09 GSAVE MOVE 9,G@PAB3,V@4(@PABPTR) Build the PAB 8EBA E0,04,04 8EBD 8D,24 [2303] 8EBF 96,E0,05 DECT V@FLG(@PABPTR) Put in the correct I/O mode : 8EC2 04 [2304] * Compute the data buffer address [2305] 8EC3 BD,4A,70 DST @>8370,@FAC [2306] 8EC6 A7,4A,00 DSUB 253,@FAC 8EC9 FD [2307] 8ECA BD,E0,06 DST @FAC,V@BUF(@PABPTR) 8ECD 04,4A [2308] 8ECF BD,58,4A DST @FAC,@EEE1 Save it for later use in GVWITE [2309] 8ED2 06,97,6B CALL CDSR Call device service routine to o [2310] 8ED5 57,94 BR ERRZ2B Return with ERROR indication in [2311] * Put 8 bytes control info at the [2312] * beginning of the data buffer [2313] 8ED7 BF,B0,4A DST >ABCD,V*FAC >ABCD indentifies a program f 8EDA AB,CD [2314] 8EDC 95,4A DINCT @FAC when doing LOAD later 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0041 FLMGR-359 [2315] 8EDE BD,B0,4A DST @STLN,V*FAC Save STLN in control info 8EE1 30 [2316] 8EE2 95,4A DINCT @FAC [2317] 8EE4 BD,B0,4A DST @ENLN,V*FAC ENLN too 8EE7 32 [2318] 8EE8 95,4A DINCT @FAC [2319] 8EEA BD,B0,4A DST @STLN,V*FAC 8EED 30 [2320] 8EEE B9,B0,4A DXOR @ENLN,V*FAC Save the checksum 8EF1 32 [2321] 8EF2 D6,A3,B9 CEQ 1,V@SAPROT Check is there PROTECTED opti 8EF5 01 [2322] 8EF6 4E,FB BR G8EFB [2323] 8EF8 83,B0,4A DNEG V*FAC Negate the CHECKSUM to indica [2324] * the LIST/EDIT protection [2325] 8EFB 95,4A G8EFB DINCT @FAC [2326] 8EFD BD,B0,4A DST @RAMTOP,V*FAC Save the top of memory info 8F00 80,84 [2327] 8F02 BE,E0,09 ST 10,V@CNT(@PABPTR) Set the caracter count in PAB 8F05 04,0A [2328] 8F07 06,97,5E CALL IOCALL Call device service routine [2329] 8F0A 03 BYTE CZWRIT * With I/O opcode : write, to s [2330] * the control info for the first reco [2331] * Now start to use maximum-length record to write the file [2332] * and each record is copied into the VDP from ERAM bofore i [2333] * is written [2334] 8F0B BD,54,30 DST @STLN,@DDD1 Starting address on ERAM [2335] * DST @>8370,@EEE1 @EEE1 has been set up before [2336] * DST 253,@EEE1 Starting address of the data [2337] * buffer on VDP [2338] 8F0E BD,08,80 DST @RAMTOP,@CCC1 8F11 84 [2339] 8F12 A5,08,30 DSUB @STLN,@CCC1 [2340] 8F15 91,08 DINC @CCC1 [2341] 8F17 BE,E0,09 ST 254,V@CNT(@PABPTR) Set the character count of P 8F1A 04,FE [2342] 8F1C BF,56,00 G8F1C DST 254,@FFF1 @FFF1 byte count 8F1F FE [2343] 8F20 0F,8B XML GVWITE Move data from ERAM to VDP [2344] 8F22 06,97,5E CALL IOCALL Call device service routine [2345] 8F25 03 BYTE CZWRIT [2346] 8F26 A3,54,00 DADD 254,@DDD1 Update the source addr on ERA 8F29 FE [2347] 8F2A A7,08,00 DSUB 254,@CCC1 # of bytes left to move 8F2D FE [2348] 8F2E 6F,44 BS GSAV1 No more bytes to save [2349] 8F30 CB,08,00 DCHE 254,@CCC1 Leave the last record alone 8F33 FE [2350] 8F34 6F,1C BS G8F1C [2351] * Move the last @CCC1 bytes from ERAM to VDP [2352] 8F36 BD,56,08 DST @CCC1,@FFF1 @FFF1 : Byte count [2353] 8F39 0F,8B XML GVWITE Write data from ERAM to VDP [2354] 8F3B BC,E0,09 ST @CCC1+1,V@CNT(@PABPTR) Update the character cou 8F3E 04,09 [2355] * in PAB [2356] 8F40 06,97,5E CALL IOCALL Call device service routine [2357] 8F43 03 BYTE CZWRIT [2358] 8F44 06,97,5E GSAV1 CALL IOCALL [2359] 8F47 01 BYTE CZCLOS * Close the file [2360] 8F48 4E,B1 BR LRTOPL Continue [2361] *********************************************************** [2362] * Move the program text & line # table to VDP, and relocate [2363] 8F4A BD,0C,30 GVMOV DST @STLN,@BBB1 Save STLN, ENLN for later use [2364] 8F4D BD,08,32 DST @ENLN,@CCC1 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0042 FLMGR-359 [2365] 8F50 BD,54,30 DST @STLN,@DDD1 Source addr on ERAM [2366] 8F53 BD,58,10 DST @VAR5,@EEE1 Destination addr on VDP [2367] 8F56 BD,0A,58 DST @EEE1,@STADDR Use later for RELOCA [2368] 8F59 BD,56,80 DST @RAMTOP,@FFF1 8F5C 84 [2369] 8F5D A5,56,30 DSUB @STLN,@FFF1 # of bytes to move [2370] 8F60 91,56 DINC @FFF1 @FFF1 : byte count for GVWITE [2371] 8F62 0F,8B XML GVWITE Move from ERAM to VDP [2372] 8F64 BD,A3,BC DST @RAMTOP,V@OLDTOP Set up @RAMTOP for old top 8F67 80,84 [2373] * of memory [2374] 8F69 BD,A3,BE DST @>8370,V@NEWTOP Set up @>8370 for new top 8F6C 70 [2375] * of memory [2376] 8F6D 06,8D,36 CALL RELOCA Relocate the program [2377] 8F70 BD,40,30 DST @STLN,@FREPTR Set up @FREPTR [2378] 8F73 93,40 DDEC @FREPTR [2379] 8F75 00 RTN [2380] *********************************************************** [2381] * Save the crunched form of a program into a file. [2382] * Move the line number and text to the crunch buffer, then [2383] * write to the file one line at a time. [2384] *********************************************************** [2385] * Open the file with: [2386] * I/O opcode : OPEN [2387] * File type : SEQUENTIAL file [2388] * Mode of operation : OUTPUT [2389] * Data type : DISPLAY type data [2390] * Record type : VARIABLE LENGTH records [2391] * Data buffer address : Crunch buffer address [2392] * Logical record length : 163 (length of curnch buffer + 2 [2393] * bytes for line #) maximum [2394] 8F76 31,00,09 SAVMG MOVE 9,G@PAB1,V@4(@PABPTR) Build PAB 8F79 E0,04,04 8F7C 8F,F9 [2395] 8F7E 06,97,65 CALL IOCLZ1 Call the DSR routine to open fil [2396] 8F81 BD,50,32 DST @ENLN,@FAC6 Start from the first line # [2397] 8F84 A7,50,00 DSUB 3,@FAC6 @FAC6 now points to the 1st line 8F87 03 [2398] * Write to the file from crunch bu [2399] * one line at a time [2400] 8F88 86,00 G8F88 CLR @VAR0 Make it a two byte later [2401] 8F8A 8E,80,84 CZ @RAMTOP If ERAM exists then [2402] 8F8D 6F,B6 BS G8FB6 [2403] 8F8F BD,54,50 DST @FAC6,@DDD1 Write the 4 bytes (line # and [2404] * line pointer) from ERAM to [2405] * crunch buffer [2406] * @DDD1 : Source address on ERA [2407] 8F92 BF,58,08 DST CRNBUF,@EEE1 @EEE1 : Destination address 8F95 20 [2408] * on VDP [2409] 8F96 BF,56,00 DST 4,@FFF1 @FFF1 : byte count 8F99 04 [2410] 8F9A 0F,8B XML GVWITE Write data from ERAM to VDP [2411] 8F9C BD,54,A8 DST V@CRNBUF+2,@DDD1 Line pointer now points to 8F9F 22 [2412] * length byte [2413] 8FA0 93,54 DDEC @DDD1 Get the length of this line [2414] * @DDD1 : Source address on ERA [2415] 8FA2 91,56 DINC @FFF1 @FFF1 : Byte count, coming ba [2416] * from GVWITE above, =0 [2417] 8FA4 0F,8C XML GREAD1 Read the length byte from ERA [2418] 8FA6 BC,01,58 ST @EEE1,@VAR0+1 @EEE1 : Destination addr on C [2419] 8FA9 BF,58,08 DST CRNBUF+2,@EEE1 Write the text from ERAM to 3 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0043 FLMGR-359 8FAC 22 [2420] * byte of crunch buffer [2421] * @EEE1 : Destination addr on V [2422] * @DDD1 : Source addr on ERAM [2423] 8FAD 91,54 DINC @DDD1 Back to point to the text [2424] 8FAF BD,56,00 DST @VAR0,@FFF1 @FFF1 : Byte count [2425] 8FB2 0F,8B XML GVWITE Write data from ERAM to VDP [2426] 8FB4 4F,CD BR G8FCD ERAM not exist : line # table [2427] * and text in VDP [2428] 8FB6 BD,A8,20 G8FB6 DST V*FAC6,V@CRNBUF PUT THE LINE # IN 8FB9 B0,50 [2429] 8FBB BD,4C,E0 DST V@2(@FAC6),@FAC2 Get the line pointer out 8FBE 02,50 [2430] 8FC0 93,4C DDEC @FAC2 Line pointer now points to th [2431] * length byte [2432] 8FC2 BC,01,B0 ST V*FAC2,@VAR0+1 Get the length out 8FC5 4C [2433] * Move the text into the crunch buffer [2434] 8FC6 34,00,A8 MOVE @VAR0,V@1(@FAC2),V@CRNBUF+2 8FC9 22,E0,01 8FCC 4C [2435] 8FCD B2,A8,20 G8FCD AND >7F,V@CRNBUF Reset possible breakpoint 8FD0 7F [2436] 8FD1 95,00 DINCT @VAR0 * Total length=text length+line # len [2437] 8FD3 BC,E0,09 ST @VAR0+1,V@CNT(@PABPTR) Store in the cahracter c 8FD6 04,01 [2438] 8FD8 06,97,5E CALL IOCALL Call the device service routi [2439] 8FDB 03 BYTE CZWRIT * Write [2440] 8FDC A7,50,00 DSUB 4,@FAC6 Go to the next line # 8FDF 04 [2441] 8FE0 C9,50,30 DCHE @STLN,@FAC6 Finish moving all [2442] 8FE3 6F,88 BS G8F88 [2443] 8FE5 BF,A8,20 DST >FFFF,V@CRNBUF Set up a EOF for the last rec 8FE8 FF,FF [2444] 8FEA BE,E0,09 ST 2,V@CNT(@PABPTR) Only write this 2 bytes 8FED 04,02 [2445] 8FEF 06,97,5E CALL IOCALL Call the device service routi [2446] 8FF2 03 BYTE CZWRIT * Write [2447] 8FF3 06,97,5E CALL IOCALL Call the device service routi [2448] 8FF6 01 BYTE CZCLOS * Close the file [2449] 8FF7 4E,B1 BR LRTOPL Go back to top level [2450] 8FF9 00,12,08 PAB1 BYTE >00,>12,>08,>20,>A3,>00,>00,>00,>60 8FFC 20,A3,00 8FFF 00,00,60 [2451] * >0820 = CRNBUF [2452] * >A3 = 163 [2453] * >60 = OFFSET [2454] *********************************************************** [2455] * MERGE ROUTINE [2456] * MERGE load a file which is in crunched program form into [2457] * the CRNBUF one record (one in) at a time then take the [2458] * line # out in FAC, text length into @CHAT, and edit it [2459] * into the program. Identify EOF by the last record which [2460] * is set up at SAVE time. [2461] *********************************************************** [2462] 9002 06,92,35 MERGE CALL GPNAME Close all file, set up PAB [2463] 9005 DA,45,80 CLOG >80,@FLAG Check PROTECTION VIOLATION [2464] 9008 57,DB BR ERRPV [2465] * To fix the bug #06 in MERGE [2466] 900A 0F,79 XML PGMCHR Check EOL [2467] 900C 8E,42 CZ @CHAT [2468] 900E 41,09 BR ERRSYN Not EOL : SYNTAX ERROR [2469] * Open the file with [2470] * I/O opcode : OPEN 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0044 FLMGR-359 [2471] * File type : SEQUENTIAL file [2472] * Mode of operation : INPUT [2473] * Data type : DISPLAY type data [2474] * Record type : VARIABLE LENGTH records [2475] * Data buffer address : crunch address [2476] * Logical record length : 163 maximum [2477] 9010 31,00,09 MOVE 9,G@PAB1,V@4(@PABPTR) Set up PAB 9013 E0,04,04 9016 8F,F9 [2478] 9018 94,E0,05 INCT V@FLG(@PABPTR) Put in correct I/O mode : >14 901B 04 [2479] 901C 06,97,65 CALL IOCLZ1 Call the device service routi [2480] * to open the file [2481] 901F 06,97,5E CALL IOCALL Call the device service routi [2482] 9022 02 BYTE CZREAD * to read [2483] 9023 D7,A8,20 DCEQ >FFFF,V@CRNBUF If 1st rec is EOF 9026 FF,FF [2484] 9028 77,94 BS ERRZ2B [2485] 902A 87,80,D6 G902A DCLR @>83D6 Read in one line and edit it [2486] * program [2487] 902D BC,42,E0 ST V@CNT(@PABPTR),@CHAT Length of this record 9030 09,04 [2488] 9032 96,42 DECT @CHAT Text length = total length-2 [2489] * (line # length) [2490] * Put it in @CHAT for EDITLN [2491] 9034 BD,4A,A8 DST V@CRNBUF,@FAC Put the line # in @FAC for ED 9037 20 [2492] 9038 86,56 CLR @FAC12 Make it a double byte [2493] 903A BC,57,42 ST @CHAT,@FAC13 [2494] * Move the text up 2 bytes [2495] 903D 34,56,A8 MOVE @FAC12,V@CRNBUF+2,V@CRNBUF 9040 20,A8,22 [2496] 9043 BD,A3,9E DST @PABPTR,V@MRGPAB SAVE PAB POINTER 9046 04 [2497] 9047 06,60,32 CALL EDITLN EDIT IT TO THE PROGRAM [2498] 904A 87,04 DCLR @PABPTR Clear temporary PAB pointer [2499] 904C C1,04,A3 DEX V@MRGPAB,@PABPTR Restore old PAB pointer 904F 9E [2500] 9050 06,97,5E CALL IOCALL CALL THE DEVICE SERVICE ROUTI [2501] 9053 02 BYTE CZREAD * read another record or anoth [2502] * line [2503] 9054 D7,A8,20 DCEQ >FFFF,V@CRNBUF End of EOF 9057 FF,FF [2504] 9059 50,2A BR G902A [2505] * Double check EOF record [2506] 905B D6,E0,09 MERGZ1 CEQ 2,V@CNT(@PABPTR) I/O ERROR 905E 04,02 [2507] 9060 57,94 BR ERRZ2B [2508] 9062 06,97,5E CALL IOCALL Call the device service routi [2509] 9065 01 BYTE CZCLOS * close the file [2510] 9066 4E,B1 BR LRTOPL Go back to top level [2511] *********************************************************** [2512] * LIST ROUTINE [2513] * List lists a readable copy of the current program imnage [2514] * to the specified device. In case no device is specified, [2515] * the listing is copied to the screen. [2516] * This routine uses the fact that ERRZZ returns to the [2517] * caller if the call has been issued in EDIT which will [2518] * reinitiate the variable stuff. [2519] *********************************************************** [2520] 9068 DA,45,80 LIST CLOG >80,@FLAG PROTECTION VILOATION ERROR < [2521] 906B 57,DB BR ERRPV < [2522] 906D 87,14 DCLR @CURLIN Create some kind of control < [2523] 906F 87,0E DCLR @CURINC for defaults < 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0045 FLMGR-359 [2524] 9071 BE,08,2D ST MINUS,@VARC Select "-" as separator < [2525] * GKXB GKLIST label [2526] 9074 06,7A,06 CALL GTLIST GKXB pick up length [2527] * If either CURLIN or CURINC is non-zero, use it [2528] * For zero values replace the default (ENLN-3, STLN) [2529] 9077 8F,14 DCZ @CURLIN [2530] 9079 50,94 BR G9094 [2531] 907B BD,54,32 DST @ENLN,@DDD1 Get the first lines line # [2532] 907E A7,54,00 DSUB 3,@DDD1 DDD1 : Source address on ERAM 9081 03 [2533] 9082 06,91,BC CALL GRSUB3 Read the line # from ERAM/VDP [2534] 9085 54 BYTE DDD1 * @DDD1 : Source address on ERA [2535] * Reset possible breakpoint too [2536] 9086 BD,14,58 DST @EEE1,@CURLIN Use standard default [2537] 9089 8F,0E DCZ @CURINC [2538] 908B 50,94 BR G9094 [2539] 908D 06,91,BC LISTZ0 CALL GRSUB3 Read last line # from ERAM/VD [2540] 9090 30 BYTE STLN * @STLN : Source address on ERA [2541] * Reset possible breakpoint too [2542] 9091 BD,0E,58 DST @EEE1,@CURINC @EEE1 : Destination address o [2543] * Also default for end line [2544] * Now first evaluate what we've got in CURLIN [2545] 9094 8F,0E G9094 DCZ @CURINC Check for combination xxx- [2546] 9096 50,A6 BR G90A6 [2547] 9098 93,20 G9098 DDEC @VARW Backup to the separation mark [2548] 909A D6,B0,20 CEQ SPACE+OFFSET,V*VARW 909D 80 [2549] 909E 70,98 BS G9098 [2550] 90A0 D6,B0,20 CEQ MINUS+OFFSET,V*VARW Select last 90A3 8D [2551] 90A4 70,8D BS LISTZ0 [2552] 90A6 C9,0E,14 G90A6 DCHE @CURLIN,@CURINC If something like LIST 15-11 [2553] 90A9 70,AE BS G90AE [2554] 90AB BD,0E,14 DST @CURLIN,@CURINC Replace byt LIST 15-15 [2555] 90AE BD,4A,14 G90AE DST @CURLIN,@FAC Prepare for line # search [2556] 90B1 0F,7E XML SPEED Search the line number table [2557] 90B3 03 BYTE SEETWO [2558] 90B4 BD,14,2E DST @EXTRAM,@CURLIN Get first real line # in CURL [2559] 90B7 BD,4A,0E DST @CURINC,@FAC [2560] 90BA 0F,7E XML SPEED [2561] 90BC 03 BYTE SEETWO * Evaluate second line # [2562] 90BD 06,91,BC CALL GRSUB3 Read 2 bytes of data from ERA [2563] 90C0 2E BYTE EXTRAM * @EXTRAM : Source addr on ERAM [2564] * Reset possible breakpoint too [2565] 90C1 C5,58,0E DCH @CURINC,@EEE1 [2566] 90C4 50,CA BR G90CA [2567] 90C6 A3,2E,00 DADD 4,@EXTRAM Else take next lower line 90C9 04 [2568] 90CA BD,0E,2E G90CA DST @EXTRAM,@CURINC Which could be equal to CURLI [2569] 90CD BD,2E,14 DST @CURLIN,@EXTRAM For use below by LIST [2570] 90D0 93,2C DDEC @PGMPTR Backup to last CHAT [2571] 90D2 0F,79 XML PGMCHR Retrieve last CHAT [2572] 90D4 8E,42 CZ @CHAT Device name available [2573] 90D6 71,32 BS G9132 [2574] 90D8 06,81,F4 CALL CLSALL Close all files that are open [2575] 90DB BF,6E,09 DST VRAMVS,@VSPTR Re-initialize the V-stack 90DE 58 [2576] 90DF BD,24,6E DST @VSPTR,@STVSPT And it's base [2577] 90E2 0F,79 XML PGMCHR Get name length in CHAT [2578] 90E4 BF,04,09 DST VRAMVS+16,@PABPTR Get entrypoint in PAB 90E7 68 [2579] 90E8 86,17 CLR @DSRFLG Indicate device I/O [2580] 90EA 31,00,09 MOVE 9,G@PAB,V@4(@PABPTR) 90ED E0,04,04 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0046 FLMGR-359 90F0 91,70 [2581] 90F2 BF,08,09 DST VRAMVS+16+NLEN,@CCPADR Select start address 90F5 75 [2582] * for copy [2583] * GKXB GTLENGTH label [2584] 90F6 06,97,ED CALL GTLENG GKXB Set length in PAB [2585] 90F9 90,4C INC @FAC2 Plus length byte [2586] 90FB BC,B0,08 LISTZ1 ST @CHAT,V*CCPADR Copy the bytes one by one 90FE 42 [2587] 90FF 0F,79 XML PGMCHR Get next character [2588] 9101 91,08 DINC @CCPADR CCPADR ends up with highest a [2589] 9103 92,4C DEC @FAC2 Count total # of characters [2590] 9105 50,FB BR LISTZ1 [2591] 9107 06,97,65 CALL IOCLZ1 Preform OPEN on DSR [2592] 910A 86,4A CLR @FAC Create double byte PAB length [2593] 910C BC,07,E0 ST V@LEN(@PABPTR),@RECLEN Get record length 910F 08,04 [2594] 9111 BC,4B,07 ST @RECLEN,@FAC1 Get highest address used [2595] 9114 A1,4A,08 DADD @CCPADR,@FAC Compute record length [2596] 9117 BD,E0,06 DST @CCPADR,V@BUF(@PABPTR) Store it 911A 04,08 [2597] 911C 8E,80,84 CZ @RAMTOP If ERAM exists then [2598] 911F 71,28 BS G9128 [2599] 9121 C5,4A,70 DCH @>8370,@FAC Compare with top of [2600] * VDP : if higher then 'not enough room' [2601] 9124 77,BB BS ERRIO [2602] 9126 51,2D BR G912D [2603] 9128 C5,4A,30 G9128 DCH @STLN,@FAC Not enough room [2604] 912B 77,BB BS ERRIO [2605] 912D BE,06,01 G912D ST 1,@CCPPTR Clear first line in output [2606] 9130 51,38 BR G9138 [2607] 9132 BE,7F,1F G9132 ST VWIDTH+3,@XPT For common code usage [2608] 9135 06,97,3F CALL INITKB Reset current record length [2609] 9138 8E,80,84 G9138 CZ @RAMTOP If ERAM exist then [2610] 913B 71,40 BS G9140 [2611] 913D 06,91,79 CALL GRMLST Fake it : move each line to t [2612] * CRUNCH buffer form ERAM [2613] 9140 06,6A,74 G9140 CALL LLIST List the current line [2614] 9143 03 SCAN Test for a break key [2615] 9144 51,4E BR LISTZ3 No key [2616] 9146 D6,75,02 CEQ BREAK,@RKEY [2617] 9149 71,5F BS LISTZ4 [2618] 914B 03 LISTZ5 SCAN [2619] 914C 51,4B BR LISTZ5 [2620] 914E 8E,80,84 LISTZ3 CZ @RAMTOP If ERAM exists [2621] 9151 71,56 BS G9156 [2622] 9153 BD,2E,58 DST @FAC14,@EXTRAM Restore the @EXTRAM [2623] 9156 A7,2E,00 G9156 DSUB 4,@EXTRAM Pointer to next line 9159 04 [2624] 915A C5,0E,2E DCH @EXTRAM,@CURINC Display all lines in range [2625] 915D 51,38 BR G9138 [2626] 915F 8E,17 LISTZ4 CZ @DSRFLG Device I/O -> output last rec [2627] 9161 51,6D BR G916D [2628] 9163 06,96,A5 CALL OUTREC Output the last record [2629] 9166 06,97,5E CALL IOCALL Close the device properly [2630] 9169 01 BYTE CZCLOS [2631] 916A 05,60,1A B TOPL10 [2632] 916D 05,60,12 G916D B TOPL15 Restart the variable too [2633] * PAB image used in LIST function [2634] 9170 00,12,00 PAB BYTE 0,>12,0,0,0,0,0,0,OFFSET 9173 00,00,00 9176 00,00,60 [2635] * Move each line in ERAM to CRNBUF area, put line number in [2636] * (CRNBUF), put CRNBUF+4 in (CRNBUF+2) which is the line 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0047 FLMGR-359 [2637] * pointer field, put the text itself from ERAM to (CRNBUF+4 [2638] * before call LLIST, trick it by moving CRNBUF to @EXTRAM [2639] 9179 06,91,BC GRMLST CALL GRSUB3 Get line # from ERAM(use GREA [2640] 917C 2E BYTE EXTRAM * @EXTRAM : Source address on E [2641] * Reset possible breakpoint too [2642] 917D BD,A8,20 DST @EEE1,V@CRNBUF Put it in CRNBUF 9180 58 [2643] 9181 BF,A8,22 DST CRNBUF+4,V@CRNBUF+2 Put CRNBUF+4 into 9184 08,24 [2644] * the line pointer field [2645] 9186 95,54 DINCT @DDD1 Get the pointer to the text [2646] * from GRAM [2647] 9188 06,91,AA CALL GRSUB4 Read the line pointer in (use [2648] * GREAD1) [2649] 918B 93,58 DDEC @EEE1 Get the ptr to the length byt [2650] 918D 06,91,A4 CALL GRSUB2 Read th length from ERAM, use [2651] 9190 58 BYTE EEE1 * GREAD1, @EEE1 : Source addre [2652] * on ERAM [2653] 9191 BC,57,58 ST @EEE1,@FFF1+1 Use the length as byte count [2654] * to move the text from ERAM to [2655] * VDP CRNBUF+4 area [2656] 9194 BF,58,08 DST CRNBUF+4,@EEE1 EEE1 : Destination address on 9197 24 [2657] 9198 91,54 DINC @DDD1 DDD1 : Source address on ERAM [2658] 919A 0F,8B XML GVWITE Move data from ERAM to VDP [2659] 919C BD,58,2E DST @EXTRAM,@FAC14 Save for later use [2660] 919F BF,2E,08 DST CRNBUF,@EXTRAM Fake it 91A2 20 [2661] 91A3 00 RTN [2662] * SUBROUTINE TO READ 2 BYTES OF DATA FROM ERAM OR VDP WITH [2663] * THE OPTION TO RESET THE POSSIBLE BREAKPOINT [2664] 91A4 88,56 GRSUB2 FETCH @FFF1 Fetch the source address on [2665] 91A6 BD,54,90 DST *FFF1,@DDD1 ERAM or VDP 91A9 56 [2666] * @DDD1 : Source addr on ERAM [2667] * or VDP [2668] 91AA 8E,80,84 GRSUB4 CZ @RAMTOP If ERAM exists [2669] 91AD 71,B7 BS G91B7 [2670] 91AF BF,56,00 DST 2,@FFF1 @FFF1 : Byte count 91B2 02 [2671] 91B3 0F,8C XML GREAD1 Read data from ERAM to CPU [2672] 91B5 51,BB BR G91BB [2673] 91B7 BD,58,B0 G91B7 DST V*DDD1,@EEE1 Read data from VDP to CPU 91BA 54 [2674] 91BB 00 G91BB RTN [2675] 91BC 88,56 GRSUB3 FETCH @FFF1 Fetch the source addr on ERAM [2676] 91BE BD,54,90 DST *FFF1,@DDD1 or VDP 91C1 56 [2677] * @DDD1 : Source addr on ERAM/V [2678] 91C2 06,91,AA CALL GRSUB4 Do the actual read [2679] 91C5 B3,58,7F DAND >7FFF,@EEE1 Reset possible breakpoint 91C8 FF [2680] 91C9 00 RTN [2681] *********** REC ROUTINE *********************************** [2682] * REC(X) returns the current record to which file X is [2683] * positioned. [2684] 91CA BD,5C,04 SUBREC DST @PABPTR,@ARG Save the current PAB & set ne [2685] 91CD 06,92,1E CALL SUBEOF Try to find the correct PAB [2686] 91D0 C1,5C,04 DEX @PABPTR,@ARG @ARG : new PAB [2687] * @PABPTR : restore current PAB [2688] 91D3 52,12 BR EOFZ2 Didn't find the corresponding [2689] 91D5 BD,4A,E0 DST V@RNM(@ARG),@FAC Obtain integer record number 91D8 0A,5C [2690] 91DA 0F,80 XML CIF Convert integer to floating 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0048 FLMGR-359 [2691] 91DC 0F,75 XML CONT and continue [2692] *********************************************************** [2693] * EOF ROUTINE [2694] * EOF(X) returns status codes on file X. The meaning of the [2695] * result codes is: [2696] * -1 Physical End Of File [2697] * 0 Not at End Of File yet [2698] * 1 Logical End Of File [2699] *********************************************************** [2700] 91DE BD,5C,04 EOF DST @PABPTR,@ARG Save the current PAB and set [2701] * the new one in SUBEOF [2702] 91E1 06,92,1E CALL SUBEOF Try to find the PAB somewhere [2703] 91E4 57,D7 BR ERRFE Can't file [2704] 91E6 BE,5E,09 ST CZSTAT,@ARG2 Select status code without [2705] 91E9 C0,E0,04 EX @ARG2,V@COD(@PABPTR) destorying original code 91EC 04,5E [2706] 91EE 06,97,65 CALL IOCLZ1 Get the info from DSR [2707] 91F1 C1,04,5C DEX @ARG,@PABPTR Restore original PAB and orig [2708] 91F4 BC,E0,04 ST @ARG2,V@COD(@ARG) I/O code 91F7 5C,5E [2709] 91F9 BC,5E,E0 ST V@SCR(@ARG),@ARG2 And pick up STATUS 91FC 0C,5C [2710] 91FE 31,00,08 MOVE 8,G@FLOAT1,@FAC Get floating 1 9201 4A,92,16 [2711] 9204 DA,5E,03 CLOG 3,@ARG2 Test EOF bits [2712] 9207 72,12 BS EOFZ2 No EOF indication [2713] 9209 DA,5E,02 CLOG 2,@ARG2 Physical EOF [2714] 920C 72,10 BS G9210 [2715] 920E 83,4A DNEG @FAC Make result -1 [2716] 9210 0F,75 G9210 XML CONT [2717] 9212 87,4A EOFZ2 DCLR @FAC Create result 0 [2718] 9214 0F,75 XML CONT [2719] 9216 40,01,00 FLOAT1 BYTE >40,1,0,0,0,0,0,0 * Floating point -1 9219 00,00,00 921C 00,00 [2720] 921E D6,42,B7 SUBEOF CEQ LPARZ,@CHAT * SYNTAX ERROR [2721] 9221 41,09 BR ERRSYN [2722] 9223 0F,74 XML PARSE Parse up to the matching ")" [2723] 9225 FF BYTE >FF [2724] 9226 06,93,5C CALL CHKCNV Convert and search for PAB [2725] 9229 77,CB BS ERRBV Avoid 0's and negatives bad v [2726] 922B BC,62,17 ST @DSRFLG,@ARG6 @DSRFLG got changed in CHKCON [2727] 922E 06,93,71 CALL CHKCON Check and search tiven filenu [2728] 9231 BC,17,62 ST @ARG6,@DSRFLG @DSRFLG to changed CHKCON [2729] 9234 01 RTNC Condition set : file # exists [2730] *********************************************************** [2731] * LOAD / SAVE / MERGE UTILITY ROUTINE [2732] * GPNAME gets program name from OLD and SAVE [2733] * Can also be used for future implementation of REPLACE [2734] * statement. Also gives valuable contribution to updating [2735] * of program pointers (VSPTR, STVSPT, FLAG, etc...) and [2736] * creation of LOAD/SAVE PAB [2737] *********************************************************** [2738] 9235 B2,45,80 GPNAME AND >80,@FLAG Avoid returns from ERRZZ rout [2739] 9238 D6,42,C7 CEQ STRINZ,@CHAT [2740] 923B 72,42 BS G9242 [2741] 923D D6,42,C8 CEQ NUMZ,@CHAT * SYNTAX ERROR [2742] 9240 41,09 BR ERRSYN [2743] 9242 06,81,F4 G9242 CALL CLSALL First close all open files [2744] 9245 06,60,22 CALL KILSYM Kill the symbol table [2745] 9248 BF,04,09 DST VRAMVS+8,@PABPTR Create PAB as low as possible 924B 60 [2746] 924C 86,B0,04 CLR V*PABPTR Clear PAB with ripple-move [2747] 924F 35,00,09 MOVE PABLEN-5,V*PABPTR,V@1(@PABPTR) 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0049 FLMGR-359 9252 E0,01,04 9255 B0,04 [2748] 9257 0F,79 XML PGMCHR Get length of file-specificat [2749] 9259 A7,04,00 DSUB 4,@PABPTR Make it a regular PAB 925C 04 [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 [2755] 9273 52,84 BR G9284 [2756] 9275 BD,56,0A G9275 DST @STADDR,@FFF1 @FFF1 : Byte count [2757] 9278 BD,54,2C DST @PGMPTR,@DDD1 Source address on ERAM [2758] 927B BD,58,04 DST @PABPTR,@EEE1 [2759] 927E A3,58,00 DADD NLEN+1,@EEE1 Destination address on VDP 9281 0E [2760] 9282 0F,8B XML GVWITE Write from ERAM to VDP [2761] 9284 A1,2C,0A G9284 DADD @STADDR,@PGMPTR Skip the string [2762] * OLD and SAVE can only be imperative [2763] 9287 86,34 CLR @DATA Clear DATA line [2764] 9289 00 RTN That's all folks [2765] *********************************************************** [2766] * READ / INPUT UTILITY ROUTINES [2767] *********************************************************** [2768] 928A BD,0A,2C GETVAR DST @PGMPTR,@STADDR Save token pointer to first c [2769] 928D 86,10 CLR @VAR5 Clear # of parsed variables [2770] 928F BD,0E,6E DST @VSPTR,@VAR4 Save first entry in V-stack [2771] * Start parse cycle for IMPUT statement [2772] 9292 CA,42,80 GETVZ0 CHE >80,@CHAT Make sure of varialbe name [2773] 9295 61,09 BS ERRSYN [2774] 9297 0F,7A XML SYM Get correct symbol table entr [2775] 9299 86,11 CLR @VAR6 Start with zero paren nesting [2776] 929B D6,42,B7 GETVZ1 CEQ LPARZ,@CHAT Increment counter for "(" [2777] 929E 52,A2 BR G92A2 [2778] 92A0 90,11 INC @VAR6 [2779] 92A2 8E,11 G92A2 CZ @VAR6 Watch out for final balance [2780] 92A4 72,B6 BS G92B6 [2781] 92A6 06,95,AD CALL CHKEND Check for unbalenced parenthe [2782] 92A9 61,09 BS ERRSYN Somebody forgot something!!!! [2783] 92AB D6,42,B6 CEQ RPARZ,@CHAT Decrement for ")" [2784] 92AE 52,B2 BR G92B2 [2785] 92B0 92,11 DEC @VAR6 [2786] 92B2 0F,79 G92B2 XML PGMCHR Get character following last [2787] 92B4 52,9B BR GETVZ1 [2788] 92B6 0F,77 G92B6 XML VPUSH Push entry to V-stack [2789] 92B8 90,10 INC @VAR5 Count all pushed variables [2790] 92BA 06,95,AD CALL CHKEND Next should either be EOS or [2791] 92BD 72,CC BS GETVZ2 Found it EOS!!!! [2792] 92BF 0F,7E XML SPEED Must be at a [2793] 92C1 00 BYTE SYNCHK * comma else [2794] 92C2 B3 BYTE COMMAZ * its an error [2795] 92C3 06,95,AD CALL CHKEND Check for end of statement [2796] 92C6 52,92 BR GETVZ0 Haven't found it yet [2797] 92C8 8E,17 CZ @DSRFLG Error for keyboard I/O [2798] 92CA 41,09 BR ERRSYN [2799] 92CC 00 GETVZ2 RTN [2800] * Create a temporary string in memory. BYTES contains the l [2801] 92CD BF,4C,65 CTSTR DST >6500,@FAC2 Indicate string in FAC 92D0 00 [2802] 92D1 BD,50,0C CTSTR0 DST @BYTES,@FAC6 Copy string length in FAC6 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0050 FLMGR-359 [2803] 92D4 0F,71 XML GETSTR Reserve the string [2804] 92D6 BD,4E,1C DST @SREF,@FAC4 Copy start address of string [2805] 92D9 BF,4A,00 DST >001C,@FAC And indicate temp. string >00 92DC 1C [2806] 92DD 00 RTN [2807] * Create a temporary string from TEMP5. Length is given [2808] * in BYTES. [2809] 92DE 06,92,CD CTMPST CALL CTSTR Create the temporary string [2810] 92E1 8E,51 CZ @FAC7 [2811] 92E3 72,EB BS G92EB [2812] 92E5 34,0C,B0 MOVE @BYTES,V*TEMP5,V*SREF 92E8 1C,B0,66 [2813] 92EB 00 G92EB RTN Non-empty [2814] * CHKNUM - Check for numeric argument [2815] 92EC D6,01,C8 CHKNUM CEQ NUMZ,@VAR0+1 [2816] 92EF 53,03 BR G9303 [2817] 92F1 06,93,0C CALL GETRAM Get string length [2818] 92F4 BD,56,34 DST @DATA,@FAC12 Store entry for conversion [2819] 92F7 86,00 CLR @VAR0 Prepare for double action [2820] 92F9 A1,34,00 DADD @VAR0,@DATA Get end of data field [2821] 92FC 06,A0,12 CALL CONVER Convert data to FAC # [2822] * Conversion should also end at end of field [2823] 92FF D5,A3,90 DCEQ @DATA,V@CSNTMP Set COND according to equalit 9302 34 [2824] 9303 01 G9303 RTNC Back to caller [2825] 9304 BC,4D,80 GETGFL ST @RAMTOP,@FAC3 Select target memory 9307 84 [2826] 9308 8E,4D GETDAT CZ @FAC3 Get everything from RAM [2827] 930A 53,14 BR G9314 [2828] 930C BC,01,B0 GETRAM ST V*DATA,@VAR0+1 Get data in VAR0+1 930F 34 [2829] 9310 86,4D CLR @FAC3 Be sure FAC3 = 0 !!!! [2830] 9312 53,20 BR G9320 [2831] 9314 BF,56,00 G9314 DST 1,@FFF1 FFF1 : byte count 9317 01 [2832] 9318 BD,54,34 DST @DATA,@DDD1 DDD1 : source addr on ERAM [2833] 931B 0F,8C XML GREAD1 Read data from ERAM [2834] 931D BC,01,58 ST @EEE1,@VAR0+1 EEE1 : Destination addr on CP [2835] 9320 91,34 G9320 DINC @DATA Go to next datum for next tim [2836] 9322 00 RTN [2837] 9323 87,50 CHKSTR DCLR @FAC6 Assume we'll have an empty st [2838] 9325 D6,01,C7 CEQ STRINZ,@VAR0+1 [2839] 9328 73,2F BS CHKSZ0 [2840] 932A D6,01,C8 CEQ NUMZ,@VAR0+1 See ............ [2841] 932D 53,3E BR EMPSTR [2842] 932F 06,93,08 CHKSZ0 CALL GETDAT Next datum is length byte [2843] 9332 86,50 CLR @FAC6 Be sure high byte = 0 !!!! [2844] 9334 BC,51,01 ST @VAR0+1,@FAC7 Prepare FAC for string assign [2845] 9337 BD,66,34 DST @DATA,@TEMP5 Save string addr for assignme [2846] 933A A1,34,50 DADD @FAC6,@DATA Update DATA for end of field [2847] 933D 00 RTN [2848] * Empty strings are handled below [2849] 933E D6,01,B3 EMPSTR CEQ COMMAZ,@VAR0+1 [2850] 9341 73,48 BS G9348 [2851] 9343 06,93,4B CALL DATEND Check for end of data stateme [2852] 9346 53,8C BR RTC Return with COND if not EOS [2853] 9348 93,34 G9348 DDEC @DATA Backup data pointer for empti [2854] 934A 00 RTN [2855] 934B C0,42,01 DATEND EX @VAR0+1,@CHAT [2856] 934E 06,95,AD CALL CHKEND Check for EOS (=EOL or "::") [2857] 9351 C0,42,01 EX @VAR0+1,@CHAT Restore original situation [2858] 9354 01 RTNC [2859] [2860] *********************************************************** 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0051 FLMGR-359 [2861] * OPEN / CLOSE / RESTORE UTILITY ROUTNE [2862] * CHKFN - Check for token = "#" and collect and check [2863] * filenumber. Also convert filenumber to (two byte) integer [2864] * and check for range 080,@FAC Negative result [2881] 936C 53,8C BR RTC [2882] 936E 8F,4A DCZ @FAC And return with COND set/rese [2883] 9370 01 RTNC [2884] 9371 BC,17,4B CHKCON ST @FAC1,@FNUM Move result into FNUM [2885] * Check for high byte not zero (>0255) [2886] 9374 8E,4A CZ @FAC Bad value error [2887] 9376 57,CB BR ERRBV [2888] * Search routine - Search for a given file number in the [2889] * chain of allocated PABs. [2890] * IOSTRT contains the start of the PAB - chain [2891] 9378 BD,04,3C DST @IOSTRT,@PABPTR Get first link in the chain [2892] * Check for last PAB in the chain and exit if found [2893] 937B 8F,04 CHKFZ1 DCZ @PABPTR Check if file # is correct [2894] 937D 73,8F BS G938F [2895] 937F D4,E0,02 CEQ @FNUM,V@FIL(@PABPTR) 9382 04,17 [2896] 9384 73,8C BS RTC [2897] 9386 BD,04,B0 DST V*PABPTR,@PABPTR Try the next PAB 9389 04 [2898] 938A 53,7B BR CHKFZ1 [2899] 938C D4,00,00 RTC CEQ @>8300,@>8300 Force COND to "SET" [2900] 938F 01 G938F RTNC Exit with no COND change [2901] *********************************************************** [2902] * OUTEOF outputs the last record if this record is [2903] * non-empty, and if the PAB is open for non-imput mode [2904] * (UPDATE, APPEND or OUTPUT). [2905] *********************************************************** [2906] 9390 86,17 OUTEOF CLR @DSRFLG [2907] 9392 D6,E0,04 CEQ CZWRIT,V@COD(@PABPTR) Non-input mode 9395 04,03 [2908] 9397 53,A5 BR G93A5 [2909] 9399 8E,E0,03 CZ V@OFS(@PABPTR) Non-empty record 939C 04 [2910] 939D 73,A5 BS G93A5 [2911] 939F 06,96,F5 CALL PRINIT Initiate for output [2912] 93A2 06,96,A5 CALL OUTREC Output and remove pending con [2913] 93A5 00 G93A5 RTN Return to whoever called [2914] *********************************************************** [2915] * DELPAB routine - delete a given PAB from chain under the [2916] * assumption that the PAB exists [2917] *********************************************************** [2918] * First compute start and end address for block move [2919] 93A6 BD,0A,E0 DELPAB DST V@BUF(@PABPTR),@STADDR Get lowest used address 93A9 06,04 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0052 FLMGR-359 [2920] 93AB 93,0A DDEC @STADDR Make that an addr following P [2921] 93AD 86,08 CLR @CCPADR Get highest addr in CCPADR (2 [2922] 93AF BC,09,E0 ST V@NLEN(@PABPTR),@CCPADR+1 complete the two byte 93B2 0D,04 [2923] 93B4 A2,09,0D ADD PABLEN-1,@CCPADR+1 Add PAB length-1 [2924] 93B7 A1,08,04 DADD @PABPTR,@CCPADR Compute actual addr within RA [2925] 93BA D5,3C,04 DCEQ @PABPTR,@IOSTRT Watch out for first PAB [2926] 93BD 73,E6 BS G93E6 [2927] 93BF BD,02,3C DST @IOSTRT,@MNUM Figure out where link to PAB [2928] 93C2 D5,B0,02 G93C2 DCEQ @PABPTR,V*MNUM Continue while not found 93C5 04 [2929] 93C6 73,CE BS G93CE [2930] 93C8 BD,02,B0 DST V*MNUM,@MNUM Defer to next link in chain 93CB 02 [2931] 93CC 53,C2 BR G93C2 Short end for code-savings [2932] 93CE BD,B0,02 G93CE DST V*PABPTR,V*MNUM Copy link over deleted PAB 93D1 B0,04 [2933] 93D3 8F,B0,02 DCZ V*MNUM Adjust link only if not done [2934] 93D6 73,E0 BS G93E0 [2935] 93D8 A1,B0,02 DADD @CCPADR,V*MNUM Add deleted # of bytes for 93DB 08 [2936] 93DC A5,B0,02 DSUB @STADDR,V*MNUM link correction 93DF 0A [2937] 93E0 BD,04,B0 G93E0 DST V*MNUM,@PABPTR Get new PABPTR 93E3 02 [2938] 93E4 53,F7 BR G93F7 [2939] 93E6 BD,3C,B0 G93E6 DST V*PABPTR,@IOSTRT Update first link 93E9 04 [2940] 93EA 8F,3C DCZ @IOSTRT Only adjust if not last link [2941] 93EC 73,F4 BS G93F4 [2942] 93EE A1,3C,08 DADD @CCPADR,@IOSTRT Add deleted # of bytes [2943] 93F1 A5,3C,0A DSUB @STADDR,@IOSTRT [2944] 93F4 BD,04,3C G93F4 DST @IOSTRT,@PABPTR Get new PABPTR [2945] * Move the bytes below the deleted block up in memory. This [2946] * includes both variables and PABs [2947] 93F7 BD,02,0A G93F7 DST @STADDR,@MNUM Get # of bytes to move [2948] 93FA A5,02,40 DSUB @FREPTR,@MNUM [2949] 93FD BD,06,08 DST @CCPADR,@CCPPTR Save destination address [2950] 9400 8F,02 G9400 DCZ @MNUM [2951] 9402 74,11 BS G9411 [2952] 9404 BC,B0,08 ST V*STADDR,V*CCPADR Move byte by byte 9407 B0,0A [2953] 9409 93,0A DDEC @STADDR Update source [2954] 940B 93,08 DDEC @CCPADR and destination pointers [2955] 940D 93,02 DDEC @MNUM Also update counter value [2956] 940F 54,00 BR G9400 [2957] 9411 A5,08,0A G9411 DSUB @STADDR,@CCPADR Compute # of bytes of old PAB [2958] 9414 8F,04 DCZ @PABPTR Avoid trouble with last PAB [2959] 9416 74,31 BS G9431 [2960] 9418 8F,B0,04 G9418 DCZ V*PABPTR Ad infinitum (or fundum) [2961] 941B 74,2C BS G942C [2962] 941D A1,B0,04 DADD @CCPADR,V*PABPTR Adjust link to next PAB 9420 08 [2963] 9421 A1,E0,06 DADD @CCPADR,V@BUF(@PABPTR) Update the buffer link 9424 04,08 [2964] 9426 BD,04,B0 DST V*PABPTR,@PABPTR Get next link in chain 9429 04 [2965] 942A 54,18 BR G9418 [2966] 942C A1,E0,06 G942C DADD @CCPADR,V@BUF(@PABPTR) Update buffer link 942F 04,08 [2967] * Adjust symbol table links [2968] 9431 8F,3E G9431 DCZ @SYMTAB [2969] 9433 74,B4 BS G94B4 [2970] 9435 D1,3E,06 DCGE @CCPPTR,@SYMTAB Only update lower links 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0053 FLMGR-359 [2971] 9438 74,B4 BS G94B4 [2972] 943A A1,3E,08 DADD @CCPADR,@SYMTAB Get symbol table pointer back [2973] 943D BD,04,3E DST @SYMTAB,@PABPTR Get pointer for update [2974] 9440 8E,80,84 DELPZ1 CZ @RAMTOP [2975] 9443 54,4C BR DELPZ2 [2976] 9445 D1,E0,04 DCGE @STLN,V@4(@PABPTR) If imperative 9448 04,30 [2977] 944A 74,51 BS G9451 [2978] 944C A1,E0,04 DELPZ2 DADD @CCPADR,V@4(@PABPTR) Adjust name pointer 944F 04,08 [2979] 9451 D2,B0,04 G9451 CGE 0,V*PABPTR If string-fix breakpoints 9454 00 [2980] 9455 74,9B BS G949B [2981] 9457 BE,4A,07 ST >07,@FAC Mask to get # of dims [2982] 945A B0,4A,B0 AND V*PABPTR,@FAC Get # of dims 945D 04 [2983] 945E BD,4C,04 DST @PABPTR,@FAC2 Pointer to 1st dim max [2984] 9461 A3,4C,00 DADD 6,@FAC2 or string pointer 9464 06 [2985] 9465 BF,50,00 DST 1,@FAC6 Number of pointers to change 9468 01 [2986] 9469 86,4E CLR @FAC4 For 2 byte use of option base [2987] 946B 8E,4A G946B CZ @FAC While more dimendions [2988] 946D 74,83 BS G9483 [2989] 946F BE,4F,01 ST 1,@FAC5 Assume option base 0 [2990] 9472 A4,4F,43 SUB @BASE,@FAC5 But correct if base 1 [2991] 9475 A1,4E,B0 DADD V*FAC2,@FAC4 Get dim maximum 9478 4C [2992] 9479 A9,4E,50 DMUL @FAC6,@FAC4 Multiply it in [2993] 947C 92,4A DEC @FAC Next dim [2994] 947E 95,4C DINCT @FAC2 [2995] 9480 05,94,6B B G946B [2996] * FAC2 now points at the 1st string pointer [2997] * FAC6 contains the # of pointers that need to be changed [2998] 9483 8F,50 G9483 DCZ @FAC6 While pointers to cheange [2999] 9485 74,9B BS G949B [3000] 9487 BD,4A,B0 DST V*FAC2,@FAC Get pointer to string 948A 4C [3001] 948B 8F,4A DCZ @FAC If sting is non-null [3002] 948D 74,95 BS G9495 [3003] 948F BD,EF,FF DST @FAC2,V@-3(@FAC) Fix backpointer 9492 FD,4A,4C [3004] 9495 95,4C G9495 DINCT @FAC2 Point to next pointer [3005] 9497 93,50 DDEC @FAC6 One less pointer to change [3006] 9499 54,83 BR G9483 [3007] 949B 8F,E0,02 G949B DCZ V@2(@PABPTR) 949E 04 [3008] 949F 74,B4 BS G94B4 [3009] 94A1 D1,E0,02 DCGE @CCPPTR,V@2(@PABPTR) 94A4 04,06 [3010] 94A6 74,B4 BS G94B4 [3011] 94A8 A1,E0,02 DADD @CCPADR,V@2(@PABPTR) Adjust next value link 94AB 04,08 [3012] 94AD BD,04,E0 DST V@2(@PABPTR),@PABPTR Next entry 94B0 02,04 [3013] 94B2 54,40 BR DELPZ1 [3014] 94B4 A1,40,08 G94B4 DADD @CCPADR,@FREPTR Update free word pointer [3015] 94B7 00 RTN [3016] *********************************************************** [3017] * CNVDEF - Convert to 2 byte integer and default to 1 on [3018] * negative or 0 .... [3019] *********************************************************** [3020] 94B8 06,93,5C CNVDEF CALL CHKCNV Check and convert [3021] 94BB 54,C1 BR CNVDZ0 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0054 FLMGR-359 [3022] 94BD BF,4A,00 DST 1,@FAC Default to 1 or minus and 0 94C0 01 [3023] 94C1 00 CNVDZ0 RTN And return without COND set [3024] *********************************************************** [3025] * PARREC parses a possible REC clause in INPUT, PRINT or [3026] * RESTORE. In case a comma is detected without a REC clause [3027] * following it, the COND is set upon return. In case a REC [3028] * clause is specified for a file opened for SEQUENTIAL [3029] * access, a * FILE ERROR is given. [3030] *********************************************************** [3031] 94C2 D6,42,B3 PARREC CEQ COMMAZ,@CHAT Only check if we have a "," [3032] 94C5 54,EE BR G94EE [3033] 94C7 0F,79 XML PGMCHR Check next token for REC [3034] 94C9 D6,42,DE CEQ RECZ,@CHAT May be USING clause [3035] 94CC 53,8C BR RTC [3036] 94CE DA,E0,05 CLOG 1,V@FLG(@PABPTR) 94D1 04,01 [3037] 94D3 77,D7 BS ERRFE [3038] 94D5 0F,79 XML PGMCHR Get first character of expres [3039] 94D7 06,93,90 CALL OUTEOF Output possible pending outpu [3040] 94DA 86,E0,03 CLR V@OFS(@PABPTR) Clear record offset 94DD 04 [3041] 94DE 0F,74 XML PARSE Translate the expression in R [3042] 94E0 B5 BYTE COLONZ [3043] 94E1 06,93,5C CALL CHKCNV Check numeric and convert to [3044] 94E4 D2,4A,00 CGE 0,@FAC 2 byte integer, Bad Value [3045] 94E7 57,CB BR ERRBV [3046] 94E9 BD,E0,0A DST @FAC,V@RNM(@PABPTR) Store actual record number 94EC 04,4A [3047] 94EE 00 G94EE RTN [3048] *********************************************************** [3049] * DISPLAY / ACCEPT UTILITIES [3050] *********************************************************** [3051] 94EF 06,97,3F DISACC CALL INITKB PABPTR is used as flag (no DS [3052] 94F2 D6,42,EF DISPZ1 CEQ ERASEZ,@CHAT Check for ERASE ALL [3053] 94F5 55,18 BR G9518 [3054] 94F7 DA,04,01 CLOG 1,@PABPTR already used once [3055] 94FA 41,09 BR ERRSYN [3056] 94FC 0F,79 XML PGMCHR Check next token for ALL [3057] 94FE 0F,7E XML SPEED [3058] 9500 00 BYTE SYNCHK * has to be ALL [3059] 9501 EC BYTE ALLZ [3060] 9502 07,80 ALL BKGD+OFFSET Clear screen to background co [3061] 9504 BE,7F,03 ST 3,@XPT Reset pending output pointer [3062] 9507 DA,04,04 CLOG 4,@PABPTR Didn't use AT yet [3063] 950A 55,13 BR G9513 [3064] 950C BE,06,01 ST 1,@CCPPTR Reset column pointer [3065] 950F BF,08,02 DST SCRNBS+2,@CCPADR and screen base address 9512 E2 [3066] 9513 B6,04,01 G9513 OR 1,@PABPTR Set "ERASE USED" flag [3067] 9516 54,F2 BR DISPZ1 Try next token [3068] 9518 D6,42,EE G9518 CEQ BEEPZ,@CHAT delay action for BEEP [3069] 951B 55,29 BR G9529 [3070] 951D DA,04,02 CLOG 2,@PABPTR Use it only once [3071] 9520 41,09 BR ERRSYN [3072] 9522 B6,04,02 OR 2,@PABPTR No syntax error detected here [3073] 9525 0F,79 XML PGMCHR Evaluate next token [3074] 9527 54,F2 BR DISPZ1 Get set for second pass [3075] 9529 D6,42,F0 G9529 CEQ ATZ,@CHAT Generate "AT" clause [3076] 952C 55,71 BR G9571 [3077] 952E DA,04,04 CLOG 4,@PABPTR Second usage not [3078] 9531 41,09 BR ERRSYN [3079] 9533 0F,79 XML PGMCHR allowed.... [3080] 9535 0F,7E XML SPEED 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0055 FLMGR-359 [3081] 9537 00 BYTE SYNCHK * Skip left parenthesis [3082] 9538 B7 BYTE LPARZ [3083] 9539 0F,74 XML PARSE Now parse any expression [3084] 953B B3 BYTE COMMAZ [3085] 953C 0F,7E XML SPEED [3086] 953E 00 BYTE SYNCHK * Check for "," and skip it [3087] 953F B3 BYTE COMMAZ [3088] 9540 06,94,B8 CALL CNVDEF Convert to 2 byte numeric [3089] 9543 BE,4C,18 ST 24,@FAC2 Convert modulo 24 (# screen l [3090] 9546 06,96,1A CALL COMMOD Compute remainder [3091] 9549 92,4B DEC @FAC1 Convert back to 0 (range was [3092] 954B AA,4B,20 MUL 32,@FAC1 Convert to line base address [3093] 954E BD,08,4B DST @FAC1,@CCPADR And repalce CCPADR [3094] 9551 0F,74 XML PARSE Parse column expression [3095] 9553 B6 BYTE RPARZ [3096] 9554 0F,7E XML SPEED [3097] 9556 00 BYTE SYNCHK * Check for ")" at end [3098] 9557 B6 BYTE RPARZ [3099] 9558 06,94,B8 CALL CNVDEF Again convert to two byte int [3100] 955B BE,4C,1C ST VWIDTH,@FAC2 Convert modulo video width [3101] 955E 06,96,1A CALL COMMOD Compute remainder [3102] 9561 BC,06,4B ST @FAC1,@CCPPTR Select current column [3103] 9564 A1,08,4A DADD @FAC,@CCPADR Compute full address [3104] 9567 91,08 DINC @CCPADR Adjust for column 0 (offset-1 [3105] 9569 B6,04,04 OR 4,@PABPTR Set "AT-CLAUSE" used flag [3106] 956C B6,04,20 OR 32,@PABPTR Set "NON-STANDARD SCREEN ADDR [3107] 956F 54,F2 BR DISPZ1 Continue for next item [3108] 9571 D6,42,EB G9571 CEQ SIZEZ,@CHAT "SIZE" clause [3109] 9574 55,A0 BR G95A0 [3110] 9576 DA,04,08 CLOG 8,@PABPTR Only use once [3111] 9579 41,09 BR ERRSYN [3112] 957B 0F,79 XML PGMCHR Get character following the S [3113] 957D D6,42,B7 CEQ LPARZ,@CHAT has to open "(" [3114] 9580 41,09 BR ERRSYN [3115] 9582 0F,74 XML PARSE And close again ")" [3116] 9584 FE BYTE VALIDZ [3117] 9585 D2,4A,00 CGE 0,@FAC Change to positive argument [3118] 9588 75,8F BS G958F [3119] 958A 83,4A DNEG @FAC For ACCEPT statement with siz [3120] 958C B6,04,80 OR >80,@PABPTR indicate in highest bit [3121] 958F 06,93,5C G958F CALL CHKCNV [3122] 9592 77,CB BS ERRBV * BAD VALUE [3123] 9594 8E,4A CZ @FAC Also for args >255 (less then [3124] 9596 57,CB BR ERRBV [3125] 9598 BC,05,4B ST @FAC1,@PABPTR+1 Copy to PABPTR (always used) [3126] 959B B6,04,08 OR 8,@PABPTR Prevent further use [3127] 959E 54,F2 BR DISPZ1 and go on [3128] 95A0 D6,42,FE G95A0 CEQ VALIDZ,@CHAT Exclude VALIDATE option [3129] 95A3 75,B9 BS G95B9 [3130] * Start evaluating ERASE clause here [3131] 95A5 DA,04,08 CLOG 8,@PABPTR [3132] 95A8 75,AD BS CHKEND [3133] 95AA 06,95,DF CALL SIZE1 Evaluate field defined in SIZ [3134] * If it's no DISPLAY keyword ( AT, SIZE, BEEP or USING) it [3135] * has to be a print separator or colon ":" [3136] * If anything is specified is has to be a colon or end of [3137] * line... for end-of-line output current record [3138] * Check for end of statement [3139] 95AD DA,42,80 CHKEND CLOG >80,@CHAT [3140] 95B0 75,B7 BS G95B7 [3141] 95B2 CA,42,84 CHE TREMZ+1,@CHAT [3142] 95B5 53,8C BR RTC [3143] 95B7 8E,42 G95B7 CZ @CHAT Set COND according to CHAT [3144] 95B9 01 G95B9 RTNC 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0056 FLMGR-359 [3145] *********************************************************** [3146] * NXTCHR - Get next program character - skip all strings, [3147] * numerics and line references... [3148] *********************************************************** [3149] 95BA 06,95,AD NXTCHR CALL CHKEND Check for end of statements [3150] 95BD 73,8C BS RTC Avoid end of statement [3151] 95BF D6,42,C7 CEQ STRINZ,@CHAT Skip all strings [3152] 95C2 75,C9 BS NXTCZ0 [3153] 95C4 D6,42,C8 CEQ NUMZ,@CHAT and numerics/unquoted string [3154] 95C7 55,D5 BR G95D5 [3155] 95C9 0F,79 NXTCZ0 XML PGMCHR Get string length [3156] 95CB BC,4B,42 ST @CHAT,@FAC1 Make that a double please... [3157] 95CE 86,4A CLR @FAC Hic.... Oops, sorry [3158] 95D0 A1,2C,4A DADD @FAC,@PGMPTR Back to the serious stuff [3159] 95D3 55,DC BR G95DC [3160] 95D5 D6,42,C9 G95D5 CEQ LNZ,@CHAT Line # = skip 2 tokens [3161] 95D8 55,DC BR G95DC [3162] 95DA 95,2C DINCT @PGMPTR <----------- That's the skip [3163] 95DC 0F,79 G95DC XML PGMCHR Get the next token [3164] 95DE 00 RTN [3165] *********************************************************** [3166] * PRINT / DISPLAY UTILITES [3167] * Use the parameters specified in SIZE for further [3168] * evaluation of the limited field length [3169] *********************************************************** [3170] 95DF DA,04,04 SIZE1 CLOG 4,@PABPTR Not "AT" clause used [3171] 95E2 55,FC BR G95FC [3172] 95E4 D6,06,01 CEQ 1,@CCPPTR Might have to print current [3173] 95E7 75,FC BS G95FC [3174] 95E9 BC,4A,06 ST @CCPPTR,@FAC Compute final position after [3175] 95EC A0,4A,05 ADD @PABPTR+1,@FAC in FAC and compare with reco [3176] 95EF 92,4A DEC @FAC [3177] 95F1 C4,4A,07 CH @RECLEN,@FAC Size clause too long [3178] 95F4 55,FC BR G95FC [3179] * We can't get here for AT( , ) output, since right margin [3180] * limited there [3181] 95F6 06,96,A5 CALL OUTREC Advance to next line [3182] 95F9 06,96,CC CALL SCRO Scroll the screeen [3183] 95FC A4,07,06 G95FC SUB @CCPPTR,@RECLEN Limit field size to available [3184] 95FF 90,07 INC @RECLEN space... including current p [3185] 9601 C4,07,05 CH @PABPTR+1,@RECLEN [3186] 9604 56,C8 BR INITZ1 [3187] 9606 BC,07,05 ST @PABPTR+1,@RECLEN Only accept if available [3188] 9609 56,C8 BR INITZ1 Reinitialize CCPPTR [3189] * Copy (converted) numerical datum in string [3190] 960B BC,0D,56 RSTRING ST @FAC12,@BYTES+1 Get actual string length [3191] 960E 86,0C CLR @BYTES Create double byte value [3192] 9610 06,92,CD CALL CTSTR Create a temporary string [3193] 9613 34,0C,B0 MOVE @BYTES,*FAC11,V*SREF Copy value string 9616 1C,90,55 [3194] 9619 00 RTN [3195] * COMMOD - Compute FAC module FAC2 [3196] 961A AC,4A,4C COMMOD DIV @FAC2,@FAC Compute remainder [3197] 961D 8E,4B CZ @FAC1 Avoid zero remainders [3198] 961F 56,24 BR G9624 [3199] 9621 BC,4B,4C ST @FAC2,@FAC1 Assume maximum remainder [3200] 9624 86,4A G9624 CLR @FAC Clear upper byte [3201] 9626 00 RTN [3202] * TSTSEP tests for separator in print and branches to the [3203] * correct evaluation routine. [3204] * If no separator is found, simple return. [3205] * Test case end of line [3206] 9627 06,95,AD TSTSEP CALL CHKEND [3207] 962A 56,31 BR TSTSZ0 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0057 FLMGR-359 [3208] 962C BF,90,73 DST EOLEX,*SUBSTK Replace return address with E 962F 83,95 [3209] 9631 CA,42,B3 TSTSZ0 CHE COMMAZ,@CHAT [3210] 9634 56,59 BR TSTSZ1 [3211] 9636 C6,42,B5 CH COLONZ,@CHAT [3212] 9639 76,59 BS TSTSZ1 [3213] 963B BF,90,73 DST PRSEM,*SUBSTK Expect it to be a ";" 963E 83,7A [3214] 9640 06,83,C5 CALL TSTINT Test for INTERNAL files [3215] 9643 56,59 BR TSTSZ1 Treat all separators as ";" [3216] 9645 D6,42,B3 CEQ COMMAZ,@CHAT [3217] 9648 56,4F BR G964F [3218] 964A BF,90,73 DST PRTCOM,*SUBSTK 964D 83,5C [3219] 964F D6,42,B5 G964F CEQ COLONZ,@CHAT [3220] 9652 56,59 BR TSTSZ1 [3221] 9654 BF,90,73 DST PRCOL,*SUBSTK 9657 83,77 [3222] 9659 00 TSTSZ1 RTN [3223] * PARFN - Parse string expression and create PAB automatica [3224] * continue in CSTRIN for copy string to PAB [3225] * Exit on non-string values [3226] * [3227] * First evaluate string expression [3228] 965A 0F,74 PARFN XML PARSE Parse up to next comma <<< [3229] 965C B3 BYTE COMMAZ * <<< [3230] 965D D6,4C,65 CEQ STRVAL,@FAC2 Check for "STRING" <<< [3231] 9660 57,BF BR ERRSNM [3232] 9662 BD,02,50 DST @FAC6,@MNUM Copy length byte in MNUM [3233] 9665 A2,03,0E ADD PABLEN,@MNUM+1 Account for PAB length+contro [3234] 9668 0F,77 XML VPUSH Save start of string somewher [3235] 966A BD,4A,02 DST @MNUM,@FAC Setup for MEMCHK - check for [3236] 966D 0F,72 XML MEMCHK memory overflow [3237] 966F 77,C7 BS ERRMEM * MEMORY FULL [3238] 9671 0F,78 XML VPOP Restore all FAC information a [3239] 9673 A5,40,02 DSUB @MNUM,@FREPTR Update free word pointer [3240] 9676 BD,04,40 DST @FREPTR,@PABPTR Assign PAB entry address [3241] 9679 91,04 DINC @PABPTR Correct for byte within PAB [3242] 967B 86,B0,04 CLR V*PABPTR Clear PAB plus control info [3243] 967E 35,00,0D MOVE PABLEN-1,V*PABPTR,V@1(@PABPTR) Ripple byte 9681 E0,01,04 9684 B0,04 [3244] 9686 BC,E0,03 ST @MNUM+1,V@OFS(@PABPTR) Save length of PAB 9689 04,03 [3245] 968B BC,02,51 ST @FAC7,@MNUM Compute # of bytes in name [3246] 968E BC,E0,0D ST @FAC7,V@NLEN(@PABPTR) Store name length 9691 04,51 [3247] 9693 BC,E0,02 ST @FNUM,V@FIL(@PABPTR) Copy file number in PAB 9696 04,17 [3248] 9698 BD,08,04 DST @PABPTR,@CCPADR Get start addr for string des [3249] 969B A3,08,00 DADD NLEN+1,@CCPADR Add offset to actual start ad 969E 0E [3250] * TRICKY - OPTFLG also results offset added in CSTRIN [3251] 969F 86,17 CLR @OPTFLG Clear all option flags [3252] 96A1 0F,84 XML IO CSTRIN I/O UTILITY [3253] 96A3 02 BYTE CSTRIN [3254] 96A4 00 RTN [3255] *********************************************************** [3256] * OUTREC [3257] * OUTREC and INITRC are used to output a record to either [3258] * screen or external I/O devices, and to initiate pointers [3259] * for further I/O. [3260] *********************************************************** [3261] 96A5 BC,03,07 OUTREC ST @RECLEN,@MNUM+1 Compute number of characters 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0058 FLMGR-359 [3262] 96A8 90,03 INC @MNUM+1 positions we should fill [3263] 96AA 8E,17 CZ @DSRFLG Screen I/O [3264] 96AC 76,D3 BS G96D3 [3265] 96AE 0F,84 XML IO Fill the remainder of the rec [3266] 96B0 01 BYTE FILSPC * with appropriate fillers [3267] 96B1 DA,04,08 CLOG 8,@PABPTR block output on size [3268] 96B4 53,8C BR RTC [3269] 96B6 DA,04,04 CLOG 4,@PABPTR "AT CLAUSE USED" [3270] 96B9 76,CC BS SCRO [3271] * Next test for xing the end of screen [3272] 96BB A3,08,00 DADD 4,@CCPADR 96BE 04 [3273] 96BF CA,08,03 CHE 3,@CCPADR [3274] 96C2 56,C8 BR INITZ1 [3275] 96C4 BF,08,00 DST 2,@CCPADR Restart at upper left hand 96C7 02 [3276] * corner of screen [3277] 96C8 BE,06,01 INITZ1 ST 1,@CCPPTR Reset current column pointer [3278] 96CB 00 RTN [3279] 96CC 0F,83 SCRO XML SCROLL Scroll the screen one line [3280] 96CE BE,06,01 ST 1,@CCPPTR Reinitialize CCPPTR [3281] 96D1 57,54 BR INTKB0 and reinitialize [3282] * This is also entry for last record output [3283] 96D3 DA,E0,05 G96D3 CLOG >10,V@FLG(@PABPTR) FIXED records 96D6 04,10 [3284] 96D8 56,E2 BR G96E2 [3285] 96DA BC,03,07 ST @RECLEN,@MNUM+1 Ready for space filling [3286] 96DD 90,03 INC @MNUM+1 Move to first position outsid [3287] * record [3288] 96DF 0F,84 XML IO And do it up to end of record [3289] 96E1 01 BYTE FILSPC [3290] 96E2 92,06 G96E2 DEC @CCPPTR Update last character positio [3291] 96E4 BC,E0,09 ST @CCPPTR,V@CNT(@PABPTR) Store # of characters 96E7 04,06 [3292] 96E9 86,E0,03 CLR V@OFS(@PABPTR) Undo pending record offsets 96EC 04 [3293] 96ED 06,97,5E CALL IOCALL Call DSR [3294] 96F0 03 BYTE CZWRIT * for WRITE mode [3295] 96F1 86,09 CLR @CCPADR+1 Get address at buffer start [3296] 96F3 57,01 BR PRZZ0 [3297] * PRINIT initializes the variable CCPADR, CCPPTR, RECLEN an [3298] * DSRFLG, for a given PABPTR. [3299] 96F5 86,17 PRINIT CLR @DSRFLG Indicate external I/O in DSRF [3300] 96F7 BC,07,E0 ST V@LEN(@PABPTR),@RECLEN Pick up record length 96FA 08,04 [3301] 96FC BC,09,E0 ST V@OFS(@PABPTR),@CCPADR+1 Get offset in record 96FF 03,04 [3302] 9701 BC,06,09 PRZZ0 ST @CCPADR+1,@CCPPTR Compute columnar position [3303] 9704 90,06 INC @CCPPTR And convert from offset [3304] 9706 86,08 CLR @CCPADR Clear upper byte [3305] 9708 A1,08,E0 DADD V@BUF(@PABPTR),@CCPADR Compute actual address 970B 06,04 [3306] 970D 00 RTN [3307] *********************************************************** [3308] * OSTRNG - Copy the value of the string expression to the [3309] * screen. [3310] *********************************************************** [3311] 970E BC,0C,51 OSTRNG ST @FAC7,@BYTES Pick up the string length [3312] 9711 8E,0C G9711 CZ @BYTES Output as many records as req [3313] 9713 77,3E BS G973E [3314] * CHKREC check available space in current record. [3315] * If the string to be output is too long, it is chuncked up [3316] * into digestable pieces. If the current record is partly [3317] * filled up, it is output before any chuncking is done. 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0059 FLMGR-359 [3318] 9715 BC,03,06 CHKREC ST @CCPPTR,@MNUM+1 Use MNUM for current offset i [3319] 9718 BC,02,07 CHKRZ0 ST @RECLEN,@MNUM Compute remaining area [3320] 971B A4,02,06 SUB @CCPPTR,@MNUM between column and end [3321] 971E 90,02 INC @MNUM Also count current column [3322] 9720 C8,02,0C CHE @BYTES,@MNUM Won't fit in current record [3323] 9723 77,30 BS G9730 [3324] 9725 D6,03,01 CEQ 1,@MNUM+1 Unused record [3325] 9728 77,33 BS CHKRZ1 [3326] 972A 06,96,A5 CALL OUTREC Output whatever we have [3327] 972D 57,15 BR CHKREC And try again [3328] 972F 00 RTN [3329] 9730 BC,02,0C G9730 ST @BYTES,@MNUM Use actual count if fit [3330] 9733 A4,0C,02 CHKRZ1 SUB @MNUM,@BYTES Update remaining chars count [3331] 9736 A0,06,02 ADD @MNUM,@CCPPTR Also new column pointer [3332] 9739 0F,84 XML IO Copy string to output [3333] 973B 02 BYTE CSTRIN [3334] 973C 57,11 BR G9711 Continue as long as needed [3335] 973E 00 G973E RTN [3336] *********************************************************** [3337] * INITKB - Initialize the variable needed for keyboard outp [3338] *********************************************************** [3339] 973F 86,04 INITKB CLR @PABPTR Don't use any DISPLAY options [3340] 9741 BE,17,60 ST OFFSET,@DSRFLG Load for correction of screen [3341] 9744 BE,06,01 ST 1,@CCPPTR Assume un-initialized XPT [3342] 9747 C6,7F,02 CH 2,@XPT * Patch for un-initialized XP [3343] 974A 57,51 BR G9751 [3344] 974C BC,06,7F ST @XPT,@CCPPTR Initialize CCPPTR [3345] 974F 96,06 DECT @CCPPTR Correct for incorrect XPT off [3346] 9751 BE,07,1C G9751 ST VWIDTH,@RECLEN Get video screen width [3347] 9754 BC,09,06 INTKB0 ST @CCPPTR,@CCPADR+1 Initialize screen address [3348] 9757 86,08 CLR @CCPADR Clear upper byte CCPADR [3349] 9759 A3,08,02 DADD SCRNBS+1,@CCPADR Add start-addr plus comenstat 975C E1 [3350] 975D 00 RTN [3351] 975E 88,56 IOCALL FETCH @FAC12 I/O code to FAC12 (BUG!!!) [3352] 9760 BC,E0,04 ST @FAC12,V@COD(@PABPTR) Pick up the I/O code 9763 04,56 [3353] 9765 06,97,6B IOCLZ1 CALL CDSR Call the DSR routine [3354] 9768 57,97 BR ERRZ2 Give I/O error on error [3355] 976A 00 RTN Or else return [3356] * DSR CALL ROUTINE - NORMAL ENTRY [3357] 976B BE,E0,0C CDSR ST OFFSET,V@SCR(@PABPTR) Always set screen offse 976E 04,60 [3358] 9770 35,00,1E MOVE 30,@FAC,V@>03C0 Save FAC area 9773 A3,C0,4A [3359] 9776 BD,56,04 DST @PABPTR,@FAC12 Get PAB pointer in FAC [3360] 9779 A3,56,00 DADD NLEN,@FAC12 Get PAB pointer in FAC 977C 0D [3361] 977D B2,E0,05 AND >1F,V@FLG(@PABPTR) Clear error bits for ON ERRO 9780 04,1F [3362] * time, I/O process can still be [3363] * continued [3364] 9782 06,00,10 CALL CALDSR Call actual DSR link routine [3365] 9785 08 BYTE 8 [3366] 9786 35,00,1E MOVE 30,V@>03C0,@FAC 9789 4A,A3,C0 [3367] * MOVE does not affect status [3368] 978C 77,93 BS CDSRZ0 ERROR = ERROR = ERROR [3369] 978E DA,E0,05 CLOG >E0,V@FLG(@PABPTR) Set COND if no error 9791 04,E0 [3370] 9793 01 CDSRZ0 RTNC [3371] * ERROR MESSAGES [3372] 9794 06,80,FB ERRZ2B CALL CLRFRE Undo allocation of PAB [3373] * First check is it error coming from AUTOLD 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0060 FLMGR-359 [3374] * If it is then do not print the error messege and [3375] * go back to TOPL02 [3376] 9797 31,00,02 ERRZ2 MOVE 2,G@TOPL02,V@AUTTMP 979A A3,94,60 979D 30 [3377] 979E D5,80,8A DCEQ V@AUTTMP,@RSTK+2 97A1 A3,94 [3378] 97A3 57,A9 BR G97A9 [3379] 97A5 BE,73,8A ST RSTK+2,@SUBSTK [3380] 97A8 00 RTN [3381] *********************************************************** [3382] * Next code is to avoid recursion of errors in CLSALL [3383] * routine. If this entry is taken from CLSALL, the stack [3384] * will contain CLSLBL as a retrun address in the third leve [3385] *********************************************************** [3386] 97A9 A6,73,04 G97A9 SUB 4,@SUBSTK [3387] 97AC D7,90,73 DCEQ CLSLBL,*SUBSTK 97AF 81,E9 [3388] 97B1 57,B8 BR G97B8 [3389] 97B3 06,6A,82 WRNIO CALL WARNZZ Give warning to the user [3390] 97B6 23 BYTE 35 * I/O ERROR but warning [3391] 97B7 00 RTN And return to close routine [3392] 97B8 A2,73,04 G97B8 ADD 4,@SUBSTK Back up two levels for OLD/SA [3393] 97BB 06,6A,84 ERRIO CALL ERRZZ [3394] 97BE 24 BYTE 36 * I/O ERROR [3395] * ERROR messages called in this file [3396] 97BF 06,6A,84 ERRSNM CALL ERRZZ [3397] 97C2 07 BYTE 7 * STRING-NUMBER MISMATCH [3398] 97C3 06,6A,84 ERRIM CALL ERRZZ [3399] 97C6 0A BYTE 10 * IMAGE ERROR [3400] 97C7 06,6A,84 ERRMEM CALL ERRZZ [3401] 97CA 0B BYTE 11 * MEMORY FULL [3402] 97CB 06,6A,84 ERRBV CALL ERRZZ [3403] 97CE 1E BYTE 30 * BAD VALUE [3404] 97CF 06,6A,84 ERRINP CALL ERRZZ [3405] 97D2 20 BYTE 32 * INPUT ERROR [3406] 97D3 06,6A,84 ERRDAT CALL ERRZZ [3407] 97D6 21 BYTE 33 * DATA ERROR [3408] 97D7 06,6A,84 ERRFE CALL ERRZZ [3409] 97DA 22 BYTE 34 * FILE ERROR [3410] 97DB 06,6A,84 ERRPV CALL ERRZZ [3411] 97DE 27 BYTE 39 * PROTECTION VIOLATION [3412] 97DF 06,6A,84 ERRMUV CALL ERRZZ [3413] 97E2 09 BYTE 9 * IMPROPERLY USED NAME [3414] * Other errors called in file [3415] * ERRSYN * SYNTAX ERROR BYTE 3 [3416] * ERRST * STRING TRUNCATED ERROR BYTE 19 [3417] * WRNNPP * NO PROGRAM PRESENT BYTE 29 [3418] * WRNINP * INPUT ERROR (WARNING) BYTE 32 [3419] * ERRIO * I/O ERROR BYTE 36 [3420] * WRNIO * I/O ERROR (WARNING) BYTE 36 [3421] * WRNSNM * STRING NO. MISMATCH (WARNING) BYTE 7 [3422] *********************************************************** [3423] * The following section has been added to fix bugs in INPUT [3424] * ACCEPT, and LINPUT statements. [3425] *********************************************************** [3426] 97E3 CA,42,80 BUG01 CHE >80,@CHAT Make sure of variable name [3427] 97E6 61,09 BS ERRSYN [3428] 97E8 0F,7A XML SYM Get the information of the [3429] 97EA 0F,7B XML SMB variable. [3430] 97EC 00 RTN [3431] *********************************************************** [3432] * GKXB CODE HERE [3433] 97ED BC,4C,42 GTLENG ST @CHAT,@FAC+2 Moved from LIST routine 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0061 FLMGR-359 [3434] 97F0 BC,E0,08 ST @XSTLN,V@8(@PABPTR) Store length 97F3 04,64 [3435] 97F5 00 RTN and return [3436] *********************************************************** [3437] COPY 'DSK5.MYXB4-B' <0001> <0002> *********************************************************** <0003> AORG >1800 <0004> <0005> *********************************************************** <0006> 9800 20,5A,24 ALCEND DATA >205A,>24F4,>4000,>AA55 9803 F4,40,00 9806 AA,55 <0007> 9808 20,38,20 DATA >2038,>2096,>2038,>217E 980B 96,20,38 980E 21,7E <0008> 9810 20,38,21 DATA >2038,>21E2,>2038,>234C 9813 E2,20,38 9816 23,4C <0009> 9818 20,38,24 DATA >2038,>2432,>2038,>246E 981B 32,20,38 981E 24,6E <0010> 9820 20,38,24 DATA >2038,>2484,>2038,>2490 9823 84,20,38 9826 24,90 <0011> 9828 20,38,24 DATA >2038,>249E,>2038,>24AA 982B 9E,20,38 982E 24,AA <0012> 9830 20,38,24 DATA >2038,>24B8,>2038,>2090 9833 B8,20,38 9836 20,90 <0013> 9838 00,00,00 DATA >0000,>0000,>0000,>0000 983B 00,00,00 983E 00,00 <0014> 9840 00,00,00 DATA >0000,>0000,>0000,>0000 9843 00,00,00 9846 00,00 <0015> 9848 00,00,00 DATA >0000,>0000,>0000,>0000 984B 00,00,00 984E 00,00 <0016> 9850 00,00,00 DATA >0000,>0000,>0000,>0000 9853 00,00,00 9856 00,00 <0017> 9858 65,20,C0 DATA >6520,>C060,>2004,>0281 985B 60,20,04 985E 02,81 <0018> 9860 40,00,13 DATA >4000,>130E,>C001,>0202 9863 0E,C0,01 9866 02,02 <0019> 9868 83,4A,8C DATA >834A,>8CB0,>1606,>8CB0 986B B0,16,06 986E 8C,B0 <0020> 9870 16,04,8C DATA >1604,>8CB0,>1602,>C030 9873 B0,16,02 9876 C0,30 <0021> 9878 04,50,02 DATA >0450,>0221,>0008,>10EF 987B 21,00,08 987E 10,EF <0022> 9880 02,00,25 DATA >0200,>2500,>C800,>8322 9883 00,C8,00 9886 83,22 <0023> 9888 02,E0,83 DATA >02E0,>83E0,>0460,>00CE 988B E0,04,60 988E 00,CE 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0062 FLMGR-359 <0024> 9890 C8,1D,83 DATA >C81D,>8322,>10F9,>C01D 9893 22,10,F9 9896 C0,1D <0025> 9898 C0,6D,00 DATA >C06D,>0002,>06A0,>20DC 989B 02,06,A0 989E 20,DC <0026> 98A0 C0,C1,06 DATA >C0C1,>0603,>0223,>8300 98A3 03,02,23 98A6 83,00 <0027> 98A8 D0,D3,13 DATA >D0D3,>1361,>0983,>0643 98AB 61,09,83 98AE 06,43 <0028> 98B0 16,12,C0 DATA >1612,>C000,>165C,>C0C5 98B3 00,16,5C 98B6 C0,C5 <0029> 98B8 05,C3,06 DATA >05C3,>06A0,>2406,>1653 98BB A0,24,06 98BE 16,53 <0030> 98C0 05,C3,06 DATA >05C3,>06A0,>23CA,>0204 98C3 A0,23,CA 98C6 02,04 <0031> 98C8 83,4A,02 DATA >834A,>0202,>0008,>DC74 98CB 02,00,08 98CE DC,74 <0032> 98D0 06,02,15 DATA >0602,>15FD,>0380,>06A0 98D3 FD,03,80 98D6 06,A0 <0033> 98D8 20,F8,10 DATA >20F8,>10F5,>C041,>1347 98DB F5,C0,41 98DE 13,47 <0034> 98E0 0A,81,90 DATA >0A81,>9060,>8312,>1143 98E3 60,83,12 98E6 11,43 <0035> 98E8 09,81,C1 DATA >0981,>C141,>0A35,>0225 98EB 41,0A,35 98EE 02,25 <0036> 98F0 00,08,A1 DATA >0008,>A160,>8310,>045B 98F3 60,83,10 98F6 04,5B <0037> 98F8 C2,4B,06 DATA >C24B,>0643,>1634,>C0C5 98FB 43,16,34 98FE C0,C5 <0038> 9900 06,A0,23 DATA >06A0,>23CA,>C0C1,>06A0 9903 CA,C0,C1 9906 06,A0 <0039> 9908 24,06,11 DATA >2406,>112D,>06A0,>211C 990B 2D,06,A0 990E 21,1C <0040> 9910 06,A0,23 DATA >06A0,>23CA,>6004,>0A30 9913 CA,60,04 9916 0A,30 <0041> 9918 A0,40,04 DATA >A040,>0459,>C28B,>0A51 991B 59,C2,8B 991E 0A,51 <0042> 9920 09,D1,C2 DATA >09D1,>C201,>D120,>8343 9923 01,D1,20 9926 83,43 <0043> 9928 09,84,13 DATA >0984,>1303,>0600,>1123 992B 03,06,00 992E 11,23 <0044> 9930 05,80,02 DATA >0580,>0206,>0001,>C0C5 9933 06,00,01 9936 C0,C5 <0045> 9938 02,23,00 DATA >0223,>0004,>06A0,>23CA 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0063 FLMGR-359 993B 04,06,A0 993E 23,CA <0046> 9940 C0,C1,06 DATA >C0C1,>0643,>05C3,>06A0 9943 43,05,C3 9946 06,A0 <0047> 9948 23,CA,05 DATA >23CA,>0581,>6044,>3981 994B 81,60,44 994E 39,81 <0048> 9950 C1,86,16 DATA >C186,>1611,>C187,>0608 9953 11,C1,87 9956 06,08 <0049> 9958 15,F5,06 DATA >15F5,>0606,>A184,>8180 995B 06,A1,84 995E 81,80 <0050> 9960 15,0A,05 DATA >150A,>05C3,>045A,>0200 9963 C3,04,5A 9966 02,00 <0051> 9968 07,00,04 DATA >0700,>0460,>2084,>0200 996B 60,20,84 996E 02,00 <0052> 9970 1C,00,04 DATA >1C00,>0460,>2084,>0200 9973 60,20,84 9976 02,00 <0053> 9978 14,00,04 DATA >1400,>0460,>2084,>C01D 997B 60,20,84 997E C0,1D <0054> 9980 C0,6D,00 DATA >C06D,>0002,>06A0,>20DC 9983 02,06,A0 9986 20,DC <0055> 9988 C0,C1,06 DATA >C0C1,>0603,>0223,>8300 998B 03,02,23 998E 83,00 <0056> 9990 D0,D3,09 DATA >D0D3,>0983,>160E,>C000 9993 83,16,0E 9996 C0,00 <0057> 9998 16,22,02 DATA >1622,>0202,>0008,>0204 999B 02,00,08 999E 02,04 <0058> 99A0 83,4A,C0 DATA >834A,>C0C5,>06A0,>23CA 99A3 C5,06,A0 99A6 23,CA <0059> 99A8 CD,01,05 DATA >CD01,>05C3,>0642,>15FA 99AB C3,06,42 99AE 15,FA <0060> 99B0 03,80,06 DATA >0380,>0643,>160F,>C000 99B3 43,16,0F 99B6 C0,00 <0061> 99B8 16,12,C0 DATA >1612,>C0C5,>05C3,>06A0 99BB C5,05,C3 99BE 06,A0 <0062> 99C0 24,06,16 DATA >2406,>160B,>05C3,>06A0 99C3 0B,05,C3 99C6 06,A0 <0063> 99C8 23,CA,C1 DATA >23CA,>C101,>0201,>834A 99CB 01,02,01 99CE 83,4A <0064> 99D0 04,60,20 DATA >0460,>20CA,>06A0,>20F8 99D3 CA,06,A0 99D6 20,F8 <0065> 99D8 10,F8,04 DATA >10F8,>0460,>2166,>0460 99DB 60,21,66 99DE 04,60 <0066> 99E0 21,6E,C8 DATA >216E,>C81D,>2038,>C82D 99E3 1D,20,38 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0064 FLMGR-359 99E6 C8,2D <0067> 99E8 00,02,83 DATA >0002,>83E2,>C82D,>0004 99EB E2,C8,2D 99EE 00,04 <0068> 99F0 20,44,02 DATA >2044,>02E0,>83E0,>C80B 99F3 E0,83,E0 99F6 C8,0B <0069> 99F8 20,40,C0 DATA >2040,>C020,>2044,>06A0 99FB 20,20,44 99FE 06,A0 <0070> 9A00 20,DC,C0 DATA >20DC,>C0C1,>0603,>0223 9A03 C1,06,03 9A06 02,23 <0071> 9A08 83,00,D0 DATA >8300,>D0D3,>0983,>0603 9A0B D3,09,83 9A0E 06,03 <0072> 9A10 13,32,06 DATA >1332,>0643,>164A,>C2A0 9A13 43,16,4A 9A16 C2,A0 <0073> 9A18 20,38,16 DATA >2038,>162D,>C0C5,>05C3 9A1B 2D,C0,C5 9A1E 05,C3 <0074> 9A20 06,A0,24 DATA >06A0,>2406,>9801,>2058 9A23 06,98,01 9A26 20,58 <0075> 9A28 16,20,02 DATA >1620,>0206,>0008,>0204 9A2B 06,00,08 9A2E 02,04 <0076> 9A30 83,4A,C0 DATA >834A,>C0C5,>06A0,>23CA 9A33 C5,06,A0 9A36 23,CA <0077> 9A38 CD,01,05 DATA >CD01,>05C3,>0646,>15FA 9A3B C3,06,46 9A3E 15,FA <0078> 9A40 06,A0,22 DATA >06A0,>22DA,>0225,>0004 9A43 DA,02,25 9A46 00,04 <0079> 9A48 C1,05,C0 DATA >C105,>C046,>06A0,>23E6 9A4B 46,06,A0 9A4E 23,E6 <0080> 9A50 05,C4,D0 DATA >05C4,>D050,>0981,>06A0 9A53 50,09,81 9A56 06,A0 <0081> 9A58 23,E6,C2 DATA >23E6,>C2E0,>2040,>C820 9A5B E0,20,40 9A5E C8,20 <0082> 9A60 20,3E,83 DATA >203E,>830C,>02E0,>2038 9A63 0C,02,E0 9A66 20,38 <0083> 9A68 03,80,02 DATA >0380,>0200,>0700,>C2E0 9A6B 00,07,00 9A6E C2,E0 <0084> 9A70 20,40,04 DATA >2040,>0460,>2084,>0200 9A73 60,20,84 9A76 02,00 <0085> 9A78 1C,00,04 DATA >1C00,>0460,>226E,>C08B 9A7B 60,22,6E 9A7E C0,8B <0086> 9A80 06,43,16 DATA >0643,>16F3,>C0C5,>06A0 9A83 F3,C0,C5 9A86 06,A0 <0087> 9A88 23,CA,C0 DATA >23CA,>C0C1,>06A0,>2406 9A8B C1,06,A0 9A8E 24,06 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0065 FLMGR-359 <0088> 9A90 11,02,04 DATA >1102,>0460,>226A,>C020 9A93 60,22,6A 9A96 C0,20 <0089> 9A98 20,38,06 DATA >2038,>06A0,>211C,>6004 9A9B A0,21,1C 9A9E 60,04 <0090> 9AA0 0A,10,A0 DATA >0A10,>A0C0,>06A0,>23CA 9AA3 C0,06,A0 9AA6 23,CA <0091> 9AA8 04,52,06 DATA >0452,>06A0,>227E,>0206 9AAB A0,22,7E 9AAE 02,06 <0092> 9AB0 83,4A,CD DATA >834A,>CD83,>DDA0,>2058 9AB3 83,DD,A0 9AB6 20,58 <0093> 9AB8 DD,84,CD DATA >DD84,>CD81,>C0C1,>1602 9ABB 81,C0,C1 9ABE 16,02 <0094> 9AC0 04,D6,10 DATA >04D6,>1005,>0603,>06A0 9AC3 05,06,03 9AC6 06,A0 <0095> 9AC8 24,06,09 DATA >2406,>0981,>C581,>C020 9ACB 81,C5,81 9ACE C0,20 <0096> 9AD0 20,44,06 DATA >2044,>06A0,>22DA,>0460 9AD3 A0,22,DA 9AD6 04,60 <0097> 9AD8 22,5A,C8 DATA >225A,>C80B,>203A,>C805 9ADB 0B,20,3A 9ADE C8,05 <0098> 9AE0 20,3C,C2 DATA >203C,>C2E0,>601E,>069B 9AE3 E0,60,1E 9AE6 06,9B <0099> 9AE8 C0,20,20 DATA >C020,>2044,>C160,>203C 9AEB 44,C1,60 9AEE 20,3C <0100> 9AF0 D1,90,09 DATA >D190,>0986,>C820,>830C 9AF3 86,C8,20 9AF6 83,0C <0101> 9AF8 20,3E,C8 DATA >203E,>C806,>830C,>C806 9AFB 06,83,0C 9AFE C8,06 <0102> 9B00 83,50,C2 DATA >8350,>C2E0,>6012,>069B 9B03 E0,60,12 9B06 06,9B <0103> 9B08 C0,20,20 DATA >C020,>2044,>0206,>834A 9B0B 44,02,06 9B0E 83,4A <0104> 9B10 02,04,00 DATA >0204,>001C,>CD84,>DDA0 9B13 1C,CD,84 9B16 DD,A0 <0105> 9B18 20,58,DD DATA >2058,>DD84,>C5A0,>831C 9B1B 84,C5,A0 9B1E 83,1C <0106> 9B20 C0,A0,83 DATA >C0A0,>830C,>1309,>C116 9B23 0C,13,09 9B26 C1,16 <0107> 9B28 C0,C0,05 DATA >C0C0,>0583,>D073,>06A0 9B2B 83,D0,73 9B2E 06,A0 <0108> 9B30 24,1A,05 DATA >241A,>0584,>0602,>15FA 9B33 84,06,02 9B36 15,FA <0109> 9B38 C2,E0,60 DATA >C2E0,>6028,>069B,>C020 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0066 FLMGR-359 9B3B 28,06,9B 9B3E C0,20 <0110> 9B40 20,44,C1 DATA >2044,>C160,>203C,>C2E0 9B43 60,20,3C 9B46 C2,E0 <0111> 9B48 20,3A,04 DATA >203A,>045B,>C01D,>C06D 9B4B 5B,C0,1D 9B4E C0,6D <0112> 9B50 00,02,06 DATA >0002,>06A0,>20DC,>C0C1 9B53 A0,20,DC 9B56 C0,C1 <0113> 9B58 06,03,02 DATA >0603,>0223,>8300,>D0D3 9B5B 23,83,00 9B5E D0,D3 <0114> 9B60 09,83,06 DATA >0983,>0603,>1302,>0643 9B63 03,13,02 9B66 06,43 <0115> 9B68 16,23,C0 DATA >1623,>C000,>1628,>C02D 9B6B 00,16,28 9B6E C0,2D <0116> 9B70 00,04,C0 DATA >0004,>C0C5,>05C3,>06A0 9B73 C5,05,C3 9B76 06,A0 <0117> 9B78 24,06,98 DATA >2406,>9801,>2058,>161D 9B7B 01,20,58 9B7E 16,1D <0118> 9B80 05,C3,06 DATA >05C3,>06A0,>23CA,>C041 9B83 A0,23,CA 9B86 C0,41 <0119> 9B88 13,07,C1 DATA >1307,>C181,>0601,>C0C1 9B8B 81,06,01 9B8E C0,C1 <0120> 9B90 06,A0,24 DATA >06A0,>2406,>9050,>1A15 9B93 06,90,50 9B96 1A,15 <0121> 9B98 DC,01,13 DATA >DC01,>1309,>C0C6,>0981 9B9B 09,C0,C6 9B9E 09,81 <0122> 9BA0 C1,41,06 DATA >C141,>06A0,>2406,>DC01 9BA3 A0,24,06 9BA6 DC,01 <0123> 9BA8 05,83,06 DATA >0583,>0605,>15FA,>0380 9BAB 05,15,FA 9BAE 03,80 <0124> 9BB0 06,A0,22 DATA >06A0,>227E,>C02D,>0004 9BB3 7E,C0,2D 9BB6 00,04 <0125> 9BB8 10,E6,04 DATA >10E6,>0460,>2166,>0460 9BBB 60,21,66 9BBE 04,60 <0126> 9BC0 21,6E,02 DATA >216E,>0200,>1300,>0460 9BC3 00,13,00 9BC6 04,60 <0127> 9BC8 20,84,06 DATA >2084,>06C3,>D803,>8C02 9BCB C3,D8,03 9BCE 8C,02 <0128> 9BD0 06,C3,D8 DATA >06C3,>D803,>8C02,>1000 9BD3 03,8C,02 9BD6 10,00 <0129> 9BD8 D0,60,88 DATA >D060,>8800,>06C1,>D060 9BDB 00,06,C1 9BDE D0,60 <0130> 9BE0 88,00,06 DATA >8800,>06C1,>045B,>06C4 9BE3 C1,04,5B 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0067 FLMGR-359 9BE6 06,C4 <0131> 9BE8 D8,04,8C DATA >D804,>8C02,>06C4,>0264 9BEB 02,06,C4 9BEE 02,64 <0132> 9BF0 40,00,D8 DATA >4000,>D804,>8C02,>1000 9BF3 04,8C,02 9BF6 10,00 <0133> 9BF8 D8,01,8C DATA >D801,>8C00,>06C1,>D801 9BFB 00,06,C1 9BFE D8,01 <0134> 9C00 8C,00,06 DATA >8C00,>06C1,>045B,>06C3 9C03 C1,04,5B 9C06 06,C3 <0135> 9C08 D8,03,8C DATA >D803,>8C02,>06C3,>D803 9C0B 02,06,C3 9C0E D8,03 <0136> 9C10 8C,02,10 DATA >8C02,>1000,>D060,>8800 9C13 00,D0,60 9C16 88,00 <0137> 9C18 04,5B,06 DATA >045B,>06C4,>D804,>8C02 9C1B C4,D8,04 9C1E 8C,02 <0138> 9C20 06,C4,02 DATA >06C4,>0264,>4000,>D804 9C23 64,40,00 9C26 D8,04 <0139> 9C28 8C,02,10 DATA >8C02,>1000,>D801,>8C00 9C2B 00,D8,01 9C2E 8C,00 <0140> 9C30 04,5B,C8 DATA >045B,>C83E,>83E2,>02E0 9C33 3E,83,E2 9C36 02,E0 <0141> 9C38 83,E0,C8 DATA >83E0,>C80B,>204E,>C081 9C3B 0B,20,4E 9C3E C0,81 <0142> 9C40 02,81,00 DATA >0281,>0040,>1B0A,>C0A1 9C43 40,1B,0A 9C46 C0,A1 <0143> 9C48 60,10,02 DATA >6010,>0281,>0004,>1605 9C4B 81,00,04 9C4E 16,05 <0144> 9C50 C0,A2,00 DATA >C0A2,>0002,>0692,>2466 9C53 02,06,92 9C56 24,66 <0145> 9C58 10,01,06 DATA >1001,>0692,>02E0,>2038 9C5B 92,02,E0 9C5E 20,38 <0146> 9C60 C8,0B,83 DATA >C80B,>83F6,>0380,>0200 9C63 F6,03,80 9C66 02,00 <0147> 9C68 0B,00,04 DATA >0B00,>0460,>2084,>02E0 9C6B 60,20,84 9C6E 02,E0 <0148> 9C70 83,E0,C8 DATA >83E0,>C80B,>204E,>06A0 9C73 0B,20,4E 9C76 06,A0 <0149> 9C78 00,0E,02 DATA >000E,>02E0,>2038,>C80B 9C7B E0,20,38 9C7E C8,0B <0150> 9C80 83,F6,03 DATA >83F6,>0380,>06A0,>24CA 9C83 80,06,A0 9C86 24,CA <0151> 9C88 D8,2D,00 DATA >D82D,>0002,>8C00,>0380 9C8B 02,8C,00 9C8E 03,80 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0068 FLMGR-359 <0152> 9C90 06,A0,24 DATA >06A0,>24CA,>D831,>8C00 9C93 CA,D8,31 9C96 8C,00 <0153> 9C98 06,02,16 DATA >0602,>16FC,>0380,>06A0 9C9B FC,03,80 9C9E 06,A0 <0154> 9CA0 24,D0,DB DATA >24D0,>DB60,>8800,>0002 9CA3 60,88,00 9CA6 00,02 <0155> 9CA8 03,80,06 DATA >0380,>06A0,>24D0,>DC60 9CAB A0,24,D0 9CAE DC,60 <0156> 9CB0 88,00,06 DATA >8800,>0602,>16FC,>0380 9CB3 02,16,FC 9CB6 03,80 <0157> 9CB8 C0,5D,D8 DATA >C05D,>D82D,>0001,>8C02 9CBB 2D,00,01 9CBE 8C,02 <0158> 9CC0 02,61,80 DATA >0261,>8000,>D801,>8C02 9CC3 00,D8,01 9CC6 8C,02 <0159> 9CC8 03,80,02 DATA >0380,>0201,>4000,>1001 9CCB 01,40,00 9CCE 10,01 <0160> 9CD0 04,C1,C0 DATA >04C1,>C09D,>D820,>203D 9CD3 9D,D8,20 9CD6 20,3D <0161> 9CD8 8C,02,E0 DATA >8C02,>E081,>D802,>8C02 9CDB 81,D8,02 9CDE 8C,02 <0162> 9CE0 C0,6D,00 DATA >C06D,>0002,>C0AD,>0004 9CE3 02,C0,AD 9CE6 00,04 <0163> 9CE8 04,5B DATA >045B <0164> *********************************************************** <0165> 9CEA 00,00,00 CHARS BYTE >00,>00,>00,>00,>00,>00,>00 * 32 9CED 00,00,00 9CF0 00 <0166> 9CF1 20,20,20 BYTE >20,>20,>20,>20,>20,>00,>20 * 33 9CF4 20,20,00 9CF7 20 <0167> 9CF8 50,50,50 BYTE >50,>50,>50,>00,>00,>00,>00 * 34 9CFB 00,00,00 9CFE 00 <0168> 9CFF 50,50,F8 BYTE >50,>50,>F8,>50,>F8,>50,>50 * 35 9D02 50,F8,50 9D05 50 <0169> 9D06 20,78,A0 BYTE >20,>78,>A0,>70,>28,>F0,>20 * 36 9D09 70,28,F0 9D0C 20 <0170> 9D0D C0,C8,10 BYTE >C0,>C8,>10,>20,>40,>98,>18 * 37 9D10 20,40,98 9D13 18 <0171> 9D14 40,A0,A0 BYTE >40,>A0,>A0,>40,>A8,>90,>68 * 38 9D17 40,A8,90 9D1A 68 <0172> 9D1B C0,40,80 BYTE >C0,>40,>80,>00,>00,>00,>00 * 39 9D1E 00,00,00 9D21 00 <0173> 9D22 08,10,20 BYTE >08,>10,>20,>20,>20,>10,>08 * 40 9D25 20,20,10 9D28 08 <0174> 9D29 80,40,20 BYTE >80,>40,>20,>20,>20,>40,>80 * 41 9D2C 20,20,40 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0069 FLMGR-359 9D2F 80 <0175> 9D30 20,A8,70 BYTE >20,>A8,>70,>D8,>70,>A8,>20 * 42 9D33 D8,70,A8 9D36 20 <0176> 9D37 00,20,20 BYTE >00,>20,>20,>F8,>20,>20,>00 * 43 9D3A F8,20,20 9D3D 00 <0177> 9D3E 00,00,00 BYTE >00,>00,>00,>00,>60,>20,>40 * 44 9D41 00,60,20 9D44 40 <0178> 9D45 00,00,00 BYTE >00,>00,>00,>F8,>00,>00,>00 * 45 9D48 F8,00,00 9D4B 00 <0179> 9D4C 00,00,00 BYTE >00,>00,>00,>00,>00,>60,>60 * 46 9D4F 00,00,60 9D52 60 <0180> 9D53 00,08,10 BYTE >00,>08,>10,>20,>40,>80,>00 * 47 9D56 20,40,80 9D59 00 <0181> 9D5A 70,88,98 BYTE >70,>88,>98,>A8,>C8,>88,>70 * 48 9D5D A8,C8,88 9D60 70 <0182> 9D61 20,60,20 BYTE >20,>60,>20,>20,>20,>20,>70 * 49 9D64 20,20,20 9D67 70 <0183> 9D68 70,88,08 BYTE >70,>88,>08,>30,>40,>80,>F8 * 50 9D6B 30,40,80 9D6E F8 <0184> 9D6F 70,88,08 BYTE >70,>88,>08,>30,>08,>88,>70 * 51 9D72 30,08,88 9D75 70 <0185> 9D76 10,30,50 BYTE >10,>30,>50,>90,>F8,>10,>10 * 52 9D79 90,F8,10 9D7C 10 <0186> 9D7D F0,80,80 BYTE >F0,>80,>80,>F0,>08,>88,>70 * 53 9D80 F0,08,88 9D83 70 <0187> 9D84 70,80,80 BYTE >70,>80,>80,>F0,>88,>88,>70 * 54 9D87 F0,88,88 9D8A 70 <0188> 9D8B F8,08,10 BYTE >F8,>08,>10,>20,>40,>40,>40 * 55 9D8E 20,40,40 9D91 40 <0189> 9D92 70,88,88 BYTE >70,>88,>88,>70,>88,>88,>70 * 56 9D95 70,88,88 9D98 70 <0190> 9D99 70,88,88 BYTE >70,>88,>88,>78,>08,>88,>70 * 57 9D9C 78,08,88 9D9F 70 <0191> 9DA0 00,60,60 BYTE >00,>60,>60,>00,>60,>60,>00 * 58 9DA3 00,60,60 9DA6 00 <0192> 9DA7 00,60,60 BYTE >00,>60,>60,>00,>60,>20,>40 * 59 9DAA 00,60,20 9DAD 40 <0193> 9DAE 08,10,20 BYTE >08,>10,>20,>40,>20,>10,>08 * 60 9DB1 40,20,10 9DB4 08 <0194> 9DB5 00,00,F8 BYTE >00,>00,>F8,>00,>F8,>00,>00 * 61 9DB8 00,F8,00 9DBB 00 <0195> 9DBC 80,40,20 BYTE >80,>40,>20,>10,>20,>40,>80 * 62 9DBF 10,20,40 9DC2 80 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0070 FLMGR-359 <0196> 9DC3 70,88,10 BYTE >70,>88,>10,>20,>20,>00,>20 * 63 9DC6 20,20,00 9DC9 20 <0197> 9DCA 70,88,08 BYTE >70,>88,>08,>68,>A8,>A8,>58 * 64 9DCD 68,A8,A8 9DD0 58 <0198> 9DD1 70,88,88 BYTE >70,>88,>88,>F8,>88,>88,>88 * 65 9DD4 F8,88,88 9DD7 88 <0199> 9DD8 F0,48,48 BYTE >F0,>48,>48,>70,>48,>48,>F0 * 66 9DDB 70,48,48 9DDE F0 <0200> 9DDF 70,88,80 BYTE >70,>88,>80,>80,>80,>88,>70 * 67 9DE2 80,80,88 9DE5 70 <0201> 9DE6 F0,48,48 BYTE >F0,>48,>48,>48,>48,>48,>F0 * 68 9DE9 48,48,48 9DEC F0 <0202> 9DED F8,80,80 BYTE >F8,>80,>80,>F0,>80,>80,>F8 * 69 9DF0 F0,80,80 9DF3 F8 <0203> 9DF4 F8,80,80 BYTE >F8,>80,>80,>F0,>80,>80,>80 * 70 9DF7 F0,80,80 9DFA 80 <0204> 9DFB 70,88,80 BYTE >70,>88,>80,>80,>98,>88,>78 * 71 9DFE 80,98,88 9E01 78 <0205> 9E02 88,88,88 BYTE >88,>88,>88,>F8,>88,>88,>88 * 72 9E05 F8,88,88 9E08 88 <0206> 9E09 F8,20,20 BYTE >F8,>20,>20,>20,>20,>20,>F8 * 73 9E0C 20,20,20 9E0F F8 <0207> 9E10 08,08,08 BYTE >08,>08,>08,>08,>08,>88,>70 * 74 9E13 08,08,88 9E16 70 <0208> 9E17 88,90,A0 BYTE >88,>90,>A0,>C0,>A0,>90,>88 * 75 9E1A C0,A0,90 9E1D 88 <0209> 9E1E 80,80,80 BYTE >80,>80,>80,>80,>80,>80,>F8 * 76 9E21 80,80,80 9E24 F8 <0210> 9E25 88,D8,A8 BYTE >88,>D8,>A8,>A8,>88,>88,>88 * 77 9E28 A8,88,88 9E2B 88 <0211> 9E2C 88,88,C8 BYTE >88,>88,>C8,>A8,>98,>88,>88 * 78 9E2F A8,98,88 9E32 88 <0212> 9E33 70,88,88 BYTE >70,>88,>88,>88,>88,>88,>70 * 79 9E36 88,88,88 9E39 70 <0213> 9E3A F0,88,88 BYTE >F0,>88,>88,>88,>F0,>80,>80 * 80 9E3D 88,F0,80 9E40 80 <0214> 9E41 70,88,88 BYTE >70,>88,>88,>88,>A8,>90,>68 * 81 9E44 88,A8,90 9E47 68 <0215> 9E48 F0,88,88 BYTE >F0,>88,>88,>F0,>A0,>90,>88 * 82 9E4B F0,A0,90 9E4E 88 <0216> 9E4F 70,88,80 BYTE >70,>88,>80,>70,>08,>88,>70 * 83 9E52 70,08,88 9E55 70 <0217> 9E56 F8,20,20 BYTE >F8,>20,>20,>20,>20,>20,>20 * 84 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0071 FLMGR-359 9E59 20,20,20 9E5C 20 <0218> 9E5D 88,88,88 BYTE >88,>88,>88,>88,>88,>88,>70 * 85 9E60 88,88,88 9E63 70 <0219> 9E64 88,88,88 BYTE >88,>88,>88,>88,>88,>50,>20 * 86 9E67 88,88,50 9E6A 20 <0220> 9E6B 88,88,88 BYTE >88,>88,>88,>88,>A8,>A8,>50 * 87 9E6E 88,A8,A8 9E71 50 <0221> 9E72 88,88,50 BYTE >88,>88,>50,>20,>50,>88,>88 * 88 9E75 20,50,88 9E78 88 <0222> 9E79 88,88,88 BYTE >88,>88,>88,>50,>20,>20,>20 * 89 9E7C 50,20,20 9E7F 20 <0223> 9E80 F8,08,10 BYTE >F8,>08,>10,>20,>40,>80,>F8 * 90 9E83 20,40,80 9E86 F8 <0224> 9E87 78,40,40 BYTE >78,>40,>40,>40,>40,>40,>78 * 91 9E8A 40,40,40 9E8D 78 <0225> 9E8E 00,80,40 BYTE >00,>80,>40,>20,>10,>08,>00 * 92 9E91 20,10,08 9E94 00 <0226> 9E95 F0,10,10 BYTE >F0,>10,>10,>10,>10,>10,>F0 * 93 9E98 10,10,10 9E9B F0 <0227> 9E9C 20,50,88 BYTE >20,>50,>88,>00,>00,>00,>00 * 94 9E9F 00,00,00 9EA2 00 <0228> 9EA3 00,00,00 BYTE >00,>00,>00,>00,>00,>00,>FF * 95 9EA6 00,00,00 9EA9 FF <0229> 9EAA 18,10,08 BYTE >18,>10,>08,>00,>00,>00,>00 * 96 9EAD 00,00,00 9EB0 00 <0230> 9EB1 00,00,60 BYTE >00,>00,>60,>10,>70,>90,>68 * 97 9EB4 10,70,90 9EB7 68 <0231> 9EB8 00,40,40 BYTE >00,>40,>40,>70,>48,>48,>B0 * 98 9EBB 70,48,48 9EBE B0 <0232> 9EBF 00,00,60 BYTE >00,>00,>60,>90,>80,>90,>60 * 99 9EC2 90,80,90 9EC5 60 <0233> 9EC6 00,10,10 BYTE >00,>10,>10,>70,>90,>90,>68 * 100 9EC9 70,90,90 9ECC 68 <0234> 9ECD 00,00,60 BYTE >00,>00,>60,>90,>E0,>80,>70 * 101 9ED0 90,E0,80 9ED3 70 <0235> 9ED4 00,30,40 BYTE >00,>30,>40,>E0,>40,>40,>40 * 102 9ED7 E0,40,40 9EDA 40 <0236> 9EDB 00,00,70 BYTE >00,>00,>70,>90,>70,>10,>60 * 103 9EDE 90,70,10 9EE1 60 <0237> 9EE2 00,80,80 BYTE >00,>80,>80,>E0,>90,>90,>90 * 104 9EE5 E0,90,90 9EE8 90 <0238> 9EE9 00,20,00 BYTE >00,>20,>00,>20,>20,>20,>70 * 105 9EEC 20,20,20 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0072 FLMGR-359 9EEF 70 <0239> 9EF0 00,10,00 BYTE >00,>10,>00,>10,>10,>90,>60 * 106 9EF3 10,10,90 9EF6 60 <0240> 9EF7 00,80,90 BYTE >00,>80,>90,>A0,>C0,>A0,>90 * 107 9EFA A0,C0,A0 9EFD 90 <0241> 9EFE 00,60,20 BYTE >00,>60,>20,>20,>20,>20,>70 * 108 9F01 20,20,20 9F04 70 <0242> 9F05 00,00,D0 BYTE >00,>00,>D0,>A8,>A8,>A8,>A8 * 109 9F08 A8,A8,A8 9F0B A8 <0243> 9F0C 00,00,B0 BYTE >00,>00,>B0,>48,>48,>48,>48 * 110 9F0F 48,48,48 9F12 48 <0244> 9F13 00,00,60 BYTE >00,>00,>60,>90,>90,>90,>60 * 111 9F16 90,90,90 9F19 60 <0245> 9F1A 00,00,F0 BYTE >00,>00,>F0,>48,>48,>70,>40 * 112 9F1D 48,48,70 9F20 40 <0246> 9F21 00,00,78 BYTE >00,>00,>78,>90,>90,>70,>10 * 113 9F24 90,90,70 9F27 10 <0247> 9F28 00,00,B0 BYTE >00,>00,>B0,>C8,>80,>80,>80 * 114 9F2B C8,80,80 9F2E 80 <0248> 9F2F 00,00,70 BYTE >00,>00,>70,>80,>70,>08,>F0 * 115 9F32 80,70,08 9F35 F0 <0249> 9F36 00,40,E0 BYTE >00,>40,>E0,>40,>40,>50,>20 * 116 9F39 40,40,50 9F3C 20 <0250> 9F3D 00,00,90 BYTE >00,>00,>90,>90,>90,>90,>68 * 117 9F40 90,90,90 9F43 68 <0251> 9F44 00,00,88 BYTE >00,>00,>88,>88,>88,>50,>20 * 118 9F47 88,88,50 9F4A 20 <0252> 9F4B 00,00,88 BYTE >00,>00,>88,>88,>A8,>A8,>50 * 119 9F4E 88,A8,A8 9F51 50 <0253> 9F52 00,00,88 BYTE >00,>00,>88,>50,>20,>50,>88 * 120 9F55 50,20,50 9F58 88 <0254> 9F59 00,00,48 BYTE >00,>00,>48,>48,>38,>08,>70 * 121 9F5C 48,38,08 9F5F 70 <0255> 9F60 00,00,F8 BYTE >00,>00,>F8,>10,>20,>40,>F8 * 122 9F63 10,20,40 9F66 F8 <0256> 9F67 18,20,20 BYTE >18,>20,>20,>40,>20,>20,>18 * 123 9F6A 40,20,20 9F6D 18 <0257> 9F6E 20,20,20 BYTE >20,>20,>20,>00,>20,>20,>20 * 124 9F71 00,20,20 9F74 20 <0258> 9F75 C0,20,20 BYTE >C0,>20,>20,>10,>20,>20,>C0 * 125 9F78 10,20,20 9F7B C0 <0259> 9F7C 00,00,40 BYTE >00,>00,>40,>A8,>10,>00,>00 * 126 9F7F A8,10,00 9F82 00 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0073 FLMGR-359 <0260> 9F83 00,00,00 BYTE >00,>00,>00,>00,>00,>00,>00 * 127 9F86 00,00,00 9F89 00 <0261> 9F8A 00,00,00 BYTE >00,>00,>00,>00,>00,>00,>00 * 128 9F8D 00,00,00 9F90 00 <0262> *********************************************************** <0263> END 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0074 FLMGR-359 Symbol Table #1 (New,alpha) 834C AAA 8302 AAA1 00CB ABSZ 896B ACCEPT 00A4 ACCEPZ 85E5 ACCNM 8A47 ACCPZ1 8A8F ACCPZ2 8ACB ACCPZ3 8B36 ACCPZ4 8A7C ACCPZ5 8B2A ACCPZ6 8A74 ACCPZ7 8AFC ACCPZ8 8A4F ACCPZ9 03B7 ACCTRY 8302 ACCUM 03AE ACCVRA 03AC ACCVRW 9800 ALCEND 00EC ALLZ 00BB ANDZ 00F9 APPENZ 835D ARG1 8367 ARG11 836B ARG15 836C ARG16 835E ARG2 835F ARG3 8360 ARG4 8361 ARG5 8362 ARG6 8363 ARG7 8364 ARG8 A00A ASC 00DC ASCZ 007C ASSGNV 00CC ATNZ 0022 ATNZZ 00F0 ATZ 602E AUTO1 0394 AUTTMP 8A86 AZ1 0008 BACK 8343 BASE 00F1 BASEZ 8350 BBB 830C BBB1 00EE BEEPZ 0020 BKGD 0002 BREAK 008E BREAKZ 0006 BUF 038E BUFEND 8346 BUFLEV 038C BUFSRT 97E3 BUG01 830C BYTES 0010 CALDSR 830A CALIST 009D CALLZ 834E CCC 8308 CCC1 8308 CCPADD 8308 CCPADR 8306 CCPPTR 976B CDSR 9793 CDSRZ0 0012 CFI 0018 CHAR2Z 004A CHAR3Z 9CEA CHARS 8342 CHAT 810D CHECK 935C CHKCNV 9371 CHKCON 95AD CHKEND 9355 CHKFN 937B CHKFZ1 92EC CHKNUM 809F CHKPAR 9715 CHKREC 8834 CHKRM 9718 CHKRZ0 9733 CHKRZ1 8328 CHKSEP 9323 CHKSTR 932F CHKSZ0 000D CHRTN 00D6 CHRZZ 830E CHSAV 0080 CIF 00C5 CIRCUZ 8196 CLOSE 00A0 CLOSEZ 81C7 CLOSZ1 80FB CLRFRE 0007 CLRLN 81F4 CLSALL 81E1 CLSAZ0 81E9 CLSLBL 0073 CNS 0009 CNT 94B8 CNVDEF 94C1 CNVDZ0 0004 COD 00B5 COLONZ 002C COMMA 00B3 COMMAZ 961A COMMOD 0070 COMPCT 00B8 CONCZ 03BB CONFLG 82C9 CONPRT 0075 CONT 0081 CONTIN A012 CONVER 00CD COSZ 03BC CPTEMP A040 CPUBAS 0820 CRNBUF 08BE CRNEND 007F CRUNCH 0390 CSNTMP 03BA CSNTP1 0002 CSTRIN 92DE CTMPST 92CD CTSTR 92D1 CTSTR0 830E CURINC 8314 CURLIN 007E CURSOR 0001 CZCLOS 0007 CZDELE 0005 CZLOAD 0000 CZOPEN 0002 CZREAD 0004 CZREST 0006 CZSAVE 0008 CZSCR 0009 CZSTAT 0003 CZWRIT 8334 DATA A008 DATAST 0093 DATAZ 934B DATEND 8354 DDD1 0089 DEFZ 817C DELET 0099 DELETZ A010 DELINK 93A6 DELPAB 9440 DELPZ1 944C DELPZ2 0087 DELREP 8306 DFLTLM 00E9 DIGITZ 008A DIMZ 94EF DISACC 8257 DISPL1 00A2 DISPLZ 94F2 DISPZ1 00C4 DIVIZ 0003 DLETE 0024 DOLLAR 000A DOWN 8317 DSRFLG 000A DWNARR 007F EDGECH 6032 EDITLN 76F7 EDTZ00 76EB EDTZZ0 8350 EEE 8358 EEE1 0081 ELSEZ 933E EMPSTR 02FE ENDSCR 008B ENDZ 8332 ENLN 91DE EOF 9212 EOFZ2 8395 EOLEX 00BE EQUALZ 00EF ERASEZ 837C ERCODE 97CB ERRBV 8322 ERRCOD 97D3 ERRDAT 97D7 ERRFE 97C3 ERRIM 97CF ERRINP 97BB ERRIO 038A ERRLN 97C7 ERRMEM 97DF ERRMUV 00A5 ERRORZ 97DB ERRPV 97BF ERRSNM 8109 ERRSYN CD77 ERRTAB 6A84 ERRZ 9797 ERRZ2 9794 ERRZ2B 6A84 ERRZZ A004 EXEC A00C EXEC1 A00E EXEC6D 8376 EXPZ 00CE EXPZZ 832E EXTRAM 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 834E FFF 8356 FFF1 0002 FIL 0001 FILSPC 8120 FILZZ 00FA FIXEDZ 8345 FLAG 0005 FLG 9216 FLOAT1 8317 FNUM 8317 FORNET 0009 FORW 008C FORZ 8340 FREPTR 8125 G8125 8127 G8127 8131 G8131 8157 G8157 815A G815A 8165 G8165 8169 G8169 81B8 G81B8 81DD G81DD 8233 G8233 824E G824E 8288 G8288 8293 G8293 82BE G82BE 82EC G82EC 830D G830D 834F G834F 83A1 G83A1 83B1 G83B1 83BB G83BB 83C3 G83C3 8423 G8423 842E G842E 8430 G8430 8438 G8438 8448 G8448 8460 G8460 8463 G8463 84A2 G84A2 84C3 G84C3 84DB G84DB 851B G851B 8527 G8527 8540 G8540 8562 G8562 8570 G8570 857C G857C 8581 G8581 8596 G8596 85A4 G85A4 85B1 G85B1 860B G860B 861E G861E 8643 G8643 8650 G8650 8661 G8661 867C G867C 867E G867E 86AB G86AB 86AD G86AD 86C6 G86C6 86DB G86DB 872E G872E 873A G873A 8752 G8752 875A G875A 8786 G8786 87CF G87CF 87E6 G87E6 87EA G87EA 880F G880F 8840 G8840 885C G885C 887B G887B 8885 G8885 8893 G8893 88AF G88AF 88BF G88BF 88D8 G88D8 88DC G88DC 88E1 G88E1 890B G890B 8941 G8941 895A G895A 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0075 FLMGR-359 898B G898B 89AA G89AA 89C0 G89C0 89E0 G89E0 89F3 G89F3 89FD G89FD 8A13 G8A13 8A23 G8A23 8A33 G8A33 8A35 G8A35 8A58 G8A58 8A66 G8A66 8A9E G8A9E 8AB2 G8AB2 8AB7 G8AB7 8AC4 G8AC4 8AC8 G8AC8 8ADC G8ADC 8AEB G8AEB 8B0A G8B0A 8B20 G8B20 8B38 G8B38 8B6B G8B6B 8B73 G8B73 8B8F G8B8F 8BB3 G8BB3 8C15 G8C15 8C17 G8C17 8CBD G8CBD 8CBF G8CBF 8CE9 G8CE9 8D6F G8D6F 8D7E G8D7E 8DAB G8DAB 8DAF G8DAF 8DF4 G8DF4 8E33 G8E33 8E42 G8E42 8E91 G8E91 8EAD G8EAD 8EFB G8EFB 8F1C G8F1C 8F88 G8F88 8FB6 G8FB6 8FCD G8FCD 902A G902A 9094 G9094 9098 G9098 90A6 G90A6 90AE G90AE 90CA G90CA 9128 G9128 912D G912D 9132 G9132 9138 G9138 9140 G9140 9156 G9156 916D G916D 91B7 G91B7 91BB G91BB 9210 G9210 9242 G9242 9275 G9275 9284 G9284 92A2 G92A2 92B2 G92B2 92B6 G92B6 92EB G92EB 9303 G9303 9314 G9314 9320 G9320 9348 G9348 938F G938F 93A5 G93A5 93C2 G93C2 93CE G93CE 93E0 G93E0 93E6 G93E6 93F4 G93F4 93F7 G93F7 9400 G9400 9411 G9411 9418 G9418 942C G942C 9431 G9431 9451 G9451 946B G946B 9483 G9483 9495 G9495 949B G949B 94B4 G94B4 94EE G94EE 9513 G9513 9518 G9518 9529 G9529 9571 G9571 958F G958F 95A0 G95A0 95B7 G95B7 95B9 G95B9 95D5 G95D5 95DC G95DC 95FC G95FC 9624 G9624 964F G964F 96D3 G96D3 96E2 G96E2 9711 G9711 9730 G9730 973E G973E 9751 G9751 97A9 G97A9 97B8 G97B8 008E GDTECT 9308 GETDAT 9304 GETGFL 930C GETRAM 0071 GETSTR 928A GETVAR 9292 GETVZ0 929B GETVZ1 92CC GETVZ2 0087 GOSUBZ 0086 GOTOZ 0085 GOZ 9235 GPNAME 0085 GREAD 008C GREAD1 00C0 GREATZ 9179 GRMLST 91A4 GRSUB2 91BC GRSUB3 91AA GRSUB4 8F44 GSAV1 8EB7 GSAVE 97ED GTLENG 7A06 GTLIST 8F4A GVMOV 008B GVWITE 0086 GWRITE 6036 GWSUB 0084 IFZ 00A3 IMAGEZ 973F INITKB 6014 INITPG 96C8 INITZ1 85F0 INPUT 03AA INPUTP 0092 INPUTZ 892D INPUZ2 876B INPUZ3 8790 INPUZ4 87B4 INPUZ5 87D4 INPUZ6 8822 INPUZ7 8768 INPZ2 86CC INPZ3 86E9 INPZ31 8728 INPZ32 8765 INPZ33 8927 INPZ37 8936 INPZ39 87F6 INPZ65 8818 INPZ67 0004 INSRT 88E8 INSU1 8906 INSUB1 893B INSUB2 00F5 INTERZ 9754 INTKB0 8338 INTRIN A018 INTRND 861B INTRZ0 862D INTRZ1 869F INTRZ2 00CF INTZ 0084 IO 975E IOCALL 9765 IOCLZ1 833C IOSTRT 8374 KEYBD CB00 KEYTAB 6022 KILSYM 0008 LEN 00D5 LENZ 00BF LESSZ 008D LETZ A006 LINE A026 LINK1 885F LINP10 8841 LINPUT 00AA LINPUZ 8312 LINUM 9068 LIST 0002 LISTZ 908D LISTZ0 90FB LISTZ1 914E LISTZ3 915F LISTZ4 914B LISTZ5 A002 LITS05 6A74 LLIST 8336 LNBUF 00C9 LNZ 0371 LODFLG 00D0 LOGZ 00B7 LPARZ 8EB1 LRTOPL 8D32 LRTOPZ 8348 LSUBP 00DF MAXZ 0072 MEMCHK 9002 MERGE 0008 MERGEZ 905B MERGZ1 002D MINUS 00C2 MINUSZ 00E0 MINZ 8302 MNUM 837A MOTION 039E MRGPAB 6053 MSGTA 00C3 MULTZ 0088 MVDN 0089 MVUP 6038 MZMSG 03BE NEWTOP 0096 NEXTZ 000D NLEN 02E2 NLNADD 8314 NMLEN 830C NMPTR 0374 NOTONE 00BD NOTZ 8328 NUDTAB 00FD NUMBEZ 0000 NUMBR 00C8 NUMCOZ 00E8 NUMERZ 00C8 NUMZ 95BA NXTCHR 95C9 NXTCZ0 0060 OFFSET 0003 OFS 8BC4 OLD 8BCA OLD1 821F OLDCD 8227 OLDCZ0 823A OLDCZ1 8D2D OLDER 03BC OLDTOP 0005 OLDZ 8D8E OLDZ2 8C63 OLDZ3 8C32 OLDZ5 8C5A OLDZ7 8D16 OLDZ9 8CDE OLZZ 009B ONZ 8032 OPEN 009F OPENZ 8106 OPERR 8317 OPTFLG 8045 OPTION 009E OPTIOZ 8047 OPTIZ0 804C OPTIZ1 8072 OPTZ0 80BE OPTZ01 807C OPTZ02 80E5 OPTZ03 8081 OPTZ1 80A8 OPTZ2 80AD OPTZ3 80B7 OPTZ4 80C3 OPTZ5 80DB OPTZ55 80EA OPTZ6 80F4 OPTZ7 00BA ORZ 970E OSTRNG 8308 OTHEZ0 8303 OTHEZ1 9390 OUTEOF 00F7 OUTPUZ 96A5 OUTREC 9170 PAB 8FF9 PAB1 8D24 PAB3 000E PABLEN 8304 PABPTR 965A PARFN 94C2 PARREC 0074 PARSE 00FB PERMAZ 0079 PGMCHR 832C PGMPTR 00DD PIZ 00C1 PLUSZ 00D9 POSZ 8377 PRCOL 83A4 PREXIT 8344 PRGFLG 96F5 PRINIT 8266 PRINT 009C PRINTZ 82B1 PRINZ0 82C4 PRINZ1 82A5 PRNZ10 837A PRSEM 8381 PRSMZ1 832D PRTAB 835C PRTCOM 83CE PRTNFN 9701 PRZZ0 03B7 PSCFG 0022 QUOTE 8389 RAMFLG 8386 RAMFRE 830A RAMPTR 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0076 FLMGR-359 8384 RAMTOP 8378 RANDOM 0095 RANDOZ 8B3A READ 6A86 READL1 6A76 READLN 0097 READZ 0006 RECALL 08C0 RECBUF 8827 RECENT 8307 RECLEN 00DE RECZ 00F4 RELATZ 8D36 RELOCA 8DB3 RELOZ1 009A REMZ 0006 RESEQZ 81FC RESTOR 0094 RESTOZ CF68 RETNOS 0088 RETURZ 8375 RKEY 00D7 RNDZ 000A RNM 00B6 RPARZ 00E1 RPTZZ 8388 RSTK 960B RSTRING 938C RTC 8326 RTNG 00A9 RUNZ 03B9 SAPROT 8DB8 SAVE 0388 SAVEVP 0007 SAVEZ 7795 SAVLIN 8F76 SAVMG 8E2B SAZ1 0384 SBUFLV 007D SCHSYM 008F SCNSMT 000C SCR 02E0 SCRNBS 96CC SCRO 0083 SCROLL 883A SCRZ 8B99 SEARCH 0003 SEETWO 00D8 SEGZZ 00B4 SEMICZ 00F6 SEQUEZ 89A2 SETVW 0386 SEXTRM 0398 SFLAG 00D1 SGNZZ 00D2 SINZ 03B4 SIZCCP 95DF SIZE1 00EB SIZEZ 03B6 SIZREC 03B8 SIZXPT 0396 SLSUBP 007B SMB 831E SMTSRT 0020 SPACE 007E SPEED 0382 SPGMPT 00D3 SQRZ A014 SQUISH 8B96 SRDATA 8BBD SRDAZ0 8BB5 SRDAZ1 831C SREF 0082 SSEPZ 039A SSTEMP 039C SSTMP2 8372 STACK 830A STADDR 0372 START 00B2 STEPZ 83BD STKMAX 83AF STKMIN 8330 STLN 0098 STOPZ 8302 STPT 831A STREND 00C7 STRINZ 8318 STRSP 0065 STRVAL 00DB STRZZ 8324 STVSPT 921E SUBEOF 00A8 SUBNDZ 91CA SUBREC 833A SUBTAB 00A7 SUBXTZ 00A1 SUBZ 007A SYM 0376 SYMBOL 833E SYMTAB 0000 SYNCHK 0392 TABSAV 00FC TABZ 00D4 TANZ 8366 TEMP5 00B0 THENZ 8379 TIMER 0034 TONE1 0036 TONE2 6030 TOPL02 601A TOPL10 6012 TOPL15 8310 TOPSTK 00B1 TOZ CE1F TRACBK 0090 TRACEZ 0083 TREMZ 83C5 TSTINT 9627 TSTSEP 9631 TSTSZ0 9659 TSTSZ1 00EA UALPHZ A020 UBSUB 008F UNBREZ 00C8 UNQSTZ 0091 UNTRAZ 000B UPARR 00F8 UPDATZ 000B UPMV 83CF USING 00ED USINGZ 8452 USNGZ0 845E USNGZ1 8478 USNGZ3 8493 USNGZ4 8533 USNGZ5 85C3 USNGZ9 84E9 USNZ42 8564 USNZ55 85AA USNZ67 85BE USNZ68 85D3 USNZ95 00DA VAL A016 VALCD 03B2 VALIDL 03B0 VALIDP 00FE VALIDZ 8300 VAR0 830E VAR4 8310 VAR5 8311 VAR6 8316 VAR9 832A VARA 8308 VARC 00F3 VARIAZ 8301 VARV 8320 VARW 8304 VARY 8306 VARY2 837B VDPSTS 008A VGWITE 89C4 VLIDZ0 0078 VPOP 0077 VPUSH 0958 VRAMVS 8E69 VSAVZ 001C VWIDTH 00A6 WARNZ 6A82 WARNZZ 87BB WRNINP 97B3 WRNIO 822C WRNNPP 8AF8 WRNSNM 87BF WRZZ5 8316 XFLAG 00BC XORZ 8364 XSTLN 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0077 FLMGR-359 Symbol Table #2 (New,value) 0000 CZOPEN 0000 NUMBR 0000 SYNCHK 0001 CZCLOS 0001 FILSPC 0002 BREAK 0002 CSTRIN 0002 CZREAD 0002 FIL 0002 LISTZ 0003 CZWRIT 0003 DLETE 0003 OFS 0003 SEETWO 0004 COD 0004 CZREST 0004 INSRT 0005 CZLOAD 0005 FLG 0005 OLDZ 0006 BUF 0006 CZSAVE 0006 RECALL 0006 RESEQZ 0007 CLRLN 0007 CZDELE 0007 SAVEZ 0008 BACK 0008 CZSCR 0008 LEN 0008 MERGEZ 0009 CNT 0009 CZSTAT 0009 FORW 000A DOWN 000A DWNARR 000A RNM 000B UPARR 000B UPMV 000C SCR 000D CHRTN 000D NLEN 000E PABLEN 0010 CALDSR 0012 CFI 0018 CHAR2Z 001C VWIDTH 0020 BKGD 0020 SPACE 0022 ATNZZ 0022 QUOTE 0024 DOLLAR 002C COMMA 002D MINUS 0034 TONE1 0036 TONE2 004A CHAR3Z 0060 OFFSET 0065 STRVAL 0070 COMPCT 0071 GETSTR 0072 MEMCHK 0073 CNS 0074 PARSE 0075 CONT 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 CONTIN 0081 ELSEZ 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 0371 LODFLG 0372 START 0374 NOTONE 0376 SYMBOL 0382 SPGMPT 0384 SBUFLV 0386 SEXTRM 0388 SAVEVP 038A ERRLN 038C BUFSRT 038E BUFEND 0390 CSNTMP 0392 TABSAV 0394 AUTTMP 0396 SLSUBP 0398 SFLAG 039A SSTEMP 039C SSTMP2 039E MRGPAB 03AA INPUTP 03AC ACCVRW 03AE ACCVRA 03B0 VALIDP 03B2 VALIDL 03B4 SIZCCP 03B6 SIZREC 03B7 ACCTRY 03B7 PSCFG 03B8 SIZXPT 03B9 SAPROT 03BA CSNTP1 03BB CONFLG 03BC CPTEMP 03BC OLDTOP 03BE NEWTOP 0820 CRNBUF 08BE CRNEND 08C0 RECBUF 0958 VRAMVS 6012 TOPL15 6014 INITPG 601A TOPL10 6022 KILSYM 602E AUTO1 6030 TOPL02 6032 EDITLN 6036 GWSUB 6038 MZMSG 6053 MSGTA 6A74 LLIST 6A76 READLN 6A82 WARNZZ 6A84 ERRZ 6A84 ERRZZ 6A86 READL1 76EB EDTZZ0 76F7 EDTZ00 7795 SAVLIN 7A06 GTLIST 8032 OPEN 8045 OPTION 8047 OPTIZ0 804C OPTIZ1 8072 OPTZ0 807C OPTZ02 8081 OPTZ1 809F CHKPAR 80A8 OPTZ2 80AD OPTZ3 80B7 OPTZ4 80BE OPTZ01 80C3 OPTZ5 80DB OPTZ55 80E5 OPTZ03 80EA OPTZ6 80F4 OPTZ7 80FB CLRFRE 8106 OPERR 8109 ERRSYN 810D CHECK 8120 FILZZ 8125 G8125 8127 G8127 8131 G8131 8157 G8157 815A G815A 8165 G8165 8169 G8169 817C DELET 8196 CLOSE 81B8 G81B8 81C7 CLOSZ1 81DD G81DD 81E1 CLSAZ0 81E9 CLSLBL 81F4 CLSALL 81FC RESTOR 821F OLDCD 8227 OLDCZ0 822C WRNNPP 8233 G8233 823A OLDCZ1 824E G824E 8257 DISPL1 8266 PRINT 8288 G8288 8293 G8293 82A5 PRNZ10 82B1 PRINZ0 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0078 FLMGR-359 82BE G82BE 82C4 PRINZ1 82C9 CONPRT 82EC G82EC 8300 VAR0 8301 VARV 8302 AAA1 8302 ACCUM 8302 MNUM 8302 STPT 8303 OTHEZ1 8304 PABPTR 8304 VARY 8306 CCPPTR 8306 DFLTLM 8306 VARY2 8307 RECLEN 8308 CCC1 8308 CCPADD 8308 CCPADR 8308 OTHEZ0 8308 VARC 830A CALIST 830A RAMPTR 830A STADDR 830C BBB1 830C BYTES 830C NMPTR 830D G830D 830E CHSAV 830E CURINC 830E VAR4 8310 TOPSTK 8310 VAR5 8311 VAR6 8312 LINUM 8314 CURLIN 8314 NMLEN 8316 VAR9 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 CHKSEP 8328 NUDTAB 832A VARA 832C PGMPTR 832D PRTAB 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 834B FAC1 834C AAA 834C FAC2 834D FAC3 834E CCC 834E FAC4 834E FFF 834F FAC5 834F G834F 8350 BBB 8350 EEE 8350 FAC6 8351 FAC7 8352 FAC8 8353 FAC9 8354 DDD1 8354 FAC10 8355 FAC11 8356 FAC12 8356 FFF1 8357 FAC13 8358 EEE1 8358 FAC14 8359 FAC15 835A FAC16 835B FAC17 835C PRTCOM 835D ARG1 835E ARG2 835F ARG3 8360 ARG4 8361 ARG5 8362 ARG6 8363 ARG7 8364 ARG8 8364 XSTLN 8366 TEMP5 8367 ARG11 836B ARG15 836C ARG16 8372 STACK 8374 KEYBD 8375 RKEY 8376 EXPZ 8377 PRCOL 8378 RANDOM 8379 TIMER 837A MOTION 837A PRSEM 837B VDPSTS 837C ERCODE 8381 PRSMZ1 8384 RAMTOP 8386 RAMFRE 8388 RSTK 8389 RAMFLG 8395 EOLEX 83A1 G83A1 83A4 PREXIT 83AF STKMIN 83B1 G83B1 83BB G83BB 83BD STKMAX 83C3 G83C3 83C5 TSTINT 83CE PRTNFN 83CF USING 8423 G8423 842E G842E 8430 G8430 8438 G8438 8448 G8448 8452 USNGZ0 845E USNGZ1 8460 G8460 8463 G8463 8478 USNGZ3 8493 USNGZ4 84A2 G84A2 84C3 G84C3 84DB G84DB 84E9 USNZ42 851B G851B 8527 G8527 8533 USNGZ5 8540 G8540 8562 G8562 8564 USNZ55 8570 G8570 857C G857C 8581 G8581 8596 G8596 85A4 G85A4 85AA USNZ67 85B1 G85B1 85BE USNZ68 85C3 USNGZ9 85D3 USNZ95 85E5 ACCNM 85F0 INPUT 860B G860B 861B INTRZ0 861E G861E 862D INTRZ1 8643 G8643 8650 G8650 8661 G8661 867C G867C 867E G867E 869F INTRZ2 86AB G86AB 86AD G86AD 86C6 G86C6 86CC INPZ3 86DB G86DB 86E9 INPZ31 8728 INPZ32 872E G872E 873A G873A 8752 G8752 875A G875A 8765 INPZ33 8768 INPZ2 876B INPUZ3 8786 G8786 8790 INPUZ4 87B4 INPUZ5 87BB WRNINP 87BF WRZZ5 87CF G87CF 87D4 INPUZ6 87E6 G87E6 87EA G87EA 87F6 INPZ65 880F G880F 8818 INPZ67 8822 INPUZ7 8827 RECENT 8834 CHKRM 883A SCRZ 8840 G8840 8841 LINPUT 885C G885C 885F LINP10 887B G887B 8885 G8885 8893 G8893 88AF G88AF 88BF G88BF 88D8 G88D8 88DC G88DC 88E1 G88E1 88E8 INSU1 8906 INSUB1 890B G890B 8927 INPZ37 892D INPUZ2 8936 INPZ39 893B INSUB2 8941 G8941 895A G895A 896B ACCEPT 898B G898B 89A2 SETVW 89AA G89AA 89C0 G89C0 89C4 VLIDZ0 89E0 G89E0 89F3 G89F3 89FD G89FD 8A13 G8A13 8A23 G8A23 8A33 G8A33 8A35 G8A35 8A47 ACCPZ1 8A4F ACCPZ9 8A58 G8A58 8A66 G8A66 8A74 ACCPZ7 8A7C ACCPZ5 8A86 AZ1 8A8F ACCPZ2 8A9E G8A9E 8AB2 G8AB2 8AB7 G8AB7 8AC4 G8AC4 8AC8 G8AC8 8ACB ACCPZ3 8ADC G8ADC 8AEB G8AEB 8AF8 WRNSNM 8AFC ACCPZ8 8B0A G8B0A 8B20 G8B20 8B2A ACCPZ6 8B36 ACCPZ4 8B38 G8B38 8B3A READ 8B6B G8B6B 8B73 G8B73 8B8F G8B8F 8B96 SRDATA 8B99 SEARCH 8BB3 G8BB3 8BB5 SRDAZ1 8BBD SRDAZ0 8BC4 OLD 8BCA OLD1 8C15 G8C15 8C17 G8C17 8C32 OLDZ5 8C5A OLDZ7 8C63 OLDZ3 8CBD G8CBD 8CBF G8CBF 8CDE OLZZ 8CE9 G8CE9 8D16 OLDZ9 8D24 PAB3 8D2D OLDER 8D32 LRTOPZ 8D36 RELOCA 8D6F G8D6F 8D7E G8D7E 8D8E OLDZ2 8DAB G8DAB 8DAF G8DAF 8DB3 RELOZ1 8DB8 SAVE 8DF4 G8DF4 8E2B SAZ1 8E33 G8E33 8E42 G8E42 8E69 VSAVZ 8E91 G8E91 8EAD G8EAD 8EB1 LRTOPL 8EB7 GSAVE 8EFB G8EFB 8F1C G8F1C 8F44 GSAV1 8F4A GVMOV 8F76 SAVMG 8F88 G8F88 8FB6 G8FB6 8FCD G8FCD 8FF9 PAB1 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0079 FLMGR-359 9002 MERGE 902A G902A 905B MERGZ1 9068 LIST 908D LISTZ0 9094 G9094 9098 G9098 90A6 G90A6 90AE G90AE 90CA G90CA 90FB LISTZ1 9128 G9128 912D G912D 9132 G9132 9138 G9138 9140 G9140 914B LISTZ5 914E LISTZ3 9156 G9156 915F LISTZ4 916D G916D 9170 PAB 9179 GRMLST 91A4 GRSUB2 91AA GRSUB4 91B7 G91B7 91BB G91BB 91BC GRSUB3 91CA SUBREC 91DE EOF 9210 G9210 9212 EOFZ2 9216 FLOAT1 921E SUBEOF 9235 GPNAME 9242 G9242 9275 G9275 9284 G9284 928A GETVAR 9292 GETVZ0 929B GETVZ1 92A2 G92A2 92B2 G92B2 92B6 G92B6 92CC GETVZ2 92CD CTSTR 92D1 CTSTR0 92DE CTMPST 92EB G92EB 92EC CHKNUM 9303 G9303 9304 GETGFL 9308 GETDAT 930C GETRAM 9314 G9314 9320 G9320 9323 CHKSTR 932F CHKSZ0 933E EMPSTR 9348 G9348 934B DATEND 9355 CHKFN 935C CHKCNV 9371 CHKCON 937B CHKFZ1 938C RTC 938F G938F 9390 OUTEOF 93A5 G93A5 93A6 DELPAB 93C2 G93C2 93CE G93CE 93E0 G93E0 93E6 G93E6 93F4 G93F4 93F7 G93F7 9400 G9400 9411 G9411 9418 G9418 942C G942C 9431 G9431 9440 DELPZ1 944C DELPZ2 9451 G9451 946B G946B 9483 G9483 9495 G9495 949B G949B 94B4 G94B4 94B8 CNVDEF 94C1 CNVDZ0 94C2 PARREC 94EE G94EE 94EF DISACC 94F2 DISPZ1 9513 G9513 9518 G9518 9529 G9529 9571 G9571 958F G958F 95A0 G95A0 95AD CHKEND 95B7 G95B7 95B9 G95B9 95BA NXTCHR 95C9 NXTCZ0 95D5 G95D5 95DC G95DC 95DF SIZE1 95FC G95FC 960B RSTRING 961A COMMOD 9624 G9624 9627 TSTSEP 9631 TSTSZ0 964F G964F 9659 TSTSZ1 965A PARFN 96A5 OUTREC 96C8 INITZ1 96CC SCRO 96D3 G96D3 96E2 G96E2 96F5 PRINIT 9701 PRZZ0 970E OSTRNG 9711 G9711 9715 CHKREC 9718 CHKRZ0 9730 G9730 9733 CHKRZ1 973E G973E 973F INITKB 9751 G9751 9754 INTKB0 975E IOCALL 9765 IOCLZ1 976B CDSR 9793 CDSRZ0 9794 ERRZ2B 9797 ERRZ2 97A9 G97A9 97B3 WRNIO 97B8 G97B8 97BB ERRIO 97BF ERRSNM 97C3 ERRIM 97C7 ERRMEM 97CB ERRBV 97CF ERRINP 97D3 ERRDAT 97D7 ERRFE 97DB ERRPV 97DF ERRMUV 97E3 BUG01 97ED GTLENG 9800 ALCEND 9CEA CHARS A002 LITS05 A004 EXEC A006 LINE A008 DATAST A00A ASC A00C EXEC1 A00E EXEC6D A010 DELINK A012 CONVER A014 SQUISH A016 VALCD A018 INTRND A020 UBSUB A026 LINK1 A040 CPUBAS CB00 KEYTAB CD77 ERRTAB CE1F TRACBK CF68 RETNOS 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0080 FLMGR-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 0081 FLMGR-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 ST 2,V*SREF ST V@LEN(@SREF),V@CHRCNT(@SREF) CALL DSRCAL RTN ************************* CLSIT ***************************** CLSIT ST 1,V*SREF Prepare to close ******************** DSRCAL - DSKERR ************************ DSRCAL DST @SREF,@FAC12 Compute start address of specifications<<<<<<<<<<< DADD NLEN,@FAC12 Ready to call DSR routine <<<<<<<<<<<<<<<<<<<<