99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0001 
Version 2.0 (Weiand 1985)     Options : LCSFPF#########                         
[0001]               ***********************************************************
[0002]                      TITL 'RXB2015'
[0003]               ***********************************************************
[0004]                      GROM >6000
[0005]               ***********************************************************
[0006]                      TITL 'EQUATES EDIT-359'
[0007]               ***********************************************************
[0008] A040          CPUBAS EQU  >A040             CRU base
[0009]               ***********************************************************
[0010]               *           GROM ADDRESSES
[0011] 6038          MZMSG  EQU  >6038             Start of message area
[0012] 6A70          MZPSCN EQU  >6A70             Module PSCAN branch table add
[0013]               ***********************************************************
[0014] 801A          OUTREC EQU  >801A
[0015] 8024          G8024  EQU  >8024             CHKEND in upper GROM is diffe
[0016] 9CEA          CHARS  EQU  >9CEA
[0017] CB00          KEYTAB EQU  >CB00
[0018] CD77          ERRTAB EQU  >CD77
[0019] CE1F          TRACBK EQU  >CE1F
[0020] CF68          RETNOS EQU  >CF68
[0021] D000          EDTZZ0 EQU  >D000             Edit a line or display it tab
[0022] D00D          EDTZ00 EQU  >D00D             Edit a line or display it
[0023] D0F4          AMSMAP EQU  >D0F4
[0024] D0F6          AMSPAS EQU  >D0F6
[0025] D0F8          AMSOFF EQU  >D0F8
[0026] D0FA          AMSON  EQU  >D0FA
[0027] D0FC          ISRON  EQU  >D0FC
[0028] D0FE          ISROFF EQU  >D0FE
[0029] D0AF          SAVLIN EQU  >D0AF             Save input line address
[0030] E025          GE025  EQU  >E025             RXB PATCH CODE FOR EA CART
[0031]               ***********************************************************
[0032]               *    EQUATES FOR ROUTINES FROM OTHER SECTIONS
[0033]                
[0034] 8012          CLSALL EQU  >8012             CLose ALL open files
[0035] 8014          SAVE   EQU  >8014             SAVE a program
[0036] 8016          OLD    EQU  >8016             OLD  (load a program)
[0037] 8018          LIST   EQU  >8018             LIST a program
[0038] 8026          OLD1   EQU  >8026             A subprogram for LOAD
[0039] 8028          MERGE  EQU  >8028             MERGE a program
[0040] 802A          GRMLST EQU  >802A             List program line from ERAM
[0041] 802C          GRSUB2 EQU  >802C             Read from ERAM(GREAD1) or VDP
[0042] 802E          GRSUB3 EQU  >802E             Read from ERAM(use GREAD1) or
[0043]               *                              VDP, reset prossible bkpt to
[0044] 0032          ATNZZ  EQU  >0032             Arctangent routine
[0045] 6A84          ERRZ   EQU  >6A84             ERRor routine
[0046] A004          EXEC   EQU  >A004
[0047] A00A          ASC    EQU  >A00A
[0048] A00C          EXEC1  EQU  >A00C             EXECute a program statememt
[0049] A00E          EXEC6D EQU  >A00E
[0050] A010          DELINK EQU  >A010
[0051] A014          SQUISH EQU  >A014
[0052] A018          INTRND EQU  >A018             Initilize random number
[0053] A026          LINK1  EQU  >A026             LINK to subprogram
[0054]               ***********************************************************
[0055]               *    Equates for routine in MONITOR
[0056] 0010          CALDSR EQU  >10               CALL DEVICE SERVICE ROUTINE
[0057] 0034          TONE1  EQU  >34               ACCEPT TONE
[0058] 0036          TONE2  EQU  >36               BAD TONE
[0059]               ***********************************************************
[0060]               *    Equates for XMLs
[0061] 0000          SYNCHK EQU  >00               SYNCHK XML selector
[0062] 0003          SEETWO EQU  >03               SEETWO XML selector
[0063] 0070          COMPCT EQU  >70               PREFORM A GARBAGE COLLECTION
[0064] 0072          MEMCHK EQU  >72               MEMORY check routine: VDP
[0065] 0074          PARSE  EQU  >74               Parse a value

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0002 
EQUATES EDIT-359
[0066] 0077          VPUSH  EQU  >77               Push on value stack
[0067] 0078          VPOP   EQU  >78               Pop off value stack
[0068] 0079          PGMCHR EQU  >79               GET PROGRAM CHARACTER
[0069] 007A          SYM    EQU  >7A               Find Symbol entry
[0070] 007B          SMB    EQU  >7B               Find Symbol table entry
[0071] 007D          SCHSYM EQU  >7D               Search symbol table
[0072] 007E          SPEED  EQU  >7E               SPEED UP XML
[0073] 007F          CRUNCH EQU  >7F               Crunch an input line
[0074] 0081          CONTIN EQU  >81               Continue after a break
[0075] 0083          SCROLL EQU  >83               SCROLL THE SCREEN
[0076] 0084          IO     EQU  >84               IO utility (KW table search)
[0077] 0085          GREAD  EQU  >85               READ DATA FROM ERAM
[0078] 0086          GWRITE EQU  >86               WRITE DATA TO ERAM
[0079] 0087          DELREP EQU  >87               REMOVE CONTENT FROM VDP/ERAM
[0080] 0088          MVDN   EQU  >88               MOVE DATA IN VDP/ERAM
[0081] 0089          MVUP EQU    >89               MOVE DATA IN VDP/ERAM
[0082] 008A          VGWITE EQU  >8A               MOVE DATA FROM VDP TO ERAM
[0083] 008B          GVWITE EQU  >8B               WRITE DATA FROM GRAM TO VRAM
[0084] 008E          GDTECT EQU  >8E               ERAM DETECT&ROM PAGE 1 ENABLE
[0085] 008F          SCNSMT EQU  >8F               SCAN STATEMENT FOR PRESCAN
[0086]               ***********************************************************
[0087]               *    GPL Status Block
[0088] 8372          STACK  EQU  >8372             STACK FOR DATA
[0089] 8374          KEYBD  EQU  >8374             KEYBOARD SELCTION
[0090] 8375          RKEY   EQU  >8375             KEY CODE
[0091] 8378          RANDOM EQU  >8378             RANDOM NUMBER GENERATOR
[0092] 8379          TIMER  EQU  >8379             TIMING REGISTER
[0093] 837A          MOTION EQU  >837A             NUMBER OF MOVING SPRITES
[0094] 837B          VDPSTS EQU  >837B             VDP STATUS REGISTER
[0095] 837C          ERCODE EQU  >837C             STATUS REGISTER
[0096]               ***********************************************************
[0097]               *    Temporary workspaces in EDIT
[0098] 8300          VAR0   EQU  >8300            TEMPORARY
[0099] 8301          VARV   EQU  >8301            TEMPORARY
[0100] 8302          ACCUM  EQU  >8302            # OF BYTES ACCUMULATOR (4 BYTE
[0101] 8302          STPT   EQU  >8302            TWO BYTES
[0102] 8304          VARY   EQU  >8304
[0103] 8306          VARY2  EQU  >8306
[0104] 8304          PABPTR EQU  >8304
[0105] 8306          DFLTLM EQU  >8306            Default array limit (10)
[0106] 8306          CCPPTR EQU  >8306            OFFSET WITHIN RECORED (1)
[0107] 8307          RECLEN EQU  >8307            LENGTH OF CURRENT RECORD (1)
[0108] 8308          CCPADR EQU  >8308            RAM address of current refs
[0109] 8308          VARC   EQU  >8308
[0110] 8308          CCPADD EQU  >8308            RAM address of current color
[0111] 830A          CALIST EQU  >830A            Call list for resolving refs
[0112] 830A          RAMPTR EQU  >830A            Pointer for crunching
[0113] 830C          BYTES  EQU  >830C            BYTE COUNTER
[0114] 830C          NMPTR  EQU  >830C            Pointer save for pscan
[0115] 830E          CHSAV  EQU  >830E
[0116] 830E          CURINC EQU  >830E            Increment for auto-num mode
[0117] 8310          TOPSTK EQU  >8310            Top of data stack pointer
[0118] 8312          LINUM  EQU  >8312            Used to determine end of scan
[0119] 8314          NMLEN  EQU  >8314            Current line for auto-num
[0120] 8314          CURLIN EQU  >8314            Current line for auto-num
[0121] 8316          VAR9   EQU  >8316
[0122] 8316          XFLAG  EQU  >8316            SCAN FLAG-BITS USED AS BELOW
[0123] 8317          DSRFLG EQU  >8317            INTERNAL =60, EXTERNAL =0 (1)
[0124] 8317          FORNET EQU  >8317            Nesting level of for/next
[0125] 8302          AAA1   EQU  >8302
[0126] 830C          BBB1   EQU  >830C
[0127] 8308          CCC1   EQU  >8308
[0128]               ***********************************************************
[0129]               *    Permanent workspace variables

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0003 
EQUATES EDIT-359
[0130] 8318          STRSP  EQU  >8318            String space begining
[0131] 831A          STREND EQU  >831A            String space ending
[0132] 831C          SREF   EQU  >831C            Temporary string pointer
[0133] 831E          SMTSRT EQU  >831E            Start of current statement
[0134] 8320          VARW   EQU  >8320            Screen address
[0135] 8322          ERRCOD EQU  >8322            Return error code from ALC
[0136] 8324          STVSPT EQU  >8324            Value-stack base
[0137] 832A          VARA   EQU  >832A            Ending display location
[0138] 832C          PGMPTR EQU  >832C            Program text pointer
[0139] 832E          EXTRAM EQU  >832E            Line number table pointer
[0140] 8330          STLN   EQU  >8330            Start of line number table
[0141] 8332          ENLN   EQU  >8332            End of line number table
[0142] 8334          DATA   EQU  >8334            Data pointer for READ
[0143] 8336          LNBUF  EQU  >8336            Line table pointer for READ
[0144] 8338          INTRIN EQU  >8338            Add of intrinsic poly constant
[0145] 833A          SUBTAB EQU  >833A            Subprogram symbol table
[0146] 833C          IOSTRT EQU  >833C            PAB list/Start of I/O chain
[0147] 833E          SYMTAB EQU  >833E            Symbol table pointer
[0148] 8340          FREPTR EQU  >8340            Free space pointer
[0149] 8342          CHAT   EQU  >8342            Current charater/token
[0150] 8343          BASE   EQU  >8343            OPTION BASE value
[0151] 8344          PRGFLG EQU  >8344            Program/imperative flag
[0152] 8345          FLAG   EQU  >8345            General 8-bit flag
[0153] 8346          BUFLEV EQU  >8346            Crunch-buffer destruction leve
[0154] 8348          LSUBP  EQU  >8348            Last subprogram block on stack
[0155]               * FAC  EQU  >834A            Floating-point ACcurmulator
[0156] 834B          FAC1   EQU  FAC+1
[0157] 834C          FAC2   EQU  FAC+2
[0158] 834D          FAC3   EQU  FAC+3
[0159] 834E          FAC4   EQU  FAC+4
[0160] 834F          FAC5   EQU  FAC+5
[0161] 8350          FAC6   EQU  FAC+6
[0162] 8351          FAC7   EQU  FAC+7
[0163] 8352          FAC8   EQU  FAC+8
[0164] 8353          FAC9   EQU  FAC+9
[0165] 8354          FAC10  EQU  FAC+10
[0166] 8355          FAC11  EQU  FAC+11
[0167] 8356          FAC12  EQU  FAC+12
[0168] 8357          FAC13  EQU  FAC+13
[0169] 8358          FAC14  EQU  FAC+14
[0170] 8359          FAC15  EQU  FAC+15
[0171] 835A          FAC16  EQU  FAC+16
[0172] 835B          FAC17  EQU  FAC+17
[0173] 834C          AAA    EQU  FAC+2
[0174] 834E          CCC    EQU  FAC+4
[0175] 8350          BBB    EQU  FAC+6
[0176] 834C          DDD    EQU  FAC+2
[0177] 834E          FFF    EQU  FAC+4
[0178] 8350          EEE    EQU  FAC+6
[0179] 8354          DDD1   EQU  FAC+10
[0180] 8356          FFF1   EQU  FAC+12
[0181] 8358          EEE1   EQU  FAC+14
[0182]               * ARG  EQU  >835C             Floating-point ARGument
[0183] 835D          ARG1   EQU  ARG+1
[0184] 835E          ARG2   EQU  ARG+2
[0185] 835F          ARG3   EQU  ARG+3
[0186] 8360          ARG4   EQU  ARG+4
[0187] 8361          ARG5   EQU  ARG+5
[0188] 8362          ARG6   EQU  ARG+6
[0189] 8363          ARG7   EQU  ARG+7
[0190] 8364          ARG8   EQU  ARG+8
[0191] 8364          XSTLN  EQU  >8364            GKXB variable
[0192] 8366          XENLN  EQU  >8366            GKXB variable
[0193] 8367          ARG11  EQU  ARG+11

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0004 
EQUATES EDIT-359
[0194] 8368          XCURLI EQU  >8368            GKXB variable
[0195] 836A          XCURIN EQU  >836A            GKXB variable
[0196] 836B          ARG15  EQU  ARG+15
[0197] 836C          ARG16  EQU  ARG+16
[0198]               * VSPTR  EQU  >836E          Value stack pointer
[0199] 8370          HIVDP  EQU  >8370            Highest VDP Avaliable
[0200] 8376          EXPZ   EQU  >8376            Exponent in floating-point
[0201] 8384          RAMTOP EQU  >8384            Highest address in ERAM
[0202] 8386          RAMFRE EQU  >8386            Free pointer in the ERAM
[0203] 8388          RSTK   EQU  >8388            Subroutine stack base
[0204] 8389          RAMFLG EQU  >8389            ERAM flag
[0205] 83AF          STKMIN EQU  >83AF            Base of data stack
[0206] 83BD          STKMAX EQU  >83BD            Top of data stack
[0207] 83CE          PRTNFN EQU  >83CE
[0208]               ***********************************************************
[0209]               *    VDP addresses
[0210] 02E2          NLNADD EQU  >02E2             New LiNe ADDress
[0211] 02FE          ENDSCR EQU  >02FE             END of SCReen address
[0212] 0371          LODFLG EQU  >0371             Auto-boot needed flag
[0213] 0372          START  EQU  >0372             Line to start execution at
[0214] 0376          SYMBOL EQU  >0376             Saved symbol table pointer
[0215] 0382          SPGMPT EQU  >0382             Saved PGMPTR for continue
[0216] 0384          SBUFLV EQU  >0384             Saved BUFLEV for contiue
[0217] 0386          SEXTRM EQU  >0386             Saved EXTRAM for continue
[0218]               * SAVEVP EQU  >0388           Saved VSPRT for continue
[0219]               * ERRLN  EQU  >038A           On-error line pointer
[0220] 038C          BUFSRT EQU  >038C             Edit recall start addr (VARW)
[0221] 038E          BUFEND EQU  >038E             Edit recall end addr (VARA)
[0222] 0392          TABSAV EQU  >0392             Saved main symbol table ponte
[0223] 0396          SLSUBP EQU  >0396             Saved LSUBP for continue
[0224] 0398          SFLAG  EQU  >0398             Saved on-warning/break bits
[0225] 039A          SSTEMP EQU  >039A             To save subprogram program ta
[0226] 039C          SSTMP2 EQU  >039C             Same as above. Used in SUBPRO
[0227] 039E          MRGPAB EQU  >039E             MERGEd temporary for pab ptr
[0228]               *----------------------------------------------------------
[0229]               * Added 6/8/81 for NOPSCAN feature
[0230] 03B7          PSCFG  EQU  >03B7
[0231]               *----------------------------------------------------------
[0232]               * RXB PATCH CODE SWAP CONFLG & >35D7 FOR cONSOLE MENU FLAG
[0233]               *    Flag 0:  99/4  console, 5/29/81
[0234]               *         1:  99/4A console
[0235] 03BB          CONFLG EQU  >03BB
[0236]               *----------------------------------------------------------
[0237]               * Temporary
[0238] 0374          NOTONE EQU  >0374             NO-TONE for SIZE in ACCEPT us
[0239]               *                              in FLMGRS (4 bytes used)
[0240] 0388          SAVEVP EQU  >0388
[0241] 038A          ERRLN  EQU  >038A
[0242] 03AC          ACCVRW EQU  >03AC             Temoporary used in ERRZZ, als
[0243]               *                              used in FLMGRS
[0244] 03B0          VALIDP EQU  >03B0             Use as two values passing fro
[0245] 03B2          VALIDL EQU  >03B2             VALIDATE code to READL1
[0246] 03BC          OLDTOP EQU  >03BC             Temporary used in ERRZZ, also
[0247] 0820          CRNBUF EQU  >0820             CRuNch BUFfer address
[0248] 08BE          CRNEND EQU  >08BE             CRuNch buffer END
[0249] 08C0          RECBUF EQU  >08C0             Edit RECall BUFfer
[0250] 0958          VRAMVS EQU  >0958             Default base of value stack
[0251] 0390          CNSTMP EQU  >0390             Use as temporary stored place
[0252] 03C0          VROAZ  EQU  >03C0             Temporary VDP Roll Out Are
[0253]               ***********************************************************
[0254]               *    IMMEDITATE EQU VALUES
[0255] 0000          NUMBR  EQU  >00               NUMERIC validate
[0256] 0002          LISTZ  EQU  >02
[0257] 0005          OLDZ   EQU  >05

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0005 
EQUATES EDIT-359
[0258] 0006          RESEQZ EQU  >06
[0259] 0007          SAVEZ  EQU  >07
[0260] 0008          MERGEZ EQU  >08
[0261] 000A          DWNARR EQU  >0A
[0262] 000B          UPARR  EQU  >0B
[0263] 000D          CHRTN  EQU  >0D
[0264] 0060          OFFSET EQU  >60
[0265] 0080          OSPACE EQU  >20+OFFSET        GKXB space plus offset
[0266]               *  Bits in XFLAG
[0267] 0000          REMODE EQU  0                 REM only mode
[0268] 0001          OPTFLG EQU  1                 Option base declared flag
[0269] 0002          FNCFLG EQU  2                 Scanning UDF
[0270] 0003          SUBFLG EQU  3                 Scanning a subprogram
[0271] 0004          STRFLG EQU  4                 Scanning a string variable
[0272] 0005          SAFLG  EQU  5                 Scanning subprogram arguments
[0273] 0006          IFFLAG EQU  6                 Scanning an if-statement
[0274] 0007          ENTXFL EQU  7                 ENTERX flag
[0275]               *
[0276]               *               BITS IN FLAG
[0277]               * NUMBIT EQU  >00             Autonum bit (Can't use MACRO)
[0278] 0001          WRNPRT EQU  1                 Warning print bit
[0279] 0002          WRNSTP EQU  2                 Warning stop bit
[0280]               ***********************************************************
[0281]               * Editting command equates
[0282] 0002          BREAK  EQU  >02               Break key
[0283] 0003          DLETE  EQU  >03               Delete key
[0284] 0004          INSRT  EQU  >04               Insert key
[0285] 0006          RECALL EQU  >06               Edit-buffer recall
[0286] 0007          CLRLN  EQU  >07               Clear-line key
[0287] 0008          BACK   EQU  >08               Back-space key
[0288] 0009          FORW   EQU  >09               Forward-space key
[0289] 000A          DOWN   EQU  >0A               Down-arrow key
[0290] 000B          UPMV   EQU  >0B               Up-arrow key
[0291]               ***********************************************************
[0292]               * IMMEDITE VALUES
[0293] 0022          QUOTE  EQU  >22               "
[0294] 0024          DOLLAR EQU  >24               $
[0295] 007E          CURSOR EQU  >1E+OFFSET        CURSOR
[0296] 007F          EDGECH EQU  >1F+OFFSET        EDGE character
[0297] 002C          COMMA  EQU  >2C               ,
[0298] 002D          DASH   EQU  >2D               -  GKXB
[0299] 003A          COLON  EQU  >3A               :  GKXB
[0300]               ***********************************************************
[0301]               * PAB offset
[0302] 0001          CZCLOS EQU  1                 CLOSE CODE
[0303] 0004          COD    EQU  4                 I/O code
[0304] 000D          NLEN   EQU  13                Length of file descriptor
[0305]               ***********************************************************
[0306]               *    BASIC TOKEN TABLE
[0307]               *      EQU  >80               spare token
[0308] 0081          ELSEZ  EQU  >81               ELSE
[0309] 0082          SSEPZ  EQU  >82               ::
[0310] 0083          TREMZ  EQU  >83               $
[0311] 0084          IFZ    EQU  >84               IF
[0312] 0085          GOZ    EQU  >85               GO
[0313] 0086          GOTOZ  EQU  >86               GOTO
[0314] 0087          GOSUBZ EQU  >87               GOSUB
[0315] 0088          RETURZ EQU  >88               RETURN
[0316] 0089          DEFZ   EQU  >89               DEF
[0317] 008A          DIMZ   EQU  >8A               DIM
[0318] 008B          ENDZ   EQU  >8B               END
[0319] 008C          FORZ   EQU  >8C               FOR
[0320] 008D          LETZ   EQU  >8D               LET
[0321] 008E          BREAKZ EQU  >8E               BREAK

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0006 
EQUATES EDIT-359
[0322] 008F          UNBREZ EQU  >8F               UNBREAK
[0323] 0090          TRACEZ EQU  >90               TRACE
[0324] 0091          UNTRAZ EQU  >91               UNTRACE
[0325] 0092          INPUTZ EQU  >92               INPUT
[0326] 0093          DATAZ  EQU  >93               DATA
[0327] 0094          RESTOZ EQU  >94               RESTORE
[0328] 0095          RANDOZ EQU  >95               RANDOMIZE
[0329] 0096          NEXTZ  EQU  >96               NEXT
[0330] 0097          READZ  EQU  >97               READ
[0331] 0098          STOPZ  EQU  >98               STOP
[0332] 0099          DELETZ EQU  >99               DELETE
[0333] 009A          REMZ   EQU  >9A               REM
[0334] 009B          ONZ    EQU  >9B               ON
[0335] 009C          PRINTZ EQU  >9C               PRINT
[0336] 009D          CALLZ  EQU  >9D               CALL
[0337] 009E          OPTIOZ EQU  >9E               OPTION
[0338] 009F          OPENZ  EQU  >9F               OPEN
[0339] 00A0          CLOSEZ EQU  >A0               CLOSE
[0340] 00A1          SUBZ   EQU  >A1               SUB
[0341] 00A2          DISPLZ EQU  >A2               DISPLAY
[0342] 00A3          IMAGEZ EQU  >A3               IMAGE
[0343] 00A4          ACCEPZ EQU  >A4               ACCEPT
[0344] 00A5          ERRORZ EQU  >A5               ERROR
[0345] 00A6          WARNZ  EQU  >A6               WARNING
[0346] 00A7          SUBXTZ EQU  >A7               SUBEXIT
[0347] 00A8          SUBNDZ EQU  >A8               SUBEND
[0348] 00A9          RUNZ   EQU  >A9               RUN
[0349] 00AA          LINPUZ EQU  >AA               LINPUT
[0350]               *      EQU  >AB               Zpare token (LIBRARY)
[0351]               *      EQU  >AC               Zpare token (REAL)
[0352]               *      EQU  >AD               Zpare token (INTEGER)
[0353]               *      EQU  >AE               Zpare token (SCRATCH)
[0354]               *      EQU  >AF               Zpare token
[0355] 00B0          THENZ  EQU  >B0               THEN
[0356] 00B1          TOZ    EQU  >B1               TO
[0357] 00B2          STEPZ  EQU  >B2               STEP
[0358] 00B3          COMMAZ EQU  >B3               ,
[0359] 00B4          SEMICZ EQU  >B4               ;
[0360] 00B5          COLONZ EQU  >B5               :
[0361] 00B6          RPARZ  EQU  >B6               )
[0362] 00B7          LPARZ  EQU  >B7               (
[0363] 00B8          CONCZ  EQU  >B8               &          (CONCATENATE)
[0364]               *      EQU  >B9               spare token
[0365] 00BA          ORZ    EQU  >BA               OR
[0366] 00BB          ANDZ   EQU  >BB               AND
[0367] 00BC          XORZ   EQU  >BC               XOR
[0368] 00BD          NOTZ   EQU  >BD               NOT
[0369] 00BE          EQUALZ EQU  >BE               =
[0370] 00BF          LESSZ  EQU  >BF               <
[0371] 00C0          GREATZ EQU  >C0               >
[0372] 00C1          PLUSZ  EQU  >C1               +
[0373] 00C2          MINUSZ EQU  >C2               -
[0374] 00C3          MULTZ  EQU  >C3               *
[0375] 00C4          DIVIZ  EQU  >C4               /
[0376] 00C5          CIRCUZ EQU  >C5               ^
[0377]               *      EQU  >C6               spare token
[0378] 00C7          STRINZ EQU  >C7               QUOTED STRING
[0379] 00C8          UNQSTZ EQU  >C8               UNQUOTED STRING
[0380] 00C8          NUMZ   EQU  >C8               ALSO NUMERICAL STRING
[0381] 00C8          NUMCOZ EQU  >C8               ALSO UNQUOTED STRING
[0382] 00C9          LNZ    EQU  >C9               LINE NUMBER CONSTANT
[0383]               *      EQU  >CA               spare token
[0384] 00CB          ABSZ   EQU  >CB               ABS
[0385] 00CC          ATNZ   EQU  >CC               ATN

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0007 
EQUATES EDIT-359
[0386] 00CD          COSZ   EQU  >CD               COS
[0387] 00CE          EXPZZ  EQU  >CE               EXP
[0388] 00CF          INTZ   EQU  >CF               INT
[0389] 00D0          LOGZ   EQU  >D0               LOG
[0390] 00D1          SGNZZ  EQU  >D1               SGN
[0391] 00D2          SINZ   EQU  >D2               SIN
[0392] 00D3          SQRZ   EQU  >D3               SQR
[0393] 00D4          TANZ   EQU  >D4               TAN
[0394] 00D5          LENZ   EQU  >D5               LEN
[0395] 00D6          CHRZZ  EQU  >D6               CHR$
[0396] 00D7          RNDZ   EQU  >D7               RND
[0397] 00D8          SEGZZ  EQU  >D8               SEG$
[0398] 00D9          POSZ   EQU  >D9               POS
[0399] 00DA          VAL    EQU  >DA               VAL
[0400] 00DB          STRZZ  EQU  >DB               STR$
[0401] 00DC          ASCZ   EQU  >DC               ASC
[0402] 00DD          PIZ    EQU  >DD               PI
[0403] 00DE          RECZ   EQU  >DE               REC
[0404] 00DF          MAXZ   EQU  >DF               MAX
[0405] 00E0          MINZ   EQU  >E0               MIN
[0406] 00E1          RPTZZ  EQU  >E1               RPT$
[0407]               *      EQU  >E2               unused
[0408]               *      EQU  >E2               unused
[0409]               *      EQU  >E3               unused
[0410]               *      EQU  >E4               unused
[0411]               *      EQU  >E5               unused
[0412]               *      EQU  >E6               unused
[0413]               *      EQU  >E7               unused
[0414] 00E8          NUMERZ EQU  >E8               NUMERIC
[0415] 00E9          DIGITZ EQU  >E9               DIGIT
[0416] 00EA          UALPHZ EQU  >EA               UALPHA
[0417] 00EB          SIZEZ  EQU  >EB               SIZE
[0418] 00EC          ALLZ   EQU  >EC               ALL
[0419] 00ED          USINGZ EQU  >ED               USING
[0420] 00EE          BEEPZ  EQU  >EE               BEEP
[0421] 00EF          ERASEZ EQU  >EF               ERASE
[0422] 00F0          ATZ    EQU  >F0               AT
[0423] 00F1          BASEZ  EQU  >F1               BASE
[0424]               *      EQU  >F2               spare token (TEMPORARY)
[0425]               *      EQU  >F3               spare token (VARIABLE)
[0426]               *      EQU  >F4               spare token (RELATIVE)
[0427]               *      EQU  >F5               spare token (INTERNAL)
[0428] 00F6          SEQUEZ EQU  >F6               SEQUENTIAL
[0429] 00F7          OUTPUZ EQU  >F7               OUTPUT
[0430] 00F8          UPDATZ EQU  >F8               UPDATE
[0431] 00F9          APPENZ EQU  >F9               APPEND
[0432] 00FA          FIXEDZ EQU  >FA               FIXED
[0433] 00FB          PERMAZ EQU  >FB               PERMANENT
[0434] 00FC          TABZ   EQU  >FC               TAB
[0435] 00FD          NUMBEZ EQU  >FD               #
[0436] 00FE          VALIDZ EQU  >FE               VALIDATE
[0437]               *      EQU  >FF               ILLEGAL VALUE
[0438]               ***********************************************************
[0439]                      TITL 'EDIT-359'
[0440]               ***********************************************************
[0441]               *                        GROM HEADER
[0442]               ***********************************************************
[0443]                      GROM >6000
[0444]                      AORG 0
[0445] 6000 AA,0F           DATA >AA0F      * VALID GROM / VERSION
[0446] 6002 01,00           DATA >0100      * (FUTURE EXPANSION)
[0447] 6004 00,00           DATA >0000      * POWERUP
[0448] 6006 63,3B           DATA XBCART     * PROGRAMS
[0449] 6008 00,00           DATA >0000      * DSR 

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0008 
EDIT-359
[0450] 600A A0,26           DATA LINK1      * CALL
[0451] 600C 00,00           DATA >0000      * INTERUPT
[0452] 600E 00,00           DATA >0000      * BASIC CALL
[0453]               ***********************************************************
[0454]               *    Branch table for routines in EDIT
[0455]               ***********************************************************
[0456] 6010 45,71           BR   AUTON
[0457] 6012 43,DD    G6012  BR   TOPL15
[0458] 6014 48,C3           BR   INITPG
[0459] 6016 49,5A           BR   SPRINT            Initialize sprites.
[0460] 6018 5D,4E           BR   CHRTBL            RXB CHRTBL
[0461] 601A 43,DA           BR   TOPL10
[0462] 601C 49,25    G601C  BR   CHRTAB
[0463] 601E 44,9B           BR   SZRUN
[0464] 6020 40,20           BR   $                 Was GETLNB
[0465] 6022 48,DC           BR   KILSYM
[0466] 6024 40,24           BR   $                 Was CRUNCH
[0467] 6026 48,45           BR   GETNB
[0468] 6028 48,4A           BR   GETNB2
[0469] 602A 48,50           BR   GETCHR
[0470] 602C 48,6A           BR   GETLN
[0471] 602E 45,7C           BR   AUTO1
[0472] 6030 63,D3           DATA TOPL02
[0473] 6032 46,CF           BR   EDITLN
[0474] 6034 48,10           BR   GRSUB1            Read from ERAM (use GREAD/VDP
[0475] 6036 48,28           BR   GWSUB             Write a few bytes to ERAM/VDP
[0476]               *    Error and system messages
[0477]               *      BASE 0,0,>300,>300,0,0,>60
[0478] 6038 A9,CE,80 MSGERR BYTE >A9,>CE,>80,>A5,>D2,>D2,>CF,>D2
       603B A5,D2,D2
       603E CF,D2
[0479]               *           In Error
[0480]               * RXB PATCH CODE ******************************************
[0481]               * MSGFST BYTE >07,>B2,>C5,>C1,>C4,>D9,>80,>8A
[0482]               *            Ready *
[0483] 6040 07,B2,B8 MSGFST BYTE >07,>B2,>B8,>A2,>80,>8A,>80,>80
       6043 A2,80,8A
       6046 80,80
[0484]               *            RXB *
[0485] 6048 0A,A2,D2 MSGBRK BYTE >0A,>A2,>D2,>C5,>C1,>CB,>D0,>CF,>C9,>CE,>D4
       604B C5,C1,CB
       604E D0,CF,C9
       6051 CE,D4
[0486]               *            Breakpoint
[0487] 6053 B4,D2,D9 MSGTA  BYTE >B4,>D2,>D9,>80,>A1,>C7,>C1,>C9,>CE
       6056 80,A1,C7
       6059 C1,C9,CE
[0488]               *           Try Again
[0489] 605C 8A,80,B7 MSGWRN BYTE >8A,>80,>B7,>C1,>D2,>CE,>C9,>CE,>C7
       605F C1,D2,CE
       6062 C9,CE,C7
[0490]               *            * Warning
[0491] 6065 10,AE,D5 MSG10  BYTE >10,>AE,>D5,>CD,>C5,>D2,>C9,>C3,>80
       6068 CD,C5,D2
       606B C9,C3,80
[0492]               *            Numeric
[0493] 606E AF,D6,C5        BYTE >AF,>D6,>C5,>D2,>C6,>CC,>CF,>D7
       6071 D2,C6,CC
       6074 CF,D7
[0494]               *           Overflow
[0495] 6076 0C,B3,D9 MSG14  BYTE >0C,>B3,>D9,>CE,>D4,>C1,>D8,>80,>A5,>D2,>D2,>CF
       6079 CE,D4,C1
       607C D8,80,A5
       607F D2,D2,CF

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0009 
EDIT-359
[0496] 6082 D2              BYTE >D2
[0497]               *            Syntax Error
[0498] 6083 18,A9,CC MSG16  BYTE >18,>A9,>CC,>CC,>C5,>C7,>C1,>CC,>80,>A1,>C6,>D4
       6086 CC,C5,C7
       6089 C1,CC,80
       608C A1,C6,D4
[0499] 608F C5,D2,80        BYTE >C5,>D2,>80
[0500]               *            Illegal After
[0501] 6092 B3,D5,C2        BYTE >B3,>D5,>C2,>D0,>D2,>CF,>C7,>D2,>C1,>CD
       6095 D0,D2,CF
       6098 C7,D2,C1
       609B CD
[0502]               *           Subprogram
[0503] 609C 10,B5,CE MSG17  BYTE >10,>B5,>CE,>CD,>C1,>D4,>C3,>C8,>C5,>C4,>80
       609F CD,C1,D4
       60A2 C3,C8,C5
       60A5 C4,80
[0504]               *           Unmatched
[0505] 60A7 B1,D5,CF        BYTE >B1,>D5,>CF,>D4,>C5,>D3
       60AA D4,C5,D3
[0506]               *           Quotes
[0507] 60AD 0D,AE,C1 MSG19  BYTE >0D,>AE,>C1,>CD,>C5,>80,>B4,>CF,>CF,>80,>AC,>CF
       60B0 CD,C5,80
       60B3 B4,CF,CF
       60B6 80,AC,CF
[0508] 60B9 CE,C7           BYTE >CE,>C7
[0509]               *            Name Too Long
[0510] 60BB 16,B3,D4 MSG24  BYTE >16,>B3,>D4,>D2,>C9,>CE,>C7,>8D,>AE,>D5,>CD,>C2
       60BE D2,C9,CE
       60C1 C7,8D,AE
       60C4 D5,CD,C2
[0511] 60C7 C5,D2,80        BYTE >C5,>D2,>80
[0512]               *            String-Number
[0513] 60CA AD,C9,D3        BYTE >AD,>C9,>D3,>CD,>C1,>D4,>C3,>C8
       60CD CD,C1,D4
       60D0 C3,C8
[0514]               *           Mismatch
[0515] 60D2 11,AF,D0 MSG25  BYTE >11,>AF,>D0,>D4,>C9,>CF,>CE,>80,>A2,>C1,>D3,>C5
       60D5 D4,C9,CF
       60D8 CE,80,A2
       60DB C1,D3,C5
[0516] 60DE 80              BYTE >80
[0517]               *            Option Base
[0518] 60DF A5,D2,D2        BYTE >A5,>D2,>D2,>CF,>D2
       60E2 CF,D2
[0519]               *           Error
[0520] 60E4 14,A9,CD MSG28  BYTE >14,>A9,>CD,>D0,>D2,>CF,>D0,>C5,>D2,>CC,>D9,>80
       60E7 D0,D2,CF
       60EA D0,C5,D2
       60ED CC,D9,80
[0521]               *            Improperly
[0522] 60F0 B5,D3,C5        BYTE >B5,>D3,>C5,>C4,>80,>AE,>C1,>CD,>C5
       60F3 C4,80,AE
       60F6 C1,CD,C5
[0523]               *           Used Name
[0524] 60F9 16,B5,CE MSG34  BYTE >16,>B5,>CE,>D2,>C5,>C3,>CF,>C7,>CE,>C9,>DA,>C5
       60FC D2,C5,C3
       60FF CF,C7,CE
       6102 C9,DA,C5
[0525] 6105 C4,80           BYTE >C4,>80
[0526]               *            Unrecognized
[0527] 6107 A3,C8,C1        BYTE >A3,>C8,>C1,>D2,>C1,>C3,>D4,>C5,>D2
       610A D2,C1,C3
       610D D4,C5,D2

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0010 
EDIT-359
[0528]               *           Character
[0529] 6110 0B,A9,CD MSG36  BYTE >0B,>A9,>CD,>C1,>C7,>C5,>80,>A5,>D2,>D2,>CF,>D2
       6113 C1,C7,C5
       6116 80,A5,D2
       6119 D2,CF,D2
[0530]               *            Image Error
[0531] 611C 0B,AD,C5 MSG39  BYTE >0B,>AD,>C5,>CD,>CF,>D2,>D9,>80,>A6,>D5,>CC,>CC
       611F CD,CF,D2
       6122 D9,80,A6
       6125 D5,CC,CC
[0532]               *            Memory Full
[0533] 6128 0E,B3,D4 MSG40  BYTE >0E,>B3,>D4,>C1,>C3,>CB,>80,>AF,>D6,>C5,>D2,>C6
       612B C1,C3,CB
       612E 80,AF,D6
       6131 C5,D2,C6
[0534] 6134 CC,CF,D7        BYTE >CC,>CF,>D7
[0535]               *            Stack Overflow
[0536] 6137 10,AE,A5 MSG43  BYTE >10,>AE,>A5,>B8,>B4,>80,>B7,>C9,>D4,>C8,>CF,>D5
       613A B8,B4,80
       613D B7,C9,D4
       6140 C8,CF,D5
[0537] 6143 D4,80           BYTE >D4,>80
[0538]               *            NEXT Without
[0539] 6145 A6,AF,B2        BYTE >A6,>AF,>B2
[0540]               *           FOR
[0541] 6148 10,A6,AF MSG44  BYTE >10,>A6,>AF,>B2,>8D,>AE,>A5,>B8,>B4,>80
       614B B2,8D,AE
       614E A5,B8,B4
       6151 80
[0542]               *           FOR-NEXT
[0543] 6152 AE,C5,D3        BYTE >AE,>C5,>D3,>D4,>C9,>CE,>C7
       6155 D4,C9,CE
       6158 C7
[0544]               *           Nesting
[0545] 6159 15,AD,D5 MSG47  BYTE >15,>AD,>D5,>D3,>D4,>80,>A2,>C5,>80,>A9,>CE
       615C D3,D4,80
       615F A2,C5,80
       6162 A9,CE
[0546]               *            Must be in
[0547] 6164 80,B3,D5        BYTE >80,>B3,>D5,>C2,>D0,>D2,>CF,>C7,>D2,>C1,>CD
       6167 C2,D0,D2
       616A CF,C7,D2
       616D C1,CD
[0548]               *            Subprogram
[0549] 616F 19,B2,C5 MSG48  BYTE >19,>B2,>C5,>C3,>D5,>D2,>D3,>C9,>D6,>C5,>80
       6172 C3,D5,D2
       6175 D3,C9,D6
       6178 C5,80
[0550]               *           Recursive
[0551] 617A B3,D5,C2        BYTE >B3,>D5,>C2,>D0,>D2,>CF,>C7,>D2,>C1,>CD,>80,>A3
       617D D0,D2,CF
       6180 C7,D2,C1
       6183 CD,80,A3
[0552] 6186 C1,CC,CC        BYTE >C1,>CC,>CC
[0553]               *           Subprogram Call
[0554] 6189 0E,AD,C9 MSG49  BYTE >0E,>AD,>C9,>D3,>D3,>C9,>CE,>C7,>80,>B3,>B5,>A2
       618C D3,D3,C9
       618F CE,C7,80
       6192 B3,B5,A2
[0555] 6195 A5,AE,A4        BYTE >A5,>AE,>A4
[0556]               *            Missing Subend
[0557] 6198 14,B2,A5 MSG51  BYTE >14,>B2,>A5,>B4,>B5,>B2,>AE,>80,>B7,>C9,>D4,>C8
       619B B4,B5,B2
       619E AE,80,B7

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0011 
EDIT-359
       61A1 C9,D4,C8
[0558] 61A4 CF,D5,D4        BYTE >CF,>D5,>D4
[0559]               *            RETURN Without
[0560] 61A7 80,A7,AF        BYTE >80,>A7,>AF,>B3,>B5,>A2
       61AA B3,B5,A2
[0561]               *           GOSUB
[0562] 61AD 10,B3,D4 MSG54  BYTE >10,>B3,>D4,>D2,>C9,>CE,>C7,>80
       61B0 D2,C9,CE
       61B3 C7,80
[0563]               *            String
[0564] 61B5 B4,D2,D5        BYTE >B4,>D2,>D5,>CE,>C3,>C1,>D4,>C5,>C4
       61B8 CE,C3,C1
       61BB D4,C5,C4
[0565]               *           Truncated
[0566] 61BE 0D,A2,C1 MSG57  BYTE >0D,>A2,>C1,>C4,>80,>B3,>D5,>C2,>D3,>C3,>D2,>C9
       61C1 C4,80,B3
       61C4 D5,C2,D3
       61C7 C3,D2,C9
[0567] 61CA D0,D4           BYTE >D0,>D4
[0568]               *            Bad Subscript
[0569] 61CC 0E,AC,C9 MSG60  BYTE >0E,>AC,>C9,>CE,>C5,>80,>AE,>CF,>D4,>80,>A6,>CF
       61CF CE,C5,80
       61D2 AE,CF,D4
       61D5 80,A6,CF
[0570] 61D8 D5,CE,C4        BYTE >D5,>CE,>C4
[0571]               *           Line Not Found
[0572] 61DB 0F,A2,C1 MSG61  BYTE >0F,>A2,>C1,>C4,>80,>AC,>C9,>CE,>C5,>80
       61DE C4,80,AC
       61E1 C9,CE,C5
       61E4 80
[0573]               *           Bad Line
[0574] 61E5 AE,D5,CD        BYTE >AE,>D5,>CD,>C2,>C5,>D2
       61E8 C2,C5,D2
[0575]               *           Number
[0576] 61EB 0E,A3,C1 MSG67  BYTE >0E,>A3,>C1,>CE,>87,>D4,>80,>A3,>CF,>CE,>D4,>C9
       61EE CE,87,D4
       61F1 80,A3,CF
       61F4 CE,D4,C9
[0577] 61F7 CE,D5,C5        BYTE >CE,>D5,>C5
[0578]               *            Can't Continue
[0579] 61FA 1A,A3,CF MSG69  BYTE >1A,>A3,>CF,>CD,>CD,>C1,>CE,>C4,>80
       61FD CD,CD,C1
       6200 CE,C4,80
[0580]               *            Command
[0581] 6203 A9,CC,CC        BYTE >A9,>CC,>CC,>C5,>C7,>C1,>CC,>80,>C9,>CE,>80
       6206 C5,C7,C1
       6209 CC,80,C9
       620C CE,80
[0582]               *           Illegal in
[0583] 620E B0,D2,CF        BYTE >B0,>D2,>CF,>C7,>D2,>C1,>CD
       6211 C7,D2,C1
       6214 CD
[0584]               *           Program
[0585] 6215 17,AF,CE MSG70  BYTE >17,>AF,>CE,>CC,>D9,>80,>AC,>C5,>C7,>C1,>CC,>80
       6218 CC,D9,80
       621B AC,C5,C7
       621E C1,CC,80
[0586]               *            Only Legal
[0587] 6221 C9,CE,80        BYTE >C9,>CE,>80 >C1,>80,>B0,>D2,>CF,>C7,>D2,>C1,>CD
       6224 C1,80,B0
       6227 D2,CF,C7
       622A D2,C1,CD
[0588]               *           in a Program
[0589] 622D 0C,A2,C1 MSG74  BYTE >0C,>A2,>C1,>C4,>80,>A1,>D2,>C7,>D5,>CD,>C5,>CE

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0012 
EDIT-359
       6230 C4,80,A1
       6233 D2,C7,D5
       6236 CD,C5,CE
[0590] 6239 D4              BYTE >D4
[0591]               *            Bad Argument
[0592] 623A 12,AE,CF MSG78  BYTE >12,>AE,>CF,>80,>B0,>D2,>CF,>C7,>D2,>C1,>CD
       623D 80,B0,D2
       6240 CF,C7,D2
       6243 C1,CD
[0593]               *            No Program
[0594] 6245 80,B0,D2        BYTE >80,>B0,>D2,>C5,>D3,>C5,>CE,>D4
       6248 C5,D3,C5
       624B CE,D4
[0595]               *            Present
[0596] 624D 09,A2,C1 MSG79  BYTE >09,>A2,>C1,>C4,>80,>B6,>C1,>CC,>D5,>C5
       6250 C4,80,B6
       6253 C1,CC,D5
       6256 C5
[0597]               *            Bad Value
[0598] 6257 17,A9,D1 MSG81  BYTE >17,>A9,>D1,>C3,>C3,>D2,>D2,>C5,>C3,>D4,>80
       625A C3,C3,D2
       625D D2,C5,C3
       6260 D4,80
[0599]               *            Incorrect
[0600] 6262 A1,D2,C7        BYTE >A1,>D2,>C7,>D5,>CD,>C5,>CE,>D4,>80,>AC,>C9,>D3
       6265 D5,CD,C5
       6268 CE,D4,80
       626B AC,C9,D3
[0601] 626E D4              BYTE >D4
[0602]               *           Argument List
[0603] 626F 0B,A9,CE MSG83  BYTE >0B,>A9,>CE,>D0,>D5,>D4,>80,>A5,>D2,>D2,>CF,>D2
       6272 D0,D5,D4
       6275 80,A5,D2
       6278 D2,CF,D2
[0604]               *            Input Error
[0605] 627B 0A,A4,C1 MSG84  BYTE >0A,>A4,>C1,>D4,>C1,>80,>A5,>D2,>D2,>CF,>D2
       627E D4,C1,80
       6281 A5,D2,D2
       6284 CF,D2
[0606]               *            Data Error
[0607] 6286 14,B0,D2 MSG97  BYTE >14,>B0,>D2,>CF,>D4,>C5,>C3,>D4,>C9,>CF,>CE,>80
       6289 CF,D4,C5
       628C C3,D4,C9
       628F CF,CE,80
[0608]               *            Protection
[0609] 6292 B6,C9,CF        BYTE >B6,>C9,>CF,>CC,>C1,>D4,>C9,>CF,>CE
       6295 CC,C1,D4
       6298 C9,CF,CE
[0610]               *           Violation
[0611] 629B 0A,A6,C9 MSG109 BYTE >0A,>A6,>C9,>CC,>C5,>80,>A5,>D2,>D2,>CF,>D2
       629E CC,C5,80
       62A1 A5,D2,D2
       62A4 CF,D2
[0612]               *            File Error
[0613] 62A6 09,A9,8F MSG130 BYTE >09,>A9,>8F,>AF,>80,>A5,>D2,>D2,>CF,>D2
       62A9 AF,80,A5
       62AC D2,D2,CF
       62AF D2
[0614]               *            I/O Error
[0615] 62B0 14,B3,D5 MSG135 BYTE >14,>B3,>D5,>C2,>D0,>D2,>CF,>C7,>D2,>C1,>CD,>80
       62B3 C2,D0,D2
       62B6 CF,C7,D2
       62B9 C1,CD,80
[0616]               *            Subprogram

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0013 
EDIT-359
[0617] 62BC AE,CF,D4        BYTE >AE,>CF,>D4,>80,>A6,>CF,>D5,>CE,>C4
       62BF 80,A6,CF
       62C2 D5,CE,C4
[0618]               *            Not Found
[0619] 62C5 0D,AC,C9 MSG62  BYTE >0D,>AC,>C9,>CE,>C5,>80,>B4,>CF,>CF,>80,>AC,>CF
       62C8 CE,C5,80
       62CB B4,CF,CF
       62CE 80,AC,CF
[0620] 62D1 CE,C7           BYTE >CE,>C7
[0621]               *            Line Too Long
[0622] 62D3 A2,D9,D4 MSGFRE BYTE >A2,>D9,>D4,>C5,>D3,>80,>A6,>D2,>C5,>C5
       62D6 C5,D3,80
       62D9 A6,D2,C5
       62DC C5
[0623]               *           Bytes Free
[0624] 62DD A2,D9,D4 MSGSFR BYTE >A2,>D9,>D4,>C5,>D3,>80,>CF,>C6,>80,>B3,>D4,>C1
       62E0 C5,D3,80
       62E3 CF,C6,80
       62E6 B3,D4,C1
[0625] 62E9 C3,CB,80        BYTE >C3,>CB,>80
[0626]               *           Bytes of Stack
[0627] 62EC A6,D2,C5        BYTE >A6,>D2,>C5,>C5
       62EF C5
[0628]               *           Free
[0629] 62F0 A2,D9,D4 MSGGFR BYTE >A2,>D9,>D4,>C5,>D3,>80,>CF,>C6,>80,>B0,>D2,>CF
       62F3 C5,D3,80
       62F6 CF,C6,80
       62F9 B0,D2,CF
[0630] 62FC C7,D2,C1        BYTE >C7,>D2,>C1
[0631]               *           Bytes of Program
[0632] 62FF CD              BYTE >CD
[0633] 6300 B3,D0,C1 MSGGF1 BYTE >B3,>D0,>C1,>C3,>C5,>80,>A6,>D2,>C5,>C5
       6303 C3,C5,80
       6306 A6,D2,C5
       6309 C5
[0634]               *           Space Free
[0635] 630A B5,A4,A6 MSGCIS BYTE >B5,>A4,>A6,>80,>B2,>C5,>C6,>D3,>80,>A9,>D4,>D3
       630D 80,B2,C5
       6310 C6,D3,80
       6313 A9,D4,D3
[0636] 6316 C5,CC,C6        BYTE >C5,>CC,>C6
[0637]               *           UDF Refs Itself
[0638] 6319 A3,C1,CC MSGCF  BYTE >A3,>C1,>CC,>CC,>C5,>C4,>80,>A6,>D2,>CF,>CD
       631C CC,C5,C4
       631F 80,A6,D2
       6322 CF,CD
[0639]               *           Called From
[0640] 6324 16,B3,D0 MSG56  BYTE >16,>B3,>D0,>C5,>C5,>C3,>C8,>80,>B3,>D4,>D2,>C9
       6327 C5,C5,C3
       632A C8,80,B3
       632D D4,D2,C9
[0641] 6330 CE,C7,80        BYTE >CE,>C7,>80
[0642]               *            Speech String
[0643] 6333 B4,CF,CF        BYTE >B4,>CF,>CF,>80,>AC,>CF,>CE,>C7
       6336 80,AC,CF
       6339 CE,C7
[0644]               *           Too Long
[0645]               *      BASE 0,0,>0300,>0300,0,0,0
[0646]               ***********************************************************
[0647] 633B 7E,B6,7E XBCART DATA MENU,NOMENU
       633E A3
[0648] 633F 11              BYTE 17
[0649] 6340 52,58,42        TEXT 'RXB 2015 NO MENU '
       6343 20,32,30

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0014 
EDIT-359
       6346 31,35,20
       6349 4E,4F,20
       634C 4D,45,4E
       634F 55,20
[0650]               ***********************************************************
[0651] 6351 09       DSCLOD BYTE 9
[0652] 6352 44,53,4B        TEXT 'DSK1.LOAD'
       6355 31,2E,4C
       6358 4F,41,44
[0653] 635B 00              BYTE 0
[0654] 635C C3,81,00 SPCCHR BYTE >C3,>81,>00,>00,>00,>00,>81,>C3   * CURSOR CHAR
       635F 00,00,00
       6362 81,C3
[0655] 6364 00,00,00 EMPTY  DATA 0,0,0,0                           * EDGE CHAR
       6367 00,00,00
       636A 00,00
[0656] 636C E0,00,20 VDPREG BYTE >E0,>00,>20,>00,>06,>00
       636F 00,06,00
[0657]               ***********************************************************
[0658]               *            START OF BASIC INTERPETER
[0659]               ***********************************************************
[0660]               * GROM Address >6372 TOPLEV
[0661] 6372 86,A3,71 TOPLEV CLR  V@LODFLG           Initialize temp area
[0662]               * RXB PATCH CODE USER ***********************************
[0663]               *        MOVE 77,V@LODFLG,V@LODFLG+1
[0664]               *        ST   5,@KEYBD          Select full keyboard
[0665]               *        SCAN
[0666]               *        CZ   @KEYBD
[0667]               *        BR   G6388             99/4A Console?
[0668]               *       ST   >01,V@CONFLG      Select 99/4A console
[0669] 6375 BC,4A,A3        ST   V@CONFLG,@FAC       Save CONFLG
       6378 BB
[0670] 6379 35,00,4D        MOVE 77,V@LODFLG,V@LODFLG+1
       637C A3,72,A3
       637F 71
[0671] 6380 BC,A3,BB        ST   @FAC,V@CONFLG       Restore CONFLG
       6383 4A
[0672] 6384 43,88           BR   G6388
[0673] 6386 43,88           BR   G6388
[0674]               *
[0675] 6388 86,74    G6388  CLR  @KEYBD
[0676] 638A BF,A3,8C        DST  NLNADD,V@BUFSRT   Initialize edit-buffer start
       638D 02,E2
[0677] 638F BF,A3,8E        DST  NLNADD,V@BUFEND   Initialize edit-buffer end
       6392 02,E2
[0678] 6394 31,00,02        MOVE 2,G@ATNZZ,@INTRIN Get address of ATNZZ
       6397 38,00,32
[0679] 639A B2,38,1F        AND  >1F,@INTRIN       Throw away the BR opcode
[0680] 639D A3,38,00        DADD >5B,@INTRIN       Address of polynomial constan
       63A0 5B
[0681] 63A1 BE,A3,71        ST   >31,V@LODFLG      indicate try auto-boot
       63A4 31
[0682]               *----------------------------------------------------------
[0683]               * Add the following line for fixing "MEMORY FULL" error
[0684]               * occurring during MERGE execution will leave the file open
[0685]               * to disk DSR bug, 5/19/81
[0686] 63A5 86,A3,9E SZNEW  CLR  V@MRGPAB          Initialize merged temporary
[0687]               *                              for PAB pointer
[0688]               *----------------------------------------------------------
[0689] 63A8 BE,73,88        ST   RSTK,@SUBSTK      Load base of subroutine stack
[0690] 63AB 06,69,17        CALL CHRTA2            Load character table
[0691] 63AE 86,45           CLR  @FLAG             Initialize flag byte
[0692] 63B0 87,46           DCLR @BUFLEV           Initialize crunch buffer leve
[0693] 63B2 06,80,12        CALL CLSALL            Close all open files

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0015 
EDIT-359
[0694] 63B5 86,34           CLR  @DATA             Initialize READ/DATA pointer
[0695] 63B7 BF,6E,09        DST  VRAMVS,@VSPTR     Initialize base of value stac
       63BA 58
[0696] 63BB BD,24,6E        DST  @VSPTR,@STVSPT    Save in permanent base
[0697] 63BE BD,A3,88        DST  @VSPTR,V@SAVEVP
       63C1 6E
[0698] 63C2 06,68,C3        CALL INITPG            Initialize program & s.t.
[0699] 63C5 06,A0,18        CALL INTRND            Initialize random number
[0700] 63C8 8E,A3,71        CZ   V@LODFLG
[0701] 63CB 63,D3           BS   TOPL02            If need auto-boot
[0702]               * RXB PATCH CODE *************
[0703]               *      CLR  V@LODFLG          Won't ever need to do again
[0704] 63CD 43,D0           BR   G63D0
[0705]               * RXB PATCH CODE ******************************************
[0706]                      AORG >03D0
[0707] 63D0 06,64,8E G63D0  CALL AUTOLD            Attempt an auto-boot
[0708]               *     Label TOPL02 is used by auto-boot in detection of err
[0709] 63D3          ERRRDY EQU  $
[0710] 63D3 06,6A,84 TOPL02 CALL G6A84             Say READY
[0711] 63D6 00              BYTE 0               *  returns to TOPL15
[0712] 63D7 06,68,C3 TOPL05 CALL INITPG            Initialize program space
[0713] 63DA 06,68,DC TOPL10 CALL KILSYM            Kill the symbol table
[0714]               * RXB PATCH CODE *************
[0715]               * TOPL15 AND  >F7,@FLAG         If error in UDF execution
[0716] 63DD 05,7D,B1 TOPL15 B    MYSRCH
[0717] 63E0 BE,74,05 G63E0  ST   5,@KEYBD          Select full keyboard
[0718] 63E3 03              SCAN
[0719] 63E4 86,74           CLR  @KEYBD
[0720] 63E6 BE,73,88 TOPL20 ST   RSTK,@SUBSTK      Initialize subroutine stack
[0721] 63E9 BF,20,02 TOPL25 DST  NLNADD,@VARW      Screen addr = lower left corn
       63EC E2
[0722] 63ED 86,80,89        CLR  @RAMFLG           Clear the RAMFLG
[0723] 63F0 86,44           CLR  @PRGFLG           Make sure not in program mode
[0724]               * Check for auto-num mode
[0725] 63F2 DA,45,01        CLOG >01,@FLAG         If auto-num on
[0726] 63F5 64,1E           BS   TOPL35
[0727] 63F7 A1,14,0E        DADD @CURINC,@CURLIN   Generate new line number
[0728] 63FA D2,14,00        CGE  0,@CURLIN         >32767?
[0729] 63FD 64,05           BS   TOPL30
[0730] 63FF B2,45,FE        AND  >FE,@FLAG         If out of range->exit auto-nu
[0731] 6402 05,64,1E        B    TOPL35            Merge in below
[0732]               * Must be a long branch!!
[0733] 6405 D5,30,32 TOPL30 DCEQ @ENLN,@STLN       Line might exist
[0734] 6408 64,12           BS   G6412
[0735] 640A BD,4A,14        DST  @CURLIN,@FAC      Ready for program search
[0736] 640D 0F,7E           XML  SPEED
[0737] 640F 03              BYTE SEETWO          * Search for existence of line
[0738] 6410 65,1D           BS   EDTZ05            COND set = line found
[0739] 6412 0F,83    G6412  XML  SCROLL            Scroll to the next line
[0740] 6414 BD,5E,14        DST  @CURLIN,@ARG2     New line #
[0741] 6417 06,6F,BA        CALL DISO              Display the line number
[0742] 641A 91,20           DINC @VARW             Following by a space
[0743] 641C 44,20           BR   G6420
[0744] 641E 0F,83    TOPL35 XML  SCROLL            Scroll the screen
[0745] 6420 BE,A2,E1 G6420  ST   >9E,V@NLNADD-1    Display the prompt character
       6423 9E
[0746] 6424 06,6A,76        CALL G6A76             Read in a line
[0747] 6427 06,D0,AF        CALL SAVLIN            Save input line for recall
[0748]               *    Crunch the input line
[0749] 642A 86,22           CLR  @ERRCOD           Assume no-error return
[0750] 642C BF,0A,08        DST  CRNBUF,@RAMPTR    Initialize crunch pointer
       642F 20
[0751] 6430 0F,7F           XML  CRUNCH            CRUNCH the input line
[0752] 6432 00              BYTE 0              *  Normal crunch mode

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0016 
EDIT-359
[0753] 6433 8A,23    TOPL42 CASE @ERRCOD+1
[0754] 6435 44,45           BR   TOPL45            No error detected
[0755] 6437 49,7C           BR   ERRSYN            *SYNTAX ERROR
[0756] 6439 49,90           BR   ERRBLN            *BAD LINE NUMBER
[0757] 643B 49,94           BR   ERRLTL            *LINE TOO LONG
[0758] 643D 49,86           BR   ERRNTL            *NAME TOO LONG
[0759] 643F 49,80           BR   ERRNQS            *UNMATCHED QUOTES
[0760] 6441 49,9A           BR   ERRCIP            *COMMAND ILLEGAL IN PROGRAM
[0761] 6443 49,A4           BR   ERRIVN            *UNRECOGNIZED CHARACTER
[0762] 6445 8F,4A    TOPL45 DCZ  @FAC              Line # present
[0763] 6447 64,62           BS   TOPL55
[0764] 6449 DA,45,01        CLOG >01,@FLAG         Not AUTONUM
[0765] 644C 44,5B           BR   G645B
[0766] 644E D6,75,0D        CEQ  >0D,@RKEY         Must be up or down
[0767] 6451 64,5B           BS   G645B
[0768] 6453 D6,42,01        CEQ  >01,@CHAT         Start EDIT mode
[0769] 6456 44,5B           BR   G645B
[0770] 6458 05,D0,00        B    EDTZZ0
[0771] 645B 06,66,CF G645B  CALL EDITLN            EDIT the line into the progra
[0772] 645E 63,E9           BS   TOPL25            If didn't change the line
[0773] 6460 43,DA           BR   TOPL10
[0774]               *    Jump always
[0775] 6462 D6,42,01 TOPL55 CEQ  >01,@CHAT         If blank line - ignore
[0776] 6465 63,E9           BS   TOPL25
[0777] 6467 D6,A8,20        CEQ  >EB,V@CRNBUF
       646A EB
[0778] 646B 65,C9           BS   SZSIZE
[0779] 646D C6,A8,20        CH   >08,V@CRNBUF      If imperative
       6470 08
[0780]               * GKXB Branch code for new commands DEL, COPY, and MOVE.
[0781] 6471 77,59           BS   NEWCMD            Go here to test for new
[0782]               *                              keywords
[0783] 6473 BF,2C,08        DST  CRNBUF+1,@PGMPTR  Anticipate usage of PGMCHR
       6476 21
[0784] 6477 0F,79           XML  PGMCHR            Prepare CHAT for OLD and SAVE
[0785] 6479 8A,A8,20        CASE V@CRNBUF          Select the keyword
[0786] 647C 43,A5           BR   SZNEW             NEW                 0
[0787] 647E 45,20           BR   SZCONT            CONTINUE            1
[0788] 6480 45,BE           BR   SZLIST            LIST                2
[0789] 6482 45,BA           BR   SZBYE             BYE                 3
[0790] 6484 45,60           BR   SZNUM             NUMBER              4
[0791] 6486 45,B7           BR   SZOLD             OLD                 5
[0792] 6488 46,25           BR   SZRES             RESEQUENCE          6
[0793] 648A 45,AF           BR   SZSAVE            SAVE                7
[0794] 648C 45,C6           BR   SZMERG            MERGE               8
[0795]               *    AUTO-BOOT - attempt a ---->   RUN "DSK1.LOAD"
[0796] 648E 31,00,0B AUTOLD MOVE 11,G@DSCLOD,V@CRNBUF
       6491 A8,20,63
       6494 51
[0797] 6495 BF,2C,08        DST  CRNBUF,@PGMPTR    DSK1.LOAD is in crunch buffer
       6498 20
[0798]               * RXB PATCH CODE *************
[0799]               *      BR   SZRUNL            Go to the RUN "NAME" CODE
[0800] 6499 5A,38           BR   RXBRUN
[0801]               ********************************* RUN *********************
[0802] 649B D6,42,C7 SZRUN  CEQ  >C7,@CHAT         Ready for 'RUN "NAME" ----
[0803] 649E 44,BF           BR   G64BF
[0804] 64A0 BD,58,2C SZRUNL DST  @PGMPTR,@FAC14    Save pointer to name
[0805] 64A3 0F,79           XML  PGMCHR            Get the length of the string
[0806] 64A5 BC,57,42        ST   @CHAT,@FAC13      Put it in FAC13
[0807] 64A8 86,56           CLR  @FAC12            Make it a double byte
[0808] 64AA A1,2C,56        DADD @FAC12,@PGMPTR    Skip the string
[0809] 64AD 0F,79           XML  PGMCHR            To see there is line no. ahea
[0810] 64AF 06,80,24        CALL G8024             Only RUN "NAME" ?

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0017 
EDIT-359
[0811] 64B2 49,7C           BR   ERRSYN            No - junk on end so error
[0812] 64B4 BE,42,C7        ST   STRINZ,@CHAT      Prepare for LOAD routine
[0813] 64B7 BD,2C,58        DST  @FAC14,@PGMPTR    Restore the saved PGMPTR
[0814] 64BA 06,80,26        CALL OLD1              Load the program
[0815] 64BD 44,DA           BR   SZRUN0            Go ahead from here
[0816]               *                              No RUN "NAME" : just run the
[0817]               *                              current program in memory
[0818] 64BF D6,42,C9 G64BF  CEQ  >C9,@CHAT         Is there a line # after RUN?
[0819] 64C2 44,D5           BR   G64D5
[0820] 64C4 0F,79           XML  PGMCHR            Get the line number
[0821] 64C6 BC,4A,42        ST   @CHAT,@FAC        Put it in FAC for SEETWO
[0822] 64C9 0F,79           XML  PGMCHR
[0823] 64CB BC,4B,42        ST   @CHAT,@FAC1
[0824] 64CE 0F,79           XML  PGMCHR            Should be EOS now
[0825] 64D0 06,80,24        CALL G8024             Is it?
[0826] 64D3 64,EA           BS   SZRUN2            Yes - Go ahead from here
[0827]               *                              Just 'RUN'
[0828] 64D5 06,80,24 G64D5  CALL G8024             Should be EOS now
[0829] 64D8 49,7C           BR   ERRSYN            No-SYNTAX ERROR
[0830] 64DA D5,30,32 SZRUN0 DCEQ @ENLN,@STLN       Refuse without program
[0831] 64DD 64,EF           BS   ILLST
[0832] 64DF BD,A3,72        DST  @ENLN,V@START     Defualt to beginning
       64E2 32
[0833] 64E3 A7,A3,72        DSUB 3,V@START         Offset into the table
       64E6 00,03
[0834] 64E8 45,02           BR   SZRUN1            Merge in below
[0835]               *    Jump always
[0836] 64EA D5,30,32 SZRUN2 DCEQ @ENLN,@STLN       Refuse without program
[0837] 64ED 44,F9           BR   G64F9
[0838] 64EF 0F,83    ILLST  XML  SCROLL            Scroll the screen for message
[0839] 64F1 86,44           CLR  @PRGFLG           Prevent line # printing
[0840] 64F3 06,6A,82 WRNNPP CALL G6A82
[0841] 64F6 1D              BYTE 29                * NO PROGRAM PRESENT
[0842] 64F7 43,DD           BR   TOPL15
[0843]               *    Condition can never be set since line 0 is prohibited
[0844] 64F9 0F,7E    G64F9  XML  SPEED
[0845] 64FB 03              BYTE SEETWO          * Find the line in the program
[0846] 64FC 49,8C           BR   ERRLNF            * LINE NOT FOUND
[0847] 64FE BD,A3,72        DST  @EXTRAM,V@START   Program run starts here<<<<<<
       6501 2E
[0848]               * GKXB RUN code for color change.
[0849] 6502 57,74    SZRUN1 BR   RUNPAT            Change colors.
[0850] 6504 06,80,12 G6504  CALL CLSALL            Close any open files
[0851] 6507 92,44           DEC  @PRGFLG           Put it back in execution
[0852] 6509 BC,80,89        ST   @RAMTOP+1,@RAMFLG Set/reset RAMFLG flag -- when
       650C 80,85
[0853] 650E 87,A3,86        DCLR V@SEXTRM           in program mode & ERAM exist
[0854] 6511 87,A3,8A        DCLR V@ERRLN           Disallow CONTINUE after RUN
[0855] 6514 06,68,DC        CALL KILSYM            Reset ERR handling to defualt
[0856] 6517 BE,73,88        ST   RSTK,@SUBSTK      Set the stack empty
[0857]               * RXB PATCH CODE ************ Turn off DSK#.LOAD search
[0858]               * SZRUN4 B    G6A70
[0859] 651A 05,7D,C1 SZRUN4 B    SCHOFF  Turn off search first then G6
[0860] 651D 05,D0,0D EDTZ05 B    EDTZ00
[0861]               **************************** CONTINUE *********************
[0862] 6520 06,68,45 SZCONT CALL GETNB             Check for END-OF-LINE
[0863] 6523 49,7A           BR   ERRSY1            Junk on end of command
[0864] 6525 8F,A3,86        DCZ  V@SEXTRM          If can continue
[0865] 6528 65,5C           BS   ERRCC
[0866] 652A 0F,83           XML  SCROLL
[0867] 652C BD,2E,A3        DST  V@SEXTRM,@EXTRAM  Copy old line table pointer
       652F 86
[0868] 6530 BD,2C,A3        DST  V@SPGMPT,@PGMPTR  Copy old text pointer
       6533 82

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0018 
EDIT-359
[0869] 6534 BD,46,A3        DST  V@SBUFLV,@BUFLEV  Copy old buffer level
       6537 84
[0870] 6538 BD,48,A3        DST  V@SLSUBP,@LSUBP   Copy last subprogram on stack
       653B 96
[0871] 653C B4,45,A3        OR   V@SFLAG,@FLAG     Restore on-warning/break bits
       653F 98
[0872] 6540 C5,6E,A3 G6540  DCH  V@SAVEVP,@VSPTR   While extra on stack
       6543 88
[0873] 6544 45,4A           BR   G654A
[0874] 6546 0F,78           XML  VPOP              Pop them off
[0875] 6548 45,40           BR   G6540
[0876] 654A BE,44,FF G654A  ST   >FF,@PRGFLG       Idicate program mode
[0877] 654D BC,80,89        ST   @RAMTOP+1,@RAMFLG Set/reset RAMFLG flag --- whe
       6550 80,85
[0878]               *                              in program mode & ERAM exist
[0879] 6552 87,A3,86        DCLR V@SEXTRM          Prevent unauthorized CONTINUE
[0880] 6555 BF,A3,88        DST  VRAMVS,V@SAVEVP   Init for program completion
       6558 09,58
[0881] 655A 0F,81           XML  CONTIN            Resume normal execution
[0882] 655C 06,6A,84 ERRCC  CALL G6A84             Indicate error
[0883] 655F 19              BYTE 25              * "* CAN'T CONTINUE"
[0884]               **************************** NUMBER ***********************
[0885]               *----------------------------------------------------------
[0886]               * Fix NUMBER command cause XB goes into a loop displaying
[0887]               * *PROTECTION VIOLATION when a PROTECTED program is in
[0888]               * memory bug, add the following line after label SZNEW
[0889] 6560 DA,45,80 SZNUM  CLOG >80,@FLAG         Check PROTEDTION VIOLATION
[0890] 6563 49,A0           BR   ERRPV
[0891]               *----------------------------------------------------------
[0892] 6565 06,65,71        CALL AUTON             Get start line # and incremen
[0893] 6568 B6,45,01        OR   >01,@FLAG         Set AUTONUM bit for future us
[0894] 656B BF,20,02        DST  NLNADD,@VARW      Initialize screen address
       656E E2
[0895] 656F 44,05           BR   TOPL30            Jump back into it
[0896]               *    Jump always
[0897]               ***********************************************************
[0898]               * AUTON - scans the NUM, LIST and RES commands for line
[0899]               * numbers. Leaves 1st line number in CURLIN and 2nd line
[0900]               * number in CURINC. AUTON is entry point from NUM to defual
[0901]               * to 100,10          AUTON is entry point for LIST.
[0902]               ***********************************************************
[0903] 6571 BF,14,00 AUTON  DST  100,@CURLIN       Defualt start
       6574 64
[0904]                
[0905]               * GKXB AUTO4 label
[0906] 6575 BF,0E,00 AUTO4  DST  10,@CURINC        Defualt increment
       6578 0A
[0907] 6579 BE,08,2C        ST   COMMA,@VARC       Comma is the separator
[0908] 657C 93,20    AUTO1  DDEC @VARW             Don't miss the first characte
[0909]               * GKXB AUTO3 label
[0910] 657E 06,68,45 AUTO3  CALL GETNB             Get 1st character after keywo
[0911] 6581 65,AE           BS   AUTO2             If end of line
[0912] 6583 06,68,6A        CALL GETLN             Try to get a line number
[0913] 6586 8E,0C           CZ   @BYTES            If digits gotten
[0914] 6588 65,8D           BS   G658D
[0915] 658A BD,14,4A        DST  @FAC,@CURLIN      Set initial
[0916] 658D 06,68,4A G658D  CALL GETNB2            Allow spaces before separator
[0917] 6590 C5,20,2A        DCH  @VARA,@VARW       Check end of line
[0918] 6593 65,AE           BS   AUTO2
[0919] 6595 D4,42,08        CEQ  @VARC,@CHAT       If not correct separator
[0920]               * GKXB Modification to the RES to allow renumbering a
[0921]               *      portion of a program.
[0922] 6598 5A,0E           BR   CKLIST            GKXB AUTON for record length.
[0923]               * GKXB AUTO5 label

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0019 
EDIT-359
[0924] 659A 06,68,45 AUTO5  CALL GETNB             Get char after separator
[0925] 659D 65,AE           BS   AUTO2             If end of line
[0926] 659F 06,68,6A        CALL GETLN             Try to get 2nd number
[0927] 65A2 8E,0C           CZ   @BYTES            If digits gotten
[0928] 65A4 65,A9           BS   G65A9
[0929] 65A6 BD,0E,4A        DST  @FAC,@CURINC      Save the increment
[0930] 65A9 06,68,4A G65A9  CALL GETNB2            Check EOL
[0931]               * GKXB Modification to the RES to allow renumbering a
[0932]               *      portion of a program.
[0933] 65AC 56,F9           BR   RES2              GKXB AUTON for range check
[0934] 65AE 00       AUTO2  RTN
[0935]               *************************** SAVE **************************
[0936] 65AF D5,30,32 SZSAVE DCEQ @ENLN,@STLN       If no program
[0937] 65B2 64,EF           BS   ILLST
[0938] 65B4 05,80,14        B    SAVE
[0939]               *************************** OLD ***************************
[0940] 65B7 05,80,16 SZOLD  B    OLD
[0941]               *************************** BYE ***************************
[0942] 65BA 06,80,12 SZBYE  CALL CLSALL            Properly close all files
[0943] 65BD 0B       SZEXIT EXIT                   Return to MONITOR
[0944]               *************************** LIST **************************
[0945] 65BE D5,30,32 SZLIST DCEQ @ENLN,@STLN       Refuse LIST without prrogram
[0946] 65C1 64,EF           BS   ILLST
[0947] 65C3 05,80,18        B    LIST              LIST the program
[0948]               *************************** MERGE *************************
[0949] 65C6 05,80,28 SZMERG B    MERGE
[0950]               *************************** SIZE **************************
[0951]               * RXB SIZE PATCH CODE ********
[0952]               * SZSIZE CZ   V@CRNBUF+1        Must have EOL
[0953] 65C9 05,69,AA SZSIZE B    NSIZE
[0954] 65CC 49,7C           BR   ERRSYN
[0955] 65CE 0F,70    G65CE  XML  COMPCT            Garbage collect to free space
[0956] 65D0 BD,5E,1A        DST  @STREND,@ARG2     Get end of string space
[0957] 65D3 A5,5E,6E        DSUB @VSPTR,@ARG2      Subtract stack pointer
[0958] 65D6 A7,5E,00        DSUB 63,@ARG2          Require 64-byte buffer
       65D9 3F
[0959] 65DA 0A              GT                     If less then 64 bytes left
[0960] 65DB 65,DF           BS   G65DF
[0961] 65DD 87,5E           DCLR @ARG2             Then indicate zero
[0962] 65DF 0F,83    G65DF  XML  SCROLL            Scroll the screen
[0963] 65E1 BF,20,02        DST  NLNADD+2,@VARW    Begin a new line
       65E4 E4
[0964] 65E5 06,6A,7C        CALL G6A7C             Display the number
[0965] 65E8 8E,80,84        CZ   @RAMTOP           If no ERAM present
[0966] 65EB 45,F7           BR   G65F7
[0967] 65ED 31,00,0A        MOVE 10,G@MSGFRE,V@1(@VARW)
       65F0 E0,01,20
       65F3 62,D3
[0968] 65F5 46,21           BR   G6621
[0969] 65F7 31,00,13 G65F7  MOVE 19,G@MSGSFR,V@1(@VARW)
       65FA E0,01,20
       65FD 62,DD
[0970] 65FF 0F,83           XML  SCROLL            Scroll the screen
[0971] 6601 BF,20,02        DST  NLNADD+2,@VARW    Beginning of line
       6604 E4
[0972] 6605 BD,5E,80        DST  @RAMFRE,@ARG2     Calculate space in ERAM
       6608 86
[0973] 6609 A7,5E,A0        DSUB CPUBAS-1,@ARG2    Subtract base
       660C 3F
[0974] 660D 06,6A,7C        CALL G6A7C             Display the number
[0975] 6610 31,00,10        MOVE 16,G@MSGGFR,V@1(@VARW)
       6613 E0,01,20
       6616 62,F0
[0976]               * RXB SIZE PATCH CODE ********

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0020 
EDIT-359
[0977] 6618 0F,83    G6618  XML  SCROLL
[0978] 661A 31,00,0A        MOVE 10,G@MSGGF1,V@NLNADD+4
       661D A2,E6,63
       6620 00
[0979] 6621 0F,83    G6621  XML  SCROLL            Scroll the screen
[0980]               * RXB SIZE PATCH CODE ********
[0981]               *      BR   TOPL15            Return to top-level
[0982] 6623 00       G6623  RTN
[0983] 6624 00              RTN                    RXB wasted byte.
[0984]               ************************** RESEQUENCE *********************
[0985] 6625 D5,30,32 SZRES  DCEQ @ENLN,@STLN       If no program
[0986] 6628 64,EF           BS   ILLST
[0987]               * GKXB Modification to the RES command to allow renumbering
[0988]               *      a portion of the program.
[0989] 662A 06,76,EB        CALL RES1              GKXB pickup of renage
[0990]               * GKXB RES6 label
[0991] 662D BD,4A,66 RES6   DST  @XENLN,@FAC       GKXB Compute # of increments
[0992] 6630 A5,4A,64        DSUB @XSTLN,@FAC       GKXB Actual number of lines -
[0993] 6633 E7,4A,00        DSRL 2,@FAC            Also takes care of this ^^^
       6636 02
[0994] 6637 A9,4A,0E        DMUL @CURINC,@FAC      Compute space taken by increm
[0995] 663A 8F,4A           DCZ  @FAC              Bad line number
[0996] 663C 49,90           BR   ERRBLN
[0997] 663E A1,14,4C        DADD @FAC2,@CURLIN     Compute highest address used
[0998] 6641 0C              CARRY                  Watch out for overflow
[0999] 6642 69,90           BS   ERRBLN
[1000] 6644 C6,14,7F        CH   >7F,@CURLIN       Overflow is > 32767
[1001] 6647 69,90           BS   ERRBLN
[1002] 6649 BC,80,89        ST   @RAMTOP+1,@RAMFLG Set/reset RAMFLG to use PGMCH
       664C 80,85
[1003] 664E 86,60           CLR  @ARG4             To be used for double add
[1004]               * GKXB Modification to the RES command to allow renumbering
[1005]               *      a portion of the program.
[1006] 6650 06,77,34        CALL RES4              GKXB Check high line # for ov
[1007] 6653 BD,00,70        DST  @>8370,@VAR0      Assume VDP-top
[1008] 6656 8E,80,89        CZ   @RAMFLG           But if ERAM exists
[1009] 6659 66,5F           BS   G665F
[1010] 665B BD,00,80        DST  @RAMTOP,@VAR0     Top for ERAM
       665E 84
[1011] 665F 95,2C    G665F  DINCT @PGMPTR          Skip EOL and count
[1012] 6661 0F,79    G6661  XML  PGMCHR            VDP RAM or ERAM
[1013] 6663 D6,42,C7        CEQ  >C7,@CHAT         Skip strings
[1014] 6666 66,6D           BS   SEQZ2
[1015] 6668 D6,42,C8        CEQ  >C8,@CHAT         If numeric
[1016] 666B 46,77           BR   G6677
[1017] 666D 0F,79    SEQZ2  XML  PGMCHR            Get next token (count)
[1018] 666F BC,61,42        ST   @CHAT,@ARG5       For double add
[1019] 6672 A1,2C,60        DADD @ARG4,@PGMPTR     Up to end of string
[1020] 6675 46,AA           BR   G66AA
[1021] 6677 D6,42,C9 G6677  CEQ  >C9,@CHAT         Check for line #
[1022] 667A 46,AA           BR   G66AA
[1023] 667C 06,80,2C        CALL GRSUB2            Get the line # in the text
[1024] 667F 2C              BYTE PGMPTR          * @PGMPTR : Source addr on ERAM
[1025] 6680 BD,52,58        DST  @EEE1,@FAC8       Save it temporary place
[1026] 6683 BD,5E,14        DST  @CURLIN,@ARG2     Set for searching
[1027]               * GKXB Modification to the RES command to allow renumbering
[1028]               *      a portion of the program.
[1029] 6686 BD,5C,64        DST  @XSTLN,@ARG       GKXB New segment start
[1030] 6689 06,80,2E G6689  CALL GRSUB3            Read the line # fromn ERAM
[1031]               *                              (use GREAD1) or VDP, reset
[1032]               *                              possible breakpoint too
[1033] 668C 5C              BYTE ARG             * @ARG : Source addr on ERAM/VD
[1034] 668D D5,52,58        DCEQ @EEE1,@FAC8
[1035] 6690 66,A2           BS   SEQZ3

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0021 
EDIT-359
[1036] 6692 A5,5E,0E        DSUB @CURINC,@ARG2     Update new line #
[1037] 6695 A3,5C,00        DADD 4,@ARG            And entry in line # table
       6698 04
[1038]               * GKXB Modification to the RES command to allow renumbering
[1039]               *      a portion of the program.
[1040] 6699 C5,5C,66        DCH  @XENLN,@ARG       GKXB New segment end
[1041] 669C 46,89           BR   G6689
[1042] 669E 46,A8           BR   G66A8             GKXB Skip replacing undefined
[1043]               *                              line # with 32767
[1044] 66A0 7F,FF           DATA >7FFF *           GKXB unused bytes
[1045] 66A2 06,68,28 SEQZ3  CALL GWSUB             Write a few bytes of data
[1046]               *                 @PGMPTR : Destination address on ERAM/VDP
[1047]               *                 @ARG2   : Data
[1048]               *                 2       : Byte count
[1049] 66A5 2C,5E,02        BYTE PGMPTR,ARG2,2
[1050] 66A8 95,2C    G66A8  DINCT @PGMPTR          Pass two byte line # in text
[1051] 66AA 87,80,D6 G66AA  DCLR @>83D6            Reset VDP timeout
[1052] 66AD C9,2C,00        DCHE @VAR0,@PGMPTR     And on end of program
[1053] 66B0 46,61           BR   G6661
[1054]               *  Now update the line # table itself
[1055]               * GKXB Modification to the RES command to allow renumbering
[1056]               *      a portion of the program.
[1057] 66B2 BD,4A,64        DST  @XSTLN,@FAC       GKXB New segment start
[1058] 66B5 BD,5C,14        DST  @CURLIN,@ARG      With start address off course
[1059] 66B8 06,68,28 G66B8  CALL GWSUB             Write a few bytes of data to
[1060]               *                              ERAM (use GWRITE) or VDP
[1061]               *                 @FAC   : Destination address on ERAM/VDP
[1062]               *                 @ARG   : Data
[1063]               *                 2      : Byte count
[1064] 66BB 4A,5C,02        BYTE FAC,ARG,2
[1065] 66BE A5,5C,0E        DSUB @CURINC,@ARG      Compute next line #
[1066] 66C1 A3,4A,00        DADD 4,@FAC            And next entry in line # tabl
       66C4 04
[1067]               * GKXB Modification to the RES command to allow renumbering
[1068]               *      a portion of the program.
[1069] 66C5 C5,4A,66        DCH  @XENLN,@FAC       GKXB New segment end# table
[1070] 66C8 46,B8           BR   G66B8
[1071] 66CA 86,80,89        CLR  @RAMFLG           Restore the ERAM flag
[1072]               * GKXB Modification to the RES command to allow renumbering
[1073]               *      a portion of the program.
[1074] 66CD 57,52           BR   RES5              GKXB find out where to return
[1075]               ***********************************************************
[1076]               *              EDIT a line into a program
[1077]               *
[1078]               * Must be called with the following set up:
[1079]               *    FAC    = line number of line to be edited into program
[1080]               *    CHAT   = length of line
[1081]               *    CRNBUF = crunched line
[1082]               ***********************************************************
[1083] 66CF DA,45,80 EDITLN CLOG >80,@FLAG         Protection violation
[1084] 66D2 49,A0           BR   ERRPV
[1085] 66D4 06,80,12        CALL CLSALL            Close any open files
[1086] 66D7 06,68,DC        CALL KILSYM            Kill symbol table
[1087] 66DA 86,02           CLR  @STPT             Restore STPT
[1088] 66DC BC,03,42        ST   @CHAT,@STPT+1
[1089]               ***********************************************************
[1090]               * @CHAT=1 ? YES : LINE NUMBER ONLY -  GO TO DELETE THE LINE
[1091]               *           NO  : INSERT A NEW LINE OR REPLACE EXISTING LIN
[1092]               ***********************************************************
[1093] 66DF D6,42,01        CEQ  >01,@CHAT         Something besides line #
[1094] 66E2 47,30           BR   INSREP
[1095] 66E4 DA,45,01        CLOG >01,@FLAG         Auto-number mode on
[1096] 66E7 66,F0           BS   G66F0
[1097] 66E9 B2,45,FE        AND  >FE,@FLAG         Reset AUTONUM mode

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0022 
EDIT-359
[1098] 66EC D4,00,00 RTNSET CEQ  @>8300,@>8300     Set condition bit
[1099] 66EF 01              RTNC                   And return
[1100] 66F0 D5,30,32 G66F0  DCEQ @ENLN,@STLN       If no program
[1101] 66F3 66,EC           BS   RTNSET
[1102]               ***********************************************************
[1103]               * EDITZ1 Delete the line # from line-#-buffer.
[1104]               *        Delete the text from program text area.
[1105]               ***********************************************************
[1106] 66F5 0F,7E    EDITZ1 XML  SPEED             Try to find the given line #
[1107] 66F7 03              BYTE SEETWO
[1108] 66F8 46,EC           BR   RTNSET            Return if not found
[1109] 66FA 0F,87           XML  DELREP            Remove it's text from program
[1110]               *   Delete the 4 bytes from the line # table
[1111] 66FC BD,06,2E        DST  @EXTRAM,@VARY2    Pointer to line pointer
[1112] 66FF 91,06           DINC @VARY2            Advance to last byte of entry
[1113] 6701 97,2E           DDECT @EXTRAM          Point to first byte of entry
[1114] 6703 BD,00,2E        DST  @EXTRAM,@VAR0
[1115] 6706 93,00           DDEC @VAR0             Last byte of next line entry
[1116]               *                              Move down 4 bytes from here
[1117] 6708 A5,2E,30        DSUB @STLN,@EXTRAM     # of bytes to move down
[1118] 670B 8F,2E           DCZ  @EXTRAM
[1119] 670D 67,14           BS   G6714
[1120] 670F BD,5C,2E        DST  @EXTRAM,@ARG      Put in arg for MVDN
[1121] 6712 0F,88           XML  MVDN              Move one byte at a time
[1122] 6714 A3,30,00 G6714  DADD >04,@STLN         New start addr of line # tab
       6717 04
[1123] 6718 8E,80,84        CZ   @RAMTOP           If ERAM not exist
[1124] 671B 47,24           BR   G6724
[1125] 671D C5,30,70        DCH  @>8370,@STLN      Delete the only line
[1126] 6720 63,D7           BS   TOPL05
[1127] 6722 47,2E           BR   G672E             With ERAM
[1128] 6724 8F,30    G6724  DCZ  @STLN
[1129] 6726 63,D7           BS   TOPL05
[1130] 6728 C5,30,80        DCH  @RAMTOP,@STLN
       672B 84
[1131] 672C 63,D7           BS   TOPL05
[1132] 672E 48,DC    G672E  BR   KILSYM            Kill symbol table with return
[1133]               ***********************************************************
[1134]               *    INSERT A NEW LINE OR REPLACE AN EXISTING LINE
[1135]               ***********************************************************
[1136]               * BUILD LINE # AND LINE POINTER IN VARY, +1, +2, +3, +4
[1137] 6730 BD,04,4A INSREP DST  @FAC,@VARY        2 bytes of line #
[1138] 6733 BD,06,32        DST  @ENLN,@VARY2      Last address of line-#-table
[1139] 6736 BD,2E,32        DST  @ENLN,@EXTRAM     Prepare to search the line #
[1140]               ***********************************************************
[1141]               * 1ST LINE IN MEMORY : EDITZ5 -- EDITZ6 -- EDITZ8 -- DONE
[1142]               ***********************************************************
[1143] 6739 D5,30,32        DCEQ @ENLN,@STLN       1st text?
[1144] 673C 67,88           BS   EDITZ5
[1145]               ***********************************************************
[1146]               * EDITZ3
[1147]               *    COMPARE LINE # IN FAC WITH LINE # IN THE LINE # TABLE
[1148]               *    EQUATE : --DELTX--EDITZ8-DONE
[1149]               *    HIGHER : HIGHEST LINE? YES : EDITZ6--EDITZ8--DONE
[1150]               *                           NO  : BACK TO EDITZ3
[1151]               *    LOWER  : EDITZ4--EDITZ8--DONE
[1152]               ***********************************************************
[1153] 673E 91,2E           DINC @EXTRAM           Get line
[1154] 6740 A7,2E,00 EDITZ3 DSUB 4,@EXTRAM         Go to next line in program
       6743 04
[1155] 6744 06,68,10        CALL GRSUB1            Read from ERAM(use GREAD)/VDP
[1156] 6747 2E              BYTE EXTRAM          * @EXTRAM : Source addr on ERAM
[1157]               *                              or VDP
[1158] 6748 B2,50,7F        AND  >7F,@EEE          Reset possible breakpoint

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0023 
EDIT-359
[1159] 674B D5,4A,50        DCEQ @EEE,@FAC         If #s match-delete old
[1160] 674E 67,EC           BS   DELTX
[1161] 6750 BF,2A,00        DST  4,@VARA           For MEMFUL
       6753 04
[1162] 6754 09              H                      New line # is greater
[1163] 6755 47,5E           BR   G675E
[1164] 6757 D5,2E,30        DCEQ @STLN,@EXTRAM     Line to be inserted got the
[1165]               *                              highest line number in line
[1166]               *                              # table :: add to the end of
[1167]               *                              line-#table
[1168] 675A 67,8C           BS   EDITZ6
[1169] 675C 47,40           BR   EDITZ3
[1170]               ***********************************************************
[1171]               * EDITZ4
[1172]               *    ALLOCATE SPACE IN LINE # TABLE BY MOVING
[1173]               *    PART (ARG=4) OF THE LINE # TABLE UP
[1174]               ***********************************************************
[1175] 675E BF,5C,00 G675E  DST  4,@ARG
       6761 04
[1176] 6762 A1,5C,2E EDITZ4 DADD @EXTRAM,@ARG
[1177] 6765 A5,5C,30        DSUB @STLN,@ARG        # of bytes in between
[1178] 6768 BD,16,30        DST  @STLN,@VAR9       Copy old start address of lin
[1179] 676B 06,68,A3        CALL MEMFUL            Check for memory full
[1180] 676E A1,30,02        DADD @STPT,@STLN
[1181] 6771 8E,80,84        CZ   @RAMTOP
[1182] 6774 47,7E           BR   G677E
[1183] 6776 34,5C,B0        MOVE @ARG,V*VAR9,V*STLN Move line # table
       6779 30,B0,16
[1184] 677C 47,83           BR   G6783
[1185] 677E BD,00,30 G677E  DST  @STLN,@VAR0       Destination address for MVUP
[1186] 6781 0F,89           XML  MVUP              Move the line # table up
[1187] 6783 BD,06,32 G6783  DST  @ENLN,@VARY2      Set up line ptr in line # ent
[1188] 6786 47,95           BR   EDITZ8
[1189]               ***********************************************************
[1190]               * EDITZ5
[1191]               * EDITZ6
[1192]               *    SET UP 1ST ENTRY IN LINE # TABLE BY GIVING @VARA=3
[1193]               *    WHEN INSERT THE HIGHEST LINE :
[1194]               *     CONCATENATE LINE # ENTRY TO  LINE # TABLE
[1195]               ***********************************************************
[1196] 6788 BF,2A,00 EDITZ5 DST  >03,@VARA         Subtract >03 from STLN(@>8370
       678B 03
[1197]               *                              to get new start addr of tab
[1198] 678C 06,68,A3 EDITZ6 CALL MEMFUL            Check for memory full
[1199] 678F A1,30,02        DADD @STPT,@STLN       Concatenate line # entry to
[1200] 6792 BD,2E,30        DST  @STLN,@EXTRAM      table
[1201]               ***********************************************************
[1202]               * EDITZ8
[1203]               *    UPDATE ENTRY IN LINE # TABLE, PUT TEXT IN -- DONE
[1204]               ***********************************************************
[1205] 6795          EDITZ8 EQU  $
[1206]               * Update the 4 bytes entry in line # table
[1207] 6795 91,06           DINC @VARY2            Point to 1st token (not lengt
[1208] 6797 A5,06,02        DSUB @STPT,@VARY2      Set up the line pointer for V
[1209] 679A 06,68,28        CALL GWSUB             Write a few bytes of data to
[1210]               *                              ERAM (use GWRITE) or VDP
[1211]               *      @EXTRAM : Destination address on ERAM/VDP
[1212]               *      @VARY   : Data
[1213]               *      4       : Byte count
[1214] 679D 2E,04,04        BYTE EXTRAM,VARY,4
[1215]               ***********************************************************
[1216]               * Now insert the line's text between the line number table
[1217]               *  and the rest of the program's text
[1218]               ***********************************************************

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0024 
EDIT-359
[1219]               ********** GET THE LENGTH OF LINE # TABLE IN @ARG *********
[1220] 67A0 BD,5C,32        DST  @ENLN,@ARG        Highest addr for line # table
[1221] 67A3 A5,5C,30        DSUB @STLN,@ARG        Total length of line # table
[1222] 67A6 91,5C           DINC @ARG              Add one for extra offset
[1223]               ****************** MOVE THE LINE # TABLE ******************
[1224] 67A8 BD,16,30        DST  @STLN,@VAR9       Old start addr of line # tabl
[1225] 67AB 91,02           DINC @STPT             Point to next free byte in VD
[1226] 67AD A5,30,02        DSUB @STPT,@STLN       New entry to line # table
[1227] 67B0 A5,32,02        DSUB @STPT,@ENLN
[1228] 67B3 8E,80,84        CZ   @RAMTOP           If ERAM not exist
[1229] 67B6 47,C0           BR   G67C0
[1230] 67B8 34,5C,B0        MOVE @ARG,V*VAR9,V*STLN  Move line # table
       67BB 30,B0,16
[1231] 67BE 47,C5           BR   G67C5
[1232] 67C0 BD,00,30 G67C0  DST  @STLN,@VAR0       Set up destination addr for M
[1233] 67C3 0F,89           XML  MVUP              Move line # table
[1234]               ****************** WRITE THE LENGTH BYTE ******************
[1235] 67C5 93,02    G67C5  DDEC @STPT             Update length of text
[1236] 67C7 93,06           DDEC @VARY2            Point to the length byte
[1237] 67C9 06,68,28        CALL GWSUB             Write a few bytes of data
[1238]               *                              to ERAM (use GWRITE) or VDP
[1239]               *      @VAR2      : Destination address on ERAM or VDP
[1240]               *      @(STPT+1)  : Data
[1241]               *      1          : Byte count
[1242] 67CC 06,03,01        BYTE VARY2,STPT+1,1
[1243] 67CF 91,06           DINC @VARY2
[1244]               ********************* WRITE THE TEXT **********************
[1245] 67D1 8E,80,84        CZ   @RAMTOP           If ERAM not exist
[1246] 67D4 47,DE           BR   G67DE
[1247] 67D6 34,02,B0        MOVE @STPT,V@CRNBUF,V*VARY2 Move text
       67D9 06,A8,20
[1248] 67DC 47,EA           BR   G67EA
[1249] 67DE BF,4C,08 G67DE  DST  CRNBUF,@AAA       Copy the text from crunch
       67E1 20
[1250]               *                         buffer (which is on VDP) to ERAM
[1251] 67E2 BD,50,06        DST  @VARY2,@BBB
[1252] 67E5 BD,4E,02        DST  @STPT,@CCC        @CCC : Byte count
[1253] 67E8 0F,8A           XML  VGWITE
[1254] 67EA 48,DC    G67EA  BR   KILSYM            Kill symbol table and return
[1255]               ***********************************************************
[1256]               * REPLACE AN EXISTING LINE
[1257]               ************** Compute length of old entry ****************
[1258] 67EC 95,2E    DELTX  DINCT @EXTRAM          Point to the line pointer
[1259] 67EE 06,68,10        CALL GRSUB1            Read from ERAM (use GREAD)/VD
[1260] 67F1 2E              BYTE EXTRAM          * @EXTRAM : Source addr on ERAM
[1261] 67F2 97,2E           DDECT @EXTRAM          Restore back
[1262] 67F4 93,50           DDEC  @EEE             Point to the length byte
[1263] 67F6 06,68,10        CALL GRSUB1            Read the length from ERAM/VDP
[1264] 67F9 50              BYTE EEE             * @EEE : Source addr on ERAM/VD
[1265] 67FA BC,2B,50        ST   @EEE,@VARA+1
[1266] 67FD 86,2A           CLR  @VARA             Make a double byte
[1267] 67FF 83,2A           DNEG @VARA             And get length difference
[1268] 6801 06,68,A3        CALL MEMFUL            Check for memory full
[1269] 6804 A1,30,2A        DADD @VARA,@STLN       Update STLN
[1270] 6807 0F,87           XML  DELREP            Remove old text (same line #)
[1271] 6809 97,2E           DDECT @EXTRAM          Correct pointer
[1272]               ******* SET UP THE LINE POINTER IN LINE # ENTRY ***********
[1273] 680B BD,06,32        DST  @ENLN,@VARY2      Prepare setting up line point
[1274] 680E 47,95           BR   EDITZ8            Go update entry in line # tab
[1275]               *                              and put text in
[1276]               ***********************************************************
[1277]               * SUBROUTINE TO READ 2 BYTES OF DATA FROM VDP OR ERAM
[1278]               *  (use GREAD)
[1279]               ***********************************************************

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0025 
EDIT-359
[1280] 6810 88,4E    GRSUB1 FETCH @FFF             Fetch the source addr on ERAM
[1281] 6812 BD,4C,90        DST  *FFF,@DDD         Put it in @DDD
       6815 4E
[1282] 6816 8E,80,84        CZ   @RAMTOP           If ERAM present
[1283] 6819 68,23           BS   G6823
[1284] 681B BF,4E,00        DST  2,@FFF            @FFF : Byte count
       681E 02
[1285] 681F 0F,85           XML  GREAD             Read data from ERAM
[1286]               *                             @EEE : Destination addr on CP
[1287] 6821 48,27           BR   G6827             ERAM not exists
[1288] 6823 BD,50,B0 G6823  DST  V*DDD,@EEE        Read data from VDP
       6826 4C
[1289] 6827 00       G6827  RTN
[1290]               ***********************************************************
[1291]               * SUBROUTINE TO WRITE A FEW BYTES OF DATA TO VDP OR ERAM
[1292]               *  (use GWRITE)
[1293]               ***********************************************************
[1294] 6828 88,4C    GWSUB  FETCH @AAA             Fetch the destination addr on
[1295] 682A BD,4C,90        DST  *AAA,@AAA         ERAM/VDP
       682D 4C
[1296] 682E 88,51           FETCH @BBB+1           Fetch the source addr on CPU
[1297]               *                              where data is stored
[1298] 6830 86,50           CLR  @BBB              Make a double byte
[1299] 6832 88,4F           FETCH @CCC+1           Fetch the byte count
[1300] 6834 86,4E           CLR  @CCC              Make a double byte
[1301] 6836 8E,80,84        CZ   @RAMTOP           If ERAM exists
[1302] 6839 68,3E           BS   G683E
[1303] 683B 0F,86           XML  GWRITE            Write the data to ERAM
[1304] 683D 00              RTN
[1305] 683E 34,4E,B0 G683E  MOVE @CCC,*BBB+1,V*AAA Write to VDP
       6841 4C,90,51
[1306] 6844 00              RTN
[1307]               ***********************************************************
[1308]               * SUBROUTINE TO GET A NON-BLANK CHARACTER FROM LINE
[1309]               ***********************************************************
[1310] 6845 06,68,50 GETNB  CALL GETCHR            Get a character
[1311] 6848 66,EC           BS   RTNSET            If end-of-line
[1312] 684A D6,42,20 GETNB2 CEQ  >20,@CHAT
[1313] 684D 68,45           BS   GETNB
[1314] 684F 00              RTN
[1315]               ***********************************************************
[1316]               * SUBROUTNE TO GET A CHARACTER FROM LINE
[1317]               ***********************************************************
[1318] 6850 C5,20,2A GETCHR DCH  @VARA,@VARW
[1319] 6853 66,EC           BS   RTNSET
[1320] 6855 BC,42,B0        ST   V*VARW,@CHAT      Put character in @CHAT
       6858 20
[1321] 6859 D6,42,7F        CEQ  >7F,@CHAT         If not edge character
[1322] 685C 68,64           BS   G6864
[1323] 685E A6,42,60        SUB  OFFSET,@CHAT   >60 Screen character into ASCII
[1324] 6861 91,20           DINC @VARW
[1325] 6863 00              RTN
[1326] 6864 A3,20,00 G6864  DADD 4,@VARW           Skip to next line
       6867 04
[1327] 6868 48,50           BR   GETCHR
[1328]               *  Jump always
[1329]               ***********************************************************
[1330]               * GETLN - Gets an line number after a command and puts it
[1331]               * into the FAC. If the character in CHAT when it is called
[1332]               * is not in the legal numeric range (0-9) then GETLN
[1333]               * GETLN returns with no other action.
[1334]               *  Called by: AUTON, RUN, EDITLN
[1335]               ***********************************************************
[1336] 686A 87,4A    GETLN  DCLR @FAC              Assume no number

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0026 
EDIT-359
[1337] 686C 86,0C           CLR  @BYTES            Assume no digits
[1338] 686E A6,42,30 GETLN2 SUB  >30,@CHAT         ASCII to normal range
[1339] 6871 CA,42,0A        CHE  10,@CHAT          If numeric digit
[1340] 6874 68,91           BS   G6891
[1341] 6876 AB,4A,00        DMUL 10,@FAC           Multiply by 10
       6879 0A
[1342] 687A 8F,4A           DCZ  @FAC              Error if overflow
[1343] 687C 48,9D           BR   GTLNER
[1344] 687E BC,4B,42        ST   @CHAT,@FAC1       Need to add in this digit
[1345] 6881 A1,4A,4C        DADD @FAC2,@FAC        Add accumulator into last dig
[1346] 6884 D3,4A,00        DCGE 0,@FAC            Error if overflow
       6887 00
[1347] 6888 48,9D           BR   GTLNER
[1348] 688A 90,0C           INC  @BYTES            Got another digit
[1349] 688C 06,68,50        CALL GETCHR            Get the next character
[1350] 688F 48,6E           BR   GETLN2            If not EOS
[1351] 6891 8E,0C    G6891  CZ   @BYTES            If digits gotten
[1352] 6893 68,99           BS   G6899
[1353] 6895 8F,4A           DCZ  @FAC              If hit natural zero
[1354] 6897 68,9D           BS   GTLNER
[1355] 6899 A2,42,30 G6899  ADD  >30,@CHAT         Put back into ASCII
[1356] 689C 00              RTN
[1357] 689D 0F,83    GTLNER XML  SCROLL            Scroll the screen
[1358] 689F 86,44           CLR  @PRGFLG           Don't print a line number
[1359] 68A1 49,90           BR   ERRBLN            * BAD LINE NUMBER
[1360] 68A3 A1,2A,02 MEMFUL DADD @STPT,@VARA       Total # of bytes to be added
[1361]               * GKXB MEMFLL label
[1362] 68A6 A5,30,2A MEMFLL DSUB @VARA,@STLN       New STLN
[1363] 68A9 8E,80,84        CZ   @RAMTOP
[1364] 68AC 68,B5           BS   G68B5
[1365] 68AE CB,30,A0        DCHE CPUBAS,@STLN      Not enough memory
       68B1 40
[1366] 68B2 48,BB           BR   MEMZ1
[1367] 68B4 00              RTN
[1368] 68B5 CB,30,0A G68B5  DCHE VRAMVS+64+256,@STLN Memory full
       68B8 98
[1369] 68B9 68,C2           BS   G68C2
[1370] 68BB A1,30,2A MEMZ1  DADD @VARA,@STLN       Back to old start line # tabl
[1371] 68BE 06,6A,84        CALL G6A84
[1372] 68C1 0B              BYTE 11                * MEMORY FULL
[1373] 68C2 00       G68C2  RTN
[1374]               * Initialize program space
[1375] 68C3 86,80,89 INITPG CLR  @RAMFLG           Reset RAMFLG
[1376] 68C6 0F,8E           XML  GDTECT            Search for ERAM & select ROM
[1377] 68C8 BD,80,86        DST  @RAMTOP,@RAMFRE   Initialize free pointer
       68CB 80,84
[1378] 68CD BD,30,70        DST  @>8370,@STLN      Assume VDP - initialize STLN
[1379] 68D0 8E,80,84        CZ   @RAMTOP           If ERAM is present
[1380] 68D3 68,D9           BS   G68D9
[1381] 68D5 BD,30,80        DST  @RAMTOP,@STLN     Initialize STLN for ERAM
       68D8 84
[1382] 68D9 BD,32,30 G68D9  DST  @STLN,@ENLN       Init ENLN based upon STLN
[1383]               * Kill the symbol table
[1384] 68DC BD,40,30 KILSYM DST  @STLN,@FREPTR     Assume VDP and init free poin
[1385] 68DF D5,40,70        DCEQ @>8370,@FREPTR
[1386] 68E2 68,E6           BS   G68E6
[1387] 68E4 93,40           DDEC @FREPTR           Back off 1 if program present
[1388] 68E6 8E,80,84 G68E6  CZ   @RAMTOP           If ERAM exists
[1389] 68E9 68,FC           BS   G68FC
[1390] 68EB BD,80,86        DST  @STLN,@RAMFRE     Update the @RAMFRE
       68EE 30
[1391] 68EF D5,80,86        DCEQ @RAMTOP,@RAMFRE
       68F2 80,84
[1392] 68F4 68,F9           BS   G68F9

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0027 
EDIT-359
[1393] 68F6 93,80,86        DDEC @RAMFRE           Back off 1 if program present
[1394] 68F9 BD,40,70 G68F9  DST  @>8370,@FREPTR    Initialize VDP free pointer
[1395] 68FC 87,3E    G68FC  DCLR @SYMTAB           Kill symbol table
[1396] 68FE 87,3A           DCLR @SUBTAB           Kill subprogram table
[1397] 6900 BD,18,40        DST  @FREPTR,@STRSP    Initialize string space
[1398] 6903 BD,1A,18        DST  @STRSP,@STREND
[1399] 6906 86,43           CLR  @BASE             Reset OPTION BASE to 0
[1400] 6908 87,A3,86        DCLR V@SEXTRM          Disallow CONTINUE
[1401] 690B BF,24,09        DST  VRAMVS,@STVSPT    Initialize base of value stac
       690E 58
[1402] 690F BD,6E,24        DST  @STVSPT,@VSPTR    Initialize value stack pointe
[1403] 6912 BD,A3,88        DST  @VSPTR,V@SAVEVP   Initialize pointer in VDP too
       6915 6E
[1404] 6916 00              RTN
[1405]               ***********************************************************
[1406]               * Data for the color tables (starts at >0800)
[1407]               * BYTE >D0,>00,>00,>00,>00,>00,>00,>00
[1408]               * BYTE >00,>00,>00,>00,>00,>00,>00,>F0
[1409]               * BYTE >F0,>F0,>F0,>F0,>F0,>F0,>F0,>F0
[1410]               * BYTE >F0,>F0,>F0,>F0,>F0,>F0,>F0,>F0
[1411]               ***********************************************************
[1412] 6917 07,80    CHRTA2 ALL  >20+OFFSET        Clear the screen
[1413] 6919 BF,80,C0        DST  >3567,@>83C0      Initialize random number gen
       691C 35,67
[1414] 691E 31,00,10        MOVE 16,G@SPCCHR,V@>03F0 Cursor character
       6921 A3,F0,63
       6924 5C
[1415]               * RXB PATCH CODE ******************************************
[1416]               * CHRTAB DST  >0408,@FAC        Address of chracater tables
[1417]               *        CALL CHAR2Z            Load the characters set
[1418] 6925 BE,4C,5E CHRTAB ST   94,@FAC2          Number of characters
[1419] 6928 06,7D,4E        CALL CHRTBL            RXB character loader
[1420]               * RXB PATCH CODE CONFLG USED FOR USER/REDO
[1421]               *       ST   >01,V@CONFLG      99/4A console?
[1422] 692B 49,39           BR   G6939            FILLER BYTES
[1423] 692D 49,39           BR   G6939            FILLER BYTES
[1424] 692F 49,39           BR   G6939
[1425]               ***********************************************************
[1426] 6931 BF,20,02 SDISO  DST NLNADD+2,@VARW    *
       6934 E4
[1427] 6935 06,6F,BA        CALL DISO             *
[1428] 6938 00              RTN                   *
[1429]               ***********************************************************
[1430] 6939 04,04    G6939  BACK 4                 Border color = BLUE
[1431] 693B 86,A8,00        CLR  V@>0800
[1432] 693E 35,00,0E        MOVE 14,V@>0800,V@>0801
       6941 A8,01,A8
       6944 00
[1433] 6945 BE,A8,0F        ST   >F0,V@>080F       WHITE fore/transparent back
       6948 F0
[1434] 6949 35,00,10        MOVE 16,V@>080F,V@>0810
       694C A8,10,A8
       694F 0F
[1435] 6950 06,69,5A        CALL SPRINT
[1436]               * This part might be moved up later, load special character
[1437]               * here. Don't load before hiding all sprites.
[1438] 6953 39,00,06        MOVE 6,G@VDPREG,#1
       6956 01,63,6C
[1439] 6959 00              RTN
[1440]               *
[1441]               ****** Initialization of sprites. Enable 28 sprites. ******
[1442]               *
[1443] 695A 86,A7,80 SPRINT CLR  V@>0780           Clear motion of all sprites
[1444] 695D 35,00,6F        MOVE >6F,V@>0780,V@>0781

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0028 
EDIT-359
       6960 A7,81,A7
       6963 80
[1445]               * Replace the line for speeding up XB. 5/22/81
[1446]               *      ST   28,@MOTION        All in motion
[1447] 6964 86,7A           CLR  @MOTION           All not in motion
[1448] 6966 BE,A3,70        ST   >D0,V@>0370       Sprites 29 to 32 unavailiable
       6969 D0
[1449] 696A BF,A3,00        DST  >C000,V@>0300     Hide the first sprites
       696D C0,00
[1450] 696F 87,A3,02        DCLR V@>0302           Make first sprite transparent
[1451] 6972 35,00,6C        MOVE 108,V@>0300,V@>0304 Ripple for the rest
       6975 A3,04,A3
       6978 00
[1452] 6979 00              RTN
[1453]               *
[1454]               * ERROR messages in this file
[1455]               *
[1456] 697A 86,44    ERRSY1 CLR  @PRGFLG           Without a line number
[1457] 697C 06,6A,84 ERRSYN CALL G6A84
[1458] 697F 03              BYTE 3                 * SYNTAX ERROR
[1459] 6980 0F,83    ERRNQS XML  SCROLL            Scroll up the screen
[1460] 6982 06,6A,84        CALL G6A84             EOL before end of string
[1461] 6985 05              BYTE 5                 * UNMATCHED QUOTES message
[1462] 6986 86,44    ERRNTL CLR  @PRGFLG           Don't print a line #
[1463] 6988 06,6A,84        CALL G6A84
[1464] 698B 06              BYTE 6                 * NAME TOO LONG
[1465] 698C 06,6A,84 ERRLNF CALL G6A84
[1466] 698F 16              BYTE 22                * LINE NOT FOUND
[1467] 6990 06,6A,84 ERRBLN CALL G6A84
[1468] 6993 17              BYTE 23                * BAD LINE NUMBER
[1469] 6994 86,44    ERRLTL CLR  @PRGFLG           Don't print line number
[1470] 6996 06,6A,84        CALL G6A84             Issue the error
[1471] 6999 18              BYTE 24                * LINE TOO LONG
[1472] 699A 0F,83    ERRCIP XML  SCROLL            Scrolling the screen
[1473] 699C 06,6A,84        CALL G6A84
[1474] 699F 1A              BYTE 26                * COMMAND ILLEGAL IN PROGRAM
[1475] 69A0 06,6A,84 ERRPV  CALL G6A84
[1476] 69A3 27              BYTE 39                * PROTECTION VIOLATION
[1477] 69A4 86,44    ERRIVN CLR  @PRGFLG           Don't print line number
[1478] 69A6 06,6A,84        CALL G6A84
[1479] 69A9 28              BYTE 40                * UNRECOGNIZED CHARACTER
[1480]               *
[1481]               * Other ERROR messages in the program
[1482]               *
[1483]               * ERRRDY    * READY                BYTE 0
[1484]               * ERRMEM    * MEMORY FULL          BYTE 11
[1485]               * ERRCC     * CAN'T CONTINUE       BYTE 25
[1486]               * WRNNPP    * NO PROGRAM PRESENT   BYTE 29
[1487]               ***********************************************************
[1488]               * RXB SIZE
[1489] 69AA 8E,44    NSIZE  CZ   @PRGFLG           * PROGRAM MODE?
[1490] 69AC 49,B8           BR   CSIZE             * No
[1491] 69AE 8E,A8,21        CZ   V@CRNBUF+1        * NORMAL
[1492] 69B1 51,4B           BR   ERROLP            * No
[1493] 69B3 06,69,C1        CALL SIZEAS            * Assembly size
[1494] 69B6 43,DD           BR   TOPL15
[1495] 69B8 06,71,5A CSIZE  CALL CHKEND            * CALL SIZE
[1496] 69BB 06,69,C1        CALL SIZEAS            * Assembly size
[1497] 69BE 06,00,12        CALL RETURN            
[1498] 69C1 06,65,CE SIZEAS CALL G65CE             * DISO
[1499] 69C4 35,00,06        MOVE 6,@>2002,@FAC     * Get values
       69C7 4A,8F,9D
       69CA 02
[1500] 69CB D7,4E,AA        DCEQ >AA55,@FAC+4      * Initilized?

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0029 
EDIT-359
       69CE 55
[1501] 69CF 49,D9           BR   SIZENI            * No SHOW AVALIABLE
[1502] 69D1 BD,5E,4C        DST  @FAC+2,@ARG2      * Get high RAM
[1503] 69D4 A5,5E,4A        DSUB @FAC,@ARG2        * Subtrack low RAM
[1504] 69D7 49,DD           BR   SIZEAT            * Show it
[1505] 69D9 BF,5E,20 SIZENI DST  >2000,@ARG2       * SET
       69DC 00
[1506] 69DD 06,69,31 SIZEAT CALL SDISO             * DISO
[1507] 69E0 31,00,11        MOVE 17,G@MESSAG,V@1(@VARW)
       69E3 E0,01,20
       69E6 7D,D2
[1508] 69E8 06,66,18        CALL G6618
[1509] 69EB 05,7D,FB        B    AMSSIZ
[1510]               ***********************************************************
[1511] 69EE D6,75,93 CTRLS  CEQ  147,@RKEY         CTRL S
[1512] 69F1 49,F8           BR   CTRLD             No, check more
[1513] 69F3 BD,61,20        DST  @VARW,@ARG5       Force cursor to start
[1514]               *                              ARG5 = current position
[1515] 69F6 4C,E7           BR   RBACK             Now process like FCTN S
[1516] 69F8 D6,75,84 CTRLD  CEQ  132,@RKEY         CTRL D
[1517] 69FB 4A,05           BR   CTRLE             No, check more
[1518] 69FD BD,61,2A        DST  @VARA,@ARG5       Force cursor to end
[1519] 6A00 06,6A,34        CALL SPACES            Look for space
[1520] 6A03 4C,E3           BR   RFORW             Process like FCTN D
[1521] 6A05 D6,75,85 CTRLE  CEQ  133,@RKEY         CTRL E
[1522] 6A08 4A,19           BR   CTRLX             No, check more
[1523] 6A0A A7,61,00        DSUB 32,@ARG5          Up one line
       6A0D 20
[1524] 6A0E C5,20,61        DCH  @ARG5,@VARW       Check range
[1525] 6A11 4A,A8           BR   READZ1            Ok, go on
[1526] 6A13 A3,61,00        DADD 32,@ARG5          No, redo
       6A16 20
[1527] 6A17 4A,A8           BR   READZ1            And continue
[1528] 6A19 D6,75,98 CTRLX  CEQ  152,@RKEY         CTRL X
[1529] 6A1C 4A,2D           BR   CTRL              Resume where left off
[1530] 6A1E A3,61,00        DADD 32,@ARG5          Next line
       6A21 20
[1531] 6A22 C9,2A,61        DCHE @ARG5,@VARA       Check range
[1532] 6A25 6A,A8           BS   READZ1            Ok, continue
[1533] 6A27 A7,61,00        DSUB 32,@ARG5          No, redo
       6A2A 20
[1534] 6A2B 4A,A8           BR   READZ1            Now, go on
[1535] 6A2D CA,75,20 CTRL   CHE  >20,@RKEY         Control character!!!!
[1536] 6A30 6B,D0           BS   G6BD0
[1537] 6A32 4A,DC           BR   G6ADC
[1538] 6A34 D6,B0,61 SPACES CEQ  >80,V*ARG5        SPACE?
       6A37 80
[1539] 6A38 4A,3E           BR   SPACE2
[1540] 6A3A 93,61           DDEC @ARG5
[1541] 6A3C 4A,34           BR   SPACES
[1542] 6A3E D6,B0,61 SPACE2 CEQ  >7F,V*ARG5        CURSOR?
       6A41 7F
[1543] 6A42 6A,45           BS   SPACE3
[1544] 6A44 00              RTN
[1545] 6A45 A7,61,00 SPACE3 DSUB 4,@ARG5
       6A48 04
[1546] 6A49 4A,34           BR   SPACES
[1547] 6A4B 4A,86           BR   G6A86
[1548]               ***********************************************************
[1549]              
[1550]                      AORG >0A70
[1551] 6A70 4F,EE    G6A70  BR   PRESCN
[1552] 6A72 4A,72           BR   $                 Spare
[1553] 6A74 4E,7C           BR   LLIST

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0030 
EDIT-359
[1554] 6A76 4A,8E    G6A76  BR   READLN
[1555] 6A78 51,5A           BR   CHKEND            check End Of Statement
[1556] 6A7A 4A,7A           BR   $                 Was SEETWO - now spare
[1557] 6A7C 4F,BA    G6A7C  BR   DISO
[1558] 6A7E 52,FD           BR   ENTER
[1559] 6A80 53,43           BR   ENT09
[1560] 6A82 4C,FD    G6A82  BR   WARNZZ
[1561] 6A84 4D,4E    G6A84  BR   ERRZZ
[1562] 6A86 4A,98    G6A86  BR   READL1
[1563] 6A88 4A,A1           BR   READ00
[1564] 6A8A 4A,95           BR   READL3
[1565] 6A8C 4A,8C           BR   $                 Spare
[1566]               ***********************************************************
[1567]               * READLN - Read one logical line (up to four physical lines
[1568]               * from the keyboard. Interpret things like BACKSPACE,
[1569]               * INSERT, DELETE AND FORWARD. The total number of character
[1570]               * can be limited by changing the start value for ARG2
[1571]               * (upper limit), and entering at READL1 and VARW has to
[1572]               * contain the start address of the feild, and VARA the
[1573]               * current highest wirte address. Entering at READ00 allows
[1574]               * for specification of the intial cursor-position. In this
[1575]               * case ARG5 has to be set to the cursor-position. Please se
[1576]               * to it that VARA, VARW, ARG2, and ARG4 have consistent
[1577]               * values, i.e.
[1578]               *           VARW <= ARG5 <= VARA <= ARG2
[1579]               * ARG4 indicates if the line has been changed. If so, it
[1580]               * contains a 0. If you enter READLN through READ00, you hav
[1581]               * to initialize ARG4 to a nonzero value, should you want to
[1582]               * use this feature.
[1583]               ***********************************************************
[1584]               *----------------------------------------------------------
[1585]               * Fix "You cannot add characters to a line whose number is
[1586]               * multiple of 256, if that line was reached by typing eithe
[1587]               * an up arrow or a down arrow form a previous line" bug,
[1588]               * replace following 3 lines:
[1589]               * READLN ST   >FF,@ARG7         Indicate non-check mode
[1590]               *        DST  >037D,@ARG2       Set default upper limit
[1591]               *        DST  @VARW,@VARA       Default nothing entered yet
[1592]               *      with
[1593] 6A8E BF,5E,05 READLN DST  >057D,@ARG2       Set default upper limit
       6A91 7D
[1594] 6A92 BD,2A,20        DST  @VARW,@VARA       Default to nothing entered ye
[1595] 6A95 BE,63,FF READL3 ST   >FF,@ARG7         Indicate non-check mode
[1596]               *----------------------------------------------------------
[1597]               * Please make sure that VARA points at a space location, or
[1598]               * at the end-of-field.
[1599]               *-------------- ADD FOLLOWING LINES 6/12/81 ---------------
[1600] 6A98 86,A3,74 READL1 CLR  V@NOTONE          Reset flag for ACCEPT SIZE to
[1601] 6A9B BE,60,01        ST   1,@ARG4           This means "no change" in lin
[1602] 6A9E BD,61,20 READL2 DST  @VARW,@ARG5       Position cursor at start of f
[1603]               *----------------------------------------------------------
[1604]               * Auto-repeat function is added for 99/4A, in PSCANS line
[1605]               * READ00 to READZ2+1 are changed to following code
[1606]               *----------------------------------------------------------
[1607] 6AA1 86,00    READ00 CLR  @VAR0             Counter for auto-repeat fucti
[1608]               *
[1609]               * To get out of insert mode, we usually return here.
[1610]               *
[1611] 6AA3 86,64    READ01 CLR  @ARG8             Indicate normal operation mod
[1612] 6AA5 BE,01,7E        ST   CURSOR,@VARV      Use VARV for CURSOR/CHARACTER
[1613]               * Idicate one character and alternate current character
[1614]               * position between normal and cursor.
[1615] 6AA8 C0,B0,61 READZ1 EX   @VARV,V*ARG5      By alternating between the
       6AAB 01

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0031 
EDIT-359
[1616]               *                              normal character and the
[1617]               *                              cursor, we make the cursor
[1618] 6AAC 86,79           CLR  @TIMER             blink
[1619]               * RXB PATCH CODE FOR USER *****
[1620]               * G6AAE  SCAN                   Scan for a character
[1621]               *        RAND 99                Force randomize to be rando
[1622] 6AAE 06,7C,B2 G6AAE  CALL DUSER             USER from EDIT mode
[1623] 6AB1 6A,CC           BS   READZ2            Found one!!!!
[1624] 6AB3 90,00    G6AB3  INC  @VAR0             Increment the auto-repeat cou
[1625] 6AB5 D6,75,FF        CEQ  >FF,@RKEY         It is an old key
[1626] 6AB8 6A,C5           BS   G6AC5
[1627] 6ABA CA,00,FE        CHE  >FE,@VAR0         Hold old key for a while
[1628] 6ABD 4A,C5           BR   G6AC5
[1629] 6ABF A6,00,1E        SUB  30,@VAR0          Control repeat rate
[1630] 6AC2 05,6A,CE        B    READZ5
[1631] 6AC5 C6,79,10 G6AC5  CH   >10,@TIMER        Time next character switch
[1632] 6AC8 4A,AE           BR   G6AAE
[1633] 6ACA 4A,A8           BR   READZ1            Restart character blink cycle
[1634]               *
[1635]               * Correct if we ended up with a displayed cursor
[1636]               *
[1637] 6ACC 86,00    READZ2 CLR  @VAR0
[1638] 6ACE D6,01,7E READZ5 CEQ  CURSOR,@VARV      Will have to change once more
[1639] 6AD1 6A,D7           BS   G6AD7
[1640] 6AD3 C0,B0,61        EX   @VARV,V*ARG5      Exchange for current cursor
       6AD6 01
[1641]               * GKXB key routines CTRL up, down, left, right
[1642] 6AD7 05,69,EE G6AD7  B    CTRLS             GKXB CTRL KEYS
[1643] 6ADA 6B,D0           BS   G6BD0
[1644]               *
[1645]               * BREAK character handling comes first
[1646]               *
[1647] 6ADC D6,75,02 G6ADC  CEQ  BREAK,@RKEY       Saw break character
[1648] 6ADF 4A,F4           BR   G6AF4
[1649] 6AE1 B2,45,FE        AND  >FE,@FLAG         Reset AUTONUM mode
[1650] 6AE4 8E,44           CZ   @PRGFLG           If in run mode
[1651] 6AE6 6D,4B           BS   BTOP15
[1652]               *----------------------------------------------------------
[1653]               * FIX FCTN4 breaks a program during an execution of INPUT,
[1654]               * ACCEPT, or LINPUT statement regardless of ON BREAK NEXT
[1655]               * flag bug 5/19/81
[1656]               * Replace following 2 lines:
[1657]               *        DST  @SMTSRT,V@SPGMPT Save place for continue
[1658]               *        B    EXEC6D           Interrupt execution
[1659]               * with:
[1660] 6AE8 DA,45,40        CLOG >40,@FLAG         If ON-BREAK-NEXT has not been
[1661] 6AEB 4A,F4           BR    G6AF4             set, i.e. break is illegal
[1662] 6AED BD,A3,82        DST  @SMTSRT,V@SPGMPT  Save place for continue
       6AF0 1E
[1663] 6AF1 05,A0,0E        B    EXEC6D            Interrupt execution
[1664]               *----------------------------------------------------------
[1665]               *
[1666]               * Edit buffer recall
[1667]               *
[1668] 6AF4 D6,75,06 G6AF4  CEQ  RECALL,@RKEY     If edit recall
[1669] 6AF7 4B,2A           BR   G6B2A
[1670] 6AF9 8E,44           CZ   @PRGFLG           Ignore if exec mode
[1671] 6AFB 4A,A8           BR   READZ1
[1672] 6AFD B2,45,FE        AND  >FE,@FLAG         Reset AUTONUM
[1673] 6B00 BF,20,03        DST  NLNADD+32,@VARW   Initialize to 32 below screen
       6B03 02
[1674] 6B04 0F,83    G6B04  XML  SCROLL            Scroll the screen
[1675] 6B06 A7,20,00        DSUB 32,@VARW          Line start is 32 lower now
       6B09 20

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0032 
EDIT-359
[1676] 6B0A D5,20,A3        DCEQ V@BUFSRT,@VARW    Until reach recall start
       6B0D 8C
[1677] 6B0E 4B,04           BR   G6B04
[1678] 6B10 BD,2A,A3        DST  V@BUFEND,@VARA    Set old end of line
       6B13 8E
[1679] 6B14 BD,4A,2A        DST  @VARA,@FAC        Calculate length of old line
[1680] 6B17 A5,4A,20        DSUB @VARW,@FAC        Subtract start from end
[1681] 6B1A 6B,22           BS   READZ3            If no characters to recall
[1682] 6B1C 34,4A,B0        MOVE @FAC,V@RECBUF,V*VARW Recall line
       6B1F 20,A8,C0
[1683] 6B22 BE,63,FF READZ3 ST   >FF,@ARG7         Non-check mode
[1684] 6B25 BD,61,20        DST  @VARW,@ARG5       Cursor at beginning of line
[1685] 6B28 4A,A1           BR   READ00            Allow edit of line
[1686]               *
[1687]               * BACK-ARROW - Space back one position
[1688]               *
[1689] 6B2A D6,75,08 G6B2A  CEQ  BACK,@RKEY        Backup to previous position
[1690] 6B2D 6C,E7           BS   RBACK
[1691]               *
[1692]               * RIGHT-ARROW - Forward space
[1693]               *
[1694] 6B2F D6,75,09        CEQ  FORW,@RKEY        Space one position
[1695] 6B32 6C,E3           BS   RFORW
[1696]               *
[1697]               * INSERT - Start INSERT mode here
[1698]               *
[1699] 6B34 D6,75,04        CEQ  INSRT,@RKEY       Set INSERT flag
[1700] 6B37 4B,3C           BR   G6B3C
[1701] 6B39 BE,64,01        ST   1,@ARG8           Select INSERT mode
[1702]               *
[1703]               * DELETE - Delete the current character
[1704]               *
[1705] 6B3C D6,75,03 G6B3C  CEQ  DLETE,@RKEY       DELETE all right
[1706] 6B3F 4B,94           BR   G6B94
[1707]               *------------ ADD THE FOLLOWING LINE 6/12/81 --------------
[1708] 6B41 86,A3,74        CLR  V@NOTONE          Reset flag for SIZE in ACCEPT
[1709] 6B44 86,60           CLR  @ARG4             Indicate definite change in l
[1710] 6B46 D5,2A,61        DCEQ @ARG5,@VARA       Not an empty line
[1711] 6B49 6B,8E           BS   G6B8E
[1712] 6B4B D6,B0,2A        CEQ  EDGECH,V*VARA     If pointing at end
       6B4E 7F
[1713] 6B4F 4B,53           BR   G6B53
[1714] 6B51 93,2A           DDEC @VARA             Backup up onto line
[1715] 6B53 BD,5C,2A G6B53  DST  @VARA,@ARG        Move everything from right
[1716] 6B56 A5,5C,61        DSUB @ARG5,@ARG         of the cursor to the left
[1717] 6B59 34,5C,B0        MOVE @ARG,V@1(@ARG5),V*ARG5
       6B5C 61,E0,01
       6B5F 61
[1718] 6B60 BD,5C,61        DST  @ARG5,@ARG        Start at the beginning
[1719] 6B63 B2,5D,FC        AND  >FC,@ARG1
[1720] 6B66 B6,5D,1D        OR   >1D,@ARG1         Move over to the end of the l
[1721] 6B69 C9,5C,2A G6B69  DCHE @VARA,@ARG        Update all errors
[1722] 6B6C 6B,7A           BS   G6B7A
[1723] 6B6E C0,E0,04        EX   V*ARG,V@4(@ARG)   Restore edge characters
       6B71 5C,B0,5C
[1724] 6B74 A3,5C,00        DADD 32,@ARG           Next victim please
       6B77 20
[1725] 6B78 4B,69           BR   G6B69
[1726] 6B7A 93,2A    G6B7A  DDEC @VARA             Pre-update end of string
[1727] 6B7C D6,B0,2A        CEQ  EDGECH,V*VARA     Hit edge character
       6B7F 7F
[1728] 6B80 4B,86           BR   G6B86
[1729] 6B82 A7,2A,00        DSUB 4,@VARA           Skip over edge characters
       6B85 04

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0033 
EDIT-359
[1730]               * For auto-repeat function 5/19/81
[1731] 6B86 D6,B0,2A G6B86  CEQ  >20+OFFSET,V*VARA
       6B89 80
[1732] 6B8A 6A,A3           BS   READ01
[1733] 6B8C 91,2A           DINC @VARA             Locked at feild position
[1734] 6B8E BE,B0,2A G6B8E  ST   >20+OFFSET,V*VARA Clear last position
       6B91 80
[1735] 6B92 4A,A3           BR   READ01
[1736]               *
[1737]               * CLEAR - Clear the entire input line
[1738]               *
[1739] 6B94 D6,75,07 G6B94  CEQ  CLRLN,@RKEY       Found CLEAR command
[1740] 6B97 4B,B3           BR   G6BB3
[1741]               *-------------- ADD THE FOLLOWING LINE 6/12/81 ------------
[1742] 6B99 86,A3,74        CLR  V@NOTONE          Reset flag for SIZE in ACCEPT
[1743]               *                              Current maximum to minimum
[1744] 6B9C D6,B0,2A G6B9C  CEQ  >7F,V*VARA         Don't clear edges
       6B9F 7F
[1745] 6BA0 6B,A6           BS   G6BA6
[1746] 6BA2 BE,B0,2A        ST   >20+OFFSET,V*VARA Blank line
       6BA5 80
[1747] 6BA6 93,2A    G6BA6  DDEC @VARA             Pre-update end-of-line
[1748] 6BA8 C9,2A,20        DCHE @VARW,@VARA       Up to and including first pos
[1749] 6BAB 6B,9C           BS   G6B9C
[1750] 6BAD 91,2A           DINC @VARA             Undo last subtraction
[1751] 6BAF 86,60           CLR  @ARG4             Indicate change
[1752] 6BB1 4A,9E           BR   READL2            And restart everything
[1753]               * General exit point. Unidentified control codes don't have
[1754]               * effect!!!!!
[1755] 6BB3 D6,75,0D G6BB3  CEQ  CHRTN,@RKEY       Only react on CR/UP/DOWN
[1756] 6BB6 6B,C2           BS   G6BC2
[1757] 6BB8 D6,75,0B        CEQ  UPMV,@RKEY
[1758] 6BBB 6B,C2           BS   G6BC2
[1759] 6BBD D6,75,0A        CEQ  DOWN,@RKEY
[1760] 6BC0 4A,A8           BR   READZ1
[1761] 6BC2 D5,2A,5E G6BC2  DCEQ @ARG2,@VARA       Check for block on last posit
[1762] 6BC5 4B,CF           BR   G6BCF
[1763] 6BC7 D6,B0,2A        CEQ  >20+OFFSET,V*VARA Blocked. . . . . .
       6BCA 80
[1764] 6BCB 6B,CF           BS   G6BCF
[1765] 6BCD 91,2A           DINC @VARA             Point beyond last character i
[1766]               *                              line
[1767] 6BCF 00       G6BCF  RTN                    ENTER the current line
[1768] 6BD0 8E,63    G6BD0  CZ   @ARG7             Check value of RKEY against g
[1769] 6BD2 4C,3A           BR   VALIZ9
[1770] 6BD4 BD,5C,A3        DST  V@VALIDP,@ARG     Pick up the standard stuff
       6BD7 B0
[1771] 6BD8 BC,5C,B0        ST   V*ARG,@ARG        V@VALIDP : Pointer to the
       6BDB 5C
[1772]               *                              standard stuff
[1773] 6BDC DA,5C,04        CLOG >04,@ARG          Specified UPPER CASE
[1774] 6BDF 6B,F0           BS   G6BF0
[1775] 6BE1 C6,75,5A        CH   >5A,@RKEY         Z too high for anything
[1776] 6BE4 6C,1A           BS   VALIZ2
[1777] 6BE6 CA,75,41        CHE  >41,@RKEY         A already in range
[1778] 6BE9 6C,3A           BS   VALIZ9
[1779] 6BEB D6,75,20        CEQ  >20,@RKEY         SPACE allow spaces in UALPHA
[1780] 6BEE 6C,3A           BS   VALIZ9
[1781] 6BF0 DA,5C,01 G6BF0  CLOG >01,@ARG          Specified NUMERIC
[1782] 6BF3 6C,0B           BS   G6C0B
[1783] 6BF5 D6,75,45        CEQ  >45,@RKEY         E ?
[1784] 6BF8 6C,3A           BS   VALIZ9
[1785] 6BFA D6,75,2E        CEQ  >2E,@RKEY         . ?
[1786] 6BFD 6C,3A           BS   VALIZ9

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0034 
EDIT-359
[1787] 6BFF D6,75,2B        CEQ  >2B,@RKEY         + ?
[1788] 6C02 6C,3A           BS   VALIZ9
[1789] 6C04 D6,75,2D        CEQ  >2D,@RKEY         - ?
[1790] 6C07 6C,3A           BS   VALIZ9
[1791] 6C09 4C,10           BR   VALIZ1            now try DIGIT range
[1792] 6C0B DA,5C,02 G6C0B  CLOG >02,@ARG          Digit range selected
[1793] 6C0E 6C,1A           BS   VALIZ2
[1794] 6C10 CA,75,30 VALIZ1 CHE  >30,@RKEY         0 ?
[1795] 6C13 4C,1A           BR   VALIZ2            No good
[1796] 6C15 CA,75,3A        CHE  >3A,@RKEY         9 ?
[1797] 6C18 4C,3A           BR   VALIZ9            Numeric allright
[1798] 6C1A BD,5C,A3 VALIZ2 DST  V@VALIDP,@ARG     Copy start address of string
       6C1D B0
[1799] 6C1E BC,50,A3        ST   V@VALIDL+1,@FAC6   and string length
       6C21 B3
[1800] 6C22 4C,2A           BR   VALIZ4             now test given characters
[1801] 6C24 D4,75,B0 VALIZ3 CEQ  V*ARG,@RKEY       valid!!!!
       6C27 5C
[1802] 6C28 6C,3A           BS   VALIZ9
[1803] 6C2A 91,5C    VALIZ4 DINC @ARG              Update actual address
[1804] 6C2C 92,50           DEC  @FAC6              and count # of characters
[1805] 6C2E 4C,24           BR   VALIZ3
[1806] 6C30 8E,80,CE G6C30  CZ   @PRTNFN           Wait for completion of previo
[1807] 6C33 4C,30           BR   G6C30              tone, and then
[1808] 6C35 06,00,36        CALL TONE2               ---BEEP---
[1809] 6C38 4A,A8           BR   READZ1            Continue in whatever mode we'
[1810]               *                              in now
[1811] 6C3A 8E,64    VALIZ9 CZ   @ARG8             INSERT mode?
[1812] 6C3C 6C,91           BS   G6C91
[1813]               * INSERT - is COMPLICATED!!!!! Because of those edge charac
[1814]               * Shift up all things. . . . continue as a standard insert
[1815]               * VARA <= ARG2
[1816] 6C3E D5,2A,5E        DCEQ @ARG2,@VARA       If end of screen
[1817] 6C41 6C,68           BS   READZ4
[1818]               *----------------------------------------------------------
[1819]               * Fix Editing a line that has been retrived by the REDO key
[1820]               * and may garble the last few characters bug, 5/28/81
[1821] 6C43 D6,B0,2A        CEQ  EDGECH,V*VARA     If at end of line
       6C46 7F
[1822] 6C47 4C,68           BR   READZ4
[1823] 6C49 D7,2A,02        DCEQ >02FE,@VARA       If also at end of screen
       6C4C FE
[1824] 6C4D 4C,64           BR   G6C64
[1825] 6C4F 0F,83           XML  SCROLL            Scroll the screen
[1826] 6C51 A7,20,00        DSUB 32,@VARW          Back up line start address
       6C54 20
[1827] 6C55 A7,2A,00        DSUB 28,@VARA          Back up to current start line
       6C58 1C
[1828] 6C59 A7,5E,00        DSUB 32,@ARG2          Absolute high limit backs up
       6C5C 20
[1829] 6C5D A7,61,00        DSUB 32,@ARG5          Current cursor position too
       6C60 20
[1830] 6C61 05,6C,68        B    READZ4
[1831] 6C64 A3,2A,00 G6C64  DADD 4,@VARA           Skip to next line
       6C67 04
[1832]               *----------------------------------------------------------
[1833] 6C68 BD,5C,2A READZ4 DST  @VARA,@ARG        Use ARG as temp for insert
[1834] 6C6B C5,5C,61 G6C6B  DCH  @ARG5,@ARG        Move everything up to current
[1835]               *                              line
[1836] 6C6E 4C,8A           BR   G6C8A
[1837] 6C70 93,5C           DDEC @ARG              Copy lower location to higher
[1838] 6C72 BC,E0,01        ST   V*ARG,V@1(@ARG)   Going from high to low
       6C75 5C,B0,5C
[1839] 6C78 D6,B0,5C        CEQ  EDGECH,V*ARG      Bumped into wall again

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0035 
EDIT-359
       6C7B 7F
[1840] 6C7C 4C,88           BR   G6C88
[1841] 6C7E A7,5C,00        DSUB 4,@ARG            Skip the wall
       6C81 04
[1842] 6C82 BC,E0,05        ST   V*ARG,V@5(@ARG)   And move character over
       6C85 5C,B0,5C
[1843] 6C88 4C,6B    G6C88  BR   G6C6B
[1844] 6C8A C9,2A,5E G6C8A  DCHE @ARG2,@VARA       Only update VARA if upper
[1845] 6C8D 6C,91           BS   G6C91
[1846] 6C8F 91,2A           DINC @VARA              hasn't been reached yet
[1847] 6C91 A2,75,60 G6C91  ADD  OFFSET,@RKEY      Create displayable character
[1848] 6C94 BC,B0,61        ST   @RKEY,V*ARG5      Display at current character
       6C97 75
[1849]               *                              position
[1850] 6C98 86,60           CLR  @ARG4             Indicate change in line
[1851] 6C9A D5,61,5E READ05 DCEQ @ARG2,@ARG5       Hit right margin
[1852] 6C9D 4C,AD           BR   G6CAD
[1853] 6C9F 8E,A3,74        CZ   V@NOTONE          If not the first time
[1854] 6CA2 6C,A7           BS   G6CA7
[1855] 6CA4 06,00,34        CALL TONE1             ---BEEP---
[1856] 6CA7 BE,A3,74 G6CA7  ST   >FF,V@NOTONE      Set the flag
       6CAA FF
[1857] 6CAB 4A,A8           BR   READZ1            Stay in current mode !!!!
[1858] 6CAD 91,61    G6CAD  DINC @ARG5             Update current address
[1859] 6CAF D6,B0,61        CEQ  EDGECH,V*ARG5     Correct for next line
       6CB2 7F
[1860] 6CB3 4C,B9           BR   G6CB9
[1861] 6CB5 A3,61,00        DADD 4,@ARG5           By skipping border
       6CB8 04
[1862] 6CB9 C5,61,2A G6CB9  DCH  @VARA,@ARG5       Check for last new high limit
[1863] 6CBC 4C,C1           BR   G6CC1
[1864] 6CBE BD,2A,61        DST  @ARG5,@VARA       Update new high limit
[1865] 6CC1 CB,2A,02 G6CC1  DCHE >02FE,@VARA       Still some space to go
       6CC4 FE
[1866] 6CC5 4A,A8           BR   READZ1
[1867] 6CC7 0F,83           XML  SCROLL            Scroll the screen!!!
[1868] 6CC9 A7,2A,00        DSUB 28,@VARA          Back to current start of line
       6CCC 1C
[1869] 6CCD 8E,64           CZ   @ARG8             If not insert mode then
[1870] 6CCF 6C,D5           BS   G6CD5
[1871] 6CD1 A7,2A,00        DSUB 4,@VARA           Off by 4 more-correct it
       6CD4 04
[1872] 6CD5 A7,20,00 G6CD5  DSUB 32,@VARW          Backup line start address
       6CD8 20
[1873] 6CD9 A7,5E,00        DSUB 32,@ARG2          Absolute high limit backs up
       6CDC 20
[1874] 6CDD A7,61,00        DSUB 32,@ARG5          Current cursor position too
       6CE0 20
[1875] 6CE1 4A,A8           BR   READZ1            Start with something else
[1876]               *
[1877]               * Something special for forward cursor move
[1878]               *
[1879] 6CE3 86,64    RFORW  CLR  @ARG8             Leave INSERT mode - don't cop
[1880] 6CE5 4C,9A           BR   READ05             but use rest of input logic
[1881]               *----------------------------------------------------------
[1882]               * RBACK section has been moved from READL2+1 for adding
[1883]               * auto-repeat function in 99/4A. Also
[1884]               *       BR   READ01   is added at the end, 5/18/81
[1885]               *----------------------------------------------------------
[1886]               * This will cause the next test to fail initialy, since
[1887]               * VARW clearly equals ARG5 first time through
[1888]               *------------- ADD THE FOLLOWING LINE 6/12/81 -------------
[1889] 6CE7 86,A3,74 RBACK  CLR  V@NOTONE          Reset flag for SIZE in ACCEPT
[1890] 6CEA C5,61,20        DCH  @VARW,@ARG5       The standard backup entry

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0036 
EDIT-359
[1891] 6CED 4C,FB           BR   G6CFB
[1892] 6CEF 93,61           DDEC @ARG5             So we backup the current posi
[1893] 6CF1 D6,B0,61        CEQ  EDGECH,V*ARG5     Skip border line
       6CF4 7F
[1894] 6CF5 4C,FB           BR   G6CFB
[1895] 6CF7 A7,61,00        DSUB 4,@ARG5           Backup to previous line
       6CFA 04
[1896] 6CFB 4A,A3    G6CFB  BR   READ01            Go back for next character
[1897]               ***********************************************************
[1898]               * WARNZZ - Checks the special warning handling conditions
[1899]               * which can be set by an ON WARNING statement and does the
[1900]               * following based upon those conditions:
[1901]               * ON WARNING PRINT - prints continues execution
[1902]               * ON WARNING STOP  - prints and stops
[1903]               * ON WARNING NEXT  - ignores the warning and goes on
[1904]               ***********************************************************
[1905] 6CFD 87,22    WARNZZ DCLR @ERRCOD           Clear the error if form 9900
[1906] 6CFF 86,76           CLR  @EXPZ
[1907] 6D01 88,77           FETCH @EXPZ+1          Get index into error table
[1908] 6D03 E3,76,00        DSLL 2,@EXPZ           Multiply by 4
       6D06 02
[1909] 6D07 A3,76,CD        DADD ERRTAB,@EXPZ      Get addres of entry into tabl
       6D0A 77
[1910] 6D0B 33,00,04        MOVE 4,G@0(@EXPZ),@FAC10
       6D0E 54,00,00
       6D11 76
[1911] 6D12 8E,44           CZ   @PRGFLG           If its imperative
[1912] 6D14 6D,1B           BS   WRNZZ3             take defualt.
[1913] 6D16 DA,45,02        CLOG >02,@FLAG         If print turned on
[1914] 6D19 4D,35           BR   G6D35
[1915] 6D1B 0F,83    WRNZZ3 XML  SCROLL            Scroll the screen
[1916] 6D1D 31,00,09        MOVE 9,G@MSGWRN,V@NLNADD * WARNING
       6D20 A2,E2,60
       6D23 5C
[1917] 6D24 0F,83           XML  SCROLL            Scroll the screen again
[1918] 6D26 BF,20,02        DST  NLNADD+2,@VARW    Start address behind warning
       6D29 E4
[1919] 6D2A 06,CE,1F        CALL TRACBK            Check for warning in UDF
[1920] 6D2D 6D,32           BS   WRNZZ5            Was UDF so message already ou
[1921] 6D2F 06,6E,1B        CALL ERPNT5            Print the message
[1922] 6D32 BE,7F,03 WRNZZ5 ST   3,@XPT
[1923]               * If imperative then continue on normally
[1924] 6D35 8E,44    G6D35  CZ   @PRGFLG           If its imperative
[1925] 6D37 4D,3C           BR   G6D3C
[1926] 6D39 05,CF,68        B    RETNOS
[1927]               * If warning continue turned on the continue
[1928] 6D3C DA,45,04 G6D3C  CLOG >04,@FLAG         If contiue
[1929] 6D3F 4D,44           BR   ERRZZ4
[1930] 6D41 05,CF,68        B    RETNOS
[1931] 6D44 06,76,7F ERRZZ4 CALL CLEAN             Clean up stack and s.t.
[1932] 6D47 BD,6E,A3 ERRZZ5 DST  V@SAVEVP,@VSPTR   Restore value stack
       6D4A 88
[1933] 6D4B 05,60,12 BTOP15 B    G6012             Finish up and go back
[1934]               ***********************************************************
[1935]               * ERRZZ - Sets up an error stack entry based upon the
[1936]               * information passed to it by the caller and what it can
[1937]               * gather from the error table. It then either prints the
[1938]               * error message and aborts or goes to the line specified by
[1939]               * a previously executed ON ERROR statement. The stack enrry
[1940]               * looks like:
[1941]               * ---------------------------------------------------------
[1942]               * | Error code | Severity | >69 | Luno # | EXTRAM | PGMPTR
[1943]               * | ^          | ^        | ^   | ^      | ^      | ^
[1944]               * | FAC        | FAC1     | FAC2| FAC3   | FAC4   | FAC6

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0037 
EDIT-359
[1945]               *----------------------------------------------------------
[1946]               * ERROR CODE - the error number
[1947]               * SEVERITY   - Severity of the error
[1948]               *      1     - Warning
[1949]               *      5     - Possibly recoverable
[1950]               *      9     - Fatal, unrecoverable
[1951]               * >69  ERROR STACK ENTRY ID
[1952]               * LUNO #     - Luno # if file error or -1 if non-file error
[1953]               * EXTRAM, PGMPTR - Information to indicate the line # of
[1954]               *                  the error
[1955]               ***********************************************************
[1956]               *----------------------------------------------------------
[1957]               * In order to fix MEMORY FULL error occurring during MERGE
[1958]               * execution will leave the file open to disk DSR bug,
[1959]               * following lines should be added,
[1960]               * This note for the reshipment of FLMGR after 6/10/81
[1961]               * IOCALL routine are copied from FLMGR here, becuase FLMGR
[1962]               * is not in the branch table in FLMGR.
[1963]               * ERRZZ DST  V@MRGPAB,@PABPTR
[1964]               *       DCZ  @PABPTR          Error must occur in EDITLN
[1965]               *                              routine during MERGEing
[1966]               *       BS   HERE
[1967]               *       CALL IOCALL           Close all files
[1968]               *       DATA CZCLOS
[1969]               * HERE  ...........program continues
[1970]               * A statement BR IOCALL needs to be added in FLMGRS, which
[1971]               * is not going to be reshipped at this time 6/10/81
[1972]               * Therefore, the following patch is used
[1973] 6D4E C1,04,A3 ERRZZ  DEX  V@MRGPAB,@PABPTR
       6D51 9E
[1974] 6D52 8F,04           DCZ  @PABPTR           Error must occur in EDITLN
[1975]               *                              routine during MERGEing
[1976] 6D54 6D,74           BS   G6D74
[1977] 6D56 35,00,1E        MOVE 30,@FAC,V@>03C0   Save FAC area
       6D59 A3,C0,4A
[1978] 6D5C BD,56,04        DST  @PABPTR,@FAC12    Get the PAB pointer in FAC
[1979] 6D5F A3,56,00        DADD NLEN,@FAC12       Compute name length entry
       6D62 0D
[1980] 6D63 BE,E0,04        ST   1,V@4(@PABPTR)    * Select name length entry
       6D66 04,01
[1981] 6D68 06,00,10        CALL CALDSR            Call actual DSR line routine
[1982] 6D6B 08              BYTE 8
[1983] 6D6C 35,00,1E        MOVE 30,V@>03C0,@FAC
       6D6F 4A,A3,C0
[1984]                
[1985]               * Ignore the error coming back from DSR
[1986] 6D72 87,04           DCLR @PABPTR           Clear V@MRGPAB in case
[1987]               *                              any kind of I/O operation
[1988]               *                              following MERGE
[1989]               *                              (Also for the DEX statement)
[1990] 6D74 C1,04,A3 G6D74  DEX  V@MRGPAB,@PABPTR  Get the PABPTR back
       6D77 9E
[1991]               *----------------------------------------------------------
[1992] 6D78 87,22           DCLR @ERRCOD           Clear error code if from 9900
[1993] 6D7A A5,14,0E        DSUB @CURINC,@CURLIN   Just in case in autonum mode
[1994] 6D7D D7,3E,08        DCEQ CRNBUF,@SYMTAB    If prescanning r.h.
       6D80 20
[1995] 6D81 4D,87           BR   G6D87              of UDF and parameter in
[1996] 6D83 BD,3E,A8        DST  V@CRNBUF+2,@SYMTAB crunch buffer, fix SYMTAB
       6D86 22
[1997] 6D87 86,76    G6D87  CLR  @EXPZ             Get index into error table
[1998] 6D89 88,77           FETCH @EXPZ+1          Get index into error table
[1999] 6D8B E3,76,00        DSLL 2,@EXPZ           Multiply index by 4
       6D8E 02

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0038 
EDIT-359
[2000] 6D8F A3,76,CD        DADD ERRTAB,@EXPZ      Address of table entry
       6D92 77
[2001] 6D93 33,00,04        MOVE 4,G@0(@EXPZ),@FAC10  Get table entry
       6D96 54,00,00
       6D99 76
[2002] 6D9A BE,73,8A        ST   RSTK+2,@SUBSTK    Init subroutine stack but all
[2003]               *                              for GROM return address
[2004] 6D9D 8E,57           CZ   @FAC13            If message only
[2005] 6D9F 4D,AF           BR   G6DAF
[2006] 6DA1 06,6E,0E ERRZZR CALL ERPRNT            Display the error message
[2007]               * RXB PATCH FIX CODE ****************    * RXB *    *******
[2008] 6DA4 D7,54,60        DCEQ MSGFST,@FAC10     If * READY * (* RXB *)
       6DA7 40
[2009] 6DA8 4D,AD           BR   G6DAD
[2010] 6DAA 06,80,12        CALL CLSALL            Close all files
[2011] 6DAD 4D,44    G6DAD  BR   ERRZZ4             and clean up
[2012] 6DAF 8E,44    G6DAF  CZ   @PRGFLG           If imperative-default
[2013] 6DB1 6D,B8           BS   ERRZ1
[2014] 6DB3 8F,A3,8A        DCZ  V@ERRLN           If error turned off
[2015] 6DB6 4D,BF           BR   G6DBF
[2016] 6DB8 06,CE,1F ERRZ1  CALL TRACBK            Check for UDF
[2017] 6DBB 6D,44           BS   ERRZZ4            Was UDF, message already out
[2018] 6DBD 4D,A1           BR   ERRZZR            Assume normal error
[2019]               *
[2020]               * Error turned on. Now build the error entry
[2021]               *
[2022] 6DBF 06,76,7F G6DBF  CALL CLEAN             Clean up the stack
[2023] 6DC2 BD,4A,56        DST  @FAC12,@FAC       Put in error & severity
[2024] 6DC5 BE,4C,69        ST   >69,@FAC2         Error stack ID
[2025] 6DC8 D7,54,62        DCEQ MSG130,@FAC10     If I/O error
       6DCB A6
[2026] 6DCC 4D,D6           BR   G6DD6
[2027] 6DCE BC,4D,E0        ST   V@2(@PABPTR),@FAC3  *  Put in LUNO #
       6DD1 02,04
[2028] 6DD3 B6,4B,80        OR   >80,@FAC1         And indicate an I/O error
[2029] 6DD6 BD,50,2E G6DD6  DST  @EXTRAM,@FAC6     Save line pointer
[2030] 6DD9 BD,4E,1E        DST  @SMTSRT,@FAC4     Save pointer to beginning of
[2031]               *                              statement
[2032] 6DDC BD,5C,6E        DST  @VSPTR,@ARG       Must check for room on stack
[2033] 6DDF A3,5C,00        DADD 24,@ARG           Need 24 to help out VPUSH
       6DE2 18
[2034] 6DE3 C5,1A,5C        DCH  @ARG,@STREND      If not room
[2035] 6DE6 6D,FD           BS   G6DFD
[2036] 6DE8 06,6E,0E        CALL ERPRNT            Put out the message anyway
[2037] 6DEB BF,54,61        DST  MSG39,@FAC10      Memory full message
       6DEE 1C
[2038] 6DEF 86,44           CLR  @PRGFLG           Don't print a line #
[2039] 6DF1 06,6E,0E        CALL ERPRNT            Print it too
[2040] 6DF4 31,00,08        MOVE 8,G@MSGERR,V@NLNADD-18
       6DF7 A2,D0,60
       6DFA 38
[2041] 6DFB 4D,47           BR   ERRZZ5            And give up
[2042] 6DFD 0F,77    G6DFD  XML  VPUSH             Push the error entry
[2043] 6DFF 87,2E           DCLR @EXTRAM           Clear on-error entry
[2044] 6E01 C1,2E,A3        DEX  V@ERRLN,@EXTRAM   Set line pointer & clear on-e
       6E04 8A
[2045] 6E05 06,80,2C        CALL GRSUB2            Read the line text pointer VD
[2046]               *                              ERAM (use GREAD1) or VDP
[2047] 6E08 2E              BYTE EXTRAM          * @EXTRAM : Source address
[2048]               *                              in ERAM/VDP
[2049] 6E09 BD,2C,58        DST  @EEE1,@PGMPTR     Put the result in @PGMPTR
[2050] 6E0C 0F,81           XML  CONTIN            And go to the line
[2051]               ***********************************************************
[2052]               * ERPRNT - Print an error or warning message

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0039 
EDIT-359
[2053]               *
[2054]               * ERPRNT - Entry point for ERROR
[2055]               * ERPNT5 - Entry point for WARNING
[2056]               ***********************************************************
[2057] 6E0E 06,60,1C ERPRNT CALL G601C             Load the character table
[2058] 6E11 0F,83           XML  SCROLL            Scroll the screen
[2059] 6E13 BE,A2,E2        ST   >2A+OFFSET,V@NLNADD Put the * in
       6E16 8A
[2060] 6E17 BF,20,02        DST  NLNADD+2,@VARW    Set up for the message
       6E1A E4
[2061] 6E1B 86,74    ERPNT5 CLR  @KEYBD            Enable main console
[2062] 6E1D 33,00,01        MOVE 1,G@0(@FAC10),@ARG1  Get message length
       6E20 5D,00,00
       6E23 54
[2063] 6E24 86,5C           CLR  @ARG
[2064] 6E26 32,5C,B0        MOVE @ARG,G@1(@FAC10),V*VARW   Display
       6E29 20,00,01
       6E2C 54
[2065] 6E2D A1,20,5C        DADD @ARG,@VARW        Start location for " IN "
[2066] 6E30 D7,54,62        DCEQ MSG130,@FAC10     "* I/O ERROR [xx]xy"
       6E33 A6
[2067] 6E34 4E,4D           BR   G6E4D
[2068] 6E36 91,20           DINC @VARW             Update for one space
[2069]               *                              separation
[2070] 6E38 BC,5F,E0        ST   V@>04(@PABPTR),@ARG3   * Create high order resu
       6E3B 04,04
[2071] 6E3D 86,5E           CLR  @ARG2             Only display high order decim
[2072] 6E3F 06,6F,BA        CALL DISO              Display this number
[2073] 6E42 BC,5F,E0        ST   V@>05(@PABPTR),@ARG3  * Get low order result
       6E45 05,04
[2074] 6E47 E6,5F,05        SRL  5,@ARG3           Remove mose identification bi
[2075] 6E4A 06,6F,BA        CALL DISO              Output the number in decimal
[2076] 6E4D D7,54,60 G6E4D  DCEQ MSGFST,@FAC10  * Ready * (* RXB *)
       6E50 40
[2077] 6E51 6E,79           BS   G6E79
[2078] 6E53 06,00,36        CALL TONE2             Wake up the idiot!!!!
[2079] 6E56 8E,44           CZ   @PRGFLG           If program, print line #
[2080] 6E58 6E,79           BS   G6E79
[2081] 6E5A C7,20,02        DCH  >02F6,@VARW       It will pass EOL
       6E5D F6
[2082] 6E5E 4E,66           BR   G6E66
[2083] 6E60 0F,83           XML  SCROLL            Display on next line
[2084] 6E62 BF,20,02        DST  NLNADD+1,@VARW    Indent for the "IN"
       6E65 E3
[2085] 6E66 BF,E0,01 G6E66  DST  >C9CE,V@1(@VARW)   * Put in the "in"
       6E69 20,C9,CE
[2086] 6E6C A3,20,00        DADD 4,@VARW           Display location for line
       6E6F 04
[2087] 6E70 BC,76,42        ST   @CHAT,@EXPZ       ASC destroys CHAT
[2088] 6E73 06,A0,0A        CALL ASC               DISPLAY THE LINE #
[2089] 6E76 BC,42,76        ST   @EXPZ,@CHAT       Restore CHAT
[2090] 6E79 0F,83    G6E79  XML  SCROLL
[2091] 6E7B 00              RTN
[2092]               ***********************************************************
[2093]               * LLIST - Lists one program line on the screen. The
[2094]               * entrypoint to the line is given in STPT.
[2095]               * In this routine, FAC2 is used as a flag to indicate that
[2096]               * the most recent character output was an alphanumeric
[2097]               * character. If the next character is also an alphanumeric
[2098]               * character, then the two are separated by a space.
[2099]               ***********************************************************
[2100] 6E7C DA,45,80 LLIST  CLOG >80,@FLAG         If program protected
[2101] 6E7F 6E,85           BS   G6E85
[2102] 6E81 06,6D,4E        CALL ERRZZ             * PROTECTION VIOLATION

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0040 
EDIT-359
[2103] 6E84 27              BYTE 39
[2104] 6E85 06,80,1A G6E85  CALL OUTREC            Make room for a new line
[2105] 6E88 BD,5E,B0        DST  V*EXTRAM,@ARG2    Prepare for line # printing
       6E8B 2E
[2106] 6E8C B2,5E,7F        AND  >7F,@ARG2         Reset possible BreakPoint
[2107] 6E8F 06,6F,A9        CALL OUTLN             Diplay line in free format
[2108] 6E92 BD,20,08        DST  @CCPADD,@VARW     Copy position for editing
[2109] 6E95 91,20           DINC @VARW             Leave room for space
[2110] 6E97 BD,2C,E0        DST  V@2(@EXTRAM),@PGMPTR   * Get pointer to line
       6E9A 02,2E
[2111] 6E9C BF,4C,00 LLISZ0 DST  >0020,@FAC2       Clear blank fill and set spac
       6E9F 20
[2112] 6EA0 0F,79    LLIZ12 XML  PGMCHR            Get next token on line
[2113] 6EA2 8E,42           CZ   @CHAT             Exit on end of line
[2114] 6EA4 6F,A8           BS   LLISZ9
[2115] 6EA6 8E,4D           CZ   @FAC3             If separator needed
[2116] 6EA8 6E,B3           BS   LLIZ15
[2117] 6EAA C0,4D,42        EX   @CHAT,@FAC3       Save CHAT and bare the separa
[2118] 6EAD 06,6F,D2        CALL DSPCHR            Put the separator out
[2119] 6EB0 C0,4D,42        EX   @CHAT,@FAC3       Restore CHAT
[2120]               * Next thing to determine is whether or not we need a space
[2121]               * for separation with the next stuff.
[2122] 6EB3 86,4D    LLIZ15 CLR  @FAC3             Assume we'll get alphanumeric
[2123] 6EB5 D6,42,82        CEQ  SSEPZ,@CHAT       If double-colon
[2124] 6EB8 6E,BF           BS   LLIZ16
[2125] 6EBA D6,42,B5        CEQ  COLONZ,@CHAT      If colon now and colon
[2126] 6EBD 4E,C4           BR   G6EC4
[2127] 6EBF D6,4A,B5 LLIZ16 CEQ  COLONZ,@FAC        before-separater
[2128] 6EC2 6E,E4           BS   LLIZ17
[2129] 6EC4 CA,42,B3 G6EC4  CHE  COMMAZ,@CHAT      Figure out separator range
[2130] 6EC7 4E,CE           BR   G6ECE
[2131] 6EC9 CA,42,BA        CHE  ORZ,@CHAT
[2132] 6ECC 4E,F0           BR   LLISZ2
[2133] 6ECE C6,42,BD G6ECE  CH   NOTZ,@CHAT        Figure out separator range
[2134] 6ED1 4E,D8           BR   G6ED8
[2135] 6ED3 CA,42,C8        CHE  NUMCOZ,@CHAT
[2136] 6ED6 4E,F0           BR   LLISZ2
[2137] 6ED8 BE,4D,20 G6ED8  ST   >20,@FAC3          Prepare for alfa indication
[2138] 6EDB 8E,4C           CZ   @FAC2              alfanum-alfanum combination
[2139] 6EDD 6E,F0           BS   LLISZ2
[2140] 6EDF D6,54,20        CEQ  >20,@FAC10        Don't ouput 2 spaces
[2141] 6EE2 6E,F0           BS   LLISZ2
[2142] 6EE4 BC,4C,42 LLIZ17 ST   @CHAT,@FAC2       Save CHAT somewhere
[2143] 6EE7 BE,42,20        ST   >20,@CHAT         And display a space
[2144] 6EEA 06,6F,D2        CALL DSPCHR
[2145] 6EED BC,42,4C        ST   @FAC2,@CHAT       Retrive CHAT
[2146] 6EF0 C0,4C,4D LLISZ2 EX   @FAC3,@FAC2       Could be for the next time to
[2147]               * That takes care of all the extra spaces we might need
[2148] 6EF3 DA,42,80        CLOG >80,@CHAT         Just copy variable names
[2149] 6EF6 4F,0A           BR   G6F0A
[2150] 6EF8 06,6F,D2 G6EF8  CALL DSPCHR            Copy the character to output
[2151] 6EFB 0F,79           XML  PGMCHR            Get the next character
[2152] 6EFD 8E,42           CZ   @CHAT             But exit on EOL
[2153] 6EFF 6F,A8           BS   LLISZ9
[2154] 6F01 DA,42,80        CLOG >80,@CHAT
[2155] 6F04 6E,F8           BS   G6EF8
[2156] 6F06 86,4A           CLR  @FAC             No spaces if ":" or "::"
[2157] 6F08 4E,B3           BR   LLIZ15
[2158] 6F0A D6,42,C8 G6F0A  CEQ  NUMZ,@CHAT
[2159] 6F0D 6F,17           BS   G6F17
[2160] 6F0F D6,42,C7        CEQ  STRINZ,@CHAT
[2161] 6F12 4F,41           BR   LLISZ3
[2162] 6F14 06,6F,CF        CALL DSPQUO            Display first quote of string
[2163]               * This place is the general location for strings both quote

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0041 
EDIT-359
[2164]               * unquoted.
[2165] 6F17 0F,79    G6F17  XML  PGMCHR            Get string length in CHAT
[2166] 6F19 BC,4A,42        ST   @CHAT,@FAC        Copy in temporary space
[2167] 6F1C 8E,4A    G6F1C  CZ   @FAC              Also take care of empty strin
[2168] 6F1E 6F,35           BS   G6F35
[2169] 6F20 0F,79           XML  PGMCHR
[2170] 6F22 8E,4C           CZ   @FAC2             Alpha means unquoted string
[2171] 6F24 4F,2E           BR   G6F2E
[2172] 6F26 D6,42,22        CEQ  QUOTE,@CHAT
[2173] 6F29 4F,2E           BR   G6F2E
[2174] 6F2B 06,6F,D2        CALL DSPCHR            Display two quotes for one
[2175] 6F2E 06,6F,D2 G6F2E  CALL DSPCHR            Display 2nd quote or char
[2176] 6F31 92,4A           DEC  @FAC              Update string length, get nex
[2177] 6F33 4F,1C           BR   G6F1C
[2178] 6F35 8E,4C    G6F35  CZ   @FAC2
[2179] 6F37 4F,87           BR   LLISZ1            Non-alfa end means extra
[2180] 6F39 06,6F,CF        CALL DSPQUO            Display closing quote
[2181] 6F3C BE,4C,20        ST   >20,@FAC2         Cause space before following
[2182] 6F3F 4F,87           BR   LLISZ1             alpha
[2183]               * Try to decode line numbers and keywords
[2184] 6F41 D6,42,C9 LLISZ3 CEQ  LNZ,@CHAT         Decode line #
[2185] 6F44 4F,55           BR   G6F55
[2186] 6F46 0F,79           XML  PGMCHR            Get the high order byte first
[2187] 6F48 BC,5E,42        ST   @CHAT,@ARG2
[2188] 6F4B 0F,79           XML  PGMCHR
[2189] 6F4D BC,5F,42        ST   @CHAT,@ARG3        information as collected her
[2190] 6F50 06,6F,A9        CALL OUTLN             Display the actual informatio
[2191] 6F53 4F,87           BR   LLISZ1            And continue
[2192]               * Now it has to be a normal keyword
[2193] 6F55 BF,4A,CB G6F55  DST  KEYTAB,@FAC       Address of KEYTAB for search
       6F58 00
[2194] 6F59 0F,84           XML  IO                Search keyword table
[2195] 6F5B 00              BYTE 0                 * Select table search
[2196]               *                      FAC8 returns with pointer to keyword
[2197]               *                      FAC4 has length
[2198] 6F5C 33,00,01 LLISZ6 MOVE 1,G@0(@FAC8),@CHAT
       6F5F 42,00,00
       6F62 52
[2199]               * And output the thus found character
[2200] 6F63 06,6F,D2        CALL DSPCHR            Display character on screen
[2201] 6F66 91,52           DINC @FAC8             Update FAC8 for next referenc
[2202] 6F68 92,4F           DEC  @FAC5             Count number of characters
[2203] 6F6A 4F,5C           BR   LLISZ6            Always less then 255
[2204] 6F6C D6,4A,83        CEQ  TREMZ,@FAC        No spaces after!!!
[2205] 6F6F 6F,85           BS   LLISZ7
[2206] 6F71 D6,4A,9A        CEQ  REMZ,@FAC         No spaces after REM
[2207] 6F74 6F,85           BS   LLISZ7
[2208] 6F76 CA,4A,B3        CHE  COMMAZ,@FAC       Master stuff =>space
[2209] 6F79 4E,9C           BR   LLISZ0
[2210] 6F7B D6,4A,ED        CEQ  USINGZ,@FAC       Master stuff =>space
[2211] 6F7E 6E,9C           BS   LLISZ0
[2212] 6F80 D6,4A,FD        CEQ  NUMBEZ,@FAC       "#" never followed by space
[2213] 6F83 4F,87           BR   LLISZ1
[2214] 6F85 86,4C    LLISZ7 CLR  @FAC2             Avoid spaces behind here
[2215] 6F87 86,4D    LLISZ1 CLR  @FAC3             Indicate separator not needed
[2216] 6F89 4E,A0           BR   LLIZ12            Continue for next keyword
[2217]               ***********************************************************
[2218]               * Convert a number from binary to ASCII
[2219]               * Input  : binary number in ARG2 and ARG3
[2220]               * Output : pointer to ASCII number in FAC11 with the actual
[2221]               *          number lying just before and ending with FAC10.
[2222]               *          i.e. the last digit of the ASCII representation
[2223]               *          is in FAC10; number of digits in the number in
[2224]               *          ARG5

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0042 
EDIT-359
[2225]               ***********************************************************
[2226] 6F8B 86,61    CVRTLN CLR  @ARG5             Start with 0 characters
[2227] 6F8D BE,67,67        ST   ARG11,@ARG11      Select first address + 1
[2228] 6F90 87,5C    G6F90  DCLR @ARG              Clear upper 2 bytes of 4 byte
[2229] 6F92 92,67           DEC  @ARG11            Go to next position
[2230] 6F94 AF,5C,00        DDIV 10,@ARG           Compute least significant rem
       6F97 0A
[2231] 6F98 A2,5F,30        ADD  >30,@ARG3         Always < 10 off course
[2232] 6F9B BC,90,67        ST   @ARG3,*ARG11      Store it in ARG
       6F9E 5F
[2233] 6F9F BD,5E,5C        DST  @ARG,@ARG2        Replace remainder by result
[2234] 6FA2 90,61           INC  @ARG5             Update total # of characters
[2235] 6FA4 8F,5E           DCZ  @ARG2             Until whole number converted
[2236] 6FA6 4F,90           BR   G6F90
[2237] 6FA8 00       LLISZ9 RTN
[2238]               * Output a line number to a device (or screen)
[2239] 6FA9 06,6F,8B OUTLN  CALL CVRTLN            Convert from binary to ASCII
[2240] 6FAC BC,42,90 OUTLZ1 ST   *ARG11,@CHAT      Get the next character
       6FAF 67
[2241] 6FB0 06,6F,D2        CALL DSPCHR            Display the character
[2242] 6FB3 90,67           INC  @ARG11            Increment the character posit
[2243] 6FB5 92,61           DEC  @ARG5             Decrement number of digits
[2244] 6FB7 4F,AC           BR   OUTLZ1            Output digit if not all out
[2245] 6FB9 00              RTN
[2246]               * Display number on the screen
[2247] 6FBA 06,6F,8B DISO   CALL CVRTLN            Convert from binary to ASCII
[2248] 6FBD BC,B0,20 DISPZ1 ST   *ARG11,V*VARW     Get more significant characte
       6FC0 90,67
[2249] 6FC2 A2,B0,20        ADD  OFFSET,V*VARW     Display character on screen
       6FC5 60
[2250] 6FC6 91,20           DINC @VARW             Update screen pointer
[2251] 6FC8 90,67           INC  @ARG11            Get next position
[2252] 6FCA 92,61           DEC  @ARG5             Update count
[2253] 6FCC 4F,BD           BR   DISPZ1            Add loop until finished
[2254] 6FCE 00              RTN
[2255]               * Put out a quote
[2256] 6FCF BE,42,22 DSPQUO ST   QUOTE,@CHAT       DISPLAY A QUOTE
[2257]               * Put out next character
[2258] 6FD2 C4,06,07 DSPCHR CH   @RECLEN,@CCPPTR   Action on end of screen
[2259] 6FD5 4F,DE           BR   G6FDE
[2260] 6FD7 06,80,1A        CALL OUTREC            Output crrrent record
[2261] 6FDA A7,20,00        DSUB 32,@VARW          Keep track of begining of lin
       6FDD 20
[2262] 6FDE BC,B0,08 G6FDE  ST   @DSRFLG,V*CCPADD  Put offset on screen
       6FE1 17
[2263] 6FE2 A0,B0,08        ADD  @CHAT,V*CCPADD    Add in the character
       6FE5 42
[2264] 6FE6 91,08           DINC @CCPADD           Bump output pointer
[2265] 6FE8 90,06           INC  @CCPPTR           Update current line positon
[2266] 6FEA BC,54,42        ST   @CHAT,@FAC10      FAC10 may be used by OUTREC !
[2267] 6FED 00              RTN
[2268]               ***********************************************************
[2269]               * Static scanner to build the main symbol table and to buil
[2270]               * symbol tables for each subprogram and to build the
[2271]               * subprogram table. Checks some errors and aborts if any
[2272]               * detected.
[2273]               ***********************************************************
[2274]               *----------------------------------------------------------
[2275]               * Added the following 6/8/81  for NOPSCAN feature
[2276]               *  Flag PSCFG: >00 NOPSCAN
[2277]               *              >FF RESUME PSCAN
[2278] 6FEE BE,A3,B7 PRESCN ST   >FF,V@PSCFG       Default to PSCAN
       6FF1 FF
[2279]               *----------------------------------------------------------

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0043 
EDIT-359
[2280] 6FF2 87,0A           DCLR @CALIST           Initialize call list
[2281] 6FF4 BF,06,00        DST  10,@DFLTLM        Set default array size
       6FF7 0A
[2282] 6FF8 87,16           DCLR @XFLAG            Initialize prescan flag bits
[2283]               *                              and FOR/NEXT counter
[2284] 6FFA 8E,44           CZ   @PRGFLG           If imperative
[2285] 6FFC 50,0B           BR   G700B
[2286] 6FFE BF,2C,08        DST  CRNBUF,@PGMPTR    Pointer to 1st token
       7001 20
[2287] 7002 0F,79           XML  PGMCHR            Get the 1st token
[2288] 7004 0F,83           XML  SCROLL            Scroll the screen
[2289] 7006 06,70,4B        CALL SCAN10            Do the static scan of the lin
[2290] 7009 50,13           BR   G7013             If program
[2291] 700B 06,70,1A G700B  CALL SCAN              Scan the program
[2292] 700E B2,45,90        AND  >90,@FLAG         Reset all the flags but the
[2293]               *                              TRACE & LIST/EDIT protection
[2294] 7011 87,48           DCLR @LSUBP
[2295] 7013 BD,6E,A3 G7013  DST  V@SAVEVP,@VSPTR   Initialize VSPTR
       7016 88
[2296] 7017 05,A0,04        B    EXEC              Execute the program or statem
[2297]               ***********************************************************
[2298]               *                     Static Scanner
[2299]               ***********************************************************
[2300] 701A BD,2E,32 SCAN   DST  @ENLN,@EXTRAM     1st address of line # table
[2301] 701D A3,2E,00        DADD 3,@EXTRAM
       7020 03
[2302] 7021 87,3E           DCLR @SYMTAB           Clear the symbol table
[2303] 7023 87,3A           DCLR @SUBTAB           Clear the subprogram table
[2304] 7025 8E,80,84        CZ   @RAMTOP
[2305] 7028 50,31           BR   G7031
[2306] 702A BD,40,30        DST  @STLN,@FREPTR     Initialize free-space pointer
[2307] 702D 93,40           DDEC @FREPTR           Back up from line # table
[2308] 702F 50,3B           BR   G703B
[2309] 7031 BD,80,86 G7031  DST  @STLN,@RAMFRE     Initialize ERAM free-space
       7034 30
[2310] 7035 93,80,86        DDEC @RAMFRE           pointer
[2311] 7038 BD,40,70        DST  @>8370,@FREPTR    Initialize with no pgm in VDP
[2312] 703B 86,43    G703B  CLR  @BASE             OPTION BASE = 0
[2313] 703D BD,18,40        DST  @FREPTR,@STRSP    Initailize string space
[2314] 7040 BD,1A,18        DST  @STRSP,@STREND
[2315] 7043 BD,12,30        DST  @STLN,@LINUM
[2316] 7046 95,12           DINCT @LINUM           Point to last line in program
[2317]               * THE FOLLOWING 20 STATEMENTS CANNOT BE SEPARATED OR THE
[2318]               * ASSEMBLY LANGUAGE CODE WILL NOT WORK - SRH
[2319] 7048 0F,8F           XML  SCNSMT            Scan the program
[2320] 704A 00              BYTE 0               * Entire program flag
[2321] 704B 0F,8F    SCAN10 XML  SCNSMT            Scan the statement
[2322] 704D 02              BYTE 2               * Single statement flag
[2323] 704E 51,6A           BR   SCANRT            Normal end of scan
[2324] 7050 50,AD           BR   SCNDEF            Scan a def
[2325] 7052 50,6E           BR   SCNDIM            Scan a dim
[2326] 7054 51,6B           BR   CALLS             Scan a call
[2327] 7056 50,7D           BR   SCNOPT            Scan an option base
[2328] 7058 51,C2           BR   SUBS              Scan a sub
[2329] 705A 52,D5           BR   SUBNDS            Scan a subexit
[2330] 705C 52,D5           BR   SUBNDS            Scan a subend
[2331] 705E 51,39           BR   CALENT            Call ENTER
[2332] 7060 51,4B           BR   ERROLP            * ONLY LEGAL IN A PROGRAM
[2333] 7062 56,67           BR   ERRNWF            * NEXT WITHOUT FOR
[2334] 7064 56,6B           BR   ERRFNN            * FOR/NEXT NESTING
[2335] 7066 56,73           BR   ERRMS             * MISSING SUBEND
[2336] 7068 51,56           BR   ERRSYX            * SYNTAX ERROR
[2337] 706A 56,63           BR   ERRMEM            * MEMORY FULL
[2338] 706C 56,53           BR   ERRIBS            * ILLEGAL AFTER SUBPROGRAM

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0044 
EDIT-359
[2339]               *
[2340]               *                    SPECIALLY SCANNED STATEMENTS
[2341]               * DIM STATEMENT
[2342] 706E DA,16,40 SCNDIM CLOG >40,@XFLAG
[2343] 7071 51,56           BR   ERRSYX
[2344] 7073 06,72,FD G7073  CALL ENTER             Declare this symbol
[2345] 7076 D6,42,B3        CEQ  COMMAZ,@CHAT      Loop if more
[2346] 7079 70,73           BS   G7073
[2347] 707B 50,A6           BR   SCAN25            Must have EOL now
[2348]               * OPTION BASE STATEMENT
[2349] 707D 06,71,42 SCNOPT CALL IMPIF             Can't be imperative or in "IF
[2350] 7080 06,76,40        CALL PGMERR            OPTION - therefore must be BA
[2351] 7083 DA,16,02        CLOG >02,@XFLAG
[2352] 7086 56,5B           BR   ERROBE
[2353]               *                             Error if OPTFLG already set
[2354] 7088 06,71,4F        CALL CHKSYN            Must have a "BASE"
[2355] 708B F1              BYTE BASEZ
[2356] 708C 06,71,4F        CALL CHKSYN            Must have a numeric constant
[2357] 708F C8              BYTE NUMCOZ
[2358] 7090 06,71,4F        CALL CHKSYN            Must have 1-char numeric cons
[2359] 7093 01              BYTE 1
[2360] 7094 86,43           CLR  @BASE             Assume BASE=0
[2361] 7096 A6,42,30        SUB  >30,@CHAT         Must be 0 or 1
[2362] 7099 70,A1           BS   SCAN20            OK if 0
[2363] 709B 92,42           DEC  @CHAT             Check for a 1
[2364] 709D 56,5B           BR   ERROBE            If it was not a 1 then ERROR
[2365] 709F 90,43           INC  @BASE             Set OPTION BASE=1
[2366] 70A1 B6,16,02 SCAN20 OR   >02,@XFLAG        Set the option base flag
[2367] 70A4 0F,79    SCAN22 XML  PGMCHR            Now - check for end-of-line
[2368] 70A6 06,71,5A SCAN25 CALL CHKEND            If not EOL or :: or !    -err
[2369] 70A9 71,3F           BS   CONSCN            If EOS - continue scan
[2370] 70AB 51,56           BR   ERRSYX            * SYNTAX ERROR
[2371]               * DEF STATEMENT
[2372] 70AD 06,71,42 SCNDEF CALL IMPIF             Can't be imperative or in "IF
[2373] 70B0 B6,16,84        OR   >84,@XFLAG        Set function bit
[2374]               *                             Set ENTERX bit
[2375] 70B3 06,72,FD        CALL ENTER             Enter the function name
[2376]               *                             ENTER resets function bit
[2377] 70B6 DA,B0,3E        CLOG >07,V*SYMTAB      Did function have parm?
       70B9 07
[2378] 70BA 71,33           BS   SCAN55            No...
[2379] 70BC B6,16,80        OR   >80,@XFLAG        >80 call for parm enter
[2380] 70BF B6,45,08        OR   >08,@FLAG         Fake it so symbol table
[2381]               *                              searches won't be made
[2382] 70C2 06,73,00        CALL ENTERW            Enter the parameter
[2383] 70C5 B2,45,F7        AND  >F7,@FLAG         Reset function bit
[2384] 70C8 06,71,4F        CALL CHKSYN            Complex symbol must be
[2385] 70CB B6              BYTE RPARZ           *  followed by ")="
[2386] 70CC 06,71,4F        CALL CHKSYN
[2387] 70CF BE              BYTE EQUALZ
[2388] 70D0 35,00,1D        MOVE 29,V*SYMTAB,V@CRNBUF
       70D3 A8,20,B0
       70D6 3E
[2389] 70D7 BD,00,A8        DST  V@CRNBUF+4,@VAR0  Get pointer to name
       70DA 24
[2390] 70DB 8E,80,84        CZ   @RAMTOP           If ERAM program
[2391] 70DE 70,EB           BS   G70EB
[2392]               * If ERAM must fix up the name pointer because the name was
[2393]               * moved too
[2394] 70E0 A5,00,3E        DSUB @SYMTAB,@VAR0     Offset into entry
[2395] 70E3 A3,00,08        DADD CRNBUF,@VAR0      New location of name
       70E6 20
[2396] 70E7 BD,A8,24        DST  @VAR0,V@CRNBUF+4  Put it in
       70EA 00

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0045 
EDIT-359
[2397] 70EB BD,40,E0 G70EB  DST  V@2(@SYMTAB),@FREPTR  * Reset free space pointe
       70EE 02,3E
[2398] 70F0 BF,3E,08        DST  CRNBUF,@SYMTAB    Point into crunch buffer
       70F3 20
[2399] 70F4 93,40           DDEC @FREPTR
[2400] 70F6 06,71,5A SCAN35 CALL CHKEND            If EOL or ! or ::
[2401] 70F9 71,2D           BS   SCAN50            Yes
[2402] 70FB CE,42,00        CGT  >00,@CHAT
[2403] 70FE 71,11           BS   SCAN40
[2404] 7100 D6,42,C8        CEQ  NUMZ,@CHAT        If numeric - skip it
[2405] 7103 71,0A           BS   SCAN45
[2406] 7105 D6,42,C7        CEQ  STRINZ,@CHAT      If string - skip
[2407] 7108 51,0D           BR   G710D
[2408] 710A 06,76,48 SCAN45 CALL SKPSTR            Skip the string or numeric
[2409] 710D 0F,79    G710D  XML  PGMCHR            Get next charater
[2410] 710F 50,F6           BR   SCAN35
[2411]               * Jump always
[2412] 7111 B6,16,80 SCAN40 OR   >80,@XFLAG        Make an ENTERX (>80)call
[2413] 7114 06,73,05        CALL ENTERX            Enter the symbol
[2414]               **** Relink to keep parameter at the beginning of the table
[2415] 7117 D7,3E,08        DCEQ CRNBUF,@SYMTAB    If no entry
       711A 20
[2416] 711B 70,F6           BS   SCAN35
[2417] 711D BD,E0,02        DST  V@CRNBUF+2,V@2(@SYMTAB)  * Put link in
       7120 3E,A8,22
[2418] 7123 BD,A8,22        DST  @SYMTAB,V@CRNBUF+2      Put new pointer in
       7126 3E
[2419] 7127 BF,3E,08        DST  CRNBUF,@SYMTAB    Put new pointer in
       712A 20
[2420] 712B 50,F6           BR   SCAN35            Go on
[2421]               * Jump always
[2422] 712D BD,3E,A8 SCAN50 DST  V@CRNBUF+2,@SYMTAB  Delink the parameter
       7130 22
[2423] 7131 51,3F           BR   CONSCN            Continue the scan
[2424] 7133 06,71,4F SCAN55 CALL CHKSYN
[2425] 7136 BE              BYTE EQUALZ
[2426] 7137 51,3F           BR   CONSCN
[2427] 7139 B6,16,80 CALENT OR   >80,@XFLAG        Set enterx (>80) flag
[2428] 713C 06,73,05        CALL ENTERX            Enter in symbol table
[2429] 713F 0F,8F    CONSCN XML  SCNSMT            Return to 9900 code to resume
[2430] 7141 01              BYTE 1               * Return call to 9900 code
[2431] 7142 DA,16,40 IMPIF  CLOG >40,@XFLAG        Not in if
[2432] 7145 51,56           BR   ERRSYX
[2433] 7147 8E,44    IMPILL CZ   @PRGFLG           Program mode - OK - return
[2434] 7149 51,6A           BR   SCANRT
[2435] 714B 06,6D,4E ERROLP CALL ERRZZ             If imperative - error
[2436] 714E 1B              BYTE 27              * Only legal in a program
[2437]               * Syntax required token routine
[2438] 714F 88,4A    CHKSYN FETCH @FAC
[2439] 7151 D4,42,4A        CEQ  @FAC,@CHAT
[2440] 7154 76,40           BS   PGMERR
[2441] 7156 06,6D,4E ERRSYX CALL ERRZZ
[2442] 7159 03              BYTE 3                 * Syntax error
[2443] 715A DA,42,80 CHKEND CLOG >80,@CHAT
[2444] 715D 71,68           BS   G7168
[2445] 715F CA,42,84        CHE  TREMZ+1,@CHAT
[2446] 7162 71,68           BS   G7168
[2447] 7164 D4,00,00        CEQ  @>8300,@>8300     Force COND to "SET"
[2448] 7167 01              RTNC
[2449] 7168 8E,42    G7168  CZ   @CHAT             Set COND according to CHAT
[2450] 716A 01       SCANRT RTNC
[2451]               ***********************************************************
[2452]               *                    CALLS routine
[2453]               * This routine scans the CALL statement. Get the subprogram

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0046 
EDIT-359
[2454]               * name, search the table and update the call list
[2455]               * (value stack area) if necessary. Share eht same XML
[2456]               * search routine as the symbol table code uses.
[2457]               ***********************************************************
[2458] 716B 0F,79    CALLS  XML  PGMCHR            Get token after call
[2459] 716D 06,71,4F        CALL CHKSYN            Check subprogram name
[2460] 7170 C8              BYTE UNQSTZ          * Must start with unquoted stri
[2461] 7171 C6,42,0F        CH   >0F,@CHAT         * NAME TOO LONG!!
[2462] 7174 76,57           BS   NTLERR
[2463] 7176 BD,00,2C        DST  @PGMPTR,@VAR0     Save program pointer to name
[2464] 7179 BE,5B,4A        ST   FAC,@FAC17        Set up a pointer
[2465] 717C BC,59,42        ST   @CHAT,@FAC15      Save name length
[2466] 717F BC,5A,42        ST   @CHAT,@FAC16      Save name length as a counter
[2467] 7182 0F,79    CALL20 XML  PGMCHR            Get one byte of name
[2468] 7184 BC,90,5B        ST   @CHAT,*FAC17      Store that character in FAC a
       7187 42
[2469] 7188 90,5B           INC  @FAC17            Increment pointer
[2470] 718A 92,5A           DEC  @FAC16            Decrement conter
[2471] 718C 51,82           BR   CALL20            Get next character
[2472]               *                            Exchange call list address wit
[2473]               *                            symbol table address to run th
[2474]               *                            same search routine used for
[2475]               *                            symbol table search.
[2476] 718E C1,0A,3E        DEX  @SYMTAB,@CALIST
[2477] 7191 0F,7D           XML  SCHSYM            Search to see if name there
[2478] 7193 C1,3E,0A        DEX  @CALIST,@SYMTAB   Exchange back both addresses
[2479] 7196 71,BE           BS   SCAN67            If name found do nothing
[2480] 7198 8E,80,89        CZ   @RAMFLG           If not imperative and ERAM
[2481] 719B 71,AE           BS   G71AE
[2482] 719D 0F,77           XML  VPUSH             Put first 8 byte of name
[2483] 719F BD,00,6E        DST  @VSPTR,@VAR0      Pointing to new name location
[2484] 71A2 CE,59,08        CGT  >08,@FAC15        If more characters in name
[2485] 71A5 51,AE           BR   G71AE
[2486] 71A7 35,00,08        MOVE 8,@FAC8,@FAC      Move rest of the name
       71AA 4A,52
[2487] 71AC 0F,77           XML  VPUSH             Push one more time
[2488] 71AE 86,4A    G71AE  CLR  @FAC
[2489] 71B0 BC,4B,59        ST   @FAC15,@FAC1      Put in name length
[2490] 71B3 BD,4C,0A        DST  @CALIST,@FAC2     Put in call list link
[2491] 71B6 BD,4E,00        DST  @VAR0,@FAC4       Put in pointer to name
[2492] 71B9 0F,77           XML  VPUSH             Put the entry in the VDP
[2493] 71BB BD,0A,6E        DST  @VSPTR,@CALIST    Change pointer to call list
[2494] 71BE 0F,79    SCAN67 XML  PGMCHR
[2495] 71C0 51,3F           BR   CONSCN
[2496]               ***********************************************************
[2497]               *                  SUBS routine
[2498]               * This routine scans SUB statement in subprogram. First
[2499]               * check the subprogram name and call list. Then builds
[2500]               * subprogram table without argument list, scans symbols in
[2501]               * the subprogram and create symbol table for the subprogram
[2502]               * make entry to the subprogram table and add (if necessary)
[2503]               * to call list.
[2504]               ***********************************************************
[2505] 71C2 06,71,42 SUBS   CALL IMPIF             Can't be imperative or in "IF
[2506] 71C5 8E,17           CZ   @FORNET           Check FOR-NEXT nesting
[2507] 71C7 56,6B           BR   ERRFNN
[2508] 71C9 DA,16,01        CLOG >01,@XFLAG        Called first time
[2509] 71CC 51,D7           BR   G71D7
[2510] 71CE DA,16,08        CLOG >08,@XFLAG
[2511] 71D1 56,73           BR   ERRMS
[2512]               * Cannot be in subprogram.  Can't start another one.
[2513] 71D3 BD,A3,92        DST  @SYMTAB,V@TABSAV  Finish off main table
       71D6 3E
[2514]               * From the second SUB statement

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0047 
EDIT-359
[2515] 71D7 87,3E    G71D7  DCLR @SYMTAB           Start with empty symbol table
[2516] 71D9 B6,16,28        OR   >28,@XFLAG        Set flag for SAFLG and SUBFLG
[2517] 71DC B2,16,FE        AND  >FE,@XFLAG        Reset REMODE flag
[2518] 71DF 0F,79           XML  PGMCHR            Get name behind SUB statement
[2519] 71E1 06,71,4F        CALL CHKSYN            Make sure it's unquoted strin
[2520] 71E4 C8              BYTE UNQSTZ
[2521] 71E5 C6,42,0F        CH   >0F,@CHAT         Length must be <= 15
[2522] 71E8 76,57           BS   NTLERR
[2523] 71EA BC,4B,42        ST   @CHAT,@FAC1       Save name length
[2524] 71ED BD,4E,2C        DST  @PGMPTR,@FAC4     Assume pointer to VDP name
[2525] 71F0 8E,80,84        CZ   @RAMTOP           But if ERAM save name in tabl
[2526] 71F3 72,0E           BS   G720E
[2527] 71F5 86,4A           CLR  @FAC
[2528] 71F7 0F,72           XML  MEMCHK            FAC already has name length
[2529] 71F9 76,63           BS   ERRMEM            * MEMORY FULL
[2530] 71FB A5,40,4A        DSUB @FAC,@FREPTR      Get pointer to put name in
[2531] 71FE BD,58,40        DST  @FREPTR,@EEE1     Re-do pointer to name
[2532] 7201 91,58           DINC @EEE1             Correct for one off
[2533] 7203 BD,56,4A        DST  @FAC,@FFF1        Set for XML GVWITE
[2534] 7206 BD,54,2C        DST  @PGMPTR,@DDD1     Set for XML GVWITE
[2535] 7209 0F,8B           XML  GVWITE            Move @FFF1 bytes from ERAM at
[2536]               *                              DDD1 to VDP at EEE1
[2537]               *
[2538]               * Start building the subprogram table
[2539] 720B BD,4E,58        DST  @EEE1,@FAC4       Put pointer in VRAM to name
[2540] 720E BF,4A,00 G720E  DST  14,@FAC           Minimum table size for subpro
       7211 0E
[2541] 7212 0F,72           XML  MEMCHK            Make sure enough room there
[2542] 7214 76,63           BS   ERRMEM            * MEMORY FULL
[2543] 7216 86,4A           CLR  @FAC              Prepare for name length
[2544] 7218 BC,4B,42        ST   @CHAT,@FAC1       Get the name length
[2545] 721B BD,4C,3A        DST  @SUBTAB,@FAC2     Save subprogram table address
[2546] 721E 87,50           DCLR @FAC6             Mark end of argumant list
[2547]               *  @FAC   = name length       @FAC2  = subprogram table lin
[2548]               *  @FAC4  = pointer to name   @FAC6  = argument list = 00
[2549]               *  @FAD8  = @PGMPTR           @FAC10 = @EXTRAM
[2550]               *  @FAC12 = symbol table = 00
[2551] 7220 A1,2C,4A        DADD @FAC,@PGMPTR      Skip the name to look ahead
[2552] 7223 35,00,04        MOVE 4,@PGMPTR,@FAC8   Copy PGMPTR and EXTRAM
       7226 52,2C
[2553] 7228 87,56           DCLR @FAC12            Assume subpgm has no symbol t
[2554] 722A A7,40,00        DSUB 14,@FREPTR        Reset free pointer
       722D 0E
[2555] 722E BD,3A,40        DST  @FREPTR,@SUBTAB   Copy
[2556] 7231 91,3A           DINC @SUBTAB           Set new subtable pointer
[2557] 7233 35,00,0E        MOVE 14,@FAC,V*SUBTAB  Put the table in!!
       7236 B0,3A,4A
[2558]               * Start fixing up subprogram's symbol table
[2559] 7239 BD,A3,9A        DST  @SUBTAB,V@SSTEMP  Copy address of subtable
       723C 3A
[2560] 723D A3,A3,9A        DADD 6,V@SSTEMP        Point to argument list
       7240 00,06
[2561] 7242 BD,A3,9C        DST  V@SSTEMP,V@SSTMP2 Duplicate for later use
       7245 A3,9A
[2562] 7247 0F,79           XML  PGMCHR            Get next token
[2563] 7249 06,71,5A        CALL CHKEND            Check if end of statement
[2564] 724C 72,CB           BS   SCAN90            Yes. Get out here quick
[2565]               *                            Start looking at aruguments.
[2566] 724E 06,71,4F        CALL CHKSYN            Check for left parenthesis
[2567] 7251 B7              BYTE LPARZ
[2568] 7252 B6,16,80 SCAN86 OR   >80,@XFLAG        Flag for ENTXFL
[2569] 7255 06,73,05        CALL ENTERX            Enter next parameter
[2570] 7258 BF,4A,00        DST  2,@FAC            Get room for ptr in sub block
       725B 02

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0048 
EDIT-359
[2571] 725C 0F,72           XML  MEMCHK            See if we had space for 2 byt
[2572] 725E 76,63           BS   ERRMEM            * MEMORY FULL
[2573] 7260 BD,4A,A3        DST  V@SSTEMP,@FAC     Copy current arg list pointer
       7263 9A
[2574] 7264 A5,4A,3E        DSUB @SYMTAB,@FAC      Find length from table addres
[2575]               *                            Move symbol table down two byt
[2576]               *                            to make space for next argueme
[2577] FFFE          MINUST EQU  -2
[2578] 7267 34,4A,EF        MOVE @FAC,V*SYMTAB,V@MINUST(@SYMTAB)
       726A FF,FE,3E
       726D B0,3E
[2579] 726F 97,3A           DDECT @SUBTAB          Adjust the subtable pointer
[2580] 7271 97,A3,9C        DDECT V@SSTMP2         Adjust to point to first argu
[2581] 7274 BD,00,A3        DST  V@SSTEMP,@VAR0
       7277 9A
[2582] 7278 BD,EF,FF        DST  @SYMTAB,V@MINUST(@VAR0)   Put pointer in subtab
       727B FE,00,3E
[2583] 727E BD,4A,3E        DST  @SYMTAB,@FAC      Copy symbol table address
[2584] 7281 97,4A           DDECT @FAC             Pointing to real s.t. address
[2585] 7283 BD,4C,E0 SCAN88 DST  V@4(@FAC),@FAC2   Copy pointer to symbol table
       7286 04,4A
[2586] 7288 93,4C           DDEC @FAC2
[2587] 728A C5,4C,3A        DCH  @SUBTAB,@FAC2     If name moved also
[2588] 728D 72,93           BS   G7293
[2589] 728F 97,E0,04        DDECT V@4(@FAC)         correct for the movement.
       7292 4A
[2590] 7293 8F,E0,02 G7293  DCZ   V@2(@FAC)        If more symbol there
       7296 4A
[2591] 7297 72,A4           BS   G72A4
[2592] 7299 97,E0,02        DDECT V@2(@FAC)        Adjust the link address also
       729C 4A
[2593] 729D BD,4A,E0        DST  V@2(@FAC),@FAC    Point to next s.t. address
       72A0 02,4A
[2594] 72A2 52,83           BR   SCAN88            Check for more s.t. adjustmen
[2595] 72A4 BD,4A,A3 G72A4  DST  V@SSTMP2,@FAC     Restore pointer to first argu
       72A7 9C
[2596] 72A8 D5,4A,A3 G72A8  DCEQ V@SSTEMP,@FAC     Fix all pointers in argument
       72AB 9A
[2597] 72AC 72,B5           BS   G72B5
[2598] 72AE 97,B0,4A        DDECT V*FAC            Shift address by 2 bytes
[2599] 72B1 95,4A           DINCT @FAC             Go to next argument pointer
[2600] 72B3 52,A8           BR   G72A8
[2601] 72B5 97,3E    G72B5  DDECT @SYMTAB          Restore s.t. pointer
[2602] 72B7 97,40           DDECT @FREPTR          Restore free pointer
[2603]               * Done with building a subprogram table.
[2604] 72B9 D6,42,B6        CEQ  RPARZ,@CHAT       Next character not ")" ?
[2605] 72BC 72,C4           BS   G72C4
[2606] 72BE 06,71,4F        CALL CHKSYN            Must be ","
[2607] 72C1 B3              BYTE COMMAZ
[2608] 72C2 52,52           BR   SCAN86            Ge get more argument
[2609] 72C4 0F,79    G72C4  XML  PGMCHR            Finished...
[2610] 72C6 06,71,5A        CALL CHKEND            Check if end of statement
[2611] 72C9 51,56           BR   ERRSYX            If not, error
[2612] 72CB B2,16,DF SCAN90 AND  >DF,@XFLAG        Finished scanning sub argumen
[2613] 72CE A3,A3,9A        DADD 6,V@SSTEMP        Point to location of pointer
       72D1 00,06
[2614]               *                              in subtab
[2615] 72D3 51,3F           BR   CONSCN            Start scanning subprogram
[2616]               ***********************************************************
[2617]               *                 SUBNDS and SUBXTS
[2618]               * This routine scans SUBEND and SUBEXIT statement
[2619]               ***********************************************************
[2620] 72D5 06,71,47 SUBNDS CALL IMPILL            Can't be imperative
[2621] 72D8 DA,16,08        CLOG >08,@XFLAG

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0049 
EDIT-359
[2622] 72DB 76,6F           BS   ERRSNS
[2623]               ********* MUST BE IN SUBPROGRAM message above *************
[2624] 72DD D6,42,A8        CEQ  SUBNDZ,@CHAT
[2625] 72E0 52,FB           BR   G72FB             Check for end of statement
[2626] 72E2 8E,17           CZ   @FORNET           Check FOR-NEXT nesting
[2627] 72E4 56,6B           BR   ERRFNN
[2628] 72E6 DA,16,01        CLOG >01,@XFLAG
[2629] 72E9 56,6F           BR   ERRSNS
[2630] 72EB DA,16,40        CLOG >40,@XFLAG
[2631] 72EE 51,56           BR   ERRSYX
[2632] 72F0 BD,00,A3        DST  V@SSTEMP,@VAR0
       72F3 9A
[2633] 72F4 BD,B0,00        DST  @SYMTAB,V*VAR0
       72F7 3E
[2634] 72F8 B6,16,01        OR   >01,@XFLAG
[2635] 72FB 50,A4    G72FB  BR   SCAN22            Check for end of statement
[2636]               ***********************************************************
[2637]               *           ENTER and ENTERX routines
[2638]               * These routines take care of entering a symbol into the
[2639]               * symbol table. If a symbol is encountered which is already
[2640]               * in the table, the usage of the symbol is checked for
[2641]               * consistency.
[2642]               ***********************************************************
[2643] 72FD 06,76,40 ENTER  CALL PGMERR            Get next token - error if EOL
[2644] 7300 D2,42,00 ENTERW CGE  >00,@CHAT         If token - error
[2645] 7303 51,56           BR   ERRSYX
[2646] 7305 BE,59,49 ENTERX ST   FAC-1,@FAC15      FOR INDIRECTION IN NAME SAVE
[2647] 7308 BD,0C,2C        DST  @PGMPTR,@NMPTR    SAVE POINTER TO NAME
[2648] 730B 93,0C           DDEC @NMPTR            CORRECT FOR PGMCHR POST INCRE
[2649]               ******************** Accumulate the name of the symbol
[2650] 730D 90,59    ENT01  INC  @FAC15            Count the character
[2651] 730F C6,59,58        CH   FAC14,@FAC15
[2652] 7312 76,57           BS   NTLERR
[2653] 7314 BC,90,59        ST   @CHAT,*FAC15      Save it
       7317 42
[2654] 7318 0F,79           XML  PGMCHR            Get the next one
[2655] 731A CE,42,00        CGT  >00,@CHAT         If not token or EOL
[2656] 731D 73,0D           BS   ENT01
[2657] 731F BD,6C,2C        DST  @PGMPTR,@ARG16    Save text pointer to put into
[2658] 7322 93,6C           DDEC @ARG16             symbol table entry loater
[2659] 7324 D6,90,59        CEQ  >24,*FAC15        String variable?
       7327 24
[2660] 7328 53,2D           BR   G732D
[2661] 732A B6,16,10        OR   >10,@XFLAG        Set string flag
[2662] 732D A6,59,4A G732D  SUB  FAC,@FAC15        Calculate length of name
[2663] 7330 90,59           INC  @FAC15            + offset of 1
[2664] 7332 D6,42,B7        CEQ  LPARZ,@CHAT       If complex
[2665] 7335 73,82           BS   ENT22
[2666] 7337 DA,16,80        CLOG >80,@XFLAG        If ENTERX
[2667] 733A 53,41           BR   ENT08
[2668] 733C DA,16,04        CLOG >04,@XFLAG
[2669] 733F 71,56           BS   ERRSYX
[2670]               * If not DEF then DIM without subscripted variable
[2671]               ***********************************************************
[2672]               *           CODE FOR SIMPLE ENTRY INTO TABLE
[2673]               * This incudes all non-dimensioned variables as well as
[2674]               * phony entries for no-parameter functions. ENT09 is the
[2675]               * entry point for entering one of these phony entries ENT10
[2676]               * is the code which checks for consistent use of symbols
[2677]               * within the user's program.
[2678]               ***********************************************************
[2679] 7341 93,2C    ENT08  DDEC @PGMPTR           Correct pointer overshoot
[2680] 7343 BD,0E,2C ENT09  DST  @PGMPTR,@CHSAV    Save character pointer
[2681] 7346 86,80,B0        CLR  @STKMIN+1         Zero dimensions for simple

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0050 
EDIT-359
[2682] 7349 BE,10,B0        ST   STKMIN+1,@TOPSTK  Save top of stack
[2683] 734C DA,45,08        CLOG >08,@FLAG         No search in function
[2684] 734F 53,72           BR   ENT16
[2685] 7351 0F,7D           XML  SCHSYM            Search symbol table
[2686] 7353 53,72           BR   ENT16             Not found - must enter it
[2687] 7355 91,2C           DINC @PGMPTR           Correct pointer undershoot
[2688]               * Common code used by SIMPLE and COMPLEX
[2689]               * When the symbol appears in the SYMBOL TABLE. It varifies
[2690]               * that the declarations are the same
[2691]               * (# of paremeters/dimensions, string, funciton)
[2692] 7357 DA,16,80 ENT10  CLOG >80,@XFLAG        Redeclaring
[2693] 735A 76,5F           BS   ERRMUV
[2694] 735C DA,16,24        CLOG >24,@XFLAG        If function or sub-arg
[2695] 735F 56,5F           BR   ERRMUV            Then redefining variable UDF
[2696] 7361 BC,00,B0        ST   V*FAC,@VAR0       Fetch declaration
       7364 4A
[2697] 7365 B2,00,07        AND  >07,@VAR0         MASK FUNCTION AND STRING BITS
[2698] 7368 D4,00,90        CEQ  *TOPSTK,@VAR0     Not same # of dim
       736B 10
[2699] 736C 56,5F           BR   ERRMUV
[2700] 736E B2,16,6B        AND  >6B,@XFLAG        Clear FNCFLG, STRFLG and ENTE
[2701] 7371 00              RTN                    All OK - Type matches perfect
[2702] 7372 35,00,10 ENT16  MOVE 16,@FAC,@ARG      Save name
       7375 5C,4A
[2703] 7377 BF,14,00        DST  14,@NMLEN         Need 14 bytes for a simple va
       737A 0E
[2704] 737B DA,16,14        CLOG >14,@XFLAG        String or function?
[2705] 737E 74,9C           BS   ENT61             No - allocate & update table
[2706] 7380 54,98           BR   ENT60             Yes - need 8 bytes for them
[2707]               *                              Set count to 8 and update
[2708]               ***********************************************************
[2709]               *           CODE FOR A COMPLEX ENTER
[2710]               ***********************************************************
[2711] 7382 BD,0E,2C ENT22  DST  @PGMPTR,@CHSAV    Save the line pointer
[2712] 7385 BE,72,AF        ST   STKMIN,@STACK     Initiaze base of date stack
[2713] 7388 35,00,10        MOVE 16,@FAC,@ARG      Save name
       738B 5C,4A
[2714] 738D DA,16,84        CLOG >84,@XFLAG        ENTERX or inside a DEF ?
[2715] 7390 53,BB           BR   ENT28             Yes, require special scanning
[2716] 7392 0F,79    ENT24  XML  PGMCHR            Get next character
[2717] 7394 06,71,4F        CALL CHKSYN            Must have numeric constant
[2718] 7397 C8              BYTE NUMCOZ
[2719] 7398 06,76,BF        CALL CSINT             Convert dimension to integer
[2720] 739B 76,7B           BS   ERRBV             If got an error on conversion
[2721] 739D 8E,4A           CZ   @FAC              If not BIG dim
[2722] 739F 53,A6           BR   G73A6
[2723] 73A1 C8,4B,43        CHE  @BASE,@FAC1        Dim < BASE
[2724] 73A4 56,7B           BR   ERRBV
[2725] 73A6 8C,4B    G73A6  PUSH @FAC1             Push this dimension
[2726] 73A8 8C,4A           PUSH @FAC              Both bytes
[2727] 73AA C6,72,BD        CH   STKMAX,@STACK     If too many dims
[2728] 73AD 71,56           BS   ERRSYX
[2729] 73AF D6,42,B3        CEQ  COMMAZ,@CHAT      If comma-more dims
[2730] 73B2 73,92           BS   ENT24
[2731] 73B4 D6,42,B6        CEQ  RPARZ,@CHAT       Ok if end on rpar
[2732] 73B7 74,11           BS   ENT40
[2733] 73B9 51,56           BR   ERRSYX            Didn't end on a rpar
[2734]               ******************* Code for a non-DIM statement
[2735] 73BB BE,00,01 ENT28  ST   1,@VAR0           Parenthisis level counter
[2736]               *                              At first level
[2737] 73BE 06,76,40 ENT29  CALL PGMERR            Get next token - error if EOL
[2738] 73C1 CE,42,00        CGT  >00,@CHAT
[2739] 73C4 53,CD           BR   G73CD
[2740] 73C6 DA,16,20        CLOG >20,@XFLAG        Not accepted?

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0051 
EDIT-359
[2741] 73C9 56,77           BR   ERRBA
[2742] 73CB 53,BE           BR   ENT29             Get next token
[2743] 73CD D6,42,B6 G73CD  CEQ  RPARZ,@CHAT
[2744] 73D0 74,09           BS   ENT34
[2745] 73D2 DA,16,04        CLOG >04,@XFLAG
[2746] 73D5 51,56           BR   ERRSYX
[2747] 73D7 D6,42,B3        CEQ  COMMAZ,@CHAT
[2748] 73DA 53,EC           BR   G73EC
[2749] 73DC CE,00,01        CGT  >01,@VAR0         If not top-level command
[2750] 73DF 73,BE           BS   ENT29
[2751] 73E1 8C,07           PUSH @DFLTLM+1
[2752] 73E3 8C,06           PUSH @DFLTLM           Push a default limit
[2753] 73E5 CE,72,BD        CGT  STKMAX,@STACK     NOT too many dim
[2754] 73E8 53,BE           BR   ENT29
[2755] 73EA 51,56           BR   ERRSYX            Too many dims - so error
[2756]               * Jump always
[2757] 73EC DA,16,20 G73EC  CLOG >20,@XFLAG        * BAD ARGUMENT
[2758] 73EF 56,77           BR   ERRBA
[2759] 73F1 D6,42,C7        CEQ  STRINZ,@CHAT
[2760] 73F4 53,FB           BR   G73FB
[2761] 73F6 06,76,48 ENT30  CALL SKPSTR
[2762] 73F9 53,BE           BR   ENT29
[2763] 73FB D6,42,C8 G73FB  CEQ  NUMCOZ,@CHAT
[2764] 73FE 73,F6           BS   ENT30
[2765] 7400 D6,42,B7        CEQ  LPARZ,@CHAT
[2766] 7403 54,07           BR   G7407
[2767] 7405 90,00           INC  @VAR0             Increase nesting level
[2768] 7407 53,BE    G7407  BR   ENT29             Not anything above. Get next
[2769] 7409 92,00    ENT34  DEC  @VAR0             Decrease nesting level
[2770] 740B 53,BE           BR   ENT29             Continue scan unless through
[2771] 740D 8C,07           PUSH @DFLTLM+1         Push final default limit
[2772] 740F 8C,06           PUSH @DFLTLM
[2773]               ***********************************************************
[2774]               * Calculate number of dims and search symbol table
[2775]               ***********************************************************
[2776] 7411 BC,00,72 ENT40  ST   @STACK,@VAR0      Compute the # of dims
[2777] 7414 A6,00,AF        SUB  STKMIN,@VAR0
[2778] 7417 E6,00,01        SRL  1,@VAR0           Divide by 2
[2779] 741A 8C,00           PUSH @VAR0             Push the number of dims on to
[2780] 741C BC,10,72        ST   @STACK,@TOPSTK    Save stack top
[2781] 741F 35,00,10        MOVE 16,@ARG,@FAC      Get name back
       7422 4A,5C
[2782] 7424 0F,7D           XML  SCHSYM            Search symbol table for it
[2783] 7426 54,2D           BR   ENT44             Not found in table - ENTER it
[2784] 7428 BD,2C,0E        DST  @CHSAV,@PGMPTR    Restore scan restart at "("
[2785] 742B 53,57           BR   ENT10             And check for consistency
[2786] 742D DA,16,24 ENT44  CLOG >24,@XFLAG        If function or subprogram
[2787] 7430 54,98           BR   ENT60              argument then need 8 bytes
[2788]               * Caculate total number of array elements
[2789] 7432 BC,10,72        ST   @STACK,@TOPSTK    Save stack pointer
[2790] 7435 92,72           DEC  @STACK            Skip # of dims
[2791] 7437 BC,4A,90        POP  @FAC              Assume base=0
       743A 7C
[2792] 743B BC,4B,90        POP  @FAC1
       743E 7C
[2793] 743F 91,4A           DINC @FAC
[2794] 7441 86,08           CLR  @VARC             But correct if base=1
[2795] 7443 BC,09,43        ST   @BASE,@VARC+1     Handle 1st dim specially to
[2796] 7446 A5,4A,08        DSUB @VARC,@FAC         Avoid 1 multiply
[2797] 7449 BD,14,4A        DST  @FAC,@NMLEN       FAC gets # of elements in arr
[2798] 744C 05,74,69        B    ENT53             Merge into loop
[2799] 744F BC,4A,90 ENT50  POP  @FAC              Get next dimension
       7452 7C
[2800] 7453 BC,4B,90        POP  @FAC1

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0052 
EDIT-359
       7456 7C
[2801] 7457 91,4A           DINC @FAC              Assume base=0
[2802] 7459 A5,4A,08        DSUB @VARC,@FAC        But correct if base=1
[2803] 745C BD,02,14        DST  @NMLEN,@ACCUM
[2804] 745F A9,02,4A        DMUL @FAC,@ACCUM       Accumulate size
[2805] 7462 8F,02           DCZ  @ACCUM            Out of memory
[2806] 7464 56,63           BR   ERRMEM
[2807] 7466 BD,14,04        DST  @ACCUM+2,@NMLEN
[2808] 7469 D6,72,AF ENT53  CEQ  STKMIN,@STACK
[2809] 746C 54,4F           BR   ENT50
[2810] 746E DA,14,E0        CLOG >E0,@NMLEN        If any of the top 3 bits set
[2811] 7471 56,63           BR   ERRMEM             then * MEMORY FULL
[2812] 7473 E3,14,00        DSLL 1,@NMLEN          Assume string| memory=elemets
       7476 01
[2813] 7477 DA,16,10        CLOG >10,@XFLAG        But it numeric
[2814] 747A 54,80           BR   G7480
[2815] 747C E3,14,00        DSLL 2,@NMLEN          Memory = 4*(2 * # of elements
       747F 02
[2816] 7480 A3,14,00 G7480  DADD 6,@NMLEN          Need 6 more bytes for header
       7483 06
[2817] 7484 86,4A           CLR  @FAC              For double
[2818] 7486 BC,4B,90        ST   *TOPSTK,@FAC1     Get # of dimensions
       7489 10
[2819] 748A E2,4B,01        SLL  1,@FAC1           Multiply by 2
[2820] 748D BD,08,4A        DST  @FAC,@VARC        Save # of elements for later
[2821] 7490 A1,14,4A        DADD @FAC,@NMLEN       Total # of bytes needed
[2822] 7493 0C              CARRY
[2823] 7494 76,63           BS   ERRMEM
[2824] 7496 54,9C           BR   ENT61             Jump always
[2825] 7498 BF,14,00 ENT60  DST  8,@NMLEN          Functions & simple strings ne
       749B 08
[2826]               ***********************************************************
[2827]               * Check to see if enough memory in VDP RAM or ERAM
[2828]               * Put symbol name in table if imperatively created or if
[2829]               * excuting an ERAM program.
[2830]               ***********************************************************
[2831] 749C 8E,80,84 ENT61  CZ   @RAMTOP           If not ERAM
[2832] 749F 54,A5           BR   G74A5
[2833] 74A1 8E,44           CZ   @PRGFLG           If program mode
[2834] 74A3 54,C2           BR   ENT62
[2835] 74A5 8E,6B    G74A5  CZ   @ARG15            If 0-length (function)
[2836] 74A7 74,C2           BS   ENT62
[2837]               * Move the name into the symbol table
[2838] 74A9 86,00           CLR  @VAR0             Re-do name and pointer
[2839] 74AB BC,01,6B        ST   @ARG15,@VAR0+1    Get length of name
[2840] 74AE BD,4A,00        DST  @VAR0,@FAC        Put length for MEMCHK
[2841] 74B1 0F,72           XML  MEMCHK            Check enough memory for name
[2842] 74B3 76,63           BS   ERRMEM            * MEMORY FULL
[2843] 74B5 A5,40,00        DSUB @VAR0,@FREPTR     Get space for the name
[2844] 74B8 BD,0C,40        DST  @FREPTR,@NMPTR    Set new pointer to name
[2845] 74BB 91,0C           DINC @NMPTR            New pointer to name
[2846] 74BD 34,00,B0        MOVE @VAR0,@ARG,V*NMPTR Move the name
       74C0 0C,5C
[2847] 74C2 86,51    ENT62  CLR  @FAC7             Assume not simple numeric
[2848] 74C4 8E,80,84        CZ   @RAMTOP           Set simple numeric variable
[2849] 74C7 75,37           BS   ENT63A
[2850] 74C9 BC,72,10        ST   @TOPSTK,@STACK    Get # of dimensions of pareme
[2851] 74CC BC,52,90        POP  @FAC8
       74CF 7C
[2852] 74D0 DA,16,14        CLOG >14,@XFLAG        If string or UDFunction
[2853] 74D3 54,EB           BR   ENT62A            Yes, don't set FAC7
[2854]               *                             No, if array?
[2855] 74D5 8E,52           CZ   @FAC8             Not array
[2856] 74D7 54,EB           BR   ENT62A

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0053 
EDIT-359
[2857] 74D9 90,51           INC  @FAC7             Has to be a simple numeric
[2858] 74DB BD,00,14        DST  @NMLEN,@VAR0      Check enough memory in VDP
[2859] 74DE BF,14,00        DST  8,@NMLEN          For later use - to locate
       74E1 08
[2860] 74E2 BD,4A,14        DST  @NMLEN,@FAC       Check enough memory in VDP
[2861] 74E5 0F,72           XML  MEMCHK
[2862] 74E7 76,63           BS   ERRMEM            * MEMORY FULL
[2863] 74E9 55,22           BR   ENT63             Check enough memory in ERAM
[2864] 74EB 86,50    ENT62A CLR  @FAC6
[2865] 74ED DA,16,04        CLOG >04,@XFLAG
[2866] 74F0 55,37           BR   ENT63A
[2867]               *                          UDFunction
[2868] 74F2 BC,50,52        ST   @FAC8,@FAC6
[2869] 74F5 8E,50           CZ   @FAC6             String or numeric array?
[2870] 74F7 75,37           BS   ENT63A
[2871]               * If numeric array goto ENT62B. When checking subprogram
[2872]               * arguments, numeric array is treated the same as string
[2873]               * array case.
[2874] 74F9 DA,16,20        CLOG >20,@XFLAG
[2875] 74FC 55,03           BR   ENT62C
[2876] 74FE DA,16,10        CLOG >10,@XFLAG
[2877] 7501 75,07           BS   ENT62B
[2878] 7503 86,50    ENT62C CLR  @FAC6             Clear FAC6 to indicate string
[2879] 7505 55,37           BR   ENT63A            So skip the next portion
[2880]               * Numeric array case...
[2881] 7507 BD,00,14 ENT62B DST  @NMLEN,@VAR0      Store @NMLEN in temporary
[2882] 750A BD,14,08        DST  @VARC,@NMLEN      # of bytes for dimension info
[2883] 750D A3,14,00        DADD 8,@NMLEN          # of bytes need in the symbol
       7510 08
[2884]               *                              table entry in VDP RAM
[2885] 7511 BD,4A,14        DST  @NMLEN,@FAC       Check enough memory in VDP RA
[2886] 7514 0F,72           XML  MEMCHK
[2887] 7516 76,63           BS   ERRMEM            * MEMORY FULL
[2888] 7518 BD,4A,00        DST  @VAR0,@FAC        Restore @NMLEN from VAR0
[2889] 751B A5,4A,08        DSUB @VARC,@FAC
[2890] 751E A7,4A,00        DSUB 6,@FAC
       7521 06
[2891] 7522 BD,4C,80 ENT63  DST  @RAMFRE,@FAC2     Get ERAM free pointer
       7525 86
[2892] 7526 A5,4C,4A        DSUB @FAC,@FAC2        Calculate lowest address need
[2893] 7529 91,4C           DINC @FAC2             One byte off here
[2894] 752B CB,4C,A0        DCHE CPUBAS,@FAC2      * MEMORY FULL
       752E 40
[2895] 752F 56,63           BR   ERRMEM
[2896] 7531 BD,80,86        DST  @FAC2,@RAMFRE     Set new ERAM freespace pointe
       7534 4C
[2897] 7535 55,3E           BR   ENT65
[2898] 7537 BD,4A,14 ENT63A DST  @NMLEN,@FAC       No, # of bytes needed
[2899] 753A 0F,72           XML  MEMCHK            * MEMORY FULL
[2900] 753C 76,63           BS   ERRMEM             in VDP RAM
[2901]               * Now, construct the entry for the symbol table in the FAC
[2902]               * for ease and speed. Then move it to VDP RAM
[2903] 753E 86,4A    ENT65  CLR  @FAC              Clear the header byte
[2904] 7540 DA,16,10        CLOG >10,@XFLAG        If string
[2905] 7543 75,48           BS   G7548
[2906] 7545 B6,4A,80        OR   >80,@FAC          Set string bit in header
[2907] 7548 DA,16,04 G7548  CLOG >04,@XFLAG        If UDFunction
[2908] 754B 75,50           BS   G7550
[2909] 754D B6,4A,40        OR   >40,@FAC          Set function bit
[2910] 7550 BC,72,10 G7550  ST   @TOPSTK,@STACK    Get # of dimensions or parame
[2911] 7553 BC,52,90        POP  @FAC8
       7556 7C
[2912] 7557 8E,52           CZ   @FAC8             If array or parameters
[2913] 7559 75,66           BS   ENT67

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0054 
EDIT-359
[2914] 755B B4,4A,52        OR   @FAC8,@FAC        Overlay # of dimensions
[2915] 755E DA,16,24        CLOG >24,@XFLAG        If def or sub-arg
[2916] 7561 55,66           BR   ENT67             Don't set opt flag
[2917] 7563 B6,16,02        OR   >02,@XFLAG        Array so set OPTION BASE flag
[2918] 7566 BC,4B,6B ENT67  ST   @ARG15,@FAC1      Save length of name
[2919] 7569 BD,4C,3E        DST  @SYMTAB,@FAC2     Link to previous entry
[2920] 756C BD,4E,0C        DST  @NMPTR,@FAC4      Save pointer to the name
[2921] 756F A5,40,14        DSUB @NMLEN,@FREPTR    Set new table pointer
[2922] 7572 91,40           DINC @FREPTR
[2923]               * Move the entry from the FAC to the symbol table
[2924] 7574 35,00,06        MOVE 6,@FAC,V*FREPTR
       7577 B0,40,4A
[2925] 757A BD,3E,40        DST  @FREPTR,@SYMTAB   Pointer to beginning of table
[2926] 757D DA,45,08        CLOG >08,@FLAG         If not run-function modify
[2927] 7580 55,8B           BR   G758B
[2928] 7582 DA,16,08        CLOG >08,@XFLAG        If not in subprogram
[2929] 7585 55,8B           BR   G758B
[2930] 7587 BD,A3,76        DST  @SYMTAB,V@SYMBOL  Save pointer in VDP RAM
       758A 3E
[2931] 758B A3,40,00 G758B  DADD 6,@FREPTR
       758E 06
[2932] 758F 8E,80,84        CZ   @RAMTOP           If ERAM exists then
[2933] 7592 75,C1           BS   G75C1
[2934] 7594 D6,51,01        CEQ  >01,@FAC7         If simple numeric variable
[2935] 7597 55,A8           BR   G75A8
[2936] 7599 BD,14,00        DST  @VAR0,@NMLEN      Restore NMLEN
[2937] 759C BD,B0,40        DST  @RAMFRE,V*FREPTR  Set the pointer into ERAM
       759F 80,86
[2938] 75A1 DA,16,20        CLOG >20,@XFLAG
[2939] 75A4 55,F3           BR   ENT69
[2940] 75A6 55,BF           BR   G75BF
[2941] 75A8 DA,16,20 G75A8  CLOG >20,@XFLAG
[2942] 75AB 55,F3           BR   ENT69
[2943] 75AD 8E,50           CZ   @FAC6             If numeric array
[2944] 75AF 75,BF           BS   G75BF
[2945] 75B1 BD,14,00        DST  @VAR0,@NMLEN      Restore NMLEN
[2946] 75B4 BD,00,08        DST  @VARC,@VAR0       Leave the space for dimension
[2947]               *                              info whtich is going to be
[2948]               *                              filled in later
[2949] 75B7 A1,00,40        DADD @FREPTR,@VAR0
[2950] 75BA BD,B0,00        DST  @RAMFRE,V*VAR0    Set pointer in ERAM
       75BD 80,86
[2951] 75BF 55,C6    G75BF  BR   G75C6
[2952] 75C1 DA,16,20 G75C1  CLOG >20,@XFLAG
[2953] 75C4 55,F3           BR   ENT69
[2954] 75C6 DA,16,04 G75C6  CLOG >04,@XFLAG        If UDF - no dimensions
[2955] 75C9 75,D1           BS   G75D1
[2956] 75CB BD,B0,40        DST  @ARG16,V*FREPTR   SAVE POINTER TO "(" OR "="
       75CE 6C
[2957] 75CF 56,28           BR   ENT69B            Jump always
[2958]               **** Save the dimension information in the symbol table
[2959] 75D1 CE,72,AF G75D1  CGT STKMIN,@STACK      If non-array
[2960] 75D4 55,F3           BR   ENT69
[2961] 75D6 BE,72,AF        ST   STKMIN,@STACK     Get to bottom of stack
[2962] 75D9 90,72    ENT68  INC  @STACK            Point tat LSB of next entry
[2963] 75DB C8,72,10        CHE  @TOPSTK,@STACK    If finished, out
[2964] 75DE 75,F3           BS   ENT69
[2965] 75E0 BC,E0,01        ST   *STACK,V@>01(@FREPTR)  * Put directly into tabl
       75E3 40,90,72
[2966] 75E6 90,72           INC  @STACK            Point at MSB of next entry
[2967] 75E8 BC,B0,40        ST   *STACK,V*FREPTR   Put directly into table
       75EB 90,72
[2968] 75ED 97,14           DDECT @NMLEN           Used up 2 bytes in table
[2969] 75EF 95,40           DINCT @FREPTR          Adjust pointer to unused byte

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0055 
EDIT-359
[2970] 75F1 55,D9           BR   ENT68             Get next dimension
[2971]               ***** Now, zero the required amount of memory
[2972] 75F3 8E,80,84 ENT69  CZ   @RAMTOP           If ERAM exists
[2973] 75F6 76,1A           BS   ENT69D
[2974] 75F8 DA,16,10        CLOG >10,@XFLAG
[2975] 75FB 56,1A           BR   ENT69D
[2976] 75FD D6,51,01        CEQ  >01,@FAC7         If simple numeric variable
[2977] 7600 56,08           BR   G7608
[2978] 7602 BF,14,00        DST  8,@NMLEN          Zero 8 bytes of ERAM memory
       7605 08
[2979] 7606 56,10           BR   ENT69C
[2980] 7608 8E,50    G7608  CZ   @FAC6             If numeric array
[2981] 760A 76,18           BS   G7618
[2982] 760C A7,14,00        DSUB 6,@NMLEN          Calculate amount of ERAM to c
       760F 06
[2983] 7610 0F,84    ENT69C XML  IO                Special code to clear ERAM
[2984] 7612 03              BYTE 3               * Select the clear - ERAM code
[2985] 7613 86              BYTE RAMFRE          * Address of ERAM address
[2986] 7614 14              BYTE NMLEN           * Address of number of bytes
[2987] 7615 93,80,86        DDEC @RAMFRE           Adjust ERAM free pointer
[2988] 7618 56,28    G7618  BR   ENT69B            VDP case
[2989] 761A A7,14,00 ENT69D DSUB 7,@NMLEN          Now clear VDP RAM
       761D 07
[2990] 761E 86,B0,40        CLR  V*FREPTR          Clear 1st byte, then the rest
[2991] 7621 34,14,E0        MOVE @NMLEN,V*FREPTR,V@1(@FREPTR)
       7624 01,40,B0
       7627 40
[2992] 7628 BD,40,3E ENT69B DST  @SYMTAB,@FREPTR   Set new free pointer @ then t
[2993] 762B 93,40           DDEC @FREPTR           Now, set it at 1st free byte
[2994] 762D B2,16,EB        AND  >EB,@XFLAG        Clear STRFLG and FNCFLG
[2995] 7630 DA,16,80        CLOG >80,@XFLAG        If ENTERX call
[2996] 7633 76,3D           BS   G763D
[2997] 7635 DA,16,20        CLOG >20,@XFLAG        If not scanning
[2998] 7638 56,3D           BR   G763D              a subprogram argument then
[2999] 763A BD,2C,0E        DST  @CHSAV,@PGMPTR    Restore character pointer
[3000] 763D 0F,79    G763D  XML  PGMCHR            Get next character
[3001] 763F 00              RTN
[3002]               ***********************************************************
[3003]               * THIS ROUTINE READS A CHARACTER AND WILL GIVE AN ERROR IF
[3004]               * IT READS AN END OF LINE (PREMATURE END)
[3005]               ***********************************************************
[3006] 7640 0F,79    PGMERR XML  PGMCHR
[3007] 7642 06,71,5A        CALL CHKEND
[3008] 7645 71,56           BS   ERRSYX            Premature EOL
[3009] 7647 00              RTN
[3010]               ***********************************************************
[3011]               * THIS ROUTINE SKIPS QUOTED STRINGS UNQUOTED STRINGS AND
[3012]               * NUMERIC CONSTANTS
[3013]               ***********************************************************
[3014] 7648 0F,79    SKPSTR XML  PGMCHR            Get the byte count
[3015] 764A 86,08           CLR  @VARC              for double
[3016] 764C BC,09,42        ST   @CHAT,@VARC+1     Get count for add
[3017] 764F A1,2C,08        DADD @VARC,@PGMPTR     Skip the string
[3018] 7652 00              RTN
[3019]               * ERROR messages called in this file
[3020] 7653 06,6D,4E ERRIBS CALL ERRZZ             * ILLEGAL AFTER SUBPROGRAM
[3021] 7656 04              BYTE 4
[3022] 7657 06,6D,4E NTLERR CALL ERRZZ             * NAME TOO LONG
[3023] 765A 06              BYTE 6
[3024] 765B 06,6D,4E ERROBE CALL ERRZZ             * OPTION BASE ERROR
[3025] 765E 08              BYTE 8
[3026] 765F 06,6D,4E ERRMUV CALL ERRZZ             * IMPROPERLY USED NAME
[3027] 7662 09              BYTE 9
[3028] 7663 06,6D,4E ERRMEM CALL ERRZZ             * MEMORY FULL

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0056 
EDIT-359
[3029] 7666 0B              BYTE 11
[3030] 7667 06,6D,4E ERRNWF CALL ERRZZ             * NEXT WITHOUT FOR
[3031] 766A 0D              BYTE 13
[3032] 766B 06,6D,4E ERRFNN CALL ERRZZ             * FOR/NEXT NESTING
[3033] 766E 0E              BYTE 14
[3034] 766F 06,6D,4E ERRSNS CALL ERRZZ             * MUST BE IN SUBPROGRAM
[3035] 7672 0F              BYTE 15
[3036] 7673 06,6D,4E ERRMS  CALL ERRZZ             * MISSING SUBEND
[3037] 7676 11              BYTE 17
[3038] 7677 06,6D,4E ERRBA  CALL ERRZZ             * BAD ARGUMENT
[3039] 767A 1C              BYTE 28
[3040] 767B 06,6D,4E ERRBV  CALL ERRZZ             * BAD VALUE
[3041] 767E 1E              BYTE 30
[3042]               * Other error messages inside this program
[3043]               * ERRSYN    * SYNTAX ERROR                         DATA  3
[3044]               * ERROLP    * ONLY LEGAL IN A PROGRAM              DATA 27
[3045]               * ERRPV     * PROTECTION VIOLATION                 DATA 39
[3046]               ***********************************************************
[3047]               * Search and clean up stack and symbol table to not allow
[3048]               * garbage to accumulate
[3049]               ***********************************************************
[3050] 767F BD,52,6E CLEAN  DST  @VSPTR,@FAC8      Get a temporary stack pointer
[3051] 7682 C5,52,24 CLEAN1 DCH  @STVSPT,@FAC8     While not end of stack
[3052] 7685 56,BE           BR   G76BE
[3053] 7687 BC,58,E0        ST   V@2(@FAC8),@FAC14 Get stack ID byte
       768A 02,52
[3054] 768C A6,58,66        SUB  >66,@FAC14        Check the range
[3055] 768F C6,58,04        CH   >04,@FAC14        If string, numeric, >70, >72
[3056] 7692 56,98           BR   G7698
[3057] 7694 0F,78           XML  VPOP              Throw it away (Must be on top
[3058] 7696 56,7F           BR   CLEAN
[3059] 7698 8A,58    G7698  CASE @FAC14
[3060] 769A 56,A7           BR   CLEANG            GOSUB entry                >6
[3061] 769C 56,AD           BR   CLEANF            FOR   entry                >6
[3062] 769E 56,B7           BR   CLEANU            UDF   entry                >6
[3063] 76A0 56,A4           BR   CLEANE            ERROR entry                >6
[3064] 76A2 56,B1           BR   CLEANS            SUB   entry                >6
[3065] 76A4 06,A0,14 CLEANE CALL SQUISH            ERROR Entry - squish it out
[3066] 76A7 A7,52,00 CLEANG DSUB 8,@FAC8           Go down 1 entry
       76AA 08
[3067] 76AB 56,82           BR   CLEAN1            Go on to next entry
[3068]               * Jump always
[3069] 76AD A7,52,00 CLEANF DSUB 16,@FAC8          Keep it around but get below
       76B0 10
[3070] 76B1 A7,52,00 CLEANS DSUB 16,@FAC8          16 bytes further down
       76B4 10
[3071] 76B5 56,82           BR   CLEAN1            FOR or SUB entry
[3072]               * Jump always
[3073] 76B7 87,4E    CLEANU DCLR @FAC4             Cause delink to work right
[3074] 76B9 06,A0,10        CALL DELINK            Delink the symbol table entry
[3075] 76BC 56,A7           BR   CLEANG
[3076] 76BE 00       G76BE  RTN
[3077]               ***********************************************************
[3078]               * Subroutine to convert numeric to integer
[3079]               ***********************************************************
[3080] 76BF 87,4A    CSINT  DCLR @FAC              Start with clean FAC
[3081] 76C1 0F,79    CSINT2 XML  PGMCHR
[3082] 76C3 A6,42,30        SUB  >30,@CHAT         Subtract ASCII value for "0"
[3083] 76C6 CA,42,0A        CHE  >0A,@CHAT         Valid numeric
[3084] 76C9 76,E3           BS   G76E3
[3085] 76CB AB,4A,00        DMUL 10,@FAC           Multiply previous result
       76CE 0A
[3086] 76CF 8F,4A           DCZ  @FAC              Overflow ??????
[3087] 76D1 56,E7           BR   RETSET

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0057 
EDIT-359
[3088] 76D3 BC,4B,42        ST   @CHAT,@FAC1       Get result back down
[3089] 76D6 A1,4A,4C        DADD @FAC2,@FAC        Add current digit
[3090] 76D9 0C              CARRY                  If >65535
[3091] 76DA 76,E7           BS   RETSET
[3092] 76DC D2,4A,00        CGE  >00,@FAC          Integer > 32767
[3093] 76DF 56,E7           BR   RETSET
[3094] 76E1 56,C1           BR   CSINT2            And loop until done
[3095] 76E3 A2,42,30 G76E3  ADD  >30,@CHAT
[3096] 76E6 00              RTN                    Also used somewhere else
[3097] 76E7 D4,00,00 RETSET CEQ  @>8300,@>8300
[3098] 76EA 01              RTNC
[3099]               *
[3100]               * GKXB CODE FOLLOWS ***************************************
[3101] 76EB 87,2C    RES1   DCLR @PGMPTR      Set flag
[3102] 76ED BD,64,30        DST  @STLN,@XSTLN Save STLN & ENLN
[3103] 76F0 BD,66,32        DST  @ENLN,@XENLN
[3104] 76F3 06,65,71        CALL AUTON        Get first parameters
[3105] 76F6 90,2C           INC  @PGMPTR      Destroy flag
[3106] 76F8 00              RTN
[3107]               *
[3108]               * RES2 entered from AUTON if more than 2 numbers entered
[3109]               *
[3110] 76F9 8F,2C    RES2   DCZ  @PGMPTR      Check flag
[3111] 76FB 77,00           BS   RES2A        Yes, continue
[3112] 76FD 05,78,54        B    CKOTHR       No, check for copy & move
[3113] 7700 90,2C    RES2A  INC  @PGMPTR      Destroy flag
[3114] 7702 D6,42,2C        CEQ  COMMA,@CHAT  Check for comma
[3115] 7705 49,7A           BR   ERRSY1       If no comma
[3116] 7707 BD,68,14        DST  @CURLIN,@XCURLI Save CURLIN & CURINC
[3117] 770A BD,6A,0E        DST  @CURINC,@XCURIN
[3118] 770D 87,14           DCLR @CURLIN      Clear out pointers
[3119] 770F 87,0E           DCLR @CURINC
[3120] 7711 BE,08,2D        ST   DASH,@VARC   Separator
[3121] 7714 06,65,7E        CALL AUTO3        Get range
[3122] 7717 06,77,CF        CALL GTRANG       Find locations in line table
[3123] 771A BD,14,68        DST  @XCURLI,@CURLIN Restore CURLIN & CURINC
[3124] 771D BD,0E,6A        DST  @XCURIN,@CURINC
[3125] 7720 D5,32,66        DCEQ @XENLN,@ENLN See if start line is first line
[3126] 7723 77,33           BS   RES3         Yes, continue
[3127] 7725 BD,4A,66        DST  @XENLN,@FAC  Copy start addr to FAC
[3128] 7728 91,4A           DINC @FAC         Point to next lower table entry
[3129] 772A 06,80,2E        CALL GRSUB3       Get line # of line before start
[3130] 772D 4A              BYTE FAC-PAD
[3131] 772E C5,14,58        DCH  @EEE1,@CURLIN New start # must be higher than
[3132]               *                         last # in preceding segment
[3133] 7731 49,90           BR   ERRBLN       Bad line number if not!
[3134] 7733 00       RES3   RTN
[3135]               *
[3136] 7734 BD,2C,32 RES4   DST  @ENLN,@PGMPTR Moved from RES routine
[3137] 7737 8E,A8,20        CZ   V@CRNBUF     Called from RES?
[3138] 773A 77,4C           BS   RES4B        No, skip a few lines
[3139] 773C D5,30,64        DCEQ @XSTLN,@STLN Renumbering to end of prog?
[3140] 773F 77,51           BS   RES4A        Yes, skip the check
[3141] 7741 BD,4A,64        DST  @XSTLN,@FAC  Check for high # overlap
[3142] 7744 A7,4A,00        DSUB 4,@FAC       Point to entry after RES segment
       7747 04
[3143] 7748 06,80,2E        CALL GRSUB3       Get that line #
[3144] 774B 4A              BYTE FAC-PAD
[3145] 774C C9,14,58 RES4B  DCHE @EEE1,@CURLIN Check that CURLIN is'nt higher
[3146]               *                         or equal
[3147] 774F 69,90           BS   ERRBLN       If so, bad line number
[3148] 7751 00       RES4A  RTN
[3149]               *
[3150] 7752 D6,A8,20 RES5   CEQ  6,V@CRNBUF   A true RES?

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0058 
EDIT-359
       7755 06
[3151] 7756 63,E9           BS   TOPL25       Yes, return to basic
[3152] 7758 00              RTN               No, just do a return
[3153]               *
[3154]               * Code for new commands DEL, COPY, and MOVE
[3155]               *
[3156]               * NOTICE !!!!!
[3157]               * RAM BANK 2 CHANGED AS FOLLOWS-----
[3158]               * 7D1B changed from >08 to >0B
[3159]               * 7D35 changed from >08 to >0C
[3160]               *
[3161]               ********************************************************
[3162]               *
[3163] 7759 C6,A8,20 NEWCMD CH   >0B,V@CRNBUF If higher than MOVE token,
       775C 0B
[3164] 775D 65,1A           BS   SZRUN4        continue with old stuff
[3165] 775F BF,2C,08        DST  CRNBUF+1,@PGMPTR Anticipate usage of PGMCHR
       7762 21
[3166] 7763 0F,79           XML  PGMCHR       Setup CHAT
[3167] 7765 BC,4A,A8        ST   V@CRNBUF,@FAC Copy token
       7768 20
[3168] 7769 A6,4A,09        SUB  9,@FAC       Adjust for CASE
[3169] 776C 8A,4A           CASE @FAC         Select the keyword
[3170] 776E 57,8A           BR   DEL
[3171] 7770 59,6C           BR   COPY
[3172] 7772 58,B0           BR   MOVE
[3173]               *
[3174]               * Patch to change to default colors on RUN
[3175]               *
[3176] 7774 8E,44    RUNPAT CZ   @PRGFLG      Program already running?
[3177] 7776 57,85           BR   RUNRET       Yes, do nothing
[3178] 7778 04,07           BACK 7            Screen color
[3179] 777A BE,A8,0F        ST   >10,V@>80F   Character colors
       777D 10
[3180] 777E 35,00,10        MOVE 16,V@>80F,V@>810
       7781 A8,10,A8
       7784 0F
[3181] 7785 86,44    RUNRET CLR  @PRGFLG      Moved from RUN routine
[3182] 7787 05,65,04        B    G6504        Return
[3183]               *
[3184]               * DEL routine... Allows the deletion of a program segment
[3185]               *
[3186] 778A BE,08,2D DEL    ST   DASH,@VARC   Select separator
[3187] 778D 87,14           DCLR @CURLIN      Clear variables
[3188] 778F 87,0E           DCLR @CURINC
[3189] 7791 06,65,7C        CALL AUTO1        Get parameters
[3190] 7794 BD,64,30        DST  @STLN,@XSTLN Save pointers
[3191] 7797 BD,66,32        DST  @ENLN,@XENLN
[3192] 779A 06,77,CF        CALL GTRANG       Get the range to delete
[3193]               *
[3194] 779D BD,68,32 DEL01  DST  @ENLN,@XCURLI Store a copy of ENLN
[3195]               *
[3196] 77A0 BD,4A,66        DST  @XENLN,@FAC  Check to see if we need
[3197] 77A3 A7,4A,00        DSUB 3,@FAC        to delete another line
       77A6 03
[3198] 77A7 C9,4A,64        DCHE @XSTLN,@FAC
[3199] 77AA 57,CC           BR   DELEND       We're through
[3200]               *
[3201] 77AC 06,80,2E        CALL GRSUB3       Get line # of line to delete
[3202] 77AF 4A              BYTE FAC-PAD
[3203] 77B0 BD,4A,58        DST  @EEE1,@FAC   Store number in FAC
[3204] 77B3 BE,42,01        ST   1,@CHAT      Flag to delete line
[3205] 77B6 06,66,CF        CALL EDITLN       Delete the line
[3206]               *

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0059 
EDIT-359
[3207] 77B9 A3,64,00        DADD 4,@XSTLN     Adjust for deleted line
       77BC 04
[3208]                
[3209] 77BD BD,4A,32        DST  @ENLN,@FAC   New ENLN value
[3210] 77C0 A5,4A,68        DSUB @XCURLI,@FAC How much did we delete?
[3211] 77C3 A1,64,4A        DADD @FAC,@XSTLN  New XSTLN value
[3212] 77C6 A1,66,4A        DADD @FAC,@XENLN  New XENLN value
[3213] 77C9 05,77,9D        B    DEL01        Loop
[3214] 77CC 05,63,E6 DELEND B    TOPL20       Return to basic
[3215]                
[3216]               * GTRANG - Sets XSTLN & XENLN as a line #
[3217]               * table for a range of line #s in CURLIN
[3218]               * & CURINC. XSTLN & XENLN should contain
[3219]               * the values in STLN & ENLN when called.
[3220]               * A bad line number error is generated if
[3221]               * the range does not contain at least one
[3222]               * valid program line. If CURINC is zero,
[3223]               * then the line # in CURLIN must be a valid
[3224]               * program line. A syntax error is occurs if
[3225]               * both CURLIN & CURINC are zero.
[3226]               *
[3227] 77CF D5,32,30 GTRANG DCEQ @STLN,@ENLN  If no program, then error
[3228] 77D2 78,51           BS   ERRNPP
[3229] 77D4 BD,4A,32        DST  @ENLN,@FAC   Get first line #
[3230] 77D7 A7,4A,00        DSUB 3,@FAC       FAC=source addr in ERAM/VDP
       77DA 03
[3231]                
[3232] 77DB 8F,14           DCZ  @CURLIN      Beginning line specified?
[3233] 77DD 57,E3           BR   GTRAN0       Yes, get it
[3234] 77DF 8F,0E           DCZ  @CURINC      Ending line also zero?
[3235] 77E1 78,4B           BS   ERRSY        Yes, syntax error
[3236] 77E3 06,80,2E GTRAN0 CALL GRSUB3       Read the line #
[3237] 77E6 4A              BYTE FAC-PAD
[3238] 77E7 C9,58,14        DCHE @CURLIN,@EEE1 Check for good number
[3239] 77EA 77,F7           BS   GTRAN2       Good number
[3240] 77EC A7,4A,00        DSUB 4,@FAC       Get next table entry
       77EF 04
[3241] 77F0 C9,4A,30        DCHE @STLN,@FAC   Make sure we're still in table
[3242] 77F3 77,E3           BS   GTRAN0       Loop till good number found
[3243] 77F5 58,4E           BR   ERRBL        Bad line number error
[3244] 77F7 BD,66,4A GTRAN2 DST  @FAC,@XENLN  Store for RES routine
[3245] 77FA A3,66,00        DADD 3,@XENLN     Fake an ENLN entry
       77FD 03
[3246]               * Evaluate what's in CURINC
[3247] 77FE 8F,0E    GTRAN1 DCZ  @CURINC      Zero?
[3248] 7800 58,15           BR   GTRAN4       No, go get a line #
[3249] 7802 BD,4C,20        DST  @VARW,@FAC2  Store screen pointer
[3250] 7805 93,4C    GTRAN3 DDEC @FAC2        Back up one space on screen
[3251] 7807 D6,B0,4C        CEQ  OSPACE,V*FAC2 Is it a space?
       780A 80
[3252] 780B 78,05           BS   GTRAN3       Yes, loop till no space
[3253] 780D D6,B0,4C        CEQ  DASH+OFFSET,V*FAC2 Is it a dash?
       7810 8D
[3254] 7811 78,38           BS   GTRAN7       Yes, use default for STLN
[3255] 7813 58,3E           BR   GTRAN8       Just one # entered, check it!
[3256] 7815 C5,14,0E GTRAN4 DCH  @CURINC,@CURLIN End line higher than start?
[3257] 7818 58,1D           BR   GTRAN5       No, go get end line
[3258] 781A BD,0E,14        DST  @CURLIN,@CURINC Make a good line #
[3259] 781D 06,80,2E GTRAN5 CALL GRSUB3       Get next line #
[3260] 7820 4A              BYTE FAC-PAD
[3261] 7821 C5,58,0E        DCH  @CURINC,@EEE1 Gone too far?
[3262] 7824 78,31           BS   GTRAN6       Yes, we're done
[3263] 7826 A7,4A,00        DSUB 4,@FAC       Next table entry
       7829 04

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0060 
EDIT-359
[3264] 782A C9,4A,30        DCHE @STLN,@FAC   Make sure we're still in table
[3265] 782D 78,1D           BS   GTRAN5       Loop
[3266] 782F 58,38           BR   GTRAN7       End of table, use default
[3267] 7831 A3,4A,00 GTRAN6 DADD 4,@FAC       Back up one entry
       7834 04
[3268] 7835 BD,64,4A GTRAN9 DST  @FAC,@XSTLN  Put it in place
[3269] 7838 C5,64,66 GTRAN7 DCH  @XENLN,@XSTLN If XSTLN > XENLN then error
[3270] 783B 78,4E           BS   ERRBL
[3271] 783D 00              RTN
[3272] 783E C6,A8,20 GTRAN8 CH   9,V@CRNBUF   Called from RES or DEL?
       7841 09
[3273] 7842 78,35           BS   GTRAN9       No, skip this check
[3274] 7844 D5,14,58        DCEQ @EEE1,@CURLIN Check that line found is good
[3275] 7847 58,4E           BR   ERRBL        Bad line number if not
[3276] 7849 58,35           BR   GTRAN9       Set XSTLN and return
[3277]               *
[3278] 784B 05,69,7A ERRSY  B    ERRSY1
[3279] 784E 05,69,90 ERRBL  B    ERRBLN
[3280] 7851 05,64,EF ERRNPP B    >64EF        No program present
[3281]               *
[3282]               * CKOTHR - Intercepts error from AUTON if more than
[3283]               * two line #s are entered.
[3284]               *
[3285] 7854 C6,A8,20 CKOTHR CH   >B,V@CRNBUF  Error if higher than MOVE
       7857 0B
[3286] 7858 78,4B           BS   ERRSY
[3287] 785A C6,A8,20        CH   >9,V@CRNBUF  Error if lower than COPY
       785D 09
[3288] 785E 58,4B           BR   ERRSY
[3289] 7860 D6,42,2C        CEQ  COMMA,@CHAT  Check separator
[3290] 7863 58,4B           BR   ERRSY        Error if not
[3291] 7865 00              RTN               Return if OK
[3292]               *
[3293]               * GETPAR - gets a line # range and a new starting
[3294]               * # and increment for MOVE & COPY
[3295]               *
[3296] 7866 BD,66,32 GETPAR DST  @ENLN,@XENLN Load segment pointers
[3297] 7869 BD,64,30        DST  @STLN,@XSTLN
[3298] 786C 87,14           DCLR @CURLIN      Set up variables
[3299] 786E 87,0E           DCLR @CURINC
[3300] 7870 BE,08,2D        ST   DASH,@VARC   Separator
[3301] 7873 06,65,7C        CALL AUTO1        Get segment start, end
[3302] 7876 06,77,CF        CALL GTRANG       Get line table range
[3303] 7879 8F,0E           DCZ  @CURINC      Fix XSTLN if necessary
[3304] 787B 58,80           BR   GETPA3
[3305] 787D BD,64,30        DST  @STLN,@XSTLN
[3306]               * Now get new starting # and increment
[3307] 7880 87,14    GETPA3 DCLR @CURLIN      Clear start line#
[3308] 7882 91,20           DINC @VARW        So AUTON don't screw up
[3309] 7884 86,A8,20        CLR  V@CRNBUF     So AUTON checks EOS correctly
[3310] 7887 06,65,75        CALL AUTO4        Get numbers
[3311] 788A 8F,14           DCZ  @CURLIN      Must specify starting line #
[3312] 788C 78,4B           BS   ERRSY        Syntax error if not
[3313]               * Find out where to move/copy the segment
[3314] 788E BD,4A,32        DST  @ENLN,@FAC   End of table to FAC
[3315] 7891 A7,4A,00        DSUB 3,@FAC       Adjust
       7894 03
[3316] 7895 06,80,2E GETPA1 CALL GRSUB3       Get line # from table
[3317] 7898 4A              BYTE FAC-PAD
[3318] 7899 C9,58,14        DCHE @CURLIN,@EEE1 If high, segment gets moved here
[3319] 789C 78,AF           BS   GETPA2       Go move it!
[3320] 789E A7,4A,00        DSUB 4,@FAC       Next table entry
       78A1 04
[3321] 78A2 C9,4A,30        DCHE @STLN,@FAC   Make sure we're still in table

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0061 
EDIT-359
[3322] 78A5 78,95           BS   GETPA1       Search some more
[3323] 78A7 BF,58,80        DST  >8000,@EEE1  To satisfy RES routine
       78AA 00
[3324] 78AB D4,4A,4A        CEQ  @FAC,@FAC    Set COND bit
[3325] 78AE 01              RTNC              Return w/COND
[3326] 78AF 00       GETPA2 RTN               Return
[3327]               *
[3328]               * MOVE -Moves a program segment within a program
[3329]               * If the new starting line is within the segment to
[3330]               * be moved, then the segment is just renumbered.
[3331]               *
[3332] 78B0 06,78,66 MOVE   CALL GETPAR       Get the parameters
[3333] 78B3 78,CC           BS   MOVE09       Segment goes to end of program
[3334]               * Check to see if new start line is inside moved segment
[3335] 78B5 C5,4A,66        DCH  @XENLN,@FAC  If FAC is higher than segment end
[3336] 78B8 78,C7           BS   MOVE03        then continue
[3337] 78BA C5,64,4A        DCH  @FAC,@XSTLN  If FAC is lower than segment start
[3338] 78BD 78,C7           BS   MOVE03        then continue
[3339]               * Segment need not be moved, just RES
[3340] 78BF 90,A8,20        INC  V@CRNBUF     Fake a RES, almost
[3341] 78C2 06,66,2D        CALL RES6         Do the RES
[3342] 78C5 59,38           BR   MOVE99       Return
[3343]               * If new start line is a valid program line outside of
[3344]               * segment to be moved, then error!
[3345] 78C7 D5,14,58 MOVE03 DCEQ @EEE1,@CURLIN Check for equal #s
[3346] 78CA 78,4E           BS   ERRBL        Bad line number error
[3347]               * New location found.
[3348] 78CC BD,68,4A MOVE09 DST  @FAC,@XCURLI Save FAC
[3349] 78CF A3,68,00        DADD 3,@XCURLI    Adjust to end of pointer
       78D2 03
[3350] 78D3 BD,2A,66        DST  @XENLN,@VARA Find out how many bytes to move
[3351] 78D6 A5,2A,64        DSUB @XSTLN,@VARA
[3352] 78D9 91,2A           DINC @VARA
[3353] 78DB 06,68,A6        CALL MEMFLL       See if there's enough memory
[3354] 78DE A1,30,2A        DADD @VARA,@STLN  Correct STLN
[3355] 78E1 06,66,2D        CALL RES6         RES the segment
[3356] 78E4 06,80,12        CALL CLSALL       Close all open files
[3357] 78E7 06,68,DC        CALL KILSYM       Kill the symbol tables
[3358]               * Now redo the line number table
[3359]               * First make space for moved segment
[3360] 78EA C5,30,68        DCH  @XCURLI,@STLN If moving to end of prog
[3361] 78ED 79,0F           BS   MOVE05         then skip this part
[3362] 78EF BD,5C,68        DST  @XCURLI,@ARG Figure byte count
[3363] 78F2 A5,5C,30        DSUB @STLN,@ARG
[3364] 78F5 91,5C           DINC @ARG
[3365] 78F7 BD,16,30        DST  @STLN,@VAR9  Source address
[3366] 78FA BD,00,30        DST  @STLN,@VAR0  Figure destination addr
[3367] 78FD A5,00,2A        DSUB @VARA,@VAR0
[3368] 7900 8E,80,84        CZ   @RAMTOP      If pgm in VDP
[3369] 7903 59,0D           BR   MOVE04
[3370] 7905 34,5C,B0        MOVE @ARG,V*VAR9,V*VAR0 Move it!
       7908 00,B0,16
[3371] 790B 59,0F           BR   MOVE05
[3372] 790D 0F,89    MOVE04 XML  MVUP         If pgm in ERAM
[3373]               * Space now available to move the segment
[3374]               * Figure whether up or down move
[3375] 790F BD,5C,2A MOVE05 DST  @VARA,@ARG   Byte count for next move
[3376] 7912 C5,64,68        DCH  @XCURLI,@XSTLN
[3377] 7915 79,3E           BS   MOVE06       Moving to a higher line #
[3378]               * Move from a higher # to a lower #
[3379] 7917 BD,00,64        DST  @XSTLN,@VAR0
[3380] 791A 93,00           DDEC @VAR0        Source address
[3381] 791C BD,06,68        DST  @XCURLI,@VARY2 Destination address
[3382] 791F 0F,88           XML  MVDN         Move it

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0062 
EDIT-359
[3383] 7921 BD,5C,64        DST  @XSTLN,@ARG  Figure byte count
[3384] 7924 A5,5C,30        DSUB @STLN,@ARG
[3385] 7927 8F,5C           DCZ  @ARG         Don't move zero bytes
[3386] 7929 79,38           BS   MOVE99
[3387] 792B BD,06,64        DST  @XSTLN,@VARY2 Figure destination address
[3388] 792E 93,06           DDEC @VARY2
[3389] 7930 BD,00,06        DST  @VARY2,@VAR0 Figure source address
[3390] 7933 A5,00,2A        DSUB @VARA,@VAR0
[3391] 7936 0F,88           XML  MVDN         Move again
[3392] 7938 06,80,12 MOVE99 CALL CLSALL
[3393] 793B 05,63,DA        B    TOPL10       Return to basic
[3394]               * Move from a lower # to a higher #
[3395] 793E BD,16,64 MOVE06 DST  @XSTLN,@VAR9 Source address
[3396] 7941 BD,00,68        DST  @XCURLI,@VAR0 Figure destination address
[3397] 7944 A5,00,2A        DSUB @VARA,@VAR0
[3398] 7947 91,00           DINC @VAR0
[3399] 7949 8E,80,84        CZ   @RAMTOP      If pmg in VDP
[3400] 794C 59,56           BR   MOVE07
[3401] 794E 34,5C,B0        MOVE @ARG,V*VAR9,V*VAR0 Move it!
       7951 00,B0,16
[3402] 7954 59,58           BR   MOVE08
[3403] 7956 0F,89    MOVE07 XML  MVUP         If pgm in ERAM
[3404] 7958 BD,5C,66 MOVE08 DST  @XENLN,@ARG  Figure byte count
[3405] 795B A5,5C,30        DSUB @STLN,@ARG
[3406] 795E 91,5C           DINC @ARG
[3407] 7960 BD,00,64        DST  @XSTLN,@VAR0 Figure source address
[3408] 7963 93,00           DDEC @VAR0
[3409] 7965 BD,06,66        DST  @XENLN,@VARY2 Destination address
[3410] 7968 0F,88           XML  MVDN         Move again
[3411] 796A 59,38           BR   MOVE99       Return
[3412]               *
[3413]               * COPY - copies a block of program lines to any
[3414]               * other location in the program
[3415]               *
[3416] 796C 06,78,66 COPY   CALL GETPAR       Get the parameters
[3417] 796F D5,14,58        DCEQ @EEE1,@CURLIN Error if trying to copy
[3418] 7972 78,4E           BS   ERRBL         to a valid line.
[3419] 7974 BF,68,00        DST  4,@XCURLI    Set a variable
       7977 04
[3420] 7978 BD,6A,58        DST  @EEE1,@XCURIN Save EEE1
[3421]               * Check to see if new start line is inside copied segment
[3422] 797B C5,4A,66        DCH  @XENLN,@FAC  If FAC is higher than segment end
[3423] 797E 79,90           BS   COPY03        then continue
[3424] 7980 C5,64,4A        DCH  @FAC,@XSTLN  If FAC is lower than segment start
[3425] 7983 79,94           BS   COPY04        then continue
[3426] 7985 A3,4A,00        DADD 3,@FAC       One last chance
       7988 03
[3427] 7989 D5,66,4A        DCEQ @FAC,@XENLN  Make sure we're going lower
[3428] 798C 79,90           BS   COPY03
[3429] 798E 58,4E    COPY05 BR   ERRBL        Error if we get here
[3430] 7990 A7,68,00 COPY03 DSUB 4,@XCURLI    New variable
       7993 04
[3431] 7994 BD,4A,66 COPY04 DST  @XENLN,@FAC  Compute # of increments required
[3432] 7997 A5,4A,64        DSUB @XSTLN,@FAC  # of table entries
[3433] 799A E7,4A,00        DSRL 2,@FAC       # of lines
       799D 02
[3434] 799E BD,66,4A        DST  @FAC,@XENLN  Save count
[3435] 79A1 91,66           DINC @XENLN       Adjust
[3436] 79A3 A9,4A,0E        DMUL @CURINC,@FAC Compute space taken by increment
[3437] 79A6 8F,4A           DCZ  @FAC         Check overflow
[3438] 79A8 58,4E           BR   ERRBL        Error if > 65536
[3439] 79AA A1,14,4C        DADD @FAC2,@CURLIN Compute highest line #
[3440] 79AD 0C              CARR              Test carry bit
[3441] 79AE 78,4E           BS   ERRBL        Error if > 65536

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0063 
EDIT-359
[3442] 79B0 C6,14,7F        CH   >7F,@CURLIN  Error if > 32767
[3443] 79B3 78,4E           BS   ERRBL
[3444] 79B5 C9,14,6A        DCHE @XCURIN,@CURLIN Error if last line overlaps
[3445] 79B8 78,4E           BS   ERRBL
[3446]               * Do the actual COPY
[3447] 79BA 95,64           DINCT @XSTLN      Point to line location
[3448] 79BC 06,80,2C COPY00 CALL GRSUB2       Get the location
[3449] 79BF 64              BYTE XSTLN-PAD
[3450] 79C0 BD,4A,58        DST  @EEE1,@FAC   Copy EEE1
[3451] 79C3 93,4A           DDEC @FAC         Point to length byte
[3452] 79C5 06,80,2C        CALL GRSUB2       Get the length byte
[3453] 79C8 4A              BYTE FAC-PAD
[3454] 79C9 BC,42,58        ST   @EEE1,@CHAT  Store the length in CHAT
[3455] 79CC BC,57,58        ST   @EEE1,@FFF1+1 Also use for count
[3456] 79CF 86,56           CLR  @FFF1        Assure correct count
[3457] 79D1 91,4A           DINC @FAC         FAC points to program text
[3458] 79D3 8E,80,84        CZ   @RAMTOP      If zero, then pgm in VDP
[3459] 79D6 79,E3           BS   COPY01
[3460]               * If program in ERAM
[3461] 79D8 BD,54,4A        DST  @FAC,@DDD1   Source address
[3462] 79DB BF,58,08        DST  CRNBUF,@EEE1 Destination address
       79DE 20
[3463] 79DF 0F,8B           XML  GVWITE       Move to VDP
[3464] 79E1 59,E9           BR   COPY02
[3465]               * If program in VDP
[3466] 79E3 34,56,A8 COPY01 MOVE @FFF1,V*FAC,V@CRNBUF Move into CRNBUF
       79E6 20,B0,4A
[3467]               *
[3468] 79E9 BD,4A,14 COPY02 DST  @CURLIN,@FAC Line # to FAC
[3469] 79EC 06,66,CF        CALL EDITLN       Edit the line into program
[3470] 79EF 86,4A           CLR  @FAC         Find next line in table
[3471] 79F1 BC,4B,42        ST   @CHAT,@FAC1
[3472] 79F4 91,4A           DINC @FAC
[3473] 79F6 A5,64,4A        DSUB @FAC,@XSTLN
[3474] 79F9 A1,64,68        DADD @XCURLI,@XSTLN
[3475] 79FC A5,14,0E        DSUB @CURINC,@CURLIN Next new line #
[3476]               *
[3477] 79FF 93,66           DDEC @XENLN       Count -1
[3478] 7A01 59,BC           BR   COPY00       Loop if not done
[3479] 7A03 05,63,E6        B    TOPL20       Return
[3480]               *
[3481]               * Code to pick up line # range and record
[3482]               * length for LIST routine
[3483]               *
[3484] 7A06 86,64    GTLIST CLR  @XSTLN       Clear for record length
[3485] 7A08 86,08           CLR  @VARC        Force an error, maybe
[3486] 7A0A 06,65,7C        CALL AUTO1        Get a number
[3487]               * If we get here, only one number has
[3488]               * been entered so just return
[3489] 7A0D 00              RTN
[3490]               *
[3491] 7A0E 8E,08    CKLIST CZ   @VARC        Limit check to LIST
[3492] 7A10 58,4B           BR   ERRSY
[3493] 7A12 D6,42,3A        CEQ  COLON,@CHAT  Record length
[3494] 7A15 5A,30           BR   CKLI01       No
[3495] 7A17 93,2C           DDEC @PGMPTR      Back up to last CHAT
[3496] 7A19 0F,79           XML  PGMCHR       Get it
[3497] 7A1B 8E,42           CZ   @CHAT        File specified?
[3498] 7A1D 78,4B           BS   ERRSY        No, error out
[3499] 7A1F C7,14,00        DCH  >FF,@CURLIN  Number OK?
       7A22 FF
[3500] 7A23 78,4E           BS   ERRBL        No, indicate an error
[3501] 7A25 BC,64,15        ST   @CURLIN+1,@XSTLN Everything OK
[3502] 7A28 87,14           DCLR @CURLIN      Set up to get range

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0064 
EDIT-359
[3503] 7A2A BE,08,2D        ST   DASH,@VARC
[3504] 7A2D 05,65,7E        B    AUTO3        Get range and return
[3505] 7A30 D6,42,2D CKLI01 CEQ  DASH,@CHAT   Better be a dash!
[3506] 7A33 58,4B           BR   ERRSY        Nope
[3507] 7A35 05,65,9A        B    AUTO5        Finish up
[3508]               ***********************************************************
[3509] 7A38 B6,80,C2 RXBRUN OR   >10,@>83C2        QUIT KEY
       7A3B 10
[3510] 7A3C B2,45,F7        AND  >F7,@FLAG         Set flag
[3511] 7A3F BD,04,7E        DST  @YPT,@VARY        Save Row/Col values
[3512] 7A42 04,01           BACK >01
[3513] 7A44 07,80           ALL  >80
[3514] 7A46 D7,AF,22        DCEQ >994A,V@>2254
       7A49 54,99,4A
[3515] 7A4C 7B,EB           BS   XBRUN
[3516] 7A4E 8E,AF,35        CZ   V@>35D7
       7A51 D7
[3517] 7A52 7B,EB           BS   XBRUN
[3518]               *******************
[3519]               * version = 2015  *
[3520]               *******************
[3521]               *     R  X  B     *
[3522]               *     creator     *
[3523]               * RICH GILBERTSON *
[3524]               *******************
[3525] 7A54 08              FMT
[3526] 7A55 FC,60           SCRO >60
[3527] 7A57 FE,00           ROW  0
[3528] 7A59 FF,06           COL  6
[3529] 7A5B 52,2A           HCHA 19,42 
[3530] 7A5D FE,01           ROW  1
[3531] 7A5F FF,06           COL  6
[3532] 7A61 12,2A,20        HTEX '* version = 2015  *' 
       7A64 76,65,72
       7A67 73,69,6F
       7A6A 6E,20,3D
       7A6D 20,32,30
       7A70 31,35,20
       7A73 20,2A
[3533] 7A75 FE,02           ROW  2
[3534] 7A77 FF,06           COL  6               
[3535] 7A79 52,2A           HCHA 19,42              
[3536] 7A7B FE,03           ROW  3                  
[3537] 7A7D FF,06           COL  6                
[3538] 7A7F 12,2A,20        HTEX '*     R  X  B     *'                  
       7A82 20,20,20
       7A85 20,52,20
       7A88 20,58,20
       7A8B 20,42,20
       7A8E 20,20,20
       7A91 20,2A
[3539] 7A93 FE,04           ROW  4                
[3540] 7A95 FF,06           COL  6                                      
[3541] 7A97 12,2A,20        HTEX '*     creator     *'
       7A9A 20,20,20
       7A9D 20,63,72
       7AA0 65,61,74
       7AA3 6F,72,20
       7AA6 20,20,20
       7AA9 20,2A
[3542] 7AAB FE,05           ROW  5
[3543] 7AAD FF,06           COL  6
[3544] 7AAF 12,2A,20        HTEX '* RICH GILBERTSON *'
       7AB2 52,49,43

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0065 
EDIT-359
       7AB5 48,20,47
       7AB8 49,4C,42
       7ABB 45,52,54
       7ABE 53,4F,4E
       7AC1 20,2A
[3545] 7AC3 FE,06           ROW  6
[3546] 7AC5 FF,06           COL  6
[3547] 7AC7 52,2A           HCHA 19,42
[3548] 7AC9 FB              FEND
[3549] 7ACA D6,A3,71        CEQ  '1',V@LODFLG
       7ACD 31
[3550] 7ACE 7A,E8           BS   SCNKEY
[3551] 7AD0 8E,A3,71        CZ   V@LODFLG
[3552] 7AD3 7A,E8           BS   SCNKEY
[3553] 7AD5 D6,A3,71        CEQ  >3A,V@LODFLG
       7AD8 3A
[3554] 7AD9 63,72           BS   TOPLEV
[3555] 7ADB 03              SCAN
[3556] 7ADC D6,75,FF        CEQ  >FF,@RKEY
[3557] 7ADF 5B,D8           BR   LDKEY
[3558] 7AE1 BC,A8,24        ST   V@LODFLG,V@>0824
       7AE4 A3,71
[3559] 7AE6 5B,DF           BR   SRCHLP
[3560] 7AE8 08       SCNKEY FMT
[3561] 7AE9 FC,60           SCRO >60
[3562] 7AEB FE,0D           ROW  13
[3563] 7AED FF,00           COL  0
[3564] 7AEF 1F,3E,3E        HTEX '>> press ============= result <<'
       7AF2 20,70,72
       7AF5 65,73,73
       7AF8 20,3D,3D
       7AFB 3D,3D,3D
       7AFE 3D,3D,3D
       7B01 3D,3D,3D
       7B04 3D,3D,20
       7B07 72,65,73
       7B0A 75,6C,74
       7B0D 20,3C,3C
[3565] 7B10 FE,0F           ROW  15
[3566] 7B12 FF,02           COL  2
[3567] 7B14 15,41,4E        HTEX 'ANY KEY    = DSK#.LOAD'
       7B17 59,20,4B
       7B1A 45,59,20
       7B1D 20,20,20
       7B20 3D,20,44
       7B23 53,4B,23
       7B26 2E,4C,4F
       7B29 41,44
[3568] 7B2B FE,11           ROW  17
[3569] 7B2D FF,02           COL  2
[3570] 7B2F 16,45,4E        HTEX 'ENTER      = DSK#.UTIL1'
       7B32 54,45,52
       7B35 20,20,20
       7B38 20,20,20
       7B3B 3D,20,44
       7B3E 53,4B,23
       7B41 2E,55,54
       7B44 49,4C,31
[3571] 7B47 FE,13           ROW  19
[3572] 7B49 FF,02           COL  2
[3573] 7B4B 16,28,43        HTEX '(COMMA) ,  = DSK#.BATCH'
       7B4E 4F,4D,4D
       7B51 41,29,20
       7B54 2C,20,20

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0066 
EDIT-359
       7B57 3D,20,44
       7B5A 53,4B,23
       7B5D 2E,42,41
       7B60 54,43,48
[3574] 7B63 FE,15           ROW  21
[3575] 7B65 FF,02           COL  2
[3576] 7B67 1C,53,50        HTEX 'SPACE BAR  = RXB COMMAND MODE'
       7B6A 41,43,45
       7B6D 20,42,41
       7B70 52,20,20
       7B73 3D,20,52
       7B76 58,42,20
       7B79 43,4F,4D
       7B7C 4D,41,4E
       7B7F 44,20,4D
       7B82 4F,44,45
[3577] 7B85 FE,17           ROW  23
[3578] 7B87 FF,02           COL  2
[3579] 7B89 1C,28,50        HTEX '(PERIOD) . = EDITOR ASSEMBLER'
       7B8C 45,52,49
       7B8F 4F,44,29
       7B92 20,2E,20
       7B95 3D,20,45
       7B98 44,49,54
       7B9B 4F,52,20
       7B9E 41,53,53
       7BA1 45,4D,42
       7BA4 4C,45,52
[3580] 7BA7 FB              FEND
[3581] 7BA8 BF,58,10        DST  >1000,@FAC+14     DELAY VALUE
       7BAB 00
[3582] 7BAC BF,7E,0F RSCAN  DST  >0F12,@YPT
       7BAF 12
[3583] 7BB0 06,7C,A8        CALL CBKEY
[3584] 7BB3 7B,BB           BS   RSCAN2
[3585] 7BB5 93,58           DDEC @FAC+14
[3586] 7BB7 7B,DF           BS   SRCHLP
[3587] 7BB9 5B,AC           BR   RSCAN
[3588] 7BBB D6,75,0D RSCAN2 CEQ  >0D,@RKEY         ENTER?
[3589] 7BBE 7B,F8           BS   UTIL1
[3590] 7BC0 D6,75,2C        CEQ  >2C,@RKEY         COMMA?
[3591] 7BC3 7C,55           BS   BATCH
[3592] 7BC5 D6,75,2E        CEQ  >2E,@RKEY         PERIOD?
[3593] 7BC8 7C,41           BS   UTIL4
[3594] 7BCA D6,75,30        CEQ  >30,@RKEY         0? (ZERO)
[3595] 7BCD 5B,D8           BR   LDKEY
[3596] 7BCF 31,00,0B        MOVE 11,G@WSD,V@CRNBUF WSD1.LOAD
       7BD2 A8,20,7D
       7BD5 C7
[3597] 7BD6 90,75           INC  @RKEY             MAKE IT A 1
[3598] 7BD8 86,A3,71 LDKEY  CLR  V@LODFLG
[3599] 7BDB BC,A8,24        ST   @RKEY,V@>0824
       7BDE 75
[3600] 7BDF 87,AF,22 SRCHLP DCLR V@>2254           Clear flag
       7BE2 54
[3601] 7BE3 07,80           ALL  >80               Clear Screen
[3602] 7BE5 BD,7E,04        DST  @VARY,@YPT        Restore YPT/XPT
[3603] 7BE8 05,64,A0        B    SZRUNL
[3604]               * EA RUN XB PROGRAM OR SET SEARCH *************************
[3605] 7BEB 35,00,32 XBRUN  MOVE 50,V@>2256,V@>0820
       7BEE A8,20,AF
       7BF1 22,56
[3606] 7BF3 86,A3,71        CLR  V@LODFLG
[3607] 7BF6 5B,DF           BR   SRCHLP

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0067 
EDIT-359
[3608]               ***********************************************************
[3609] 7BF8 86,AF,22 UTIL1  CLR  V@>2256
       7BFB 56
[3610] 7BFC 08              FMT
[3611] 7BFD FF,00           COL  0
[3612] 7BFF FE,0F           ROW  15
[3613] 7C01 5F,20           HCHA 32,32
[3614] 7C03 FB              FEND
[3615] 7C04 86,4A           CLR  @FAC
[3616] 7C06 BF,58,10        DST  >1000,@FAC+14
       7C09 00
[3617] 7C0A BE,42,35        ST   >35,@CHAT
[3618] 7C0D BF,7E,11 UTIL2  DST  >1112,@YPT
       7C10 12
[3619] 7C11 06,7C,A8        CALL CBKEY
[3620] 7C14 7C,1C           BS   UTIL3
[3621] 7C16 93,58           DDEC @FAC+14
[3622] 7C18 7C,4E           BS   UTIL5
[3623] 7C1A 5C,0D           BR   UTIL2
[3624] 7C1C D6,75,0D UTIL3  CEQ  >0D,@RKEY         ENTER?
[3625] 7C1F 7C,0D           BS   UTIL2
[3626] 7C21 D6,75,20        CEQ  >20,@RKEY         SPACE?
[3627] 7C24 7B,D8           BS   LDKEY
[3628] 7C26 D6,75,2C        CEQ  >2C,@RKEY         COMMA?
[3629] 7C29 7C,55           BS   BATCH
[3630] 7C2B D6,75,2E        CEQ  >2E,@RKEY         PERIOD?
[3631] 7C2E 7C,51           BS   UTIL6
[3632] 7C30 D6,75,30        CEQ  >30,@RKEY         0? (ZERO)
[3633] 7C33 5C,41           BR   UTIL4
[3634] 7C35 31,00,0C        MOVE 12,G@EAWSD,V@>2256
       7C38 AF,22,56
       7C3B 7D,83
[3635] 7C3D 90,75           INC  @RKEY
[3636] 7C3F 5C,49           BR   EA0
[3637] 7C41 31,00,0C UTIL4  MOVE 12,G@EAU1,V@>2256
       7C44 AF,22,56
       7C47 7D,77
[3638] 7C49 BC,AF,22 EA0    ST   @RKEY,V@>225A
       7C4C 5A,75
[3639] 7C4E 05,E0,25 UTIL5  B    GE025
[3640] 7C51 86,42    UTIL6  CLR  @CHAT
[3641] 7C53 5C,4E           BR   UTIL5
[3642]               *********************************
[3643] 7C55 35,00,80 BATCH  MOVE 128,V@>01E0,V@>01E1
       7C58 A1,E1,A1
       7C5B E0
[3644] 7C5C BF,58,10        DST  >1000,@FAC+14     LOAD DELAY
       7C5F 00
[3645] 7C60 86,4A           CLR  @FAC
[3646] 7C62 BF,7E,13 BATCH1 DST  >1312,@YPT        ROW/COL
       7C65 12
[3647] 7C66 06,7C,A8        CALL CBKEY
[3648] 7C69 7C,71           BS   BATCH2
[3649] 7C6B 93,58           DDEC @FAC+14
[3650] 7C6D 7C,87           BS   BATCH3
[3651] 7C6F 5C,62           BR   BATCH1
[3652] 7C71 D6,75,0D BATCH2 CEQ  >0D,@RKEY         ENTER?
[3653] 7C74 7A,E8           BS   SCNKEY
[3654] 7C76 D6,75,20        CEQ  >20,@RKEY         SPACE?
[3655] 7C79 7A,E8           BS   SCNKEY
[3656] 7C7B D6,75,2C        CEQ  >2C,@RKEY         COMMA?
[3657] 7C7E 7C,62           BS   BATCH1
[3658] 7C80 D6,75,2E        CEQ  >2E,@RKEY         PERIOD?
[3659] 7C83 7A,E8           BS   SCNKEY

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0068 
EDIT-359
[3660] 7C85 5C,8A           BR   BATCH4
[3661] 7C87 BE,75,31 BATCH3 ST   >31,@RKEY         1 IN RKEY
[3662] 7C8A BE,A8,C0 BATCH4 ST   >20,V@>08C0
       7C8D 20
[3663] 7C8E 35,00,50        MOVE 80,V@>08C0,V@>08C1
       7C91 A8,C1,A8
       7C94 C0
[3664] 7C95 31,00,14        MOVE 20,G@UBATCH,V@>08C0
       7C98 A8,C0,7D
       7C9B 8F
[3665] 7C9C 84,A3,BB        INV  V@CONFLG          SET USER FLAG >FF
[3666] 7C9F BC,A8,CD        ST   @RKEY,V@>08CD
       7CA2 75
[3667] 7CA3 86,A3,71        CLR  V@LODFLG
[3668] 7CA6 43,A5           BR   SZNEW
[3669]               *********************************
[3670] 7CA8 DA,59,01 CBKEY  CLOG >01,@FAC+15
[3671] 7CAB 5C,B1           BR   CBKEY2
[3672] 7CAD C0,4A,7D        EX   @>837D,@FAC
[3673] 7CB0 03              SCAN
[3674] 7CB1 01       CBKEY2 RTNC
[3675]               *********************************
[3676]               * RXB USER
[3677]               *
[3678] 7CB2 8E,A3,BB DUSER  CZ   V@CONFLG          RECALL FLAG?
[3679] 7CB5 7D,29           BS   NOUSER
[3680] 7CB7 D7,A8,C2        DCEQ >0900,V@>08C2     PAB there?
       7CBA 09,00
[3681] 7CBC 5D,29           BR   NOUSER            No
[3682] 7CBE D6,A8,C0        CEQ  >02,V@>08C0       READ code?
       7CC1 02
[3683] 7CC2 7C,ED           BS   RUSER             READ file
[3684] 7CC4 06,7D,03        CALL UDSR              OPEN
[3685] 7CC7 00              BYTE >00
[3686] 7CC8 7D,38           BS   USEERR
[3687] 7CCA BC,56,A8        ST   V@>08C1,@>8356
       7CCD C1
[3688] 7CCE E6,56,05        SRL  5,@>8356
[3689] 7CD1 8E,56           CZ   @>8356
[3690] 7CD3 5D,38           BR   USEERR
[3691] 7CD5 BF,20,02        DST  NLNADD,@VARW      Reset screen address
       7CD8 E2
[3692] 7CD9 87,A9,56 READLP DCLR V@>0956           Clear counter
[3693] 7CDC 06,7D,03        CALL UDSR              READ
[3694] 7CDF 02              BYTE >02
[3695] 7CE0 7D,22           BS   CUSER
[3696] 7CE2 BC,56,A8        ST   V@>08C1,@>8356
       7CE5 C1
[3697] 7CE6 E6,56,05        SRL  5,@>8356
[3698] 7CE9 8E,56           CZ   @>8356
[3699] 7CEB 5D,22           BR   CUSER
[3700] 7CED BD,76,A9 RUSER  DST  V@>0956,@>8376    Get counter
       7CF0 56
[3701] 7CF1 D4,A8,C5        CEQ  @>8377,V@>08C5    Counter= # bytes
       7CF4 77
[3702] 7CF5 7C,D9           BS   READLP            yes
[3703] 7CF7 35,00,01        MOVE 1,V@>0900(@>8376),@RKEY
       7CFA 75,E9,00
       7CFD 76
[3704] 7CFE 91,A9,56        DINC V@>0956           Counter+1
[3705] 7D01 5D,4A           BR   USERTN            done
[3706] 7D03 35,00,1E UDSR   MOVE 30,@FAC,V@>03C0   Save FAC
       7D06 A3,C0,4A
[3707] 7D09 88,56           FETCH @>8356           Get opcode

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0069 
EDIT-359
[3708] 7D0B BC,A8,C0        ST    @>8356,V@>08C0
       7D0E 56
[3709] 7D0F BE,A8,C1        ST    >14,V@>08C1      File type
       7D12 14
[3710] 7D13 BF,56,08        DST   >08C9,@>8356
       7D16 C9
[3711] 7D17 06,00,10        CALL  LINK
[3712] 7D1A 08              BYTE  >08
[3713] 7D1B 35,00,1E        MOVE  30,V@>03C0,@FAC  Restore FAC
       7D1E 4A,A3,C0
[3714] 7D21 01              RTNC
[3715] 7D22 06,7D,03 CUSER  CALL UDSR              CLOSE
[3716] 7D25 01              BYTE >01
[3717] 7D26 06,7D,2D        CALL CLRUSR            Clear USER PAB
[3718] 7D29 03       NOUSER SCAN
[3719] 7D2A 02,63           RAND 99
[3720] 7D2C 01              RTNC
[3721] 7D2D 86,A8,C0 CLRUSR CLR  V@>08C0
[3722] 7D30 35,00,50        MOVE 80,V@>08C0,V@>08C1
       7D33 A8,C1,A8
       7D36 C0
[3723] 7D37 00              RTN
[3724] 7D38 06,7D,2D USEERR CALL CLRUSR
[3725] 7D3B 31,00,0E        MOVE 14,G@ERRUSE,V@>02E2
       7D3E A2,E2,7D
       7D41 A3
[3726] 7D42 0F,83           XML  SCROLL
[3727] 7D44 BE,75,0D        ST   >0D,@RKEY
[3728] 7D47 06,00,36        CALL TONE2
[3729] 7D4A D4,00,00 USERTN CEQ  @VAR0,@VAR0
[3730] 7D4D 01              RTNC
[3731]               ***********************************************************
[3732]               * RXB loader for character sets
[3733] 7D4E BF,4A,04 CHRTBL DST   >0408,@FAC             Start with !
       7D51 08
[3734] 7D52 BF,4E,9C        DST   CHARS,@FAC4            GROM ADDRESS
       7D55 EA
[3735] 7D56 31,00,08        MOVE  8,G@EMPTY,V@>0400      Space Character
       7D59 A4,00,63
       7D5C 64
[3736] 7D5D 86,E0,00 CHRLP  CLR   V@0(@FAC)              Clear pattern
       7D60 4A
[3737] 7D61 33,00,07        MOVE  7,G@0(@FAC4),V@1(@FAC) Get GROM Def
       7D64 E0,01,4A
       7D67 00,00,4E
[3738] 7D6A A3,4A,00        DADD  8,@FAC                 GROM ADDRESS
       7D6D 08
[3739] 7D6E A3,4E,00        DADD  7,@FAC4                VDP ADDRESS
       7D71 07
[3740] 7D72 92,4C           DEC   @FAC2                  Character Count-1
[3741] 7D74 5D,5D           BR    CHRLP                  0?
[3742] 7D76 00              RTN
[3743]               ***********************************************************
[3744]               * EDITOR ASSEMBLER
[3745] 7D77 0A,44,53 EAU1   STRI 'DSK1.UTIL1'
       7D7A 4B,31,2E
       7D7D 55,54,49
       7D80 4C,31
[3746] 7D82 0D              BYTE >0D
[3747] 7D83 0A,57,53 EAWSD  STRI 'WSD1.UTIL1'
       7D86 44,31,2E
       7D89 55,54,49
       7D8C 4C,31
[3748] 7D8E 0D              BYTE >0D

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0070 
EDIT-359
[3749]               * USER PAB & BATCH FILE
[3750] 7D8F 00,14,09 UBATCH BYTE 0,>14,9,0,80,0,0,0,0
       7D92 00,50,00
       7D95 00,00,00
[3751] 7D98 0A,44,53        STRI 'DSK1.BATCH'
       7D9B 4B,31,2E
       7D9E 42,41,54
       7DA1 43,48
[3752]               * USER ERROR *
[3753] 7DA3 8A,80,B5 ERRUSE BYTE 138,128,181,179,165,178,128
       7DA6 B3,A5,B2
       7DA9 80
[3754] 7DAA A5,B2,B2        BYTE 165,178,178,175,178,128,138
       7DAD AF,B2,80
       7DB0 8A
[3755]               ***************************************
[3756]               * RXB SEARCH DISK
[3757] 7DB1 8E,A3,71 MYSRCH CZ   V@LODFLG
[3758] 7DB4 5D,BC           BR   NXTDSK
[3759] 7DB6 B2,45,F7        AND  >F7,@FLAG
[3760] 7DB9 05,63,E0        B    G63E0
[3761] 7DBC 90,A3,71 NXTDSK INC  V@LODFLG
[3762] 7DBF 43,A5           BR   SZNEW
[3763]               **************************
[3764]               * RXB TURN SEARCH OFF
[3765] 7DC1 86,A3,71 SCHOFF CLR  V@LODFLG
[3766] 7DC4 05,6A,70        B    G6A70
[3767]               **************************************
[3768]               * RXB HARD DRIVE PATH
[3769] 7DC7 09       WSD    BYTE 9
[3770] 7DC8 57,53,44        TEXT 'WSD1.LOAD'
       7DCB 31,2E,4C
       7DCE 4F,41,44
[3771] 7DD1 00              BYTE 0
[3772]               **************************************
[3773]               * MESSAG    'Bytes of Assembly'
[3774] 7DD2 A2,D9,D4 MESSAG DATA >A2D9,>D4C5,>D380,>CFC6
       7DD5 C5,D3,80
       7DD8 CF,C6
[3775] 7DDA 80,A1,D3        DATA >80A1,>D3D3,>C5CD,>C2CC
       7DDD D3,C5,CD
       7DE0 C2,CC
[3776] 7DE2 D9              BYTE >D9
[3777]               * AMSMSG    'K AMS '
[3778] 7DE3 AB,80,A1 AMSK   DATA >AB80,>A1AD,>B380
       7DE6 AD,B3,80
[3779]                
[3780]               * AMSMSG    'BANKS of 4K Pages '
[3781] 7DE9 A2,A1,AE AMSP   DATA >A2A1,>AEAB,>B380,>CFC6
       7DEC AB,B3,80
       7DEF CF,C6
[3782] 7DF1 80,94,AB        DATA >8094,>AB80,>B0C1,>C7C5
       7DF4 80,B0,C1
       7DF7 C7,C5
[3783] 7DF9 D3,80           DATA >D380
[3784]               ***********************************************************
[3785]                      * AMS SIZE
[3786] 7DFB 87,4A    AMSSIZ DCLR @FAC              * ISR ADDRESS BUFFER
[3787] 7DFD 06,D0,FE        CALL ISROFF
[3788] 7E00 06,D0,F4        CALL AMSMAP
[3789] 7E03 06,D0,FA        CALL AMSON
[3790] 7E06 BC,50,8F        ST   @>401C,@FAC6      * Page >E000 map
       7E09 BD,1C
[3791] 7E0B BC,51,8F        ST   @>401E,@FAC7      * Page >F000 map

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0071 
EDIT-359
       7E0E BD,1E
[3792] 7E10 D6,8F,BD        CEQ  >0F,@>401E        * Initialized
       7E13 1E,0F
[3793] 7E15 5E,6D           BR   NOAMS             * Not Initalized, end SIZE.
[3794] 7E17 BF,52,00        DST  31,@FAC8          * PAGE#
       7E1A 1F
[3795] 7E1B BC,8F,BD NXTPG  ST   @FAC9,@>401C      * Set PAGE >E000
       7E1E 1C,53
[3796] 7E20 BC,8F,BD        ST   @FAC9,@>401E      * Set PAGE >F000
       7E23 1E,53
[3797] 7E25 BD,54,8F        DST  @>E000,@FAC10     * Save word at >E000
       7E28 5D,00
[3798] 7E2A BD,56,8F        DST  @>F000,@FAC12     * Save word at >F000
       7E2D 6D,00
[3799] 7E2F BF,8F,6D        DST  >AAAA,@>F000      * Test word
       7E32 00,AA,AA
[3800] 7E35 D5,8F,6D        DCEQ @>E000,@>F000     * Test words?
       7E38 00,8F,5D
       7E3B 00
[3801] 7E3C 5E,6D           BR   NOAMS             * Not a match
[3802] 7E3E BD,8F,5D        DST  @FAC10,@>E000     * Restore word
       7E41 00,54
[3803] 7E43 BD,8F,6D        DST  @FAC12,@>F000     * Restore word
       7E46 00,56
[3804] 7E48 91,52           DINC @FAC8             * PAGE+1
[3805] 7E4A D7,52,01        DCEQ 256,@FAC8         * Largest PAGE #
       7E4D 00
[3806] 7E4E 7E,59           BS   SHOWIT            * Just show it
[3807] 7E50 E3,52,00        DSLL 1,@FAC8           * PAGE*2
       7E53 01
[3808] 7E54 93,52           DDEC @FAC8             * PAGE-1
[3809] 7E56 05,7E,1B        B    NXTPG             * Continue loop
[3810] 7E59 BD,8F,5D SHOWIT DST  @FAC10,@>E000     * Restore word
       7E5C 00,54
[3811] 7E5E BD,8F,6D        DST  @FAC12,@>F000     * Restore word
       7E61 00,56
[3812] 7E63 BC,8F,BD        ST   @FAC6,@>401C      * Restore PAGE
       7E66 1C,50
[3813] 7E68 BC,8F,BD        ST   @FAC7,@>401E      * Restore PAGE
       7E6B 1E,51
[3814] 7E6D 8F,4A    NOAMS  DCZ  @FAC              * ISR?
[3815] 7E6F 7E,74           BS   NOISR             * No
[3816] 7E71 06,D0,FC        CALL ISRON             * Turn on ISR HOOK
[3817] 7E74 D6,8F,BD NOISR  CEQ  >0F,@>401E        * AMS MAP?
       7E77 1E,0F
[3818] 7E79 5E,A1           BR   NOAMS2            * no
[3819] 7E7B BD,5E,52        DST  @FAC8,@ARG2       * Show PAGES
[3820] 7E7E A7,5E,00        DSUB 16,@ARG2          * PAGE-16
       7E81 10
[3821] 7E82 06,69,31        CALL SDISO             * Show it
[3822] 7E85 31,00,12        MOVE 18,G@AMSP,V@1(@VARW)
       7E88 E0,01,20
       7E8B 7D,E9
[3823] 7E8D 0F,83           XML  SCROLL            * Scroll up a line
[3824] 7E8F E3,52,00        DSLL 2,@FAC8           * PAGE*4=K
       7E92 02
[3825] 7E93 BD,5E,52        DST  @FAC8,@ARG2       * SHOW K
[3826] 7E96 06,69,31        CALL SDISO             * Show it
[3827] 7E99 31,00,06        MOVE 6,G@AMSK,V@1(@VARW)
       7E9C E0,01,20
       7E9F 7D,E3
[3828] 7EA1 46,21    NOAMS2 BR   G6621             * Done
[3829]               ***********************************************************
[3830]               * RXB PATCH FOR GAZOO HARDWARE CART TO SET ROMS

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0072 
EDIT-359
[3831] 7EA3 86,AF,35 NOMENU CLR   V@>35D7       Clear menu flag
       7EA6 D7
[3832] 7EA7 BF,A8,CE         DST   >994A,V@2254 Set loader flag
       7EAA 99,4A
[3833] 7EAC 31,00,0A         MOVE  10,G@DSCLOD,V@>2256
       7EAF AF,22,56
       7EB2 63,51
[3834] 7EB4 5E,D1            BR    MENUGO
[3835]               ***********************************************************
[3836] 7EB6 00,00,7E MENU   DATA  0,MENUUP
       7EB9 CC
[3837] 7EBA 11              BYTE  17
[3838] 7EBB 52,58,42        TEXT  'RXB 2015  MENU   '
       7EBE 20,32,30
       7EC1 31,35,20
       7EC4 20,4D,45
       7EC7 4E,55,20
       7ECA 20,20
[3839] 7ECC BE,AF,35 MENUUP ST    >F0,V@>35D7   Set MENU/REDO flag
       7ECF D7,F0
[3840] 7ED1 87,8F,DD MENUGO DCLR  @>6000        SET ROM BANKS FOR GAZZO CART
       7ED4 00
[3841] 7ED5 43,72           BR    TOPLEV        Restart but below CLR bytes
[3842]               ***********************************************************
[3843]                      END

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0073 
EDIT-359
Symbol Table #1 (New,alpha)  
834C AAA        8302 AAA1       00CB ABSZ       00A4 ACCEPZ     8302 ACCUM      
03AC ACCVRW     00EC ALLZ       7DE3 AMSK       D0F4 AMSMAP     D0F8 AMSOFF     
D0FA AMSON      7DE9 AMSP       D0F6 AMSPAS     7DFB AMSSIZ     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       00CC ATNZ       
0032 ATNZZ      00F0 ATZ        657C AUTO1      65AE AUTO2      657E AUTO3      
6575 AUTO4      659A AUTO5      648E AUTOLD     6571 AUTON      0008 BACK       
8343 BASE       00F1 BASEZ      7C55 BATCH      7C62 BATCH1     7C71 BATCH2     
7C87 BATCH3     7C8A BATCH4     8350 BBB        830C BBB1       00EE BEEPZ      
0002 BREAK      008E BREAKZ     6D4B BTOP15     038E BUFEND     8346 BUFLEV     
038C BUFSRT     830C BYTES      0010 CALDSR     7139 CALENT     830A CALIST     
7182 CALL20     716B CALLS      009D CALLZ      7CA8 CBKEY      7CB1 CBKEY2     
834E CCC        8308 CCC1       8308 CCPADD     8308 CCPADR     8306 CCPPTR     
9CEA CHARS      8342 CHAT       715A CHKEND     714F CHKSYN     7D5D CHRLP      
6917 CHRTA2     6925 CHRTAB     7D4E CHRTBL     000D CHRTN      00D6 CHRZZ      
830E CHSAV      00C5 CIRCUZ     7A30 CKLI01     7A0E CKLIST     7854 CKOTHR     
767F CLEAN      7682 CLEAN1     76A4 CLEANE     76AD CLEANF     76A7 CLEANG     
76B1 CLEANS     76B7 CLEANU     00A0 CLOSEZ     0007 CLRLN      7D2D CLRUSR     
8012 CLSALL     0390 CNSTMP     0004 COD        003A COLON      00B5 COLONZ     
002C COMMA      00B3 COMMAZ     0070 COMPCT     00B8 CONCZ      03BB CONFLG     
713F CONSCN     0081 CONTIN     796C COPY       79BC COPY00     79E3 COPY01     
79E9 COPY02     7990 COPY03     7994 COPY04     798E COPY05     00CD COSZ       
A040 CPUBAS     0820 CRNBUF     08BE CRNEND     007F CRUNCH     76BF CSINT      
76C1 CSINT2     69B8 CSIZE      6A2D CTRL       69F8 CTRLD      6A05 CTRLE      
69EE CTRLS      6A19 CTRLX      830E CURINC     8314 CURLIN     007E CURSOR     
7D22 CUSER      6F8B CVRTLN     0001 CZCLOS     002D DASH       8334 DATA       
0093 DATAZ      834C DDD        8354 DDD1       0089 DEFZ       778A DEL        
779D DEL01      77CC DELEND     0099 DELETZ     A010 DELINK     0087 DELREP     
67EC DELTX      8306 DFLTLM     00E9 DIGITZ     008A DIMZ       6FBA DISO       
00A2 DISPLZ     6FBD DISPZ1     00C4 DIVIZ      0003 DLETE      0024 DOLLAR     
000A DOWN       6351 DSCLOD     6FD2 DSPCHR     6FCF DSPQUO     8317 DSRFLG     
7CB2 DUSER      000A DWNARR     7C49 EA0        7D77 EAU1       7D83 EAWSD      
007F EDGECH     66CF EDITLN     66F5 EDITZ1     6740 EDITZ3     6762 EDITZ4     
6788 EDITZ5     678C EDITZ6     6795 EDITZ8     D00D EDTZ00     651D EDTZ05     
D000 EDTZZ0     8350 EEE        8358 EEE1       0081 ELSEZ      6364 EMPTY      
02FE ENDSCR     008B ENDZ       8332 ENLN       730D ENT01      7341 ENT08      
7343 ENT09      7357 ENT10      7372 ENT16      7382 ENT22      7392 ENT24      
73BB ENT28      73BE ENT29      73F6 ENT30      7409 ENT34      7411 ENT40      
742D ENT44      744F ENT50      7469 ENT53      7498 ENT60      749C ENT61      
74C2 ENT62      74EB ENT62A     7507 ENT62B     7503 ENT62C     7522 ENT63      
7537 ENT63A     753E ENT65      7566 ENT67      75D9 ENT68      75F3 ENT69      
7628 ENT69B     7610 ENT69C     761A ENT69D     72FD ENTER      7300 ENTERW     
7305 ENTERX     0007 ENTXFL     00BE EQUALZ     00EF ERASEZ     837C ERCODE     
6E1B ERPNT5     6E0E ERPRNT     7677 ERRBA      784E ERRBL      6990 ERRBLN     
767B ERRBV      655C ERRCC      699A ERRCIP     8322 ERRCOD     766B ERRFNN     
7653 ERRIBS     69A4 ERRIVN     038A ERRLN      698C ERRLNF     6994 ERRLTL     
7663 ERRMEM     7673 ERRMS      765F ERRMUV     7851 ERRNPP     6980 ERRNQS     
6986 ERRNTL     7667 ERRNWF     765B ERROBE     714B ERROLP     00A5 ERRORZ     
69A0 ERRPV      63D3 ERRRDY     766F ERRSNS     784B ERRSY      697A ERRSY1     
697C ERRSYN     7156 ERRSYX     CD77 ERRTAB     7DA3 ERRUSE     6A84 ERRZ       
6DB8 ERRZ1      6D4E ERRZZ      6D44 ERRZZ4     6D47 ERRZZ5     6DA1 ERRZZR     
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       
00FA FIXEDZ     8345 FLAG       0002 FNCFLG     8317 FORNET     0009 FORW       
008C FORZ       8340 FREPTR     6012 G6012      601C G601C      6388 G6388      
63D0 G63D0      63E0 G63E0      6412 G6412      6420 G6420      645B G645B      
64BF G64BF      64D5 G64D5      64F9 G64F9      6504 G6504      6540 G6540      
654A G654A      658D G658D      65A9 G65A9      65CE G65CE      65DF G65DF      
65F7 G65F7      6618 G6618      6621 G6621      6623 G6623      665F G665F      

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0074 
EDIT-359
6661 G6661      6677 G6677      6689 G6689      66A8 G66A8      66AA G66AA      
66B8 G66B8      66F0 G66F0      6714 G6714      6724 G6724      672E G672E      
675E G675E      677E G677E      6783 G6783      67C0 G67C0      67C5 G67C5      
67DE G67DE      67EA G67EA      6823 G6823      6827 G6827      683E G683E      
6864 G6864      6891 G6891      6899 G6899      68B5 G68B5      68C2 G68C2      
68D9 G68D9      68E6 G68E6      68F9 G68F9      68FC G68FC      6939 G6939      
6A70 G6A70      6A76 G6A76      6A7C G6A7C      6A82 G6A82      6A84 G6A84      
6A86 G6A86      6AAE G6AAE      6AB3 G6AB3      6AC5 G6AC5      6AD7 G6AD7      
6ADC G6ADC      6AF4 G6AF4      6B04 G6B04      6B2A G6B2A      6B3C G6B3C      
6B53 G6B53      6B69 G6B69      6B7A G6B7A      6B86 G6B86      6B8E G6B8E      
6B94 G6B94      6B9C G6B9C      6BA6 G6BA6      6BB3 G6BB3      6BC2 G6BC2      
6BCF G6BCF      6BD0 G6BD0      6BF0 G6BF0      6C0B G6C0B      6C30 G6C30      
6C64 G6C64      6C6B G6C6B      6C88 G6C88      6C8A G6C8A      6C91 G6C91      
6CA7 G6CA7      6CAD G6CAD      6CB9 G6CB9      6CC1 G6CC1      6CD5 G6CD5      
6CFB G6CFB      6D35 G6D35      6D3C G6D3C      6D74 G6D74      6D87 G6D87      
6DAD G6DAD      6DAF G6DAF      6DBF G6DBF      6DD6 G6DD6      6DFD G6DFD      
6E4D G6E4D      6E66 G6E66      6E79 G6E79      6E85 G6E85      6EC4 G6EC4      
6ECE G6ECE      6ED8 G6ED8      6EF8 G6EF8      6F0A G6F0A      6F17 G6F17      
6F1C G6F1C      6F2E G6F2E      6F35 G6F35      6F55 G6F55      6F90 G6F90      
6FDE G6FDE      700B G700B      7013 G7013      7031 G7031      703B G703B      
7073 G7073      70EB G70EB      710D G710D      7168 G7168      71AE G71AE      
71D7 G71D7      720E G720E      7293 G7293      72A4 G72A4      72A8 G72A8      
72B5 G72B5      72C4 G72C4      72FB G72FB      732D G732D      73A6 G73A6      
73CD G73CD      73EC G73EC      73FB G73FB      7407 G7407      7480 G7480      
74A5 G74A5      7548 G7548      7550 G7550      758B G758B      75A8 G75A8      
75BF G75BF      75C1 G75C1      75C6 G75C6      75D1 G75D1      7608 G7608      
7618 G7618      763D G763D      7698 G7698      76BE G76BE      76E3 G76E3      
8024 G8024      008E GDTECT     E025 GE025      6850 GETCHR     686A GETLN      
686E GETLN2     6845 GETNB      684A GETNB2     7895 GETPA1     78AF GETPA2     
7880 GETPA3     7866 GETPAR     0087 GOSUBZ     0086 GOTOZ      0085 GOZ        
0085 GREAD      00C0 GREATZ     802A GRMLST     6810 GRSUB1     802C GRSUB2     
802E GRSUB3     7A06 GTLIST     689D GTLNER     77E3 GTRAN0     77FE GTRAN1     
77F7 GTRAN2     7805 GTRAN3     7815 GTRAN4     781D GTRAN5     7831 GTRAN6     
7838 GTRAN7     783E GTRAN8     7835 GTRAN9     77CF GTRANG     008B GVWITE     
0086 GWRITE     6828 GWSUB      8370 HIVDP      0006 IFFLAG     0084 IFZ        
64EF ILLST      00A3 IMAGEZ     7142 IMPIF      7147 IMPILL     68C3 INITPG     
0092 INPUTZ     6730 INSREP     0004 INSRT      8338 INTRIN     A018 INTRND     
00CF INTZ       0084 IO         833C IOSTRT     D0FE ISROFF     D0FC ISRON      
8374 KEYBD      CB00 KEYTAB     68DC KILSYM     7BD8 LDKEY      00D5 LENZ       
00BF LESSZ      008D LETZ       A026 LINK1      00AA LINPUZ     8312 LINUM      
8018 LIST       0002 LISTZ      6E7C LLIST      6E9C LLISZ0     6F87 LLISZ1     
6EF0 LLISZ2     6F41 LLISZ3     6F5C LLISZ6     6F85 LLISZ7     6FA8 LLISZ9     
6EA0 LLIZ12     6EB3 LLIZ15     6EBF LLIZ16     6EE4 LLIZ17     8336 LNBUF      
00C9 LNZ        0371 LODFLG     00D0 LOGZ       00B7 LPARZ      8348 LSUBP      
00DF MAXZ       0072 MEMCHK     68A6 MEMFLL     68A3 MEMFUL     68BB MEMZ1      
7EB6 MENU       7ED1 MENUGO     7ECC MENUUP     8028 MERGE      0008 MERGEZ     
7DD2 MESSAG     FFFE MINUST     00C2 MINUSZ     00E0 MINZ       837A MOTION     
78B0 MOVE       78C7 MOVE03     790D MOVE04     790F MOVE05     793E MOVE06     
7956 MOVE07     7958 MOVE08     78CC MOVE09     7938 MOVE99     039E MRGPAB     
6065 MSG10      629B MSG109     62A6 MSG130     62B0 MSG135     6076 MSG14      
6083 MSG16      609C MSG17      60AD MSG19      60BB MSG24      60D2 MSG25      
60E4 MSG28      60F9 MSG34      6110 MSG36      611C MSG39      6128 MSG40      
6137 MSG43      6148 MSG44      6159 MSG47      616F MSG48      6189 MSG49      
6198 MSG51      61AD MSG54      6324 MSG56      61BE MSG57      61CC MSG60      
61DB MSG61      62C5 MSG62      61EB MSG67      61FA MSG69      6215 MSG70      
622D MSG74      623A MSG78      624D MSG79      6257 MSG81      626F MSG83      
627B MSG84      6286 MSG97      6048 MSGBRK     6319 MSGCF      630A MSGCIS     
6038 MSGERR     62D3 MSGFRE     6040 MSGFST     6300 MSGGF1     62F0 MSGGFR     
62DD MSGSFR     6053 MSGTA      605C MSGWRN     00C3 MULTZ      0088 MVDN       
0089 MVUP       7DB1 MYSRCH     6038 MZMSG      6A70 MZPSCN     7759 NEWCMD     
0096 NEXTZ      000D NLEN       02E2 NLNADD     8314 NMLEN      830C NMPTR      
7E6D NOAMS      7EA1 NOAMS2     7E74 NOISR      7EA3 NOMENU     0374 NOTONE     
00BD NOTZ       7D29 NOUSER     69AA NSIZE      7657 NTLERR     00FD NUMBEZ     
0000 NUMBR      00C8 NUMCOZ     00E8 NUMERZ     00C8 NUMZ       7DBC NXTDSK     

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0075 
EDIT-359
7E1B NXTPG      0060 OFFSET     8016 OLD        8026 OLD1       03BC OLDTOP     
0005 OLDZ       009B ONZ        009F OPENZ      0001 OPTFLG     009E OPTIOZ     
00BA ORZ        0080 OSPACE     6FA9 OUTLN      6FAC OUTLZ1     00F7 OUTPUZ     
801A OUTREC     8304 PABPTR     0074 PARSE      00FB PERMAZ     0079 PGMCHR     
7640 PGMERR     832C PGMPTR     00DD PIZ        00C1 PLUSZ      00D9 POSZ       
6FEE PRESCN     8344 PRGFLG     009C PRINTZ     83CE PRTNFN     03B7 PSCFG      
0022 QUOTE      8389 RAMFLG     8386 RAMFRE     830A RAMPTR     8384 RAMTOP     
8378 RANDOM     0095 RANDOZ     6CE7 RBACK      6AA1 READ00     6AA3 READ01     
6C9A READ05     6A98 READL1     6A9E READL2     6A95 READL3     6A8E READLN     
7CD9 READLP     0097 READZ      6AA8 READZ1     6ACC READZ2     6B22 READZ3     
6C68 READZ4     6ACE READZ5     0006 RECALL     08C0 RECBUF     8307 RECLEN     
00DE RECZ       0000 REMODE     009A REMZ       76EB RES1       76F9 RES2       
7700 RES2A      7733 RES3       7734 RES4       7751 RES4A      774C RES4B      
7752 RES5       662D RES6       0006 RESEQZ     0094 RESTOZ     CF68 RETNOS     
76E7 RETSET     0088 RETURZ     6CE3 RFORW      8375 RKEY       00D7 RNDZ       
00B6 RPARZ      00E1 RPTZZ      7BAC RSCAN      7BBB RSCAN2     8388 RSTK       
66EC RTNSET     7774 RUNPAT     7785 RUNRET     00A9 RUNZ       7CED RUSER      
7A38 RXBRUN     0005 SAFLG      8014 SAVE       0388 SAVEVP     0007 SAVEZ      
D0AF SAVLIN     0384 SBUFLV     701A SCAN       704B SCAN10     70A1 SCAN20     
70A4 SCAN22     70A6 SCAN25     70F6 SCAN35     7111 SCAN40     710A SCAN45     
712D SCAN50     7133 SCAN55     71BE SCAN67     7252 SCAN86     7283 SCAN88     
72CB SCAN90     716A SCANRT     7DC1 SCHOFF     007D SCHSYM     70AD SCNDEF     
706E SCNDIM     7AE8 SCNKEY     707D SCNOPT     008F SCNSMT     0083 SCROLL     
6931 SDISO      0003 SEETWO     00D8 SEGZZ      00B4 SEMICZ     00F6 SEQUEZ     
666D SEQZ2      66A2 SEQZ3      0386 SEXTRM     0398 SFLAG      00D1 SGNZZ      
7E59 SHOWIT     00D2 SINZ       69C1 SIZEAS     69DD SIZEAT     69D9 SIZENI     
00EB SIZEZ      7648 SKPSTR     0396 SLSUBP     007B SMB        831E SMTSRT     
6A3E SPACE2     6A45 SPACE3     6A34 SPACES     635C SPCCHR     007E SPEED      
0382 SPGMPT     695A SPRINT     00D3 SQRZ       A014 SQUISH     7BDF SRCHLP     
831C SREF       0082 SSEPZ      039A SSTEMP     039C SSTMP2     8372 STACK      
0372 START      00B2 STEPZ      83BD STKMAX     83AF STKMIN     8330 STLN       
0098 STOPZ      8302 STPT       831A STREND     0004 STRFLG     00C7 STRINZ     
8318 STRSP      00DB STRZZ      8324 STVSPT     0003 SUBFLG     72D5 SUBNDS     
00A8 SUBNDZ     71C2 SUBS       833A SUBTAB     00A7 SUBXTZ     00A1 SUBZ       
007A SYM        0376 SYMBOL     833E SYMTAB     0000 SYNCHK     65BA SZBYE      
6520 SZCONT     65BD SZEXIT     65BE SZLIST     65C6 SZMERG     63A5 SZNEW      
6560 SZNUM      65B7 SZOLD      6625 SZRES      649B SZRUN      64DA SZRUN0     
6502 SZRUN1     64EA SZRUN2     651A SZRUN4     64A0 SZRUNL     65AF SZSAVE     
65C9 SZSIZE     0392 TABSAV     00FC TABZ       00D4 TANZ       00B0 THENZ      
8379 TIMER      0034 TONE1      0036 TONE2      63D3 TOPL02     63D7 TOPL05     
63DA TOPL10     63DD TOPL15     63E6 TOPL20     63E9 TOPL25     6405 TOPL30     
641E TOPL35     6433 TOPL42     6445 TOPL45     6462 TOPL55     6372 TOPLEV     
8310 TOPSTK     00B1 TOZ        CE1F TRACBK     0090 TRACEZ     0083 TREMZ      
00EA UALPHZ     7D8F UBATCH     7D03 UDSR       008F UNBREZ     00C8 UNQSTZ     
0091 UNTRAZ     000B UPARR      00F8 UPDATZ     000B UPMV       7D38 USEERR     
7D4A USERTN     00ED USINGZ     7BF8 UTIL1      7C0D UTIL2      7C1C UTIL3      
7C41 UTIL4      7C4E UTIL5      7C51 UTIL6      00DA VAL        03B2 VALIDL     
03B0 VALIDP     00FE VALIDZ     6C10 VALIZ1     6C1A VALIZ2     6C24 VALIZ3     
6C2A VALIZ4     6C3A VALIZ9     8300 VAR0       8316 VAR9       832A VARA       
8308 VARC       8301 VARV       8320 VARW       8304 VARY       8306 VARY2      
636C VDPREG     837B VDPSTS     008A VGWITE     0078 VPOP       0077 VPUSH      
0958 VRAMVS     03C0 VROAZ      00A6 WARNZ      6CFD WARNZZ     64F3 WRNNPP     
0001 WRNPRT     0002 WRNSTP     6D1B WRNZZ3     6D32 WRNZZ5     7DC7 WSD        
633B XBCART     7BEB XBRUN      836A XCURIN     8368 XCURLI     8366 XENLN      
8316 XFLAG      00BC XORZ       8364 XSTLN      

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0076 
EDIT-359
Symbol Table #2 (New,value)  
0000 NUMBR      0000 REMODE     0000 SYNCHK     0001 CZCLOS     0001 OPTFLG     
0001 WRNPRT     0002 BREAK      0002 FNCFLG     0002 LISTZ      0002 WRNSTP     
0003 DLETE      0003 SEETWO     0003 SUBFLG     0004 COD        0004 INSRT      
0004 STRFLG     0005 OLDZ       0005 SAFLG      0006 IFFLAG     0006 RECALL     
0006 RESEQZ     0007 CLRLN      0007 ENTXFL     0007 SAVEZ      0008 BACK       
0008 MERGEZ     0009 FORW       000A DOWN       000A DWNARR     000B UPARR      
000B UPMV       000D CHRTN      000D NLEN       0010 CALDSR     0022 QUOTE      
0024 DOLLAR     002C COMMA      002D DASH       0032 ATNZZ      0034 TONE1      
0036 TONE2      003A COLON      0060 OFFSET     0070 COMPCT     0072 MEMCHK     
0074 PARSE      0077 VPUSH      0078 VPOP       0079 PGMCHR     007A SYM        
007B SMB        007D SCHSYM     007E CURSOR     007E SPEED      007F CRUNCH     
007F EDGECH     0080 OSPACE     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       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      
00F6 SEQUEZ     00F7 OUTPUZ     00F8 UPDATZ     00F9 APPENZ     00FA FIXEDZ     
00FB PERMAZ     00FC TABZ       00FD NUMBEZ     00FE VALIDZ     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 CNSTMP     0392 TABSAV     0396 SLSUBP     
0398 SFLAG      039A SSTEMP     039C SSTMP2     039E MRGPAB     03AC ACCVRW     
03B0 VALIDP     03B2 VALIDL     03B7 PSCFG      03BB CONFLG     03BC OLDTOP     
03C0 VROAZ      0820 CRNBUF     08BE CRNEND     08C0 RECBUF     0958 VRAMVS     
6012 G6012      601C G601C      6038 MSGERR     6038 MZMSG      6040 MSGFST     
6048 MSGBRK     6053 MSGTA      605C MSGWRN     6065 MSG10      6076 MSG14      
6083 MSG16      609C MSG17      60AD MSG19      60BB MSG24      60D2 MSG25      
60E4 MSG28      60F9 MSG34      6110 MSG36      611C MSG39      6128 MSG40      
6137 MSG43      6148 MSG44      6159 MSG47      616F MSG48      6189 MSG49      
6198 MSG51      61AD MSG54      61BE MSG57      61CC MSG60      61DB MSG61      
61EB MSG67      61FA MSG69      6215 MSG70      622D MSG74      623A MSG78      
624D MSG79      6257 MSG81      626F MSG83      627B MSG84      6286 MSG97      
629B MSG109     62A6 MSG130     62B0 MSG135     62C5 MSG62      62D3 MSGFRE     
62DD MSGSFR     62F0 MSGGFR     6300 MSGGF1     630A MSGCIS     6319 MSGCF      
6324 MSG56      633B XBCART     6351 DSCLOD     635C SPCCHR     6364 EMPTY      
636C VDPREG     6372 TOPLEV     6388 G6388      63A5 SZNEW      63D0 G63D0      
63D3 ERRRDY     63D3 TOPL02     63D7 TOPL05     63DA TOPL10     63DD TOPL15     
63E0 G63E0      63E6 TOPL20     63E9 TOPL25     6405 TOPL30     6412 G6412      
641E TOPL35     6420 G6420      6433 TOPL42     6445 TOPL45     645B G645B      
6462 TOPL55     648E AUTOLD     649B SZRUN      64A0 SZRUNL     64BF G64BF      
64D5 G64D5      64DA SZRUN0     64EA SZRUN2     64EF ILLST      64F3 WRNNPP     
64F9 G64F9      6502 SZRUN1     6504 G6504      651A SZRUN4     651D EDTZ05     
6520 SZCONT     6540 G6540      654A G654A      655C ERRCC      6560 SZNUM      
6571 AUTON      6575 AUTO4      657C AUTO1      657E AUTO3      658D G658D      
659A AUTO5      65A9 G65A9      65AE AUTO2      65AF SZSAVE     65B7 SZOLD      

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0077 
EDIT-359
65BA SZBYE      65BD SZEXIT     65BE SZLIST     65C6 SZMERG     65C9 SZSIZE     
65CE G65CE      65DF G65DF      65F7 G65F7      6618 G6618      6621 G6621      
6623 G6623      6625 SZRES      662D RES6       665F G665F      6661 G6661      
666D SEQZ2      6677 G6677      6689 G6689      66A2 SEQZ3      66A8 G66A8      
66AA G66AA      66B8 G66B8      66CF EDITLN     66EC RTNSET     66F0 G66F0      
66F5 EDITZ1     6714 G6714      6724 G6724      672E G672E      6730 INSREP     
6740 EDITZ3     675E G675E      6762 EDITZ4     677E G677E      6783 G6783      
6788 EDITZ5     678C EDITZ6     6795 EDITZ8     67C0 G67C0      67C5 G67C5      
67DE G67DE      67EA G67EA      67EC DELTX      6810 GRSUB1     6823 G6823      
6827 G6827      6828 GWSUB      683E G683E      6845 GETNB      684A GETNB2     
6850 GETCHR     6864 G6864      686A GETLN      686E GETLN2     6891 G6891      
6899 G6899      689D GTLNER     68A3 MEMFUL     68A6 MEMFLL     68B5 G68B5      
68BB MEMZ1      68C2 G68C2      68C3 INITPG     68D9 G68D9      68DC KILSYM     
68E6 G68E6      68F9 G68F9      68FC G68FC      6917 CHRTA2     6925 CHRTAB     
6931 SDISO      6939 G6939      695A SPRINT     697A ERRSY1     697C ERRSYN     
6980 ERRNQS     6986 ERRNTL     698C ERRLNF     6990 ERRBLN     6994 ERRLTL     
699A ERRCIP     69A0 ERRPV      69A4 ERRIVN     69AA NSIZE      69B8 CSIZE      
69C1 SIZEAS     69D9 SIZENI     69DD SIZEAT     69EE CTRLS      69F8 CTRLD      
6A05 CTRLE      6A19 CTRLX      6A2D CTRL       6A34 SPACES     6A3E SPACE2     
6A45 SPACE3     6A70 G6A70      6A70 MZPSCN     6A76 G6A76      6A7C G6A7C      
6A82 G6A82      6A84 ERRZ       6A84 G6A84      6A86 G6A86      6A8E READLN     
6A95 READL3     6A98 READL1     6A9E READL2     6AA1 READ00     6AA3 READ01     
6AA8 READZ1     6AAE G6AAE      6AB3 G6AB3      6AC5 G6AC5      6ACC READZ2     
6ACE READZ5     6AD7 G6AD7      6ADC G6ADC      6AF4 G6AF4      6B04 G6B04      
6B22 READZ3     6B2A G6B2A      6B3C G6B3C      6B53 G6B53      6B69 G6B69      
6B7A G6B7A      6B86 G6B86      6B8E G6B8E      6B94 G6B94      6B9C G6B9C      
6BA6 G6BA6      6BB3 G6BB3      6BC2 G6BC2      6BCF G6BCF      6BD0 G6BD0      
6BF0 G6BF0      6C0B G6C0B      6C10 VALIZ1     6C1A VALIZ2     6C24 VALIZ3     
6C2A VALIZ4     6C30 G6C30      6C3A VALIZ9     6C64 G6C64      6C68 READZ4     
6C6B G6C6B      6C88 G6C88      6C8A G6C8A      6C91 G6C91      6C9A READ05     
6CA7 G6CA7      6CAD G6CAD      6CB9 G6CB9      6CC1 G6CC1      6CD5 G6CD5      
6CE3 RFORW      6CE7 RBACK      6CFB G6CFB      6CFD WARNZZ     6D1B WRNZZ3     
6D32 WRNZZ5     6D35 G6D35      6D3C G6D3C      6D44 ERRZZ4     6D47 ERRZZ5     
6D4B BTOP15     6D4E ERRZZ      6D74 G6D74      6D87 G6D87      6DA1 ERRZZR     
6DAD G6DAD      6DAF G6DAF      6DB8 ERRZ1      6DBF G6DBF      6DD6 G6DD6      
6DFD G6DFD      6E0E ERPRNT     6E1B ERPNT5     6E4D G6E4D      6E66 G6E66      
6E79 G6E79      6E7C LLIST      6E85 G6E85      6E9C LLISZ0     6EA0 LLIZ12     
6EB3 LLIZ15     6EBF LLIZ16     6EC4 G6EC4      6ECE G6ECE      6ED8 G6ED8      
6EE4 LLIZ17     6EF0 LLISZ2     6EF8 G6EF8      6F0A G6F0A      6F17 G6F17      
6F1C G6F1C      6F2E G6F2E      6F35 G6F35      6F41 LLISZ3     6F55 G6F55      
6F5C LLISZ6     6F85 LLISZ7     6F87 LLISZ1     6F8B CVRTLN     6F90 G6F90      
6FA8 LLISZ9     6FA9 OUTLN      6FAC OUTLZ1     6FBA DISO       6FBD DISPZ1     
6FCF DSPQUO     6FD2 DSPCHR     6FDE G6FDE      6FEE PRESCN     700B G700B      
7013 G7013      701A SCAN       7031 G7031      703B G703B      704B SCAN10     
706E SCNDIM     7073 G7073      707D SCNOPT     70A1 SCAN20     70A4 SCAN22     
70A6 SCAN25     70AD SCNDEF     70EB G70EB      70F6 SCAN35     710A SCAN45     
710D G710D      7111 SCAN40     712D SCAN50     7133 SCAN55     7139 CALENT     
713F CONSCN     7142 IMPIF      7147 IMPILL     714B ERROLP     714F CHKSYN     
7156 ERRSYX     715A CHKEND     7168 G7168      716A SCANRT     716B CALLS      
7182 CALL20     71AE G71AE      71BE SCAN67     71C2 SUBS       71D7 G71D7      
720E G720E      7252 SCAN86     7283 SCAN88     7293 G7293      72A4 G72A4      
72A8 G72A8      72B5 G72B5      72C4 G72C4      72CB SCAN90     72D5 SUBNDS     
72FB G72FB      72FD ENTER      7300 ENTERW     7305 ENTERX     730D ENT01      
732D G732D      7341 ENT08      7343 ENT09      7357 ENT10      7372 ENT16      
7382 ENT22      7392 ENT24      73A6 G73A6      73BB ENT28      73BE ENT29      
73CD G73CD      73EC G73EC      73F6 ENT30      73FB G73FB      7407 G7407      
7409 ENT34      7411 ENT40      742D ENT44      744F ENT50      7469 ENT53      
7480 G7480      7498 ENT60      749C ENT61      74A5 G74A5      74C2 ENT62      
74EB ENT62A     7503 ENT62C     7507 ENT62B     7522 ENT63      7537 ENT63A     
753E ENT65      7548 G7548      7550 G7550      7566 ENT67      758B G758B      
75A8 G75A8      75BF G75BF      75C1 G75C1      75C6 G75C6      75D1 G75D1      
75D9 ENT68      75F3 ENT69      7608 G7608      7610 ENT69C     7618 G7618      
761A ENT69D     7628 ENT69B     763D G763D      7640 PGMERR     7648 SKPSTR     
7653 ERRIBS     7657 NTLERR     765B ERROBE     765F ERRMUV     7663 ERRMEM     

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0078 
EDIT-359
7667 ERRNWF     766B ERRFNN     766F ERRSNS     7673 ERRMS      7677 ERRBA      
767B ERRBV      767F CLEAN      7682 CLEAN1     7698 G7698      76A4 CLEANE     
76A7 CLEANG     76AD CLEANF     76B1 CLEANS     76B7 CLEANU     76BE G76BE      
76BF CSINT      76C1 CSINT2     76E3 G76E3      76E7 RETSET     76EB RES1       
76F9 RES2       7700 RES2A      7733 RES3       7734 RES4       774C RES4B      
7751 RES4A      7752 RES5       7759 NEWCMD     7774 RUNPAT     7785 RUNRET     
778A DEL        779D DEL01      77CC DELEND     77CF GTRANG     77E3 GTRAN0     
77F7 GTRAN2     77FE GTRAN1     7805 GTRAN3     7815 GTRAN4     781D GTRAN5     
7831 GTRAN6     7835 GTRAN9     7838 GTRAN7     783E GTRAN8     784B ERRSY      
784E ERRBL      7851 ERRNPP     7854 CKOTHR     7866 GETPAR     7880 GETPA3     
7895 GETPA1     78AF GETPA2     78B0 MOVE       78C7 MOVE03     78CC MOVE09     
790D MOVE04     790F MOVE05     7938 MOVE99     793E MOVE06     7956 MOVE07     
7958 MOVE08     796C COPY       798E COPY05     7990 COPY03     7994 COPY04     
79BC COPY00     79E3 COPY01     79E9 COPY02     7A06 GTLIST     7A0E CKLIST     
7A30 CKLI01     7A38 RXBRUN     7AE8 SCNKEY     7BAC RSCAN      7BBB RSCAN2     
7BD8 LDKEY      7BDF SRCHLP     7BEB XBRUN      7BF8 UTIL1      7C0D UTIL2      
7C1C UTIL3      7C41 UTIL4      7C49 EA0        7C4E UTIL5      7C51 UTIL6      
7C55 BATCH      7C62 BATCH1     7C71 BATCH2     7C87 BATCH3     7C8A BATCH4     
7CA8 CBKEY      7CB1 CBKEY2     7CB2 DUSER      7CD9 READLP     7CED RUSER      
7D03 UDSR       7D22 CUSER      7D29 NOUSER     7D2D CLRUSR     7D38 USEERR     
7D4A USERTN     7D4E CHRTBL     7D5D CHRLP      7D77 EAU1       7D83 EAWSD      
7D8F UBATCH     7DA3 ERRUSE     7DB1 MYSRCH     7DBC NXTDSK     7DC1 SCHOFF     
7DC7 WSD        7DD2 MESSAG     7DE3 AMSK       7DE9 AMSP       7DFB AMSSIZ     
7E1B NXTPG      7E59 SHOWIT     7E6D NOAMS      7E74 NOISR      7EA1 NOAMS2     
7EA3 NOMENU     7EB6 MENU       7ECC MENUUP     7ED1 MENUGO     8012 CLSALL     
8014 SAVE       8016 OLD        8018 LIST       801A OUTREC     8024 G8024      
8026 OLD1       8028 MERGE      802A GRMLST     802C GRSUB2     802E GRSUB3     
8300 VAR0       8301 VARV       8302 AAA1       8302 ACCUM      8302 STPT       
8304 PABPTR     8304 VARY       8306 CCPPTR     8306 DFLTLM     8306 VARY2      
8307 RECLEN     8308 CCC1       8308 CCPADD     8308 CCPADR     8308 VARC       
830A CALIST     830A RAMPTR     830C BBB1       830C BYTES      830C NMPTR      
830E CHSAV      830E CURINC     8310 TOPSTK     8312 LINUM      8314 CURLIN     
8314 NMLEN      8316 VAR9       8316 XFLAG      8317 DSRFLG     8317 FORNET     
8318 STRSP      831A STREND     831C SREF       831E SMTSRT     8320 VARW       
8322 ERRCOD     8324 STVSPT     832A VARA       832C PGMPTR     832E EXTRAM     
8330 STLN       8332 ENLN       8334 DATA       8336 LNBUF      8338 INTRIN     
833A SUBTAB     833C IOSTRT     833E SYMTAB     8340 FREPTR     8342 CHAT       
8343 BASE       8344 PRGFLG     8345 FLAG       8346 BUFLEV     8348 LSUBP      
834B FAC1       834C AAA        834C DDD        834C FAC2       834D FAC3       
834E CCC        834E FAC4       834E FFF        834F FAC5       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      835D ARG1       835E ARG2       835F ARG3       8360 ARG4       
8361 ARG5       8362 ARG6       8363 ARG7       8364 ARG8       8364 XSTLN      
8366 XENLN      8367 ARG11      8368 XCURLI     836A XCURIN     836B ARG15      
836C ARG16      8370 HIVDP      8372 STACK      8374 KEYBD      8375 RKEY       
8376 EXPZ       8378 RANDOM     8379 TIMER      837A MOTION     837B VDPSTS     
837C ERCODE     8384 RAMTOP     8386 RAMFRE     8388 RSTK       8389 RAMFLG     
83AF STKMIN     83BD STKMAX     83CE PRTNFN     9CEA CHARS      A004 EXEC       
A00A ASC        A00C EXEC1      A00E EXEC6D     A010 DELINK     A014 SQUISH     
A018 INTRND     A026 LINK1      A040 CPUBAS     CB00 KEYTAB     CD77 ERRTAB     
CE1F TRACBK     CF68 RETNOS     D000 EDTZZ0     D00D EDTZ00     D0AF SAVLIN     
D0F4 AMSMAP     D0F6 AMSPAS     D0F8 AMSOFF     D0FA AMSON      D0FC ISRON      
D0FE ISROFF     E025 GE025      FFFE MINUST     

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0079 
EDIT-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 0080 
EDIT-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      
