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