------- FILE a2a1emulv5_1.asm LEVEL 1 PASS 2
      1  10000					       PROCESSOR	6502
      2  10000 ????				       LIST	ON
      3  10000 ????						;
      4  10000 ????						;-----------------------------------------------------------------------;
      5  10000 ????						; The Wozanium Pack							 ;
      6  10000 ????						; This file is part one of the Wozanium Pack.				 ;
      7  10000 ????						; Apple 1 basic is the other part					;
      8  10000 ????						;-----------------------------------------------------------------------;
      9  10000 ????						;	Copyright 2010,2011 Mike Willegal				
     10  10000 ????						;	A1 monitor and A1 apple cassette interface derived from
     11  10000 ????						;	original Apple 1 implemenations by Steve Wozniak
     12  10000 ????						;
     13  10000 ????						;    The Wozanium Pack is free software: 
     14  10000 ????						;    you can redistribute it and/or modify
     15  10000 ????						;    it under the terms of the GNU General Public License as published by
     16  10000 ????						;    the Free Software Foundation, either version 3 of the License, or
     17  10000 ????						;    (at your option) any later version.
     18  10000 ????						;
     19  10000 ????						;    The Wozanium Pack is distributed in the hope that it will be useful,
     20  10000 ????						;    but WITHOUT ANY WARRANTY; without even the implied warranty of
     21  10000 ????						;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     22  10000 ????						;    GNU General Public License for more details.
     23  10000 ????						;
     24  10000 ????						;    You should have received a copy of the GNU General Public License
     25  10000 ????						;    along with the Wozanium Pack.  If not, see <http://www.gnu.org/licenses/>.
     26  10000 ????						;
     27  10000 ????						;-----------------------------------------------------------------------; 
     28  10000 ????						;-------------------------------------------------------------------------
     29  10000 ????						; Defines - this code can be built one of four ways
     30  10000 ????						;	1. clone/real Apple 1 HW
     31  10000 ????						;	2. runs in ram of real or virtual Apple 2
     32  10000 ????						;	3. runs in virtual apple 2 as ROM
     33  10000 ????						;	4. runs in plug in board of real Apple 2
     34  10000 ????						;
     35  10000 ????						;	select one of these three options
     36  10000 ????						;-------------------------------------------------------------------------
     37  10000 ????						; Build with dasm 6502 assembler and the following command line
     38  10000 ????						;dasm a2a1emulv5_1.asm -DBLD4ROMBD=0 -DHUSTNBASIC=0 -oa2a1rbh.o -la2a1rbh.lst
     39  10000 ????						;
     40  10000 ????
     41  10000 ????						;BLD4APPLE1		EQU	0	;ACTUAL APPLE 1 or CLONE
     42  10000 ????						;BLD4RAM		EQU	0	;RAM of virtual or real A2
     43  10000 ????						;BLD4EMULROM	EQU	0	;ROM of virtual A2
     44  10000 ????						;BLD4ROMBD		EQU	0	;ROM board in Real A2
     45  10000 ????
     46  10000 ????						;-------------------------------------------------------------------------
     47  10000 ????						;  Constants
     48  10000 ????						;-------------------------------------------------------------------------
     49  10000 ????
     50  10000 ????		00 df	    BS	       EQU	$DF	;Backspace key, arrow left key
     51  10000 ????		00 8d	    CR	       EQU	$8D	;Carriage Return
     52  10000 ????		00 9b	    ESC        EQU	$9B	;ESC key
     53  10000 ????		00 5c	    PROMPT     EQU	"\"	;Prompt character
     54  10000 ????
     55  10000 ????						;-------------------------------------------------------------------------
     56  10000 ????						; scratchpad memory - uses last 1k of apple ii 48k
     57  10000 ????						;-------------------------------------------------------------------------
     58  10000 ????				       MAC	storage
     59  10000 ????			    TURBO      DS.b	1	; any bit non-zero is turbo mode
     60  10000 ????			    TURBOUSR   EQU	$01	; USER TURBO MODE
     61  10000 ????			    TURBOCMP   EQU	$02	; COMPUTER DRIVEN TURBO MODE
     62  10000 ????
     63  10000 ????			    RDCONVERT  DS.b	1
     64  10000 ????			    READVECTOR DS.w	1	;allows user override of default keyboard read function
     65  10000 ????			    WRITVECTOR DS.w	1	;allows user override of default video out function
     66  10000 ????
     67  10000 ????			    savey      DS.b	1
     68  10000 ????			    savex      DS.b	1
     69  10000 ????			    POWERUPINIT DS.b	1
     70  10000 ????			    SCRNCLRD   DS.b	1
     71  10000 ????			    CHAR       DS.b	1
     72  10000 ????			    TMP1       DS.b	1
     73  10000 ????			    CURROW     DS.b	1
     74  10000 ????			    CURCOL     DS.b	1
     75  10000 ????			    COUNTER0   DS.b	1
     76  10000 ????			    COUNTER1   DS.b	1
     77  10000 ????			    CURSOR     DS.b	1
     78  10000 ????			    RDSTRTL    DS.b	1
     79  10000 ????			    RDSTRTH    DS.b	1
     80  10000 ????			    HEX2LB     DS.b	1	;Begin address of dump block
     81  10000 ????			    HEX2HB     DS.b	1
     82  10000 ????
     83  10000 ????						;;; zero page back up so graphics routines can use them
     84  10000 ????			    TMPG0      DS.b	16
     85  10000 ????			    PG0SAVD    DS.b	1
     86  10000 ????				       ENDM
     87  10000 ????				       IFNCONST	BLD4APPLE1
     88  10000 ????				       IFNCONST	BLD4RAM
     89  bc00					      ORG	$bc00
      0  bc00					      STORAGE
      1  bc00		       00	   TURBO      DS.b	1
      2  bc00		       00 01	   TURBOUSR   EQU	$01
      3  bc00		       00 02	   TURBOCMP   EQU	$02
      4  bc01
      5  bc01		       00	   RDCONVERT  DS.b	1
      6  bc02		       00 00	   READVECTOR DS.w	1
      7  bc04		       00 00	   WRITVECTOR DS.w	1
      8  bc06
      9  bc06		       00	   savey      DS.b	1
     10  bc07		       00	   savex      DS.b	1
     11  bc08		       00	   POWERUPINIT DS.b	1
     12  bc09		       00	   SCRNCLRD   DS.b	1
     13  bc0a		       00	   CHAR       DS.b	1
     14  bc0b		       00	   TMP1       DS.b	1
     15  bc0c		       00	   CURROW     DS.b	1
     16  bc0d		       00	   CURCOL     DS.b	1
     17  bc0e		       00	   COUNTER0   DS.b	1
     18  bc0f		       00	   COUNTER1   DS.b	1
     19  bc10		       00	   CURSOR     DS.b	1
     20  bc11		       00	   RDSTRTL    DS.b	1
     21  bc12		       00	   RDSTRTH    DS.b	1
     22  bc13		       00	   HEX2LB     DS.b	1
     23  bc14		       00	   HEX2HB     DS.b	1
     24  bc15
     25  bc15
     26  bc15		       00 00 00 00*TMPG0      DS.b	16
     27  bc25		       00	   PG0SAVD    DS.b	1
     91  bc26					      ENDIF
     92  bc26					      ENDIF
     93  bc26
     94  bc26
     95  bc26
     96  bc26
     97  bc26
     98  bc26
     99  bc26							;-------------------------------------------------------------------------
    100  bc26							;  Memory declaration
    101  bc26							;-------------------------------------------------------------------------
    102  bc26
    103  bc26
    104  bc26		       00 24	   HEX1L      EQU	$24	;End address of dump block
    105  bc26		       00 25	   HEX1H      EQU	$25
    106  bc26		       00 26	   HEX2L      EQU	$26	;Begin address of dump block
    107  bc26		       00 27	   HEX2H      EQU	$27
    108  bc26
    109  bc26		       00 28	   SAVEINDEX  EQU	$28	;Save index in input buffer
    110  bc26		       00 29	   LASTSTATE  EQU	$29	;Last input state
    111  bc26
    112  bc26		       02 00	   IN	      EQU	$0200	;Input buffer
    113  bc26				  -	      IFCONST	BLD4APPLE1
    114  bc26				  -FLIP       EQU	$C000	;Output flip-flop
    115  bc26				  -TAPEIN     EQU	$C081	;Tape input
    116  bc26				  -KBD	      EQU	$D010	;PIA.A keyboard input
    117  bc26				  -KBDCR      EQU	$D011	;PIA.A keyboard control register
    118  bc26					      ELSE
    119  bc26		       c0 20	   FLIP       EQU	$C020	;Output flip-flop
    120  bc26		       c0 60	   TAPEIN     EQU	$C060	;Tape input
    121  bc26		       c0 00	   KBD	      EQU	$C000	;keyboard input
    122  bc26		       c0 10	   KBDCR      EQU	$C010	;keybaord strobe clear
    123  bc26					      ENDIF
    124  bc26
    125  bc26							;-------------------------------------------------------------------------
    126  bc26							;  Constants
    127  bc26							;-------------------------------------------------------------------------
    128  bc26
    129  bc26		       00 8d	   CR	      EQU	$8D	;Carriage Return
    130  bc26		       00 9b	   ESC	      EQU	$9B	;ASCII ESC
    131  bc26		       00 e0	   CNTSTRT    EQU	$E0
    132  bc26
    133  bc26							;---------------------------------------------------------------------------
    134  bc26							; build in ACI Driver
    135  bc26							;---------------------------------------------------------------------------
    136  bc26				  -	      IFCONST	BLD4EMULROM
    137  bc26				  -	      ORG	$D000	; EMULATOR ROM image
    138  bc26					      ELSE
    139  bc26				  -	      IFCONST	BLD4RAM
    140  bc26				  -	      ORG	$6000	; build for memory
    141  bc26					      ELSE
    142  c100					      ORG	$C100	; real apple 1 or plug in ROM board for A2
    143  c100					      ENDIF
    144  c100					      ENDIF
    145  c100
    146  c100							;-------------------------------------------------------------------------
    147  c100							;
    148  c100							;  The WOZ Apple Cassette Interface for the Apple 1
    149  c100							;  Written by Steve Wozniak somewhere around 1976
    150  c100							;
    151  c100							;-------------------------------------------------------------------------
    152  c100				   WOZACI
    153  c100
    154  c100		       a9 aa		      LDA	#$aa	;Print the Tape prompt
    155  c102					      IFNCONST	BLD4APPLE1
    156  c102		       4c 00 d0 	      JMP	A2ACIDRIVER	;If not actual Apple 1, use A2 driver
    157  c105				  -	      ELSE
    158  c105				  -	      JSR	ECHO
    159  c105					      ENDIF
    160  c105		       a9 8d		      LDA	#CR	;And drop the cursor one line
    161  c107		       20 ef ff 	      JSR	ECHO
    162  c10a
    163  c10a		       a0 ff		      LDY	#-1	;Reset the input buffer index
    164  c10c		       c8	   ACINEXTCHAR INY
    165  c10d
    166  c10d
    167  c10d		       ad 10 c0    ACIWAITCHAR LDA	KBDCR	;Wait for key press
    168  c110		       10 fb		      BPL	ACIWAITCHAR	;No key yet!
    169  c112		       ad 00 c0 	      LDA	KBD	;Clear strobe
    170  c115		       99 00 02 	      STA	IN,Y	;Save it into buffer
    171  c118		       20 ef ff 	      JSR	ECHO	;And type it on the screen
    172  c11b		       c9 9b		      CMP	#ESC
    173  c11d		       f0 e1		      BEQ	WOZACI	;Start from scratch if ESC!
    174  c11f		       c9 8d		      CMP	#CR
    175  c121		       d0 e9		      BNE	ACINEXTCHAR	;Read keys until CR
    176  c123
    177  c123		       a2 ff		      LDX	#-1	;Initialize parse buffer pointer
    178  c125
    179  c125							;-------------------------------------------------------------------------
    180  c125							; Start parsing first or a new tape command
    181  c125							;-------------------------------------------------------------------------
    182  c125
    183  c125		       a9 00	   NEXTCMD    LDA	#0	;Clear begin and end values
    184  c127		       85 24		      STA	HEX1L
    185  c129		       85 25		      STA	HEX1H
    186  c12b		       85 26		      STA	HEX2L
    187  c12d		       85 27		      STA	HEX2H
    188  c12f
    189  c12f		       e8	   NEXTCHR    INX		;Increment input pointer
    190  c130		       bd 00 02 	      LDA	IN,X	;Get next char from input line
    191  c133		       c9 d2		      CMP	#$d2	;Read command?
    192  c135		       f0 56		      BEQ	READ	;Yes!
    193  c137		       c9 d7		      CMP	#$d7	;Write command?
    194  c139		       f0 35		      BEQ	WRITE	;Yes! (note: CY=1)
    195  c13b		       c9 ae		      CMP	#$ae	;Separator?
    196  c13d		       f0 27		      BEQ	SEP	;Yes!
    197  c13f		       c9 8d		      CMP	#CR	;End of line?
    198  c141		       f0 20		      BEQ	GOESC	;Escape to monitor! We're done
    199  c143		       c9 a0		      CMP	#$a0	;Ignore spaces
    200  c145		       f0 e8		      BEQ	NEXTCHR
    201  c147		       49 b0		      EOR	#$b0	;Map digits to 0-9
    202  c149		       c9 0a		      CMP	#9+1	;Is it a decimal digit?
    203  c14b		       90 06		      BCC	ACIDIG	;Yes!
    204  c14d		       69 88		      ADC	#$88	;Map letter "A"-"F" to $FA-$FF
    205  c14f		       c9 fa		      CMP	#$FA	;Hex letter?
    206  c151		       90 ad		      BCC	WOZACI	;No! Character not hex!
    207  c153
    208  c153		       0a	   ACIDIG     ASL		;Hex digit to MSD of A
    209  c154		       0a		      ASL
    210  c155		       0a		      ASL
    211  c156		       0a		      ASL
    212  c157
    213  c157		       a0 04		      LDY	#4	;Shift count
    214  c159		       0a	   ACIHEXSHIFT ASL		;Hex digit left, MSB to carry
    215  c15a		       26 24		      ROL	HEX1L	;Rotate into LSD
    216  c15c		       26 25		      ROL	HEX1H	;Rotate into MSD
    217  c15e		       88		      DEY		;Done 4 shifts?
    218  c15f		       d0 f8		      BNE	ACIHEXSHIFT	;No! Loop
    219  c161		       f0 cc		      BEQ	NEXTCHR	;Handle next character
    220  c163
    221  c163							;-------------------------------------------------------------------------
    222  c163							; Return to monitor, prints \ first
    223  c163							;-------------------------------------------------------------------------
    224  c163
    225  c163		       4c 1a ff    GOESC      JMP	ESCAPE	;Escape back to monitor
    226  c166
    227  c166							;-------------------------------------------------------------------------
    228  c166							; Separating . found. Copy HEX1 to Hex2. Doesn't clear HEX1!!!
    229  c166							;-------------------------------------------------------------------------
    230  c166
    231  c166		       a5 24	   SEP	      LDA	HEX1L	;Copy hex value 1 to hex value 2
    232  c168		       85 26		      STA	HEX2L
    233  c16a		       a5 25		      LDA	HEX1H
    234  c16c		       85 27		      STA	HEX2H
    235  c16e		       b0 bf		      BCS	NEXTCHR	;Always taken!
    236  c170
    237  c170							;-------------------------------------------------------------------------
    238  c170							; Write a block of memory to tape
    239  c170							;-------------------------------------------------------------------------
    240  c170
    241  c170				   WRITE
    242  c170		       a9 40		      LDA	#64	;Write 10 second header
    243  c172		       20 cc c1 	      JSR	WHEADER
    244  c175		       88	   WRNEXT     DEY		;Compensate timing for extra work
    245  c176		       a2 00		      LDX	#0	;Get next byte to write
    246  c178		       a1 26		      LDA	(HEX2L,X)
    247  c17a
    248  c17a		       a2 10		      LDX	#8*2	;Shift 8 bits (decremented twice)
    249  c17c		       0a	   WBITLOOP   ASL		;Shift MSB to carry
    250  c17d		       20 db c1 	      JSR	WRITEBIT	;Write this bit
    251  c180		       d0 fa		      BNE	WBITLOOP	;Do all 8 bits!
    252  c182
    253  c182		       20 f1 c1 	      JSR	INCADDR	;Increment address
    254  c185		       a0 1e		      LDY	#30	;Compensate timer for extra work
    255  c187		       90 ec		      BCC	WRNEXT	;Not done yet! Write next byte
    256  c189
    257  c189				   RESTIDX
    258  c189		       a6 28		      LDX	SAVEINDEX	;Restore index in input line
    259  c18b		       b0 98		      BCS	NEXTCMD	;Always taken!
    260  c18d
    261  c18d							;-------------------------------------------------------------------------
    262  c18d							; For case when ACI must fit in c100-c1ff - the read function must be moved
    263  c18d							; because the standard read doesn't fit with the extra mask instruction
    264  c18d							; required for the Apple II hardware
    265  c18d							;-------------------------------------------------------------------------
    266  c18d
    267  c18d				   READ
    268  c18d		       20 bc c1 	      JSR	FULLCYCLE	;Wait until full cycle is detected
    269  c190		       a9 16		      LDA	#22	;Introduce some delay to allow
    270  c192		       20 cc c1 	      JSR	WHEADER	; the tape speed to stabilize
    271  c195		       20 bc c1 	      JSR	FULLCYCLE	;Synchronize with full cycle
    272  c198				   NOTSTART
    273  c198		       a0 1f		      LDY	#31	;Try to detect the much shorter
    274  c19a		       20 bf c1 	      JSR	CMPLEVEL	;  start bit
    275  c19d		       b0 f9		      BCS	NOTSTART	;Start bit not detected yet!
    276  c19f		       20 bf c1 	      JSR	CMPLEVEL	;Wait for 2nd phase of start bit
    277  c1a2
    278  c1a2		       a0 3a		      LDY	#58	;Set threshold value in middle
    279  c1a4		       a2 08	   RDBYTE     LDX	#8	;Receiver 8 bits
    280  c1a6		       48	   RDBIT      PHA
    281  c1a7		       20 bc c1 	      JSR	FULLCYCLE	;Detect a full cycle
    282  c1aa		       68		      PLA
    283  c1ab		       2a		      ROL		;Roll new bit into result
    284  c1ac		       a0 39		      LDY	#57	;Set threshold value in middle
    285  c1ae		       ca		      DEX		;Decrement bit counter
    286  c1af		       d0 f5		      BNE	RDBIT	;Read next bit!
    287  c1b1		       81 26		      STA	(HEX2L,X)	;Save new byte
    288  c1b3
    289  c1b3		       20 f1 c1 	      JSR	INCADDR	;Increment address
    290  c1b6		       a0 35		      LDY	#53	;Compensate threshold with workload
    291  c1b8		       90 ea		      BCC	RDBYTE	;Do next byte if not done yet!
    292  c1ba		       b0 cd		      BCS	RESTIDX	;Always taken! Restore parse index
    293  c1bc
    294  c1bc		       20 bf c1    FULLCYCLE  JSR	CMPLEVEL	;Wait for two level changes
    295  c1bf		       88	   CMPLEVEL   DEY		;Decrement time counter
    296  c1c0		       ad 60 c0 	      LDA	TAPEIN	;Get Tape In data
    297  c1c3
    298  c1c3							;-------------------------------------------------------------------------
    299  c1c3							; the next instruction must be added for apple II
    300  c1c3							; since it doesn't fit in the 256 bytes allowed in the
    301  c1c3							; original PROM, a substitute A2 read function is called instead
    302  c1c3							; (READ_APPLE2_VERSION)which is located in a different bank
    303  c1c3							;
    304  c1c3							;		AND	#$80		;CLEAR floating bits
    305  c1c3							;-------------------------------------------------------------------------
    306  c1c3		       c5 29		      CMP	LASTSTATE	;Same as before?
    307  c1c5		       f0 f8		      BEQ	CMPLEVEL	;Yes!
    308  c1c7		       85 29		      STA	LASTSTATE	;Save new data
    309  c1c9
    310  c1c9		       c0 80		      CPY	#128	;Compare threshold
    311  c1cb		       60		      RTS
    312  c1cc							;-------------------------------------------------------------------------
    313  c1cc							; Write header to tape
    314  c1cc							;
    315  c1cc							; The header consists of an asymmetric cycle, starting with one phase of
    316  c1cc							; approximately (66+47)x5=565us, followed by a second phase of
    317  c1cc							; approximately (44+47)x5=455us.
    318  c1cc							; Total cycle duration is approximately 1020us ~ 1kHz. The actual
    319  c1cc							; frequencywill be a bit lower because of the additional workload between
    320  c1cc							; the twoloops.
    321  c1cc							; The header ends with a short phase of (30+47)x5=385us and a normal
    322  c1cc							; phase of (44+47)x5=455us. This start bit must be detected by the read
    323  c1cc							; routine to trigger the reading of the actual data.
    324  c1cc							;-------------------------------------------------------------------------
    325  c1cc
    326  c1cc		       86 28	   WHEADER    STX	SAVEINDEX	;Save index in input line
    327  c1ce		       a0 42	   HCOUNT     LDY	#66	;Extra long delay
    328  c1d0		       20 e0 c1 	      JSR	WDELAY	;CY is constantly 1, writing a 1
    329  c1d3		       d0 f9		      BNE	HCOUNT	;Do this 64 * 256 time!
    330  c1d5		       69 fe		      ADC	#-2	;Decrement A (CY=1 all the time)
    331  c1d7		       b0 f5		      BCS	HCOUNT	;Not all done!
    332  c1d9		       a0 1e		      LDY	#30	;Write a final short bit (start)
    333  c1db
    334  c1db							;-------------------------------------------------------------------------
    335  c1db							; Write a full bit cycle
    336  c1db							;
    337  c1db							; Upon entry Y contains a compensated value for the first phase of 0
    338  c1db							; bit length. All subsequent loops don't have to be time compensated.
    339  c1db							;-------------------------------------------------------------------------
    340  c1db
    341  c1db		       20 e0 c1    WRITEBIT   JSR	WDELAY	;Do two equal phases
    342  c1de		       a0 2c		      LDY	#44	;Load 250us counter - compensation
    343  c1e0
    344  c1e0		       88	   WDELAY     DEY		;Delay 250us (one phase of 2kHz)
    345  c1e1		       d0 fd		      BNE	WDELAY
    346  c1e3		       90 05		      BCC	WRITE1	;Write a '1' (2kHz)
    347  c1e5
    348  c1e5		       a0 2f		      LDY	#47	;Additional delay for '0' (1kHz)
    349  c1e7		       88	   WDELAY0    DEY		; (delay 250us)
    350  c1e8		       d0 fd		      BNE	WDELAY0
    351  c1ea
    352  c1ea				   WRITE1
    353  c1ea		       bc 20 c0 	      LDY	FLIP,X	;Flip the output bit
    354  c1ed		       a0 29		      LDY	#41	;Reload 250us cntr (compensation)
    355  c1ef		       ca		      DEX		;Decrement bit counter
    356  c1f0		       60		      RTS
    357  c1f1
    358  c1f1							;-------------------------------------------------------------------------
    359  c1f1							; Increment current address and compare with last address
    360  c1f1							;-------------------------------------------------------------------------
    361  c1f1		       a5 26	   INCADDR    LDA	HEX2L	;Compare current address with
    362  c1f3		       c5 24		      CMP	HEX1L	; end address
    363  c1f5		       a5 27		      LDA	HEX2H
    364  c1f7		       e5 25		      SBC	HEX1H
    365  c1f9		       e6 26		      INC	HEX2L	;And increment current address
    366  c1fb		       d0 02		      BNE	NOCARRY	;No carry to MSB!
    367  c1fd		       e6 27		      INC	HEX2H
    368  c1ff		       60	   NOCARRY    RTS
    369  c200
    370  c200
    371  c200							;---------------------------------------------------------------------------
    372  c200							; all the following code is needed for the A2 version
    373  c200							; skip to Basic for the real thing 
    374  c200							;---------------------------------------------------------------------------
    375  c200					      IFNCONST	BLD4APPLE1
    376  c200							;---------------------------------------------------------------------------
    377  c200							; build in an A2 ACI driver for ROM version
    378  c200							; if using an A2, the version at C100 jumps to this version
    379  c200							; and this version is at D000 (so slots 0 & 2-7 can be used)
    380  c200							;---------------------------------------------------------------------------
    381  c200					      IFNCONST	BLD4EMULROM
    382  c200					      IFNCONST	BLD4RAM
    383  d000					      ORG	$D000	; A2 ROM  or image
    384  d000					      ENDIF
    385  d000					      ENDIF
    386  d000
    387  d000							;-------------------------------------------------------------------------
    388  d000							;  ACI DRIVER
    389  d000							;-------------------------------------------------------------------------
    390  d000				   A2ACIDRIVER
    391  d000		       a9 aa		      LDA	#$aa	;Print the Tape prompt
    392  d002		       20 ef ff 	      JSR	ECHO
    393  d005		       a9 8d		      LDA	#CR	;And drop the cursor one line
    394  d007		       20 ef ff 	      JSR	ECHO
    395  d00a
    396  d00a		       a0 ff		      LDY	#-1	;Reset the input buffer index
    397  d00c				   RB_ACINEXTCHAR
    398  d00c		       c8		      INY
    399  d00d
    400  d00d		       20 4d d2 	      JSR	A2GETCHAR
    401  d010
    402  d010		       99 00 02 	      STA	IN,Y	;Save it into buffer
    403  d013		       20 ef ff 	      JSR	ECHO	;And type it on the screen
    404  d016		       c9 9b		      CMP	#ESC
    405  d018		       f0 e6		      BEQ	A2ACIDRIVER	;Start from scratch if ESC!
    406  d01a		       c9 8d		      CMP	#CR
    407  d01c		       d0 ee		      BNE	RB_ACINEXTCHAR	;Read keys until CR
    408  d01e
    409  d01e		       a2 ff		      LDX	#-1	;Initialize parse buffer pointer
    410  d020
    411  d020							;-------------------------------------------------------------------------
    412  d020							; Start parsing first or a new tape command
    413  d020							;-------------------------------------------------------------------------
    414  d020
    415  d020				   RB_NEXTCMD
    416  d020		       a9 00		      LDA	#0	;Clear begin and end values
    417  d022		       85 24		      STA	HEX1L
    418  d024		       85 25		      STA	HEX1H
    419  d026		       85 26		      STA	HEX2L
    420  d028		       85 27		      STA	HEX2H
    421  d02a
    422  d02a				   RB_NEXTCHR
    423  d02a		       e8		      INX		;Increment input pointer
    424  d02b		       bd 00 02 	      LDA	IN,X	;Get next char from input line
    425  d02e		       c9 d2		      CMP	#$d2	;Read command?
    426  d030		       f0 69		      BEQ	RB_READ	;Yes!
    427  d032		       c9 d7		      CMP	#$d7	;Write command?
    428  d034		       f0 35		      BEQ	RB_WRITE	;Yes! (note: CY=1)
    429  d036		       c9 ae		      CMP	#$ae	;Separator?
    430  d038		       f0 27		      BEQ	RB_SEP	;Yes!
    431  d03a		       c9 8d		      CMP	#CR	;End of line?
    432  d03c		       f0 20		      BEQ	RB_GOESC	;Escape to monitor! We're done
    433  d03e		       c9 a0		      CMP	#$a0	;Ignore spaces
    434  d040		       f0 e8		      BEQ	RB_NEXTCHR
    435  d042		       49 b0		      EOR	#$b0	;Map digits to 0-9
    436  d044		       c9 0a		      CMP	#9+1	;Is it a decimal digit?
    437  d046		       90 06		      BCC	RB_ACIDIG	;Yes!
    438  d048		       69 88		      ADC	#$88	;Map letter "A"-"F" to $FA-$FF
    439  d04a		       c9 fa		      CMP	#$FA	;Hex letter?
    440  d04c		       90 b2		      BCC	A2ACIDRIVER	;No! Character not hex!
    441  d04e
    442  d04e				   RB_ACIDIG
    443  d04e		       0a		      ASL		;Hex digit to MSD of A
    444  d04f		       0a		      ASL
    445  d050		       0a		      ASL
    446  d051		       0a		      ASL
    447  d052
    448  d052		       a0 04		      LDY	#4	;Shift count
    449  d054				   RB_ACIHEXSHIFT
    450  d054		       0a		      ASL		;Hex digit left, MSB to carry
    451  d055		       26 24		      ROL	HEX1L	;Rotate into LSD
    452  d057		       26 25		      ROL	HEX1H	;Rotate into MSD
    453  d059		       88		      DEY		;Done 4 shifts?
    454  d05a		       d0 f8		      BNE	RB_ACIHEXSHIFT	;No! Loop
    455  d05c		       f0 cc		      BEQ	RB_NEXTCHR	;Handle next character
    456  d05e
    457  d05e							;-------------------------------------------------------------------------
    458  d05e							; Return to monitor, prints \ first
    459  d05e							;-------------------------------------------------------------------------
    460  d05e
    461  d05e		       4c 1a ff    RB_GOESC   JMP	ESCAPE	;Escape back to monitor
    462  d061
    463  d061							;-------------------------------------------------------------------------
    464  d061							; Separating . found. Copy HEX1 to Hex2. Doesn't clear HEX1!!!
    465  d061							;-------------------------------------------------------------------------
    466  d061
    467  d061		       a5 24	   RB_SEP     LDA	HEX1L	;Copy hex value 1 to hex value 2
    468  d063		       85 26		      STA	HEX2L
    469  d065		       a5 25		      LDA	HEX1H
    470  d067		       85 27		      STA	HEX2H
    471  d069		       b0 bf		      BCS	RB_NEXTCHR	;Always taken!
    472  d06b
    473  d06b							;-------------------------------------------------------------------------
    474  d06b							; Write a block of memory to tape
    475  d06b							;-------------------------------------------------------------------------
    476  d06b
    477  d06b				   RB_WRITE
    478  d06b							;-------------------------------------------------------------------------
    479  d06b							; save write start addresses
    480  d06b							; so we can check for keyboard
    481  d06b							; or console write sequences
    482  d06b							; and dynamicly modify code to
    483  d06b							; use original A1 driver
    484  d06b							; and then revert later on
    485  d06b							;-------------------------------------------------------------------------
    486  d06b		       a5 26		      LDA	HEX2L
    487  d06d		       8d 11 bc 	      STA	RDSTRTL
    488  d070		       a5 27		      LDA	HEX2H
    489  d072		       8d 12 bc 	      STA	RDSTRTH
    490  d075		       86 28		      STX	SAVEINDEX	;Save index in input line
    491  d077		       20 ce d1 	      JSR	A2_WRITECONVERT	; convert I/O to A1 compatible format
    492  d07a							;-------------------------------------------------------------------------
    493  d07a							; now start write of this block
    494  d07a							;-------------------------------------------------------------------------
    495  d07a
    496  d07a		       a9 40		      LDA	#64	;Write 10 second header
    497  d07c		       20 d7 d0 	      JSR	RB_WHEADER
    498  d07f
    499  d07f		       88	   RB_WRNEXT  DEY		;Compensate timing for extra work
    500  d080		       a2 00		      LDX	#0	;Get next byte to write
    501  d082		       a1 26		      LDA	(HEX2L,X)
    502  d084
    503  d084		       a2 10		      LDX	#8*2	;Shift 8 bits (decremented twice)
    504  d086		       0a	   RB_WBITLOOP ASL		;Shift MSB to carry
    505  d087		       20 e4 d0 	      JSR	RB_WRITEBIT	;Write this bit
    506  d08a		       d0 fa		      BNE	RB_WBITLOOP	;Do all 8 bits!
    507  d08c
    508  d08c		       20 0c d1 	      JSR	A2_INCADDR	;Increment address
    509  d08f		       a0 1e		      LDY	#30	;Compensate timer for extra work
    510  d091		       90 ec		      BCC	RB_WRNEXT	;Not done yet! Write next byte
    511  d093
    512  d093				   RB_RESTIDX
    513  d093		       20 1b d1 	      JSR	A2_READCONVERT	; convert buffer to A2 I/O
    514  d096		       a6 28		      LDX	SAVEINDEX	;Restore index in input line
    515  d098		       4c 20 d0 	      JMP	RB_NEXTCMD	;Always taken!
    516  d09b
    517  d09b							;-------------------------------------------------------------------------
    518  d09b							; For case when ACI must fit in c100-c1ff - the read function must be moved
    519  d09b							; because the standard read doesn't fit with the extra mask instruction
    520  d09b							; required for the Apple II hardware
    521  d09b							;-------------------------------------------------------------------------
    522  d09b
    523  d09b				   RB_READ
    524  d09b							;-------------------------------------------------------------------------
    525  d09b							; save read start addresses
    526  d09b							; so we can check for keyboard
    527  d09b							; or console write sequences
    528  d09b							; and dynamicly modify code to
    529  d09b							; use A2 driver
    530  d09b							;-------------------------------------------------------------------------
    531  d09b		       a5 26		      LDA	HEX2L
    532  d09d		       8d 11 bc 	      STA	RDSTRTL
    533  d0a0		       a5 27		      LDA	HEX2H
    534  d0a2		       8d 12 bc 	      STA	RDSTRTH
    535  d0a5
    536  d0a5		       20 fa d0 	      JSR	A2_FULLCYCLE	;Wait until full cycle is detected
    537  d0a8		       86 28		      STX	SAVEINDEX	;Save index in input line
    538  d0aa		       a9 16		      LDA	#22	;Introduce some delay to allow
    539  d0ac		       20 d7 d0 	      JSR	RB_WHEADER	; the tape speed to stabilize
    540  d0af
    541  d0af							;-------------------------------------------------------------------------
    542  d0af							; 
    543  d0af							; This read function will optionally convert and A1 keyboard reads
    544  d0af							; to calls to use our driver to read from A2 hardware by scanning
    545  d0af							; read data looking for one of three code sequences
    546  d0af							;-------------------------------------------------------------------------
    547  d0af							;
    548  d0af							; Normal start
    549  d0af							;
    550  d0af		       20 fa d0 	      JSR	A2_FULLCYCLE	;Synchronize with full cycle
    551  d0b2		       a0 1c	   A2_NOTSTART LDY	#28	;Try to detect the much shorter
    552  d0b4		       20 fd d0 	      JSR	A2_CMPLEVEL	;  start bit
    553  d0b7		       b0 f9		      BCS	A2_NOTSTART	;Start bit not detected yet!
    554  d0b9		       20 fd d0 	      JSR	A2_CMPLEVEL	;Wait for 2nd phase of start bit
    555  d0bc
    556  d0bc		       a0 35		      LDY	#53	;Set threshold value in middle
    557  d0be		       a2 08	   A2_RDBYTE  LDX	#8	;Receiver 8 bits
    558  d0c0		       48	   A2_RDBIT   PHA
    559  d0c1		       20 fa d0 	      JSR	A2_FULLCYCLE	;Detect a full cycle
    560  d0c4		       68		      PLA
    561  d0c5		       2a		      ROL		;Roll new bit into result
    562  d0c6		       a0 34		      LDY	#52	;Set threshold value in middle
    563  d0c8		       ca		      DEX		;Decrement bit counter
    564  d0c9		       d0 f5		      BNE	A2_RDBIT	;Read next bit!
    565  d0cb		       81 26		      STA	(HEX2L,X)	;Save new byte
    566  d0cd
    567  d0cd		       20 0c d1 	      JSR	A2_INCADDR	;Increment address
    568  d0d0		       a0 2e		      LDY	#46	;Compensate threshold with workload
    569  d0d2		       90 ea		      BCC	A2_RDBYTE	;Do next byte if not done yet!
    570  d0d4
    571  d0d4		       4c 93 d0 	      JMP	RB_RESTIDX
    572  d0d7
    573  d0d7
    574  d0d7
    575  d0d7							;-------------------------------------------------------------------------
    576  d0d7							; Write header to tape
    577  d0d7							;
    578  d0d7							; The header consists of an asymmetric cycle, starting with one phase of
    579  d0d7							; approximately (66+47)x5=565us, followed by a second phase of
    580  d0d7							; approximately (44+47)x5=455us.
    581  d0d7							; Total cycle duration is approximately 1020us ~ 1kHz. The actual
    582  d0d7							; frequencywill be a bit lower because of the additional workload between
    583  d0d7							; the twoloops.
    584  d0d7							; The header ends with a short phase of (30+47)x5=385us and a normal
    585  d0d7							; phase of (44+47)x5=455us. This start bit must be detected by the read
    586  d0d7							; routine to trigger the reading of the actual data.
    587  d0d7							;-------------------------------------------------------------------------
    588  d0d7
    589  d0d7				   RB_WHEADER
    590  d0d7		       a0 48	   RB_HCOUNT  LDY	#72	;Extra long delay
    591  d0d9		       20 e9 d0 	      JSR	RB_WDELAY	;CY is constantly 1, writing a 1
    592  d0dc		       d0 f9		      BNE	RB_HCOUNT	;Do this 64 * 256 time!
    593  d0de		       69 fe		      ADC	#-2	;Decrement A (CY=1 all the time)
    594  d0e0		       b0 f5		      BCS	RB_HCOUNT	;Not all done!
    595  d0e2		       a0 20		      LDY	#32	;Write a final short bit (start)
    596  d0e4
    597  d0e4							;-------------------------------------------------------------------------
    598  d0e4							; Write a full bit cycle
    599  d0e4							;
    600  d0e4							; Upon entry Y contains a compensated value for the first phase of 0
    601  d0e4							; bit length. All subsequent loops don't have to be time compensated.
    602  d0e4							;-------------------------------------------------------------------------
    603  d0e4
    604  d0e4				   RB_WRITEBIT
    605  d0e4
    606  d0e4		       20 e9 d0 	      JSR	RB_WDELAY	;Do two equal phases
    607  d0e7		       a0 2f		      LDY	#47	;Load 250us counter - compensation
    608  d0e9
    609  d0e9		       88	   RB_WDELAY  DEY		;Delay 250us (one phase of 2kHz)
    610  d0ea		       d0 fd		      BNE	RB_WDELAY
    611  d0ec		       90 05		      BCC	RB_WRITE1	;Write a '1' (2kHz)
    612  d0ee
    613  d0ee		       a0 32		      LDY	#50	;Additional delay for '0' (1kHz)
    614  d0f0		       88	   RB_WDELAY0 DEY		; (delay 250us)
    615  d0f1		       d0 fd		      BNE	RB_WDELAY0
    616  d0f3
    617  d0f3				   RB_WRITE1
    618  d0f3
    619  d0f3		       ac 20 c0 	      LDY	FLIP	;Flip the output bit
    620  d0f6
    621  d0f6		       a0 2e		      LDY	#46	;Reload 250us cntr (compensation)
    622  d0f8		       ca		      DEX		;Decrement bit counter
    623  d0f9		       60		      RTS
    624  d0fa
    625  d0fa							;-------------------------------------------------------------------------
    626  d0fa							; Wait for FULL cycle (cmplevel- waits till level transisiton)
    627  d0fa							;-------------------------------------------------------------------------
    628  d0fa		       20 fd d0    A2_FULLCYCLE JSR	A2_CMPLEVEL	;Wait for two level changes
    629  d0fd		       88	   A2_CMPLEVEL DEY		;Decrement time counter
    630  d0fe		       ad 60 c0 	      LDA	TAPEIN	;Get Tape In data
    631  d101
    632  d101							; the next instruction must be added for apple II
    633  d101		       29 80		      AND	#$80	;CLEAR floating bits
    634  d103		       c5 29		      CMP	LASTSTATE	;Same as before?
    635  d105		       f0 f6		      BEQ	A2_CMPLEVEL	;Yes!
    636  d107		       85 29		      STA	LASTSTATE	;Save new data
    637  d109
    638  d109		       c0 80		      CPY	#128	;Compare threshold
    639  d10b		       60		      RTS
    640  d10c							;-------------------------------------------------------------------------
    641  d10c							; Increment current address and compare with last address
    642  d10c							;-------------------------------------------------------------------------
    643  d10c		       a5 26	   A2_INCADDR LDA	HEX2L	;Compare current address with
    644  d10e		       c5 24		      CMP	HEX1L	; end address
    645  d110		       a5 27		      LDA	HEX2H
    646  d112		       e5 25		      SBC	HEX1H
    647  d114		       e6 26		      INC	HEX2L	;And increment current address
    648  d116		       d0 02		      BNE	A2_NOCARRY	;No carry to MSB!
    649  d118		       e6 27		      INC	HEX2H
    650  d11a		       60	   A2_NOCARRY RTS
    651  d11b
    652  d11b							;-------------------------------------------------------------------------
    653  d11b							;  one block read
    654  d11b							;  modify A1 code that touches PIA to A2 version as it is loaded
    655  d11b							;  these are keyboard and display functions
    656  d11b							;
    657  d11b							;  APPLE 1 version
    658  d11b							;ACIWAITCHAR
    659  d11b							; ad 11 d0	LDA	 KBDCR	      ;Wait for key press
    660  d11b							; 30 FB	 BPL	 ACIWAITCHAR   ;No key yet!
    661  d11b							; ad 10 d0	 LDA	 KBD	       ;Clear strobe
    662  d11b							; converted to our version
    663  d11b							; 20 3a d1	JSR	A2GETCHAR
    664  d11b							; ea		NOP
    665  d11b							; ea		NOP
    666  d11b							; ea		NOP
    667  d11b							; ea		NOP
    668  d11b							; ea		NOP
    669  d11b							;
    670  d11b							;  instead if BPL is not present or has mismatching branch offset
    671  d11b							; ad 11 d0	LDA	KBDCR
    672  d11b							;  is converted to
    673  d11b							; ad 00 c0	LDA	KBD
    674  d11b							;
    675  d11b							;
    676  d11b							; 
    677  d11b							; ad 10 d0	LDA	KBD
    678  d11b							;  is converted to
    679  d11b							; 8d 10 c0	STA	KBDCR	;Clear strobe	
    680  d11b							;
    681  d11b							;  finally there are some cases where presence of character is
    682  d11b							;   determined with the bit command
    683  d11b							; 2c 11 d0	BIT	KBDCR
    684  d11b							;  is converted to
    685  d11b							; 2c 00 c00	 BIT	KBD
    686  d11b							;
    687  d11b							;
    688  d11b							;
    689  d11b							;-------------------------------------------------------------------------
    690  d11b
    691  d11b		       00 77	   CNVRTTERM  EQU	$77	; UNIQUE CHAR NEEDED TO TERMINATE CONVERSION STRINGS
    692  d11b
    693  d11b				   A2_READCONVERT
    694  d11b		       a9 00		      LDA	#0	; RDCONVERT can be turned off
    695  d11d		       cd 01 bc 	      CMP	RDCONVERT
    696  d120		       d0 4d		      BNE	A2_READCONVERTDONE	; not zero, then skip conversion
    697  d122		       a2 00		      LDX	#0
    698  d124		       a0 00		      LDY	#0
    699  d126							;
    700  d126							; check next string through all of memory
    701  d126							;
    702  d126
    703  d126				   A2_READCONVERT_1		; for this string, scan all of read memory
    704  d126		       8c 06 bc 	      STY	savey	;save compare string starting point
    705  d129
    706  d129		       b9 90 d1 	      LDA	CNVRT_IN,Y
    707  d12c		       c9 77		      CMP	#CNVRTTERM	; Termination character?
    708  d12e		       f0 3f		      BEQ	A2_READCONVERTDONE	;all done checking, exit
    709  d130
    710  d130		       ad 11 bc 	      LDA	RDSTRTL	; start of memory load
    711  d133		       85 26		      STA	HEX2L
    712  d135		       ad 12 bc 	      LDA	RDSTRTH
    713  d138		       85 27		      STA	HEX2H
    714  d13a
    715  d13a							;
    716  d13a							; restart currnet string
    717  d13a							;
    718  d13a				   A2_READCONVERT_8
    719  d13a		       a5 26		      LDA	HEX2L	;save memory starting point
    720  d13c		       8d 13 bc 	      STA	HEX2LB
    721  d13f		       a5 27		      LDA	HEX2H
    722  d141		       8d 14 bc 	      STA	HEX2HB
    723  d144		       ac 06 bc 	      LDY	savey
    724  d147
    725  d147				   A2_READCONVERT1
    726  d147		       a1 26		      LDA	(HEX2L),X	; fetch byte from memory
    727  d149		       d9 90 d1 	      CMP	CNVRT_IN,Y	; compare
    728  d14c		       f0 11		      BEQ	A2_READCONVERT1_2	; this byte does match, process
    729  d14e							;
    730  d14e							; mo match, restart match string
    731  d14e							;
    732  d14e		       20 0c d1 	      JSR	A2_INCADDR
    733  d151		       90 e7		      BCC	A2_READCONVERT_8	; not end of memory - restart scan for current string
    734  d153
    735  d153							;
    736  d153							; end of memory block - go to next string
    737  d153							;
    738  d153				   A2_READCONVERT1_3
    739  d153		       c8		      INY
    740  d154		       b9 90 d1 	      LDA	CNVRT_IN,Y
    741  d157		       c9 77		      CMP	#CNVRTTERM	; Termination character?
    742  d159		       d0 f8		      BNE	A2_READCONVERT1_3	; not end of block, keep looking
    743  d15b		       c8		      INY		; found end, move to start of next block
    744  d15c		       4c 26 d1 	      JMP	A2_READCONVERT_1	; rescan memory with next string
    745  d15f							;
    746  d15f							; match - keep going until mismatch or end of string
    747  d15f							;
    748  d15f				   A2_READCONVERT1_2
    749  d15f		       c8		      INY
    750  d160		       b9 90 d1 	      LDA	CNVRT_IN,Y
    751  d163		       c9 77		      CMP	#CNVRTTERM	; Termination character?
    752  d165		       f0 09		      BEQ	A2_READCONVERT3	; end of string - this is match do substitute
    753  d167		       20 0c d1 	      JSR	A2_INCADDR	; next memory address
    754  d16a		       90 db		      BCC	A2_READCONVERT1	; not done - keep scanning
    755  d16c
    756  d16c		       4c 53 d1 	      JMP	A2_READCONVERT1_3	; not a complete match - try next string
    757  d16f
    758  d16f							;-------------------------------------------------------------------------
    759  d16f							; Finished with READ
    760  d16f							;-------------------------------------------------------------------------
    761  d16f				   A2_READCONVERTDONE
    762  d16f		       60		      RTS
    763  d170
    764  d170							;-------------------------------------------------------------------------
    765  d170							; Substitute string here
    766  d170							;-------------------------------------------------------------------------
    767  d170
    768  d170				   A2_READCONVERT3		; match - substitute here
    769  d170		       ac 06 bc 	      LDY	savey
    770  d173
    771  d173		       ad 13 bc 	      LDA	HEX2LB	;restore memory starting point
    772  d176		       85 26		      STA	HEX2L
    773  d178		       ad 14 bc 	      LDA	HEX2HB
    774  d17b		       85 27		      STA	HEX2H
    775  d17d				   A2_READCONVERT4
    776  d17d		       b9 90 d1 	      LDA	CNVRT_IN,Y
    777  d180		       c9 77		      CMP	#CNVRTTERM	; Termination character?
    778  d182		       f0 b6		      BEQ	A2_READCONVERT_8	; done with sustibute, continue checking
    779  d184		       b9 af d1 	      LDA	CNVRT_OUT,Y
    780  d187		       c8		      INY
    781  d188		       81 26		      STA	(HEX2L),X
    782  d18a		       20 0c d1 	      JSR	A2_INCADDR
    783  d18d		       4c 7d d1 	      JMP	A2_READCONVERT4
    784  d190
    785  d190							;-------------------------------------------------------------------------
    786  d190							; conversion strings
    787  d190							;	IN(what we are looking for 
    788  d190							;	 OUT (what we change it to)
    789  d190							;-------------------------------------------------------------------------
    790  d190
    791  d190				   CNVRT_IN
    792  d190		       ad 11 d0    CI1	      LDA	$d011
    793  d193		       10 fb		      BPL	CI1
    794  d195		       ad 10 d0 	      LDA	$d010
    795  d198		       77		      DC.b	CNVRTTERM
    796  d199		       ad 11 d0 	      LDA	$d011
    797  d19c		       77		      DC.b	CNVRTTERM
    798  d19d		       ad 10 d0 	      LDA	$d010
    799  d1a0		       77		      DC.b	CNVRTTERM
    800  d1a1		       2c 11 d0 	      BIT	$d011
    801  d1a4		       77		      DC.b	CNVRTTERM
    802  d1a5				   CI2
    803  d1a5		       2c 12 d0 	      BIT	$D012
    804  d1a8		       30 fb		      BMI	CI2
    805  d1aa		       8d 12 d0 	      STA	$D012
    806  d1ad		       77		      DC.b	CNVRTTERM
    807  d1ae				  -	      IFCONST	BLD4RAM
    808  d1ae				  -	      JSR	$FFEF
    809  d1ae				  -	      DC.b	CNVRTTERM
    810  d1ae					      ENDIF
    811  d1ae		       77		      DC.b	CNVRTTERM
    812  d1af
    813  d1af				   CNVRT_OUT
    814  d1af		       20 4d d2 	      JSR	A2GETCHAR
    815  d1b2		       ea		      NOP
    816  d1b3		       ea		      NOP
    817  d1b4		       ea		      NOP
    818  d1b5		       ea		      NOP
    819  d1b6		       ea		      NOP
    820  d1b7		       77		      DC.b	CNVRTTERM
    821  d1b8		       ad 00 c0 	      LDA	KBD
    822  d1bb		       77		      DC.b	CNVRTTERM
    823  d1bc		       8d 10 c0 	      STA	KBDCR
    824  d1bf		       77		      DC.b	CNVRTTERM
    825  d1c0		       2c 00 c0 	      BIT	KBD
    826  d1c3		       77		      DC.b	CNVRTTERM
    827  d1c4		       20 ef ff 	      JSR	ECHO
    828  d1c7		       ea		      NOP
    829  d1c8		       ea		      NOP
    830  d1c9		       ea		      NOP
    831  d1ca		       ea		      NOP
    832  d1cb		       ea		      NOP
    833  d1cc		       77		      DC.b	CNVRTTERM
    834  d1cd				  -	      IFCONST	BLD4RAM
    835  d1cd				  -	      JSR	ECHO
    836  d1cd				  -	      DC.b	CNVRTTERM
    837  d1cd					      ENDIF
    838  d1cd		       77		      DC.b	CNVRTTERM
    839  d1ce
    840  d1ce
    841  d1ce							;-------------------------------------------------------------------------
    842  d1ce							;  one block write
    843  d1ce							;  undo read convert when writing to tape so tape
    844  d1ce							;  can be loaded and run on a real actual A1
    845  d1ce							;-------------------------------------------------------------------------
    846  d1ce				   A2_WRITECONVERT
    847  d1ce		       a9 00		      LDA	#0	; RDCONVERT can be turned off
    848  d1d0		       cd 01 bc 	      CMP	RDCONVERT
    849  d1d3		       d0 4d		      BNE	A2_WRITECONVERTDONE	; not zero, then skip conversion
    850  d1d5		       a2 00		      LDX	#0
    851  d1d7		       a0 00		      LDY	#0
    852  d1d9							;
    853  d1d9							; check next string through all of memory
    854  d1d9							;
    855  d1d9
    856  d1d9				   A2_WRITECONVERT_1		; for this string, scan all of read memory
    857  d1d9		       8c 06 bc 	      STY	savey	;save compare string starting point
    858  d1dc
    859  d1dc		       b9 af d1 	      LDA	CNVRT_OUT,Y
    860  d1df		       c9 77		      CMP	#CNVRTTERM	; Termination character?
    861  d1e1		       f0 3f		      BEQ	A2_WRITECONVERTDONE	;all done checking, exit
    862  d1e3
    863  d1e3		       ad 11 bc 	      LDA	RDSTRTL	; reset block address
    864  d1e6		       85 26		      STA	HEX2L
    865  d1e8		       ad 12 bc 	      LDA	RDSTRTH
    866  d1eb		       85 27		      STA	HEX2H
    867  d1ed
    868  d1ed							;
    869  d1ed							; restart currnet string
    870  d1ed							;
    871  d1ed				   A2_WRITECONVERT_8
    872  d1ed		       a5 26		      LDA	HEX2L	;save memory starting point
    873  d1ef		       8d 13 bc 	      STA	HEX2LB
    874  d1f2		       a5 27		      LDA	HEX2H
    875  d1f4		       8d 14 bc 	      STA	HEX2HB
    876  d1f7		       ac 06 bc 	      LDY	savey
    877  d1fa
    878  d1fa				   A2_WRITECONVERT1
    879  d1fa		       a1 26		      LDA	(HEX2L),X	; fetch byte from memory
    880  d1fc		       d9 af d1 	      CMP	CNVRT_OUT,Y	; compare
    881  d1ff		       f0 11		      BEQ	A2_WRITECONVERT1_2	; this byte does match, process
    882  d201							;
    883  d201							; mo match, restart match string
    884  d201							;
    885  d201		       20 0c d1 	      JSR	A2_INCADDR
    886  d204		       90 e7		      BCC	A2_WRITECONVERT_8	; not end of memory - restart scan for current string
    887  d206
    888  d206							;
    889  d206							; end of memory block - go to next string
    890  d206							;
    891  d206				   A2_WRITECONVERT1_3
    892  d206		       c8		      INY
    893  d207		       b9 af d1 	      LDA	CNVRT_OUT,Y
    894  d20a		       c9 77		      CMP	#CNVRTTERM	; Termination character?
    895  d20c		       d0 f8		      BNE	A2_WRITECONVERT1_3	; not end of block, keep looking
    896  d20e		       c8		      INY		; found end, move to start of next block
    897  d20f		       4c d9 d1 	      JMP	A2_WRITECONVERT_1	; rescan memory with next string
    898  d212							;
    899  d212							; match - keep going until mismatch or end of string
    900  d212							;
    901  d212				   A2_WRITECONVERT1_2
    902  d212		       c8		      INY
    903  d213		       b9 af d1 	      LDA	CNVRT_OUT,Y
    904  d216		       c9 77		      CMP	#CNVRTTERM	; Termination character?
    905  d218		       f0 13		      BEQ	A2_WRITECONVERT3	; end of string - this is match do substitute
    906  d21a		       20 0c d1 	      JSR	A2_INCADDR	; next memory address
    907  d21d		       90 db		      BCC	A2_WRITECONVERT1	; not done - keep scanning
    908  d21f
    909  d21f		       4c 06 d2 	      JMP	A2_WRITECONVERT1_3	; not a complete match - try next string
    910  d222
    911  d222							;-------------------------------------------------------------------------
    912  d222							; Finished with WRITE CONVERSION
    913  d222							;-------------------------------------------------------------------------
    914  d222				   A2_WRITECONVERTDONE
    915  d222		       ad 11 bc 	      LDA	RDSTRTL	; reset block address
    916  d225		       85 26		      STA	HEX2L
    917  d227		       ad 12 bc 	      LDA	RDSTRTH
    918  d22a		       85 27		      STA	HEX2H
    919  d22c
    920  d22c		       60		      RTS
    921  d22d							;-------------------------------------------------------------------------
    922  d22d							; Substitute string here
    923  d22d							;-------------------------------------------------------------------------
    924  d22d
    925  d22d				   A2_WRITECONVERT3		; match - substitute here
    926  d22d		       ac 06 bc 	      LDY	savey
    927  d230
    928  d230		       ad 13 bc 	      LDA	HEX2LB	;restore memory starting point
    929  d233		       85 26		      STA	HEX2L
    930  d235		       ad 14 bc 	      LDA	HEX2HB
    931  d238		       85 27		      STA	HEX2H
    932  d23a				   A2_WRITECONVERT4
    933  d23a		       b9 af d1 	      LDA	CNVRT_OUT,Y
    934  d23d		       c9 77		      CMP	#CNVRTTERM	; Termination character?
    935  d23f		       f0 ac		      BEQ	A2_WRITECONVERT_8	; done with sustibute, continue checking
    936  d241		       b9 90 d1 	      LDA	CNVRT_IN,Y
    937  d244		       c8		      INY
    938  d245		       81 26		      STA	(HEX2L),X
    939  d247		       20 0c d1 	      JSR	A2_INCADDR
    940  d24a		       4c 3a d2 	      JMP	A2_WRITECONVERT4
    941  d24d
    942  d24d							;-------------------------------------------------------------------------
    943  d24d							; output driver - uses hires memory
    944  d24d							;-------------------------------------------------------------------------
    945  d24d
    946  d24d				   A2GETCHAR
    947  d24d		       6c 02 bc 	      JMP	(READVECTOR)	;Allow user override of default get char function
    948  d250				   A2GETCHAR2
    949  d250		       20 af d2 	      JSR	TOGGLE
    950  d253		       ad 00 c0 	      LDA	KBD	;Wait for key press
    951  d256		       10 f5		      BPL	A2GETCHAR	;No key yet!
    952  d258		       8d 10 c0 	      STA	KBDCR	;Clear strobe
    953  d25b		       c9 88		      CMP	#$88	; left arrow
    954  d25d		       d0 02		      BNE	A2_GC_NOT_BS	; brnch no
    955  d25f		       a9 df		      LDA	#BS	; convert to _
    956  d261				   A2_GC_NOT_BS
    957  d261		       c9 95		      CMP	#$95	; right arrow
    958  d263		       d0 06		      BNE	A2_GC_RET	; no, exit
    959  d265		       20 11 d4 	      JSR	CLEAR	; yes, clear screen and
    960  d268
    961  d268		       4c 4d d2 	      JMP	A2GETCHAR	; get next char (this is a special HW emulation
    962  d26b							; function so skip call to READVECTOR)
    963  d26b				   A2_GC_RET
    964  d26b		       60		      RTS
    965  d26c
    966  d26c
    967  d26c							;-------------------------------------------------------------------------
    968  d26c							; output driver - uses hires memory
    969  d26c							;-------------------------------------------------------------------------
    970  d26c							;;; Magic Numbers
    971  d26c		       00 f0	   SCRINIT    EQU	$f0
    972  d26c		       00 f0	   PG0SAVEFLG EQU	$f0
    973  d26c							;;; Definitions
    974  d26c		       c0 54	   HRPG1      EQU	$C054
    975  d26c		       c0 55	   HRPG2      EQU	$C055
    976  d26c		       c0 56	   LORES      EQU	$C056
    977  d26c		       c0 57	   HIRES      EQU	$C057
    978  d26c		       c0 50	   TXTCLR     EQU	$C050
    979  d26c		       c0 51	   TXTMOD     EQU	$C051
    980  d26c		       c0 52	   MIXCLR     EQU	$C052
    981  d26c		       fd 0c	   GETCHAR    EQU	$FD0C
    982  d26c
    983  d26c							;;; Page Zero Temps (8 locations reserved)
    984  d26c		       00 00	   TRGLOW     EQU	$00
    985  d26c		       00 01	   TRGHIGH    EQU	$01
    986  d26c		       00 02	   SRCLOW     EQU	$02
    987  d26c		       00 03	   SRCHIGH    EQU	$03
    988  d26c		       00 05	   CNT2       EQU	$05
    989  d26c		       00 06	   CNT3       EQU	$06
    990  d26c
    991  d26c							; Last location of low res
    992  d26c		       07 f8	   LASTLOCATION EQU	$7F8
    993  d26c
    994  d26c							;;; Entry point for testing
    995  d26c		       20 83 d3    START      JSR	INIT
    996  d26f		       20 0c fd    L0	      JSR	GETCHAR
    997  d272		       20 47 d4 	      JSR	PUTCH
    998  d275		       4c 6f d2 	      JMP	L0
    999  d278		       00		      BRK
   1000  d279
   1001  d279							;;; Move the cursor
   1002  d279		       ee 0d bc    MVCSR      INC	CURCOL
   1003  d27c		       ad 0d bc 	      LDA	CURCOL
   1004  d27f		       c9 28		      CMP	#40
   1005  d281		       10 14		      BPL	NXTROW
   1006  d283				   MD
   1007  d283		       a9 00		      LDA	#0
   1008  d285		       cd 00 bc 	      CMP	TURBO
   1009  d288		       d0 0c		      BNE	MR
   1010  d28a
   1011  d28a		       a0 00		      LDY	#0
   1012  d28c		       a2 0c	   ML0	      LDX	#12	; speed fine tuning
   1013  d28e		       e8	   ML1	      INX
   1014  d28f		       d0 fd		      BNE	ML1
   1015  d291		       c8		      INY
   1016  d292		       c0 09		      CPY	#$9
   1017  d294		       d0 f6		      BNE	ML0
   1018  d296		       60	   MR	      RTS
   1019  d297				   NXTROW
   1020  d297		       a9 00		      LDA	#0
   1021  d299		       8d 0d bc 	      STA	CURCOL
   1022  d29c
   1023  d29c		       ad 0c bc 	      LDA	CURROW	; don't increment current row until in case
   1024  d29f							; we are already at bottom of screen 
   1025  d29f		       c9 17		      CMP	#23	; if a reset comes in, it could leave us on an illegal row
   1026  d2a1		       30 06		      BMI	NXTROW2
   1027  d2a3
   1028  d2a3		       20 14 d3 	      JSR	SCROLL	; scrolling bottom line, do not advance CURROW
   1029  d2a6		       4c 83 d2 	      JMP	MD
   1030  d2a9
   1031  d2a9				   NXTROW2
   1032  d2a9		       ee 0c bc 	      INC	CURROW	; not at bottom of screen advance to next row (CURROW)
   1033  d2ac		       4c 83 d2 	      JMP	MD
   1034  d2af
   1035  d2af							;;; Toggle the cursor
   1036  d2af				   TOGGLE
   1037  d2af
   1038  d2af		       ee 0e bc 	      INC	COUNTER0
   1039  d2b2		       d0 5f		      BNE	DT
   1040  d2b4		       ee 0f bc 	      INC	COUNTER1
   1041  d2b7		       d0 5a		      BNE	DT
   1042  d2b9		       48		      PHA
   1043  d2ba		       a9 e0		      LDA	#CNTSTRT
   1044  d2bc		       8d 0f bc 	      STA	COUNTER1
   1045  d2bf							;
   1046  d2bf							; if screen has not been cleared- toggle betweeen hi res pages
   1047  d2bf							;
   1048  d2bf		       ad 09 bc 	      LDA	SCRNCLRD
   1049  d2c2		       30 1b		      BMI	TOGGLE2
   1050  d2c4							;
   1051  d2c4							; toggle from hi-res to low-res
   1052  d2c4							;
   1053  d2c4		       ad 10 bc 	      LDA	CURSOR
   1054  d2c7		       d0 0b		      BNE	TOGGLE1
   1055  d2c9		       a9 20		      LDA	#32
   1056  d2cb		       8d 10 bc 	      STA	CURSOR
   1057  d2ce		       ad 54 c0 	      LDA	HRPG1
   1058  d2d1		       4c 12 d3 	      JMP	TOGGLE4
   1059  d2d4
   1060  d2d4				   TOGGLE1
   1061  d2d4		       a9 00		      LDA	#0
   1062  d2d6		       8d 10 bc 	      STA	CURSOR
   1063  d2d9		       ad 55 c0 	      LDA	HRPG2
   1064  d2dc		       4c 12 d3 	      JMP	TOGGLE4
   1065  d2df							;
   1066  d2df							; else toggle cursor
   1067  d2df							;
   1068  d2df				   TOGGLE2
   1069  d2df		       8e 07 bc 	      STX	savex
   1070  d2e2		       8c 06 bc 	      STY	savey
   1071  d2e5		       20 1a d5 	      JSR	SAVPG0
   1072  d2e8
   1073  d2e8		       ad 10 bc 	      LDA	CURSOR
   1074  d2eb		       d0 05		      BNE	SETSPC
   1075  d2ed		       a9 20		      LDA	#32
   1076  d2ef		       4c f4 d2 	      JMP	DRWCUR
   1077  d2f2		       a9 00	   SETSPC     LDA	#0
   1078  d2f4		       8d 10 bc    DRWCUR     STA	CURSOR
   1079  d2f7		       ae 0d bc 	      LDX	CURCOL
   1080  d2fa		       ac 0c bc 	      LDY	CURROW
   1081  d2fd		       20 ed d4 	      JSR	GETBLOK
   1082  d300		       ae 10 bc 	      LDX	CURSOR
   1083  d303		       20 ca d4 	      JSR	GETCHB
   1084  d306		       20 b3 d4 	      JSR	DRAWCH
   1085  d309		       20 3b d5 	      JSR	LODPG0
   1086  d30c		       ae 07 bc 	      LDX	savex
   1087  d30f		       ac 06 bc 	      LDY	savey
   1088  d312				   TOGGLE4
   1089  d312		       68		      PLA
   1090  d313		       60	   DT	      RTS
   1091  d314
   1092  d314							;;; Scrolls the screen at the end
   1093  d314				   SCROLL
   1094  d314							;------------------------------------------------------------------------------------------------------------
   1095  d314							;
   1096  d314							; HIRES is organized
   1097  d314							;	 into three blocks, offset by 0x28 bytes each, starting at 2000
   1098  d314							;		each block holds 8 lines of text, offset by 0x80 bytes
   1099  d314							;			each line of text is split into 8 rows of pixels offset by 0x400 bytes
   1100  d314							;
   1101  d314							; this function starts at second from top row copy all pixels to row above it and continues down the screen
   1102  d314							;
   1103  d314							;------------------------------------------------------------------------------------------------------------
   1104  d314							; first block -set up starting addresses
   1105  d314							;
   1106  d314		       a2 00		      ldx	#0	;index into graphics table - starts at zero
   1107  d316							; top loop - 24 lines of characters per page - copy bottom 23 lines (first line scrolls off top)
   1108  d316		       a9 17		      LDA	#23
   1109  d318		       85 05		      STA	CNT2
   1110  d31a
   1111  d31a							;
   1112  d31a							; next line of text
   1113  d31a							;
   1114  d31a				   scr1
   1115  d31a		       bd 5c d5 	      LDA	PG1ROWS,x	; target
   1116  d31d		       85 01		      STA	TRGHIGH
   1117  d31f		       e8		      inx
   1118  d320		       bd 5c d5 	      LDA	PG1ROWS,x	; target
   1119  d323		       85 00		      STA	TRGLOW
   1120  d325		       e8		      inx
   1121  d326		       bd 5c d5 	      LDA	PG1ROWS,x	; src
   1122  d329		       85 03		      STA	SRCHIGH
   1123  d32b		       e8		      inx
   1124  d32c		       bd 5c d5 	      LDA	PG1ROWS,x	; scr
   1125  d32f		       85 02		      STA	SRCLOW
   1126  d331		       ca		      DEX		;next pass target is current source
   1127  d332		       a9 08		      LDA	#8
   1128  d334		       85 06		      STA	CNT3
   1129  d336		       4c 47 d3 	      JMP	scr2.1
   1130  d339							;
   1131  d339							; adjust address to next line of pixels
   1132  d339							;
   1133  d339				   scr2
   1134  d339
   1135  d339		       a9 04		      LDA	#$4
   1136  d33b		       18		      CLC
   1137  d33c		       65 03		      ADC	SRCHIGH
   1138  d33e		       85 03		      STA	SRCHIGH
   1139  d340		       a9 04		      LDA	#$4
   1140  d342		       18		      CLC
   1141  d343		       65 01		      ADC	TRGHIGH
   1142  d345		       85 01		      STA	TRGHIGH
   1143  d347				   scr2.1
   1144  d347		       a0 27		      LDY	#39
   1145  d349							;copy 40 characters that make up a line of pixels
   1146  d349				   scr3
   1147  d349		       b1 02		      LDA	(SRCLOW),y
   1148  d34b		       91 00		      STA	(TRGLOW),y
   1149  d34d		       88		      DEY
   1150  d34e		       10 f9		      BPL	scr3	; repeat for 40 characters that make line of pixels
   1151  d350		       c6 06		      DEC	CNT3
   1152  d352		       d0 e5		      BNE	scr2	; done with this line of pixels =- goto to next liine of pixels
   1153  d354		       c6 05		      DEC	CNT2
   1154  d356		       d0 c2		      BNE	scr1	; done with this line of characters - goto next line of chars
   1155  d358
   1156  d358		       20 5c d3 	      JSR	CLEAR_LINE
   1157  d35b		       60		      RTS
   1158  d35c
   1159  d35c							;
   1160  d35c							; clear  line - X contains line #
   1161  d35c							;
   1162  d35c				   CLEAR_LINE
   1163  d35c		       bd 5c d5 	      LDA	PG1ROWS,x	; target (was last source)
   1164  d35f		       85 01		      STA	TRGHIGH
   1165  d361		       e8		      inx
   1166  d362		       bd 5c d5 	      LDA	PG1ROWS,x	; target
   1167  d365		       85 00		      STA	TRGLOW
   1168  d367
   1169  d367		       a9 08		      LDA	#8
   1170  d369		       85 06		      STA	CNT3
   1171  d36b		       4c 75 d3 	      JMP	CL4.1
   1172  d36e							;
   1173  d36e							; adjust address to next line of pixels
   1174  d36e							;
   1175  d36e				   CL4
   1176  d36e		       a9 04		      LDA	#$4
   1177  d370		       18		      CLC
   1178  d371		       65 01		      ADC	TRGHIGH
   1179  d373		       85 01		      STA	TRGHIGH
   1180  d375				   CL4.1
   1181  d375		       a0 27		      LDY	#39
   1182  d377		       a9 00		      lda	#$0
   1183  d379							;copy 40 characters that make up a line of pixels
   1184  d379				   CL5
   1185  d379		       91 00		      STA	(TRGLOW),y
   1186  d37b		       88		      DEY
   1187  d37c		       10 fb		      BPL	CL5	; repeat for 40 characters that make line of pixels
   1188  d37e		       c6 06		      DEC	CNT3
   1189  d380		       d0 ec		      BNE	CL4	; done with this line of pixels =- goto to next liine of pixels
   1190  d382		       60		      RTS
   1191  d383
   1192  d383
   1193  d383							;;; Initialize the graphics system, set cursor and clear the screen
   1194  d383				   INIT
   1195  d383							;
   1196  d383							; Initialize default keyboard in and video out routines
   1197  d383		       a9 4a		      LDA	#<PUTCH2	;first video out
   1198  d385		       8d 04 bc 	      STA	WRITVECTOR
   1199  d388		       a9 d4		      LDA	#>PUTCH2
   1200  d38a		       8d 05 bc 	      STA	WRITVECTOR+1
   1201  d38d
   1202  d38d		       a9 50		      LDA	#<A2GETCHAR2	;now keyboard in
   1203  d38f		       8d 02 bc 	      STA	READVECTOR
   1204  d392		       a9 d2		      LDA	#>A2GETCHAR2
   1205  d394		       8d 03 bc 	      STA	READVECTOR+1
   1206  d397
   1207  d397		       ad 00 bc 	      LDA	TURBO	;clear computer driven turbo mode
   1208  d39a		       29 01		      AND	#TURBOUSR	;but save user turbo mode
   1209  d39c		       8d 00 bc 	      STA	TURBO
   1210  d39f							;
   1211  d39f							; reset could have occurred during video driver operations
   1212  d39f							; attempt to restore page 0 if possible
   1213  d39f							; there is a case where we were in the process of saving
   1214  d39f							; or restoring page zero variables when reset occurred
   1215  d39f							; we cannot recover from that case
   1216  d39f							;
   1217  d39f		       20 3b d5 	      JSR	LODPG0	;restore page zero variables
   1218  d3a2							;
   1219  d3a2							; determine whether we should emulate power up screen
   1220  d3a2							;
   1221  d3a2		       a9 f0		      LDA	#SCRINIT
   1222  d3a4		       cd 08 bc 	      CMP	POWERUPINIT	;have we initialized power up screen
   1223  d3a7		       d0 12		      BNE	INITSCREEN	;no, let's do it	
   1224  d3a9		       cd 09 bc 	      CMP	SCRNCLRD	;has user cleared the screen?
   1225  d3ac		       d0 0c		      BNE	INITEXIT	;no, leave graphics mode alone	
   1226  d3ae
   1227  d3ae							;
   1228  d3ae							; clear screen already done - set HGR PG 2 mode
   1229  d3ae							;
   1230  d3ae		       8d 57 c0 	      STA	HIRES	; set high res pg 2 graphics mode
   1231  d3b1		       8d 55 c0 	      STA	HRPG2	; if this is power up, this will be changed below
   1232  d3b4		       8d 50 c0 	      STA	TXTCLR
   1233  d3b7		       8d 52 c0 	      STA	MIXCLR
   1234  d3ba				   INITEXIT
   1235  d3ba		       60		      RTS
   1236  d3bb							;
   1237  d3bb							; initialize lowres page 1 as startup screen
   1238  d3bb							;
   1239  d3bb
   1240  d3bb				   INITSCREEN
   1241  d3bb		       a9 04		      LDA	#$04	;START ADDRESS
   1242  d3bd		       85 27		      STA	HEX2H
   1243  d3bf		       a9 00		      LDA	#$0
   1244  d3c1		       85 26		      STA	HEX2L
   1245  d3c3
   1246  d3c3		       a9 0b		      LDA	#$0B	;END ADDRESS
   1247  d3c5		       85 25		      STA	HEX1H
   1248  d3c7		       a9 f8		      LDA	#$F8
   1249  d3c9		       85 24		      STA	HEX1L
   1250  d3cb
   1251  d3cb		       a0 00		      LDY	#0
   1252  d3cd
   1253  d3cd				   INIT1
   1254  d3cd		       a9 df		      LDA	#$DF	; underbar
   1255  d3cf		       91 26		      STA	(HEX2L),y
   1256  d3d1		       20 0c d1 	      JSR	A2_INCADDR
   1257  d3d4		       b0 13		      BCS	INIT2
   1258  d3d6		       a9 08		      LDA	#$08	; check address range <800 use at sign
   1259  d3d8		       24 27		      BIT	HEX2H	; >800 use space
   1260  d3da		       d0 04		      BNE	INIT1_1
   1261  d3dc		       a9 c0		      LDA	#$C0	; at sign
   1262  d3de		       30 02		      BMI	INIT1_2
   1263  d3e0				   INIT1_1
   1264  d3e0		       a9 a0		      LDA	#$A0	; space
   1265  d3e2				   INIT1_2
   1266  d3e2		       91 26		      STA	(HEX2L),y	; save it
   1267  d3e4		       20 0c d1 	      JSR	A2_INCADDR
   1268  d3e7		       90 e4		      BCC	INIT1
   1269  d3e9
   1270  d3e9				   INIT2
   1271  d3e9
   1272  d3e9		       a9 00		      LDA	#0
   1273  d3eb		       8d 09 bc 	      STA	SCRNCLRD	; now indicate that screen has been not cleared
   1274  d3ee		       8d 0c bc 	      STA	CURROW
   1275  d3f1		       8d 0d bc 	      STA	CURCOL
   1276  d3f4		       8d 00 bc 	      STA	TURBO	; default not turbo mode
   1277  d3f7		       8d 01 bc 	      STA	RDCONVERT	; default convert cassette reads
   1278  d3fa		       a9 e0		      LDA	#CNTSTRT
   1279  d3fc		       8d 0f bc 	      STA	COUNTER1
   1280  d3ff
   1281  d3ff		       8d 56 c0 	      STA	LORES	; set lowres pg 1 graphics mode for start up screen
   1282  d402		       8d 54 c0 	      STA	HRPG1	; use page 1
   1283  d405		       8d 51 c0 	      STA	TXTMOD
   1284  d408		       8d 52 c0 	      STA	MIXCLR
   1285  d40b
   1286  d40b		       a9 f0		      LDA	#SCRINIT
   1287  d40d		       8d 08 bc 	      STA	POWERUPINIT	; indicate power on init done
   1288  d410
   1289  d410		       60		      RTS
   1290  d411
   1291  d411							;;; Clears hires page 1
   1292  d411				   CLEAR
   1293  d411		       8c 06 bc 	      STY	savey
   1294  d414		       8e 07 bc 	      STX	savex
   1295  d417		       20 1a d5 	      JSR	SAVPG0
   1296  d41a
   1297  d41a		       a2 00		      LDX	#0
   1298  d41c
   1299  d41c				   CLEAR2
   1300  d41c		       20 5c d3 	      JSR	CLEAR_LINE
   1301  d41f		       e8		      INX
   1302  d420		       e0 30		      CPX	#48
   1303  d422		       d0 f8		      BNE	CLEAR2
   1304  d424							;; page cleared
   1305  d424
   1306  d424		       a9 f0		      LDA	#SCRINIT
   1307  d426		       8d 09 bc 	      STA	SCRNCLRD	;indicate screen cleared
   1308  d429
   1309  d429		       8d 57 c0 	      STA	HIRES	; set high res pg 2 graphics mode
   1310  d42c		       8d 55 c0 	      STA	HRPG2
   1311  d42f		       8d 50 c0 	      STA	TXTCLR
   1312  d432		       8d 52 c0 	      STA	MIXCLR
   1313  d435
   1314  d435		       a9 00		      LDA	#$00
   1315  d437							;
   1316  d437							; cursor to top left
   1317  d437							;
   1318  d437		       8d 0c bc 	      STA	CURROW
   1319  d43a		       8d 0d bc 	      STA	CURCOL
   1320  d43d
   1321  d43d		       20 3b d5 	      JSR	LODPG0
   1322  d440		       ac 06 bc 	      LDY	savey
   1323  d443		       ae 07 bc 	      LDX	savex
   1324  d446		       60		      RTS
   1325  d447
   1326  d447							;;; Prints character from A to the screen
   1327  d447				   PUTCH
   1328  d447		       6c 04 bc 	      JMP	(WRITVECTOR)	;allow user override of default video out routine
   1329  d44a				   PUTCH2
   1330  d44a		       48		      PHA
   1331  d44b		       8c 06 bc 	      STY	savey
   1332  d44e		       8e 07 bc 	      STX	savex
   1333  d451
   1334  d451		       ac 09 bc 	      LDY	SCRNCLRD
   1335  d454		       10 27		      BPL	PUTCH_DROP	;if plus, screen has not been cleared, so drop
   1336  d456
   1337  d456		       20 1a d5 	      JSR	SAVPG0
   1338  d459							;; drop the high bit
   1339  d459		       29 7f		      AND	#$7F
   1340  d45b							;; check for return
   1341  d45b		       c9 0d		      CMP	#$0D
   1342  d45d		       f0 26		      BEQ	ENTERKY
   1343  d45f							;; it's a regular key
   1344  d45f		       20 0d d5 	      JSR	GETCODE
   1345  d462		       8d 0a bc 	      STA	CHAR
   1346  d465							;; get the block address
   1347  d465		       ae 0d bc 	      LDX	CURCOL
   1348  d468		       ac 0c bc 	      LDY	CURROW
   1349  d46b		       20 ed d4 	      JSR	GETBLOK
   1350  d46e							;; get block bytes
   1351  d46e		       ae 0a bc 	      LDX	CHAR
   1352  d471		       20 ca d4 	      JSR	GETCHB
   1353  d474							;; render the char to the block
   1354  d474		       20 b3 d4 	      JSR	DRAWCH
   1355  d477							;; restore state and exit
   1356  d477		       20 79 d2    PD	      JSR	MVCSR
   1357  d47a		       20 3b d5 	      JSR	LODPG0
   1358  d47d
   1359  d47d				   PUTCH_DROP
   1360  d47d		       ac 06 bc 	      LDY	savey
   1361  d480		       ae 07 bc 	      LDX	savex
   1362  d483		       68		      PLA
   1363  d484		       60		      RTS
   1364  d485
   1365  d485				   ENTERKY		; print spaces until end of line (use turbo mode)
   1366  d485		       ad 00 bc 	      LDA	TURBO
   1367  d488		       09 02		      ORA	#TURBOCMP	; set computer turbo mode
   1368  d48a		       8d 00 bc 	      STA	TURBO	; turbo mode to clear end of line	
   1369  d48d				   ENTERKY1
   1370  d48d		       ac 0c bc 	      LDY	CURROW
   1371  d490		       ae 0d bc 	      LDX	CURCOL
   1372  d493		       e0 28		      CPX	#40
   1373  d495		       f0 11		      BEQ	ENTERKY_EXIT
   1374  d497		       20 ed d4 	      JSR	GETBLOK
   1375  d49a		       a2 00		      LDX	#0	; space key
   1376  d49c		       20 ca d4 	      JSR	GETCHB
   1377  d49f		       20 b3 d4 	      JSR	DRAWCH
   1378  d4a2		       ee 0d bc 	      INC	CURCOL
   1379  d4a5		       4c 8d d4 	      JMP	ENTERKY1
   1380  d4a8
   1381  d4a8				   ENTERKY_EXIT
   1382  d4a8		       ad 00 bc 	      LDA	TURBO
   1383  d4ab		       29 01		      AND	#TURBOUSR	; reset computer turbo mode, saving user mode
   1384  d4ad		       8d 00 bc 	      STA	TURBO	; 
   1385  d4b0		       4c 77 d4 	      JMP	PD
   1386  d4b3
   1387  d4b3							;;; Draws character to block
   1388  d4b3		       a2 00	   DRAWCH     LDX	#0
   1389  d4b5		       8a	   L6	      TXA
   1390  d4b6		       a8		      TAY
   1391  d4b7		       b1 02		      LDA	(SRCLOW),Y
   1392  d4b9		       a0 00		      LDY	#0
   1393  d4bb		       91 00		      STA	(TRGLOW),Y
   1394  d4bd		       e8		      INX
   1395  d4be		       a5 01		      LDA	TRGHIGH
   1396  d4c0		       18		      CLC
   1397  d4c1		       69 04		      ADC	#$4
   1398  d4c3		       85 01		      STA	TRGHIGH
   1399  d4c5		       e0 08		      CPX	#8
   1400  d4c7		       30 ec		      BMI	L6
   1401  d4c9		       60		      RTS
   1402  d4ca
   1403  d4ca							;;; Get byte for char in X
   1404  d4ca		       a0 8c	   GETCHB     LDY	#<SPCODE
   1405  d4cc		       84 02		      STY	SRCLOW
   1406  d4ce		       a0 d5		      LDY	#>SPCODE
   1407  d4d0		       84 03		      STY	SRCHIGH
   1408  d4d2		       e0 00	   L5	      CPX	#0
   1409  d4d4		       f0 16		      BEQ	D
   1410  d4d6		       ca		      DEX
   1411  d4d7		       a9 08		      LDA	#8
   1412  d4d9		       18		      CLC
   1413  d4da		       65 02		      ADC	SRCLOW
   1414  d4dc		       85 02		      STA	SRCLOW
   1415  d4de		       b0 03		      BCS	AC
   1416  d4e0		       4c d2 d4 	      JMP	L5
   1417  d4e3		       a9 00	   AC	      LDA	#0
   1418  d4e5		       65 03		      ADC	SRCHIGH
   1419  d4e7		       85 03		      STA	SRCHIGH
   1420  d4e9		       4c d2 d4 	      JMP	L5
   1421  d4ec		       60	   D	      RTS
   1422  d4ed
   1423  d4ed							;;; Gets the block address at X,Y
   1424  d4ed		       98	   GETBLOK    TYA
   1425  d4ee		       20 ff d4 	      JSR	GETROW
   1426  d4f1							;; add the column
   1427  d4f1		       8a		      TXA
   1428  d4f2		       18		      CLC
   1429  d4f3		       65 00		      ADC	TRGLOW
   1430  d4f5		       85 00		      STA	TRGLOW
   1431  d4f7		       b0 01		      BCS	A1
   1432  d4f9		       60		      RTS
   1433  d4fa		       a9 00	   A1	      LDA	#0
   1434  d4fc		       65 01		      ADC	TRGHIGH
   1435  d4fe		       60		      RTS
   1436  d4ff
   1437  d4ff							;;; Gets the row (A) address
   1438  d4ff		       0a	   GETROW     ASL		; multiply row by two, there are two bytes per address
   1439  d500		       a8		      TAY
   1440  d501		       b9 5c d5 	      LDA	PG1ROWS,Y
   1441  d504		       85 01		      STA	TRGHIGH
   1442  d506		       c8		      INY
   1443  d507		       b9 5c d5 	      LDA	PG1ROWS,Y
   1444  d50a		       85 00		      STA	TRGLOW
   1445  d50c		       60		      RTS
   1446  d50d
   1447  d50d							;;; Converts ASCII code to table index
   1448  d50d		       38	   GETCODE    SEC
   1449  d50e		       e9 20		      SBC	#$20
   1450  d510		       30 05		      BMI	NC
   1451  d512		       c9 40		      CMP	#$40
   1452  d514		       10 01		      BPL	NC
   1453  d516		       60		      RTS
   1454  d517		       a9 00	   NC	      LDA	#0
   1455  d519		       60		      RTS
   1456  d51a
   1457  d51a							;;; Store page zero data
   1458  d51a		       48	   SAVPG0     PHA
   1459  d51b		       8e 0b bc 	      STX	TMP1
   1460  d51e
   1461  d51e		       a9 f0		      LDA	#PG0SAVEFLG	;check saved flag
   1462  d520		       cd 25 bc 	      CMP	PG0SAVD
   1463  d523		       f0 11		      BEQ	SD	;already saved, just exit
   1464  d525
   1465  d525		       a2 00		      LDX	#0
   1466  d527		       b5 00	   L1	      LDA	$00,X
   1467  d529		       9d 15 bc 	      STA	TMPG0,X
   1468  d52c		       e8		      INX
   1469  d52d		       e0 08		      CPX	#$8
   1470  d52f		       d0 f6		      BNE	L1
   1471  d531
   1472  d531		       a9 f0		      LDA	#PG0SAVEFLG	;set save flag to saved after completely saved
   1473  d533		       8d 25 bc 	      STA	PG0SAVD	;this way, if a reset comes in before we are done
   1474  d536							;we will not corrupt zero page
   1475  d536							;as the reset code restores zero page if flag set
   1476  d536
   1477  d536		       ae 0b bc    SD	      LDX	TMP1
   1478  d539		       68		      PLA
   1479  d53a		       60		      RTS
   1480  d53b
   1481  d53b							;;; Restore page zero data
   1482  d53b				   LODPG0
   1483  d53b		       48		      PHA
   1484  d53c		       8e 0b bc 	      STX	TMP1
   1485  d53f
   1486  d53f		       a9 f0		      LDA	#PG0SAVEFLG	;checked saved flag
   1487  d541		       cd 25 bc 	      CMP	PG0SAVD
   1488  d544		       d0 11		      BNE	LD	;not saved, exit
   1489  d546
   1490  d546		       a2 00		      LDX	#0
   1491  d548		       bd 15 bc    L2	      LDA	TMPG0,X
   1492  d54b		       95 00		      STA	$00,X
   1493  d54d		       e8		      INX
   1494  d54e		       e0 08		      CPX	#$8
   1495  d550		       d0 f6		      BNE	L2
   1496  d552
   1497  d552		       a9 0f		      LDA	#<(~PG0SAVEFLG)	;clear saved flag to not saved after completely restored
   1498  d554							;this way, if a reset comes in before we are done
   1499  d554		       8d 25 bc 	      STA	PG0SAVD	;as the reset code restores zero page if flag set
   1500  d557
   1501  d557		       ae 0b bc    LD	      LDX	TMP1
   1502  d55a		       68		      PLA
   1503  d55b		       60		      RTS
   1504  d55c
   1505  d55c
   1506  d55c							;;; tables
   1507  d55c		       40 00 40 80*PG1ROWS    HEX	4000 4080 4100 4180 4200 4280 4300 4380 4028 40A8 4128 41A8 4228 42A8 4328 43A8 4050 40D0 4150 41D0 4250 42D0 4350 43D0
   1508  d58c		       00 00 00 00*SPCODE     HEX	00 00 00 00 00 00 00 00
   1509  d594		       00 08 08 08*EXPCODE    HEX	00 08 08 08 08 08 00 08
   1510  d59c		       00 14 14 14*QUOCODE    HEX	00 14 14 14 00 00 00 00
   1511  d5a4		       00 14 14 3e*NUMCODE    HEX	00 14 14 3e 14 3e 14 14
   1512  d5ac		       00 08 3c 0a*STRCODE    HEX	00 08 3c 0a 1c 28 1e 08
   1513  d5b4		       00 06 26 10*PERCODE    HEX	00 06 26 10 08 04 32 30
   1514  d5bc		       00 04 0a 0a*AMPCODE    HEX	00 04 0a 0a 04 2a 12 2c
   1515  d5c4		       00 08 08 08*SQCODE     HEX	00 08 08 08 00 00 00 00
   1516  d5cc		       00 08 04 02*RPCODE     HEX	00 08 04 02 02 02 04 08
   1517  d5d4		       00 08 10 20*LPCODE     HEX	00 08 10 20 20 20 10 08
   1518  d5dc		       00 08 2a 1c*STACODE    HEX	00 08 2a 1c 08 1c 2a 08
   1519  d5e4		       00 00 08 08*PLSCODE    HEX	00 00 08 08 3e 08 08 00
   1520  d5ec		       00 00 00 00*CMACODE    HEX	00 00 00 00 00 08 08 04
   1521  d5f4		       00 00 00 00*MINCODE    HEX	00 00 00 00 3e 00 00 00
   1522  d5fc		       00 00 00 00*DOTCODE    HEX	00 00 00 00 00 00 00 08
   1523  d604		       00 00 20 10*FSCODE     HEX	00 00 20 10 08 04 02 00
   1524  d60c		       00 1c 22 32*0CODE      HEX	00 1c 22 32 2a 26 22 1c
   1525  d614		       00 08 0c 08*1CODE      HEX	00 08 0c 08 08 08 08 1c
   1526  d61c		       00 1c 22 20*2CODE      HEX	00 1c 22 20 18 04 02 3e
   1527  d624		       00 3e 20 10*3CODE      HEX	00 3e 20 10 18 20 22 1c
   1528  d62c		       00 10 18 14*4CODE      HEX	00 10 18 14 12 3e 10 10
   1529  d634		       00 3e 02 1e*5CODE      HEX	00 3e 02 1e 20 20 22 1c
   1530  d63c		       00 38 04 02*6CODE      HEX	00 38 04 02 1e 22 22 1c
   1531  d644		       00 3e 20 10*7CODE      HEX	00 3e 20 10 08 04 04 04
   1532  d64c		       00 1c 22 22*8CODE      HEX	00 1c 22 22 1c 22 22 1c
   1533  d654		       00 1c 22 22*9CODE      HEX	00 1c 22 22 3c 20 10 0e
   1534  d65c		       00 00 00 08*COLCODE    HEX	00 00 00 08 00 08 00 00
   1535  d664		       00 00 00 08*SEMCODE    HEX	00 00 00 08 00 08 08 04
   1536  d66c		       00 10 08 04*LTCODE     HEX	00 10 08 04 02 04 08 10
   1537  d674		       00 00 00 3e*EQCODE     HEX	00 00 00 3e 00 3e 00 00
   1538  d67c		       00 04 08 10*GTCODE     HEX	00 04 08 10 20 10 08 04
   1539  d684		       00 1c 22 10*QESCODE    HEX	00 1c 22 10 08 08 00 08
   1540  d68c		       00 1c 22 2a*ATCODE     HEX	00 1C 22 2A 3A 1A 02 3C
   1541  d694		       00 08 14 22*ACODE      HEX	00 08 14 22 22 3e 22 22
   1542  d69c		       00 1e 22 22*BCODE      HEX	00 1e 22 22 1e 22 22 1e
   1543  d6a4		       00 1c 22 02*CCODE      HEX	00 1c 22 02 02 02 22 1c
   1544  d6ac		       00 1e 22 22*DCODE      HEX	00 1e 22 22 22 22 22 1e
   1545  d6b4		       00 3e 02 02*ECODE      HEX	00 3e 02 02 1e 02 02 3e
   1546  d6bc		       00 3e 02 02*FCODE      HEX	00 3e 02 02 1e 02 02 02
   1547  d6c4		       00 3c 02 02*GCODE      HEX	00 3c 02 02 02 32 22 3c
   1548  d6cc		       00 22 22 22*HCODE      HEX	00 22 22 22 3e 22 22 22
   1549  d6d4		       00 1c 08 08*ICODE      HEX	00 1c 08 08 08 08 08 1c
   1550  d6dc		       00 20 20 20*JCODE      HEX	00 20 20 20 20 20 22 1c
   1551  d6e4		       00 22 12 0a*KCODE      HEX	00 22 12 0a 06 0a 12 22
   1552  d6ec		       00 02 02 02*LCODE      HEX	00 02 02 02 02 02 02 3e
   1553  d6f4		       00 22 36 2a*MCODE      HEX	00 22 36 2a 2a 22 22 22
   1554  d6fc		       00 22 22 26*NCODE      HEX	00 22 22 26 2a 32 22 22
   1555  d704		       00 1c 22 22*OCODE      HEX	00 1c 22 22 22 22 22 1c
   1556  d70c		       00 1e 22 22*PCODE      HEX	00 1e 22 22 1e 02 02 02
   1557  d714		       00 1c 22 22*QCODE      HEX	00 1c 22 22 22 2a 12 2c
   1558  d71c		       00 1e 22 22*RCODE      HEX	00 1e 22 22 1e 0a 12 22
   1559  d724		       00 1c 22 02*SCODE      HEX	00 1c 22 02 1c 20 22 1c
   1560  d72c		       00 3e 08 08*TCODE      HEX	00 3e 08 08 08 08 08 08
   1561  d734		       00 22 22 22*UCODE      HEX	00 22 22 22 22 22 22 1c
   1562  d73c		       00 22 22 22*VCODE      HEX	00 22 22 22 22 22 14 08
   1563  d744		       00 22 22 22*WCODE      HEX	00 22 22 22 2a 2a 36 22
   1564  d74c		       00 22 22 14*XCODE      HEX	00 22 22 14 08 14 22 22
   1565  d754		       00 22 22 14*YCODE      HEX	00 22 22 14 08 08 08 08
   1566  d75c		       00 3e 20 10*ZCODE      HEX	00 3e 20 10 08 04 02 3e
   1567  d764		       00 3e 06 06*LBCODE     HEX	00 3e 06 06 06 06 06 3e
   1568  d76c		       00 00 02 04*BSCODE     HEX	00 00 02 04 08 10 20 00
   1569  d774		       00 3e 30 30*RBCODE     HEX	00 3e 30 30 30 30 30 3e
   1570  d77c		       00 00 00 08*CRTCODE    HEX	00 00 00 08 14 22 00 00
   1571  d784		       00 00 00 00*UNDCODE    HEX	00 00 00 00 00 00 00 3e
   1572  d78c
   1573  d78c
   1574  d78c
   1575  d78c							;------------------------------------------------------------------------
   1576  d78c							; BASIC SUPPORT FUNCTIONs
   1577  d78c							;	peek and poke of the PIA is emulated
   1578  d78c							;	using A2 hardware drivers
   1579  d78c							;------------------------------------------------------------------------
   1580  d78c							;------------------------------------------------------------------------
   1581  d78c							; POKE of D012 is emulated by calling
   1582  d78c							; A2 putchar routine
   1583  d78c							;------------------------------------------------------------------------
   1584  d78c		       00 ce	   ACC	      EQU	$ce	; must be same as basic "acc"
   1585  d78c				   A2POKE
   1586  d78c		       20 34 ee 	      JSR	getbyte
   1587  d78f		       a5 ce		      LDA	ACC
   1588  d791		       48		      PHA
   1589  d792		       20 15 e7 	      JSR	get16bit
   1590  d795		       a9 d0		      LDA	#$D0
   1591  d797		       c5 cf		      CMP	ACC+1
   1592  d799		       f0 04		      BEQ	A2POKE2
   1593  d79b				   A2POKE1
   1594  d79b		       68		      PLA
   1595  d79c		       91 ce		      STA	(ACC),Y
   1596  d79e		       60		      RTS
   1597  d79f				   A2POKE2
   1598  d79f		       a9 12		      LDA	#$12
   1599  d7a1		       c5 ce		      CMP	ACC
   1600  d7a3		       d0 f6		      BNE	A2POKE1
   1601  d7a5							;------------------------------------------------------------------------
   1602  d7a5							; Poke D012 == A2 ECHO CALL
   1603  d7a5							;------------------------------------------------------------------------
   1604  d7a5		       68		      PLA
   1605  d7a6		       4c ef ff 	      JMP	ECHO
   1606  d7a9
   1607  d7a9							;------------------------------------------------------------------------
   1608  d7a9							; PEEK of D012, D011 and D010 is emulated by using
   1609  d7a9							; equivalent A2 functionality
   1610  d7a9							;------------------------------------------------------------------------
   1611  d7a9
   1612  d7a9				   A2PEEK
   1613  d7a9		       20 15 e7 	      JSR	get16bit
   1614  d7ac		       a9 d0		      LDA	#$D0
   1615  d7ae		       c5 cf		      CMP	ACC+1
   1616  d7b0		       f0 07		      BEQ	A2PEEK3
   1617  d7b2				   A2PEEK1
   1618  d7b2		       b1 ce		      LDA	(ACC),Y
   1619  d7b4				   A2PEEK2
   1620  d7b4		       94 9f		      STY	syn_stk_l+31,X
   1621  d7b6		       4c 08 e7 	      JMP	push_ya_noun_stk
   1622  d7b9
   1623  d7b9							;------------------------------------------------------------------------
   1624  d7b9							; Peek D012 == determine if terminal is ready for output
   1625  d7b9							;  in the A2 memory mapped video driver case - the answer 
   1626  d7b9							;  is always yes -so return positive number(or zero in this case)
   1627  d7b9							;------------------------------------------------------------------------
   1628  d7b9				   A2PEEK3
   1629  d7b9		       a9 12		      LDA	#$12
   1630  d7bb		       c5 ce		      CMP	ACC
   1631  d7bd		       d0 05		      BNE	A2PEEK4
   1632  d7bf		       a9 00		      LDA	#$00
   1633  d7c1		       4c b4 d7 	      JMP	A2PEEK2
   1634  d7c4							;------------------------------------------------------------------------
   1635  d7c4							; Peek D011 == A2 read c000 (does keyboard have char, yes if MSB set)
   1636  d7c4							;------------------------------------------------------------------------
   1637  d7c4				   A2PEEK4
   1638  d7c4		       a9 11		      LDA	#$11
   1639  d7c6		       c5 ce		      CMP	ACC
   1640  d7c8		       d0 06		      BNE	A2PEEK5
   1641  d7ca		       ad 00 c0 	      LDA	KBD
   1642  d7cd		       4c b4 d7 	      JMP	A2PEEK2
   1643  d7d0							;------------------------------------------------------------------------
   1644  d7d0							; Peek D010 == A2 getchar (also clears strobe)
   1645  d7d0							;------------------------------------------------------------------------
   1646  d7d0				   A2PEEK5
   1647  d7d0		       a9 10		      LDA	#$10
   1648  d7d2		       c5 ce		      CMP	ACC
   1649  d7d4		       d0 dc		      BNE	A2PEEK1
   1650  d7d6		       ad 00 c0 	      LDA	KBD
   1651  d7d9		       8d 10 c0 	      STA	KBDCR
   1652  d7dc		       4c b4 d7 	      JMP	A2PEEK2
   1653  d7df
   1654  d7df				  -	      IFCONST	BLD4RAM
   1655  d7df				  -	      STORAGE
   1656  d7df					      ENDIF
   1657  d7df					      ENDIF		; end of A2 driver code
   1658  d7df							;------------------------------------------------------------------------
   1659  d7df							;  VERSION 
   1660  d7df							;------------------------------------------------------------------------
   1661  d7df				  -	      IFCONST	BLD4RAM
   1662  d7df				  -	      ORG	$6FFE
   1663  d7df					      ELSE
   1664  dffe					      ORG	$DFFE
   1665  dffe					      ENDIF
   1666  dffe		       05 01		      DC.w	$0105
   1667  e000
   1668  e000							;------------------------------------------------------------------------
   1669  e000							;  BASIC 
   1670  e000							;------------------------------------------------------------------------
------- FILE a1basic-universal.asm LEVEL 2 PASS 2
      0  e000					      INCLUDE	a1basic-universal.asm
      1  e000					      PROCESSOR	6502
      2  e000					      LIST	ON
      3  e000							;
      4  e000							;------------------------------------------------------------------------
      5  e000							;  Apple 1 Basic by Steve Wozniak
      6  e000							;
      7  e000							;  This source was derived from BASIC disassembly done by Eric Smith.
      8  e000							;  This derivation is reproduced and distributed with permission of
      9  e000							;  Eric Smith
     10  e000							; 
     11  e000							;  Eric Smith's disassembly can be found at
     12  e000							;  http://www.brouhaha.com/~eric/retrocomputing/apple/apple1/basic/
     13  e000							;  
     14  e000							;  Do not reproduce or distribute without permission
     15  e000							;
     16  e000							;	 copyright 2010, Mike Willegal
     17  e000							;	copyright 2003, Eric Smith
     18  e000							;
     19  e000							;------------------------------------------------------------------------
     20  e000							;  Disassembly of Apple 1 BASIC
     21  e000							; 17-Sep-2003
     22  e000							; Apple 1 BASIC was written by Steve Wozniak
     23  e000							; This disassembly is copyright 2003 Eric Smith <eric@brouhaha.com>
     24  e000							; http://www.brouhaha.com/~eric/retrocomputing/apple/apple1/basic/
     25  e000							;------------------------------------------------------------------------
     26  e000
     27  e000							;------------------------------------------------------------------------
     28  e000							;  build with 6502 assembler called DASM using the following command line
     29  e000							;
     30  e000							; Huston's version of	Basic (may be latest version available)
     31  e000							; http://www.apple1notes.com/Home/Programs.html 
     32  e000							;./dasm a1basic.asm -DHUSTNBASIC=0 -oa1hbas.o -la1hbas.lst
     33  e000							;
     34  e000							; Sander's version of	Basic (same as Eric Smith's original disassembly)
     35  e000							; http://www.apple1notes.com/Home/Programs.html
     36  e000							;./dasm a1basic.asm -DSNDERBASIC=0 -oa1sbas.o -la1sbas.lst
     37  e000							;
     38  e000							; Vince Briel's version of  Basic
     39  e000							; (can't find the link right now)
     40  e000							;./dasm a1basic.asm -DBRIELBASIC=0 -oa1bbas.o -la1bbas.lst
     41  e000							;
     42  e000							; Pagetable version of  Basic (only PIA address different from Briel's version)
     43  e000							;  http://www.pagetable.com/?p=32
     44  e000							;./dasm a1basic.asm -DPAGETBASIC=0 -oa1pbas.o -la1pbas.lst
     45  e000							;
     46  e000							;------------------------------------------------------------------------
     47  e000							;-------------------------------------------------------------------------
     48  e000							; Defines - this code can be built one of four ways
     49  e000							;	1. clone/real Apple 1 HW
     50  e000							;	2. runs in ram of real or virtual Apple 2
     51  e000							;	3. runs in virtual apple 2 as ROM
     52  e000							;	4. runs in plug in board of real Apple 2
     53  e000							;
     54  e000							;	select one of these three options
     55  e000							;-------------------------------------------------------------------------
     56  e000
     57  e000							;BLD4APPLE1		EQU	0	;ACTUAL APPLE 1 or CLONE
     58  e000							;BLD4RAM		EQU	0	;RAM of virtual or real A2
     59  e000							;BLD4EMULROM	EQU	0	;ROM of virtual A2
     60  e000							;BLD4ROMBD		EQU	0	;ROM board in Real A2
     61  e000
     62  e000
     63  e000							;------------------------------------------------------------------------
     64  e000							;  BASIC source taken from http://www.brouhaha.com
     65  e000							; IFCONST added to allow building Apple 1 basic version found
     66  e000							; on Vince Briels site
     67  e000							;------------------------------------------------------------------------
     68  e000							; up to four versions of Apple 1 Basic Known
     69  e000							; use defines to control which one we build
     70  e000							;SNDERBASIC		EQU	0		;from Wendell Sander's site (DEFAULT)
     71  e000							;SMITHBASIC		EQU	0		;original source from brouhaha.com
     72  e000							;BRIELBASIC		EQU	0		;version used in Replica 1
     73  e000							;HUSTNBASIC		EQU	0		;huston version from Wendell's site
     74  e000
     75  e000
     76  e000							;------------------------------------------------------------------------
     77  e000							;  Disassembly of Apple 1 BASIC
     78  e000							; 17-Sep-2003
     79  e000							; Apple 1 BASIC was written by Steve Wozniak
     80  e000							; This disassembly is copyright 2003 Eric Smith <eric@brouhaha.com>
     81  e000							; http://www.brouhaha.com/~eric/retrocomputing/apple/apple1/basic/
     82  e000							;------------------------------------------------------------------------
     83  e000
     84  e000		       00 00	   LOCZERO    EQU	$00
     85  e000		       00 1d	   Z1d	      EQU	$1d
     86  e000		       00 24	   ch	      EQU	$24
     87  e000		       00 25	   cv	      EQU	$25
     88  e000		       00 48	   zp48       EQU	$48
     89  e000		       00 49	   zp49       EQU	$49
     90  e000		       00 4a	   lomem      EQU	$4a
     91  e000		       00 4b	   zp4b       EQU	$4b
     92  e000		       00 4c	   himem      EQU	$4c
     93  e000		       00 4d	   zp4d       EQU	$4d
     94  e000		       00 4e	   rnd	      EQU	$4e
     95  e000		       00 50	   noun_stk_l EQU	$50
     96  e000		       00 58	   syn_stk_h  EQU	$58
     97  e000		       00 60	   zp60       EQU	$60
     98  e000		       00 78	   noun_stk_h_str EQU	$78
     99  e000		       00 80	   syn_stk_l  EQU	$80
    100  e000		       00 85	   zp85       EQU	$85
    101  e000		       00 a0	   noun_stk_h_int EQU	$a0
    102  e000		       00 a8	   txtndxstk  EQU	$a8
    103  e000		       00 c8	   text_index EQU	$c8
    104  e000		       00 c9	   leadbl     EQU	$c9
    105  e000		       00 ca	   pp	      EQU	$ca
    106  e000		       00 cb	   zpcb       EQU	$cb
    107  e000		       00 cc	   pv	      EQU	$cc
    108  e000		       00 ce	   acc	      EQU	$ce
    109  e000		       00 cf	   zpcf       EQU	$cf
    110  e000		       00 d0	   srch       EQU	$d0
    111  e000		       00 d1	   tokndxstk  EQU	$d1
    112  e000		       00 d2	   srch2      EQU	$d2
    113  e000		       00 d4	   if_flag    EQU	$d4
    114  e000		       00 d5	   cr_flag    EQU	$d5
    115  e000		       00 d6	   current_verb EQU	$d6
    116  e000		       00 d7	   precedence EQU	$d7
    117  e000		       00 d8	   x_save     EQU	$d8
    118  e000		       00 d9	   run_flag   EQU	$d9
    119  e000		       00 da	   aux	      EQU	$da
    120  e000		       00 dc	   pline      EQU	$dc
    121  e000		       00 e0	   pverb      EQU	$e0
    122  e000		       00 e2	   p1	      EQU	$e2
    123  e000		       00 e4	   p2	      EQU	$e4
    124  e000		       00 e6	   p3	      EQU	$e6
    125  e000		       00 f1	   token_index EQU	$f1
    126  e000		       00 f2	   pcon       EQU	$f2
    127  e000		       00 f4	   auto_inc   EQU	$f4
    128  e000		       00 f6	   auto_ln    EQU	$f6
    129  e000		       00 f8	   auto_flag  EQU	$f8
    130  e000		       00 f9	   char       EQU	$f9
    131  e000		       00 fa	   leadzr     EQU	$fa
    132  e000		       00 fb	   for_nest_count EQU	$fb
    133  e000		       00 fc	   gosub_nest_count EQU	$fc
    134  e000		       00 fd	   synstkdx   EQU	$fd
    135  e000		       00 fe	   synpag     EQU	$fe
    136  e000		       01 00	   gstk_pverbl EQU	$0100
    137  e000		       01 08	   gstk_pverbh EQU	$0108
    138  e000		       01 10	   gstk_plinel EQU	$0110
    139  e000		       01 18	   gstk_plineh EQU	$0118
    140  e000		       01 20	   fstk_varl  EQU	$0120
    141  e000		       01 28	   fstk_varh  EQU	$0128
    142  e000		       01 30	   fstk_stepl EQU	$0130
    143  e000		       01 38	   fstk_steph EQU	$0138
    144  e000		       01 40	   fstk_plinel EQU	$0140
    145  e000		       01 48	   fstk_plineh EQU	$0148
    146  e000		       01 50	   fstk_pverbl EQU	$0150
    147  e000		       01 58	   fstk_pverbh EQU	$0158
    148  e000		       01 60	   fstk_tol   EQU	$0160
    149  e000		       01 68	   fstk_toh   EQU	$0168
    150  e000		       02 00	   buffer     EQU	$0200
    151  e000
    152  e000				  -	      IFCONST	BLD4APPLE1
    153  e000				  -	      IFCONST	SMITHBASIC
    154  e000				  -DSP	      EQU	$D0F2	;DISPLAY port in PIA
    155  e000				  -KBDCR      EQU	$D0F1	;Keyboard control port
    156  e000				  -KBD	      EQU	$D0F0	;KEYBOARD data port
    157  e000				  -	      ENDIF
    158  e000				  -	      IFCONST	BRIELBASIC
    159  e000				  -DSP	      EQU	$D012	;DISPLAY port in PIA
    160  e000				  -KBDCR      EQU	$D011	;Keyboard control port (WS BASIC)
    161  e000				  -KBD	      EQU	$D010	;KEYBOARD data port
    162  e000				  -	      ENDIF
    163  e000				  -	      IFCONST	SNDERBASIC
    164  e000				  -DSP	      EQU	$D0F2	;DISPLAY port in PIA
    165  e000				  -KBDCR      EQU	$D011	;Keyboard control port (WS BASIC)
    166  e000				  -KBD	      EQU	$D010	;KEYBOARD data port
    167  e000				  -	      ENDIF
    168  e000				  -	      IFCONST	HUSTNBASIC
    169  e000				  -DSP	      EQU	$D0F2	;DISPLAY port in PIA
    170  e000				  -KBDCR      EQU	$D011	;Keyboard control port (WS BASIC)
    171  e000				  -KBD	      EQU	$D010	;KEYBOARD data port
    172  e000				  -	      ENDIF
    173  e000				  -
    174  e000					      ENDIF
    175  e000				  -	      IFCONST	BLD4RAM
    176  e000				  -	      ORG	$7000
    177  e000					      ELSE
    178  e000					      ORG	$E000
    179  e000					      ENDIF
    180  e000
    181  e000		       4c b0 e2    Pe000      JMP	cold
    182  e003
    183  e003				   rdkey
    184  e003				  -	      IFCONST	BLD4APPLE1
    185  e003				  -	      LDA	KBDCR	;Wait for key press
    186  e003				  -	      BPL	rdkey	;No key yet!
    187  e003				  -	      LDA	KBD	;Clear strobe
    188  e003					      ELSE
    189  e003		       20 4d d2 	      JSR	A2GETCHAR
    190  e006		       ea		      NOP
    191  e007		       ea		      NOP
    192  e008		       ea		      NOP
    193  e009		       ea		      NOP
    194  e00a		       ea		      NOP
    195  e00b					      ENDIF
    196  e00b		       60		      RTS
    197  e00c
    198  e00c		       8a	   Se00c      TXA
    199  e00d		       29 20		      AND	#$20	; 32  
    200  e00f		       f0 23		      BEQ	Le034
    201  e011
    202  e011		       a9 a0	   Se011      LDA	#$a0	; 160	
    203  e013		       85 e4		      STA	p2
    204  e015		       4c c9 e3 	      JMP	cout
    205  e018
    206  e018		       a9 20	   Se018      LDA	#$20	; 32  
    207  e01a
    208  e01a		       c5 24	   Se01a      CMP	ch
    209  e01c		       b0 0c		      BCS	nextbyte
    210  e01e		       a9 8d		      LDA	#$8d	; 141 .
    211  e020		       a0 07		      LDY	#$07	; 7 .
    212  e022		       20 c9 e3    Le022      JSR	cout
    213  e025		       a9 a0		      LDA	#$a0	; 160	
    214  e027		       88		      DEY
    215  e028		       d0 f8		      BNE	Le022
    216  e02a
    217  e02a		       a0 00	   nextbyte   LDY	#$00	; 0 .
    218  e02c		       b1 e2		      LDA	(p1),Y
    219  e02e		       e6 e2		      INC	p1
    220  e030		       d0 02		      BNE	Le034
    221  e032		       e6 e3		      INC	p1+1
    222  e034		       60	   Le034      RTS
    223  e035
    224  e035		       20 15 e7    list_comman JSR	get16bit
    225  e038		       20 76 e5 	      JSR	find_line2
    226  e03b		       a5 e2	   Le03b      LDA	p1
    227  e03d		       c5 e6		      CMP	p3
    228  e03f		       a5 e3		      LDA	p1+1
    229  e041		       e5 e7		      SBC	p3+1
    230  e043		       b0 ef		      BCS	Le034
    231  e045		       20 6d e0 	      JSR	list_line
    232  e048		       4c 3b e0 	      JMP	Le03b
    233  e04b
    234  e04b		       a5 ca	   list_all   LDA	pp
    235  e04d		       85 e2		      STA	p1
    236  e04f		       a5 cb		      LDA	pp+1
    237  e051		       85 e3		      STA	p1+1
    238  e053		       a5 4c		      LDA	himem
    239  e055		       85 e6		      STA	p3
    240  e057		       a5 4d		      LDA	himem+1
    241  e059		       85 e7		      STA	p3+1
    242  e05b		       d0 de		      BNE	Le03b
    243  e05d
    244  e05d		       20 15 e7    list_cmd   JSR	get16bit
    245  e060		       20 6d e5 	      JSR	find_line
    246  e063		       a5 e4		      LDA	p2
    247  e065		       85 e2		      STA	p1
    248  e067		       a5 e5		      LDA	p2+1
    249  e069		       85 e3		      STA	p1+1
    250  e06b		       b0 c7		      BCS	Le034
    251  e06d
    252  e06d		       86 d8	   list_line  STX	x_save
    253  e06f		       a9 a0		      LDA	#$a0	; 160	
    254  e071		       85 fa		      STA	leadzr
    255  e073		       20 2a e0 	      JSR	nextbyte
    256  e076		       98		      TYA
    257  e077		       85 e4	   list_int   STA	p2
    258  e079		       20 2a e0 	      JSR	nextbyte
    259  e07c		       aa		      TAX
    260  e07d		       20 2a e0 	      JSR	nextbyte
    261  e080		       20 1b e5 	      JSR	prdec
    262  e083		       20 18 e0    Le083      JSR	Se018
    263  e086		       84 fa		      STY	leadzr
    264  e088		       aa		      TAX
    265  e089		       10 18		      BPL	list_token
    266  e08b		       0a		      ASL
    267  e08c		       10 e9		      BPL	list_int
    268  e08e		       a5 e4		      LDA	p2
    269  e090		       d0 03		      BNE	Le095
    270  e092		       20 11 e0 	      JSR	Se011
    271  e095		       8a	   Le095      TXA
    272  e096		       20 c9 e3    Le096      JSR	cout
    273  e099		       a9 25	   Le099      LDA	#$25	; 37 %
    274  e09b		       20 1a e0 	      JSR	Se01a
    275  e09e		       aa		      TAX
    276  e09f		       30 f5		      BMI	Le096
    277  e0a1		       85 e4		      STA	p2
    278  e0a3		       c9 01	   list_token CMP	#$01	; 1 .
    279  e0a5		       d0 05		      BNE	Le0ac
    280  e0a7		       a6 d8		      LDX	x_save
    281  e0a9		       4c cd e3 	      JMP	crout
    282  e0ac		       48	   Le0ac      PHA
    283  e0ad		       84 ce		      STY	acc
    284  e0af		       a2 ed		      LDX	#[syntabl2>>8]	; $ED, when from ROM, $AD from RAM
    285  e0b1		       86 cf		      STX	acc+1
    286  e0b3		       c9 51		      CMP	#$51	; 81 Q
    287  e0b5		       90 04		      BCC	Le0bb
    288  e0b7		       c6 cf		      DEC	acc+1
    289  e0b9		       e9 50		      SBC	#$50	; 80 P
    290  e0bb		       48	   Le0bb      PHA
    291  e0bc		       b1 ce		      LDA	(acc),Y
    292  e0be		       aa	   Le0be      TAX
    293  e0bf		       88		      DEY
    294  e0c0		       b1 ce		      LDA	(acc),Y
    295  e0c2		       10 fa		      BPL	Le0be
    296  e0c4		       e0 c0		      CPX	#$c0	; 192 @
    297  e0c6		       b0 04		      BCS	Le0cc
    298  e0c8		       e0 00		      CPX	#$00	; 0 .
    299  e0ca		       30 f2		      BMI	Le0be
    300  e0cc		       aa	   Le0cc      TAX
    301  e0cd		       68		      PLA
    302  e0ce		       e9 01		      SBC	#$01	; 1 .
    303  e0d0		       d0 e9		      BNE	Le0bb
    304  e0d2		       24 e4		      BIT	p2
    305  e0d4		       30 03		      BMI	Le0d9
    306  e0d6		       20 f8 ef 	      JSR	Seff8
    307  e0d9		       b1 ce	   Le0d9      LDA	(acc),Y
    308  e0db		       10 10		      BPL	Le0ed
    309  e0dd		       aa		      TAX
    310  e0de		       29 3f		      AND	#$3f	; 63 ?
    311  e0e0		       85 e4		      STA	p2
    312  e0e2		       18		      CLC
    313  e0e3		       69 a0		      ADC	#$a0	; 160	
    314  e0e5		       20 c9 e3 	      JSR	cout
    315  e0e8		       88		      DEY
    316  e0e9		       e0 c0		      CPX	#$c0	; 192 @
    317  e0eb		       90 ec		      BCC	Le0d9
    318  e0ed		       20 0c e0    Le0ed      JSR	Se00c
    319  e0f0		       68		      PLA
    320  e0f1		       c9 5d		      CMP	#$5d	; 93 ]
    321  e0f3		       f0 a4		      BEQ	Le099
    322  e0f5		       c9 28		      CMP	#$28	; 40 (
    323  e0f7		       d0 8a		      BNE	Le083
    324  e0f9		       f0 9e		      BEQ	Le099
    325  e0fb
    326  e0fb		       20 18 e1    paren_substr JSR	Se118
    327  e0fe		       95 50		      STA	noun_stk_l,X
    328  e100		       d5 78		      CMP	noun_stk_h_str,X
    329  e102		       90 11	   Le102      BCC	Le115
    330  e104		       a0 2b	   string_err LDY	#$2b	; 43 +
    331  e106		       4c e0 e3    go_errmess_1 JMP	print_err_msg
    332  e109
    333  e109		       20 34 ee    comma_substr JSR	getbyte
    334  e10c		       d5 50		      CMP	noun_stk_l,X
    335  e10e		       90 f4		      BCC	string_err
    336  e110		       20 e4 ef 	      JSR	Sefe4
    337  e113		       95 78		      STA	noun_stk_h_str,X
    338  e115		       4c 23 e8    Le115      JMP	left_paren
    339  e118
    340  e118		       20 34 ee    Se118      JSR	getbyte
    341  e11b		       f0 e7		      BEQ	string_err
    342  e11d		       38		      SEC
    343  e11e		       e9 01		      SBC	#$01	; 1 .
    344  e120		       60		      RTS
    345  e121
    346  e121		       20 18 e1    str_arr_dest JSR	Se118
    347  e124		       95 50		      STA	noun_stk_l,X
    348  e126		       18		      CLC
    349  e127		       f5 78		      SBC	noun_stk_h_str,X
    350  e129		       4c 02 e1 	      JMP	Le102
    351  e12c		       a0 14	   Le12c      LDY	#$14	; 20 .
    352  e12e		       d0 d6		      BNE	go_errmess_1
    353  e130
    354  e130		       20 18 e1    dim_str    JSR	Se118
    355  e133		       e8		      INX
    356  e134		       b5 50	   Le134      LDA	noun_stk_l,X
    357  e136		       85 da		      STA	aux
    358  e138		       65 ce		      ADC	acc
    359  e13a		       48		      PHA
    360  e13b		       a8		      TAY
    361  e13c		       b5 78		      LDA	noun_stk_h_str,X
    362  e13e		       85 db		      STA	aux+1
    363  e140		       65 cf		      ADC	acc+1
    364  e142		       48		      PHA
    365  e143		       c4 ca		      CPY	pp
    366  e145		       e5 cb		      SBC	pp+1
    367  e147		       b0 e3		      BCS	Le12c
    368  e149		       a5 da		      LDA	aux
    369  e14b		       69 fe		      ADC	#$fe	; 254 ~
    370  e14d		       85 da		      STA	aux
    371  e14f		       a9 ff		      LDA	#$ff	; 255 .
    372  e151		       a8		      TAY
    373  e152		       65 db		      ADC	aux+1
    374  e154		       85 db		      STA	aux+1
    375  e156		       c8	   Le156      INY
    376  e157		       b1 da		      LDA	(aux),Y
    377  e159		       d9 cc 00 	      CMP	pv,Y
    378  e15c		       d0 0f		      BNE	Le16d
    379  e15e		       98		      TYA
    380  e15f		       f0 f5		      BEQ	Le156
    381  e161		       68	   Le161      PLA
    382  e162		       91 da		      STA	(aux),Y
    383  e164		       99 cc 00 	      STA	pv,Y
    384  e167		       88		      DEY
    385  e168		       10 f7		      BPL	Le161
    386  e16a		       e8		      INX
    387  e16b		       60		      RTS
    388  e16c		       ea		      NOP		; "j"
    389  e16d		       a0 80	   Le16d      LDY	#$80	; 128 .
    390  e16f		       d0 95	   Le16f      BNE	go_errmess_1
    391  e171
    392  e171		       a9 00	   input_str  LDA	#$00	; 0 .
    393  e173		       20 0a e7 	      JSR	push_a_noun_stk
    394  e176		       a0 02		      LDY	#$02	; 2 .
    395  e178		       94 78		      STY	noun_stk_h_str,X
    396  e17a		       20 0a e7 	      JSR	push_a_noun_stk
    397  e17d		       a9 bf		      LDA	#$bf	; 191 ?
    398  e17f		       20 c9 e3 	      JSR	cout
    399  e182		       a0 00		      LDY	#$00	; 0 .
    400  e184		       20 9e e2 	      JSR	read_line
    401  e187		       94 78		      STY	noun_stk_h_str,X
    402  e189		       ea		      NOP
    403  e18a		       ea		      NOP
    404  e18b		       ea		      NOP
    405  e18c
    406  e18c		       b5 51	   string_lit LDA	noun_stk_l+1,X
    407  e18e		       85 ce		      STA	acc
    408  e190		       b5 79		      LDA	noun_stk_h_str+1,X
    409  e192		       85 cf		      STA	acc+1
    410  e194		       e8		      INX
    411  e195		       e8		      INX
    412  e196		       20 bc e1 	      JSR	Se1bc
    413  e199		       b5 4e	   Le199      LDA	rnd,X
    414  e19b		       d5 76		      CMP	syn_stk_h+30,X
    415  e19d		       b0 15		      BCS	Le1b4
    416  e19f		       f6 4e		      INC	rnd,X
    417  e1a1		       a8		      TAY
    418  e1a2		       b1 ce		      LDA	(acc),Y
    419  e1a4		       b4 50		      LDY	noun_stk_l,X
    420  e1a6		       c4 e4		      CPY	p2
    421  e1a8		       90 04		      BCC	Le1ae
    422  e1aa		       a0 83		      LDY	#$83	; 131 .
    423  e1ac		       d0 c1		      BNE	Le16f
    424  e1ae		       91 da	   Le1ae      STA	(aux),Y
    425  e1b0		       f6 50		      INC	noun_stk_l,X
    426  e1b2		       90 e5		      BCC	Le199
    427  e1b4		       b4 50	   Le1b4      LDY	noun_stk_l,X
    428  e1b6		       8a		      TXA
    429  e1b7		       91 da		      STA	(aux),Y
    430  e1b9		       e8		      INX
    431  e1ba		       e8		      INX
    432  e1bb		       60		      RTS
    433  e1bc
    434  e1bc		       b5 51	   Se1bc      LDA	noun_stk_l+1,X
    435  e1be		       85 da		      STA	aux
    436  e1c0		       38		      SEC
    437  e1c1		       e9 02		      SBC	#$02	; 2 .
    438  e1c3		       85 e4		      STA	p2
    439  e1c5		       b5 79		      LDA	noun_stk_h_str+1,X
    440  e1c7		       85 db		      STA	aux+1
    441  e1c9		       e9 00		      SBC	#$00	; 0 .
    442  e1cb		       85 e5		      STA	p2+1
    443  e1cd		       a0 00		      LDY	#$00	; 0 .
    444  e1cf		       b1 e4		      LDA	(p2),Y
    445  e1d1		       18		      CLC
    446  e1d2		       e5 da		      SBC	aux
    447  e1d4		       85 e4		      STA	p2
    448  e1d6		       60		      RTS
    449  e1d7
    450  e1d7		       b5 53	   string_eq  LDA	noun_stk_l+3,X
    451  e1d9		       85 ce		      STA	acc
    452  e1db		       b5 7b		      LDA	noun_stk_h_str+3,X
    453  e1dd		       85 cf		      STA	acc+1
    454  e1df		       b5 51		      LDA	noun_stk_l+1,X
    455  e1e1		       85 da		      STA	aux
    456  e1e3		       b5 79		      LDA	noun_stk_h_str+1,X
    457  e1e5		       85 db		      STA	aux+1
    458  e1e7		       e8		      INX
    459  e1e8		       e8		      INX
    460  e1e9		       e8		      INX
    461  e1ea		       a0 00		      LDY	#$00	; 0 .
    462  e1ec		       94 78		      STY	noun_stk_h_str,X
    463  e1ee		       94 a0		      STY	noun_stk_h_int,X
    464  e1f0		       c8		      INY
    465  e1f1		       94 50		      STY	noun_stk_l,X
    466  e1f3		       b5 4d	   Le1f3      LDA	himem+1,X
    467  e1f5		       d5 75		      CMP	syn_stk_h+29,X
    468  e1f7		       08		      PHP
    469  e1f8		       48		      PHA
    470  e1f9		       b5 4f		      LDA	rnd+1,X
    471  e1fb		       d5 77		      CMP	syn_stk_h+31,X
    472  e1fd		       90 07		      BCC	Le206
    473  e1ff		       68		      PLA
    474  e200		       28		      PLP
    475  e201		       b0 02		      BCS	Le205
    476  e203		       56 50	   Le203      LSR	noun_stk_l,X
    477  e205		       60	   Le205      RTS
    478  e206		       a8	   Le206      TAY
    479  e207		       b1 ce		      LDA	(acc),Y
    480  e209		       85 e4		      STA	p2
    481  e20b		       68		      PLA
    482  e20c		       a8		      TAY
    483  e20d		       28		      PLP
    484  e20e		       b0 f3		      BCS	Le203
    485  e210		       b1 da		      LDA	(aux),Y
    486  e212		       c5 e4		      CMP	p2
    487  e214		       d0 ed		      BNE	Le203
    488  e216		       f6 4f		      INC	rnd+1,X
    489  e218		       f6 4d		      INC	himem+1,X
    490  e21a		       b0 d7		      BCS	Le1f3
    491  e21c
    492  e21c		       20 d7 e1    string_neq JSR	string_eq
    493  e21f		       4c 36 e7 	      JMP	not_op
    494  e222
    495  e222		       20 54 e2    mult_op    JSR	Se254
    496  e225		       06 ce	   Le225      ASL	acc
    497  e227		       26 cf		      ROL	acc+1
    498  e229		       90 0d		      BCC	Le238
    499  e22b		       18		      CLC
    500  e22c		       a5 e6		      LDA	p3
    501  e22e		       65 da		      ADC	aux
    502  e230		       85 e6		      STA	p3
    503  e232		       a5 e7		      LDA	p3+1
    504  e234		       65 db		      ADC	aux+1
    505  e236		       85 e7		      STA	p3+1
    506  e238		       88	   Le238      DEY
    507  e239		       f0 09		      BEQ	Le244
    508  e23b		       06 e6		      ASL	p3
    509  e23d		       26 e7		      ROL	p3+1
    510  e23f		       10 e4		      BPL	Le225
    511  e241		       4c 7e e7 	      JMP	Le77e
    512  e244		       a5 e6	   Le244      LDA	p3
    513  e246		       20 08 e7 	      JSR	push_ya_noun_stk
    514  e249		       a5 e7		      LDA	p3+1
    515  e24b		       95 a0		      STA	noun_stk_h_int,X
    516  e24d		       06 e5		      ASL	p2+1
    517  e24f		       90 28		      BCC	Le279
    518  e251		       4c 6f e7 	      JMP	negate
    519  e254
    520  e254		       a9 55	   Se254      LDA	#$55	; 85 U
    521  e256		       85 e5		      STA	p2+1
    522  e258		       20 5b e2 	      JSR	Se25b
    523  e25b
    524  e25b		       a5 ce	   Se25b      LDA	acc
    525  e25d		       85 da		      STA	aux
    526  e25f		       a5 cf		      LDA	acc+1
    527  e261		       85 db		      STA	aux+1
    528  e263		       20 15 e7 	      JSR	get16bit
    529  e266		       84 e6		      STY	p3
    530  e268		       84 e7		      STY	p3+1
    531  e26a		       a5 cf		      LDA	acc+1
    532  e26c		       10 09		      BPL	Le277
    533  e26e		       ca		      DEX
    534  e26f		       06 e5		      ASL	p2+1
    535  e271		       20 6f e7 	      JSR	negate
    536  e274		       20 15 e7 	      JSR	get16bit
    537  e277		       a0 10	   Le277      LDY	#$10	; 16 .
    538  e279		       60	   Le279      RTS
    539  e27a
    540  e27a		       20 6c ee    mod_op     JSR	See6c
    541  e27d		       f0 c5		      BEQ	Le244
    542  e27f		       ff		      DC.B	$ff	; "."
    543  e280		       c9 84	   Le280      CMP	#$84	; 132 .
    544  e282		       d0 02		      BNE	Le286
    545  e284		       46 f8		      LSR	auto_flag
    546  e286		       c9 df	   Le286      CMP	#$df	; 223 _
    547  e288		       f0 11		      BEQ	Le29b
    548  e28a		       c9 9b		      CMP	#$9b	; 155 .
    549  e28c		       f0 06		      BEQ	Le294
    550  e28e		       99 00 02 	      STA	buffer,Y
    551  e291		       c8		      INY
    552  e292		       10 0a		      BPL	read_line
    553  e294		       a0 8b	   Le294      LDY	#$8b	; 139 .
    554  e296		       20 c4 e3 	      JSR	Se3c4
    555  e299
    556  e299		       a0 01	   Se299      LDY	#$01	; 1 .
    557  e29b		       88	   Le29b      DEY
    558  e29c		       30 f6		      BMI	Le294
    559  e29e
    560  e29e		       20 03 e0    read_line  JSR	rdkey
    561  e2a1		       ea		      NOP
    562  e2a2		       ea		      NOP
    563  e2a3		       20 c9 e3 	      JSR	cout
    564  e2a6		       c9 8d		      CMP	#$8d	; 141 .
    565  e2a8		       d0 d6		      BNE	Le280
    566  e2aa		       a9 df		      LDA	#$df	; 223 _
    567  e2ac		       99 00 02 	      STA	buffer,Y
    568  e2af		       60		      RTS
    569  e2b0		       20 d3 ef    cold       JSR	mem_init_4k
    570  e2b3		       20 cd e3    warm       JSR	crout
    571  e2b6		       46 d9	   Le2b6      LSR	run_flag
    572  e2b8		       a9 be		      LDA	#$be	; 190 >
    573  e2ba		       20 c9 e3 	      JSR	cout
    574  e2bd		       a0 00		      LDY	#$00	; 0 .
    575  e2bf		       84 fa		      STY	leadzr
    576  e2c1		       24 f8		      BIT	auto_flag
    577  e2c3		       10 0c		      BPL	Le2d1
    578  e2c5		       a6 f6		      LDX	auto_ln
    579  e2c7		       a5 f7		      LDA	auto_ln+1
    580  e2c9		       20 1b e5 	      JSR	prdec
    581  e2cc		       a9 a0		      LDA	#$a0	; 160	
    582  e2ce		       20 c9 e3 	      JSR	cout
    583  e2d1		       a2 ff	   Le2d1      LDX	#$ff	; 255 .
    584  e2d3		       9a		      TXS
    585  e2d4		       20 9e e2 	      JSR	read_line
    586  e2d7		       84 f1		      STY	token_index
    587  e2d9		       8a		      TXA
    588  e2da		       85 c8		      STA	text_index
    589  e2dc		       a2 20		      LDX	#$20	; 32  
    590  e2de		       20 91 e4 	      JSR	Se491
    591  e2e1		       a5 c8		      LDA	text_index
    592  e2e3		       69 00		      ADC	#$00	; 0 .
    593  e2e5		       85 e0		      STA	pverb
    594  e2e7		       a9 00		      LDA	#$00	; 0 .
    595  e2e9		       aa		      TAX
    596  e2ea		       69 02		      ADC	#$02	; 2 .
    597  e2ec		       85 e1		      STA	pverb+1
    598  e2ee		       a1 e0		      LDA	(pverb,X)
    599  e2f0		       29 f0		      AND	#$f0	; 240 p
    600  e2f2		       c9 b0		      CMP	#$b0	; 176 0
    601  e2f4		       f0 03		      BEQ	Le2f9
    602  e2f6		       4c 83 e8 	      JMP	Le883
    603  e2f9		       a0 02	   Le2f9      LDY	#$02	; 2 .
    604  e2fb		       b1 e0	   Le2fb      LDA	(pverb),Y
    605  e2fd		       99 cd 00 	      STA	pv+1,Y
    606  e300		       88		      DEY
    607  e301		       d0 f8		      BNE	Le2fb
    608  e303		       20 8a e3 	      JSR	Se38a
    609  e306		       a5 f1		      LDA	token_index
    610  e308		       e5 c8		      SBC	text_index
    611  e30a		       c9 04		      CMP	#$04	; 4 .
    612  e30c		       f0 a8		      BEQ	Le2b6
    613  e30e		       91 e0		      STA	(pverb),Y
    614  e310		       a5 ca		      LDA	pp
    615  e312		       f1 e0		      SBC	(pverb),Y
    616  e314		       85 e4		      STA	p2
    617  e316		       a5 cb		      LDA	pp+1
    618  e318		       e9 00		      SBC	#$00	; 0 .
    619  e31a		       85 e5		      STA	p2+1
    620  e31c		       a5 e4		      LDA	p2
    621  e31e		       c5 cc		      CMP	pv
    622  e320		       a5 e5		      LDA	p2+1
    623  e322		       e5 cd		      SBC	pv+1
    624  e324		       90 45		      BCC	Le36b
    625  e326		       a5 ca	   Le326      LDA	pp
    626  e328		       f1 e0		      SBC	(pverb),Y
    627  e32a		       85 e6		      STA	p3
    628  e32c		       a5 cb		      LDA	pp+1
    629  e32e		       e9 00		      SBC	#$00	; 0 .
    630  e330		       85 e7		      STA	p3+1
    631  e332		       b1 ca		      LDA	(pp),Y
    632  e334		       91 e6		      STA	(p3),Y
    633  e336		       e6 ca		      INC	pp
    634  e338		       d0 02		      BNE	Le33c
    635  e33a		       e6 cb		      INC	pp+1
    636  e33c		       a5 e2	   Le33c      LDA	p1
    637  e33e		       c5 ca		      CMP	pp
    638  e340		       a5 e3		      LDA	p1+1
    639  e342		       e5 cb		      SBC	pp+1
    640  e344		       b0 e0		      BCS	Le326
    641  e346		       b5 e4	   Le346      LDA	p2,X
    642  e348		       95 ca		      STA	pp,X
    643  e34a		       ca		      DEX
    644  e34b		       10 f9		      BPL	Le346
    645  e34d		       b1 e0		      LDA	(pverb),Y
    646  e34f		       a8		      TAY
    647  e350		       88	   Le350      DEY
    648  e351		       b1 e0		      LDA	(pverb),Y
    649  e353		       91 e6		      STA	(p3),Y
    650  e355		       98		      TYA
    651  e356		       d0 f8		      BNE	Le350
    652  e358		       24 f8		      BIT	auto_flag
    653  e35a		       10 09		      BPL	Le365
    654  e35c		       b5 f7	   Le35c      LDA	auto_ln+1,X
    655  e35e		       75 f5		      ADC	auto_inc+1,X
    656  e360		       95 f7		      STA	auto_ln+1,X
    657  e362		       e8		      INX
    658  e363		       f0 f7		      BEQ	Le35c
    659  e365		       10 7e	   Le365      BPL	Le3e5
    660  e367		       00		      BRK
    661  e368		       00		      BRK
    662  e369		       00		      BRK
    663  e36a		       00		      BRK		; "..."
    664  e36b		       a0 14	   Le36b      LDY	#$14	; 20 .
    665  e36d		       d0 71		      BNE	print_err_msg
    666  e36f
    667  e36f		       20 15 e7    del_comma  JSR	get16bit
    668  e372		       a5 e2		      LDA	p1
    669  e374		       85 e6		      STA	p3
    670  e376		       a5 e3		      LDA	p1+1
    671  e378		       85 e7		      STA	p3+1
    672  e37a		       20 75 e5 	      JSR	find_line1
    673  e37d		       a5 e2		      LDA	p1
    674  e37f		       85 e4		      STA	p2
    675  e381		       a5 e3		      LDA	p1+1
    676  e383		       85 e5		      STA	p2+1
    677  e385		       d0 0e		      BNE	Le395
    678  e387
    679  e387		       20 15 e7    del_cmd    JSR	get16bit
    680  e38a
    681  e38a		       20 6d e5    Se38a      JSR	find_line
    682  e38d		       a5 e6		      LDA	p3
    683  e38f		       85 e2		      STA	p1
    684  e391		       a5 e7		      LDA	p3+1
    685  e393		       85 e3		      STA	p1+1
    686  e395		       a0 00	   Le395      LDY	#$00	; 0 .
    687  e397		       a5 ca	   Le397      LDA	pp
    688  e399		       c5 e4		      CMP	p2
    689  e39b		       a5 cb		      LDA	pp+1
    690  e39d		       e5 e5		      SBC	p2+1
    691  e39f		       b0 16		      BCS	Le3b7
    692  e3a1		       a5 e4		      LDA	p2
    693  e3a3		       d0 02		      BNE	Le3a7
    694  e3a5		       c6 e5		      DEC	p2+1
    695  e3a7		       c6 e4	   Le3a7      DEC	p2
    696  e3a9		       a5 e6		      LDA	p3
    697  e3ab		       d0 02		      BNE	Le3af
    698  e3ad		       c6 e7		      DEC	p3+1
    699  e3af		       c6 e6	   Le3af      DEC	p3
    700  e3b1		       b1 e4		      LDA	(p2),Y
    701  e3b3		       91 e6		      STA	(p3),Y
    702  e3b5		       90 e0		      BCC	Le397
    703  e3b7		       a5 e6	   Le3b7      LDA	p3
    704  e3b9		       85 ca		      STA	pp
    705  e3bb		       a5 e7		      LDA	p3+1
    706  e3bd		       85 cb		      STA	pp+1
    707  e3bf		       60		      RTS
    708  e3c0		       20 c9 e3    Le3c0      JSR	cout
    709  e3c3		       c8		      INY
    710  e3c4
    711  e3c4		       b9 00 eb    Se3c4      LDA	error_msg_tbl,Y
    712  e3c7		       30 f7		      BMI	Le3c0
    713  e3c9
    714  e3c9		       c9 8d	   cout       CMP	#$8d	; 141 .
    715  e3cb		       d0 06		      BNE	Le3d3
    716  e3cd
    717  e3cd		       a9 00	   crout      LDA	#$00	; 0 .
    718  e3cf		       85 24		      STA	ch
    719  e3d1		       a9 8d		      LDA	#$8d	; 141 .
    720  e3d3		       e6 24	   Le3d3      INC	ch
    721  e3d5				   Le3d5
    722  e3d5				  -	      IFCONST	BLD4APPLE1
    723  e3d5				  -	      BIT	DSP
    724  e3d5				  -	      BMI	Le3d5
    725  e3d5				  -	      STA	DSP
    726  e3d5					      ELSE
    727  e3d5		       20 ef ff 	      JSR	ECHO	; use monitor function to output
    728  e3d8		       ea		      nop
    729  e3d9		       ea		      nop
    730  e3da		       ea		      nop
    731  e3db		       ea		      nop
    732  e3dc		       ea		      nop
    733  e3dd					      ENDIF
    734  e3dd
    735  e3dd		       60		      RTS
    736  e3de		       a0 06	   too_long_err LDY	#$06	; 6 
    737  e3e0		       20 d3 ee    print_err_msg JSR	print_err_msg2
    738  e3e3		       24 d9		      BIT	run_flag
    739  e3e5		       30 03	   Le3e5      BMI	Le3ea
    740  e3e7		       4c b6 e2 	      JMP	Le2b6
    741  e3ea		       4c 9a eb    Le3ea      JMP	Leb9a
    742  e3ed		       2a	   Le3ed      ROL
    743  e3ee		       69 a0		      ADC	#$a0	; 160	
    744  e3f0		       dd 00 02 	      CMP	buffer,X
    745  e3f3		       d0 53		      BNE	Le448
    746  e3f5		       b1 fe		      LDA	(synpag),Y
    747  e3f7		       0a		      ASL
    748  e3f8		       30 06		      BMI	Le400
    749  e3fa		       88		      DEY
    750  e3fb		       b1 fe		      LDA	(synpag),Y
    751  e3fd		       30 29		      BMI	Le428
    752  e3ff		       c8		      INY
    753  e400		       86 c8	   Le400      STX	text_index
    754  e402		       98		      TYA
    755  e403		       48		      PHA
    756  e404		       a2 00		      LDX	#$00	; 0 .
    757  e406		       a1 fe		      LDA	(synpag,X)
    758  e408		       aa		      TAX
    759  e409		       4a	   Le409      LSR
    760  e40a		       49 48		      EOR	#$48	; 72 H
    761  e40c		       11 fe		      ORA	(synpag),Y
    762  e40e		       c9 c0		      CMP	#$c0	; 192 @
    763  e410		       90 01		      BCC	Le413
    764  e412		       e8		      INX
    765  e413		       c8	   Le413      INY
    766  e414		       d0 f3		      BNE	Le409
    767  e416		       68		      PLA
    768  e417		       a8		      TAY
    769  e418		       8a		      TXA
    770  e419		       4c c0 e4 	      JMP	Le4c0
    771  e41c
    772  e41c		       e6 f1	   put_token  INC	token_index
    773  e41e		       a6 f1		      LDX	token_index
    774  e420		       f0 bc		      BEQ	too_long_err
    775  e422		       9d 00 02 	      STA	buffer,X
    776  e425		       60	   Le425      RTS
    777  e426		       a6 c8	   Le426      LDX	text_index
    778  e428		       a9 a0	   Le428      LDA	#$a0	; 160	
    779  e42a		       e8	   Le42a      INX
    780  e42b		       dd 00 02 	      CMP	buffer,X
    781  e42e		       b0 fa		      BCS	Le42a
    782  e430		       b1 fe		      LDA	(synpag),Y
    783  e432		       29 3f		      AND	#$3f	; 63 ?
    784  e434		       4a		      LSR
    785  e435		       d0 b6		      BNE	Le3ed
    786  e437		       bd 00 02 	      LDA	buffer,X
    787  e43a		       b0 06		      BCS	Le442
    788  e43c		       69 3f		      ADC	#$3f	; 63 ?
    789  e43e		       c9 1a		      CMP	#$1a	; 26 .
    790  e440		       90 6f		      BCC	Le4b1
    791  e442		       69 4f	   Le442      ADC	#$4f	; 79 O
    792  e444		       c9 0a		      CMP	#$0a	; 10 .
    793  e446		       90 69		      BCC	Le4b1
    794  e448		       a6 fd	   Le448      LDX	synstkdx
    795  e44a		       c8	   Le44a      INY
    796  e44b		       b1 fe		      LDA	(synpag),Y
    797  e44d		       29 e0		      AND	#$e0	; 224 `
    798  e44f		       c9 20		      CMP	#$20	; 32  
    799  e451		       f0 7a		      BEQ	Le4cd
    800  e453		       b5 a8		      LDA	txtndxstk,X
    801  e455		       85 c8		      STA	text_index
    802  e457		       b5 d1		      LDA	tokndxstk,X
    803  e459		       85 f1		      STA	token_index
    804  e45b		       88	   Le45b      DEY
    805  e45c		       b1 fe		      LDA	(synpag),Y
    806  e45e		       0a		      ASL
    807  e45f		       10 fa		      BPL	Le45b
    808  e461		       88		      DEY
    809  e462		       b0 38		      BCS	Le49c
    810  e464		       0a		      ASL
    811  e465		       30 35		      BMI	Le49c
    812  e467		       b4 58		      LDY	syn_stk_h,X
    813  e469		       84 ff		      STY	synpag+1
    814  e46b		       b4 80		      LDY	syn_stk_l,X
    815  e46d		       e8		      INX
    816  e46e		       10 da		      BPL	Le44a
    817  e470		       f0 b3	   Le470      BEQ	Le425
    818  e472		       c9 7e		      CMP	#$7e	; 126 ~
    819  e474		       b0 22		      BCS	Le498
    820  e476		       ca		      DEX
    821  e477		       10 04		      BPL	Le47d
    822  e479		       a0 06		      LDY	#$06	; 6 .
    823  e47b		       10 29		      BPL	go_errmess_2
    824  e47d		       94 80	   Le47d      STY	syn_stk_l,X
    825  e47f		       a4 ff		      LDY	synpag+1
    826  e481		       94 58		      STY	syn_stk_h,X
    827  e483		       a4 c8		      LDY	text_index
    828  e485		       94 a8		      STY	txtndxstk,X
    829  e487		       a4 f1		      LDY	token_index
    830  e489		       94 d1		      STY	tokndxstk,X
    831  e48b		       29 1f		      AND	#$1f	; 31 .
    832  e48d		       a8		      TAY
    833  e48e		       b9 20 ec 	      LDA	syntabl_index,Y
    834  e491
    835  e491		       0a	   Se491      ASL
    836  e492		       a8		      TAY
    837  e493							; when running from a000, shifts to AC or AD
    838  e493							; when running from e000 shifts to EC or ED
    839  e493		       a9 76		      LDA	#[syntabl_index>>9]
    840  e495		       2a		      ROL
    841  e496		       85 ff		      STA	synpag+1
    842  e498		       d0 01	   Le498      BNE	Le49b
    843  e49a		       c8		      INY
    844  e49b		       c8	   Le49b      INY
    845  e49c		       86 fd	   Le49c      STX	synstkdx
    846  e49e		       b1 fe		      LDA	(synpag),Y
    847  e4a0		       30 84		      BMI	Le426
    848  e4a2		       d0 05		      BNE	Le4a9
    849  e4a4		       a0 0e		      LDY	#$0e	; 14 .
    850  e4a6		       4c e0 e3    go_errmess_2 JMP	print_err_msg
    851  e4a9		       c9 03	   Le4a9      CMP	#$03	; 3 .
    852  e4ab		       b0 c3		      BCS	Le470
    853  e4ad		       4a		      LSR
    854  e4ae		       a6 c8		      LDX	text_index
    855  e4b0		       e8		      INX
    856  e4b1		       bd 00 02    Le4b1      LDA	buffer,X
    857  e4b4		       90 04		      BCC	Le4ba
    858  e4b6		       c9 a2		      CMP	#$a2	; 162 "
    859  e4b8		       f0 0a		      BEQ	Le4c4
    860  e4ba		       c9 df	   Le4ba      CMP	#$df	; 223 _
    861  e4bc		       f0 06		      BEQ	Le4c4
    862  e4be		       86 c8		      STX	text_index
    863  e4c0		       20 1c e4    Le4c0      JSR	put_token
    864  e4c3		       c8		      INY
    865  e4c4		       88	   Le4c4      DEY
    866  e4c5		       a6 fd		      LDX	synstkdx
    867  e4c7		       b1 fe	   Le4c7      LDA	(synpag),Y
    868  e4c9		       88		      DEY
    869  e4ca		       0a		      ASL
    870  e4cb		       10 cf		      BPL	Le49c
    871  e4cd		       b4 58	   Le4cd      LDY	syn_stk_h,X
    872  e4cf		       84 ff		      STY	synpag+1
    873  e4d1		       b4 80		      LDY	syn_stk_l,X
    874  e4d3		       e8		      INX
    875  e4d4		       b1 fe		      LDA	(synpag),Y
    876  e4d6		       29 9f		      AND	#$9f	; 159 .
    877  e4d8		       d0 ed		      BNE	Le4c7
    878  e4da		       85 f2		      STA	pcon
    879  e4dc		       85 f3		      STA	pcon+1
    880  e4de		       98		      TYA
    881  e4df		       48		      PHA
    882  e4e0		       86 fd		      STX	synstkdx
    883  e4e2		       b4 d0		      LDY	srch,X
    884  e4e4		       84 c9		      STY	leadbl
    885  e4e6		       18		      CLC
    886  e4e7		       a9 0a	   Le4e7      LDA	#$0a	; 10 .
    887  e4e9		       85 f9		      STA	char
    888  e4eb		       a2 00		      LDX	#$00	; 0 .
    889  e4ed		       c8		      INY
    890  e4ee		       b9 00 02 	      LDA	buffer,Y
    891  e4f1		       29 0f		      AND	#$0f	; 15 .
    892  e4f3		       65 f2	   Le4f3      ADC	pcon
    893  e4f5		       48		      PHA
    894  e4f6		       8a		      TXA
    895  e4f7		       65 f3		      ADC	pcon+1
    896  e4f9		       30 1c		      BMI	Le517
    897  e4fb		       aa		      TAX
    898  e4fc		       68		      PLA
    899  e4fd		       c6 f9		      DEC	char
    900  e4ff		       d0 f2		      BNE	Le4f3
    901  e501		       85 f2		      STA	pcon
    902  e503		       86 f3		      STX	pcon+1
    903  e505		       c4 f1		      CPY	token_index
    904  e507		       d0 de		      BNE	Le4e7
    905  e509		       a4 c9		      LDY	leadbl
    906  e50b		       c8		      INY
    907  e50c		       84 f1		      STY	token_index
    908  e50e		       20 1c e4 	      JSR	put_token
    909  e511		       68		      PLA
    910  e512		       a8		      TAY
    911  e513		       a5 f3		      LDA	pcon+1
    912  e515		       b0 a9		      BCS	Le4c0
    913  e517		       a0 00	   Le517      LDY	#$00	; 0 .
    914  e519		       10 8b		      BPL	go_errmess_2
    915  e51b
    916  e51b		       85 f3	   prdec      STA	pcon+1
    917  e51d		       86 f2		      STX	pcon
    918  e51f		       a2 04		      LDX	#$04	; 4 .
    919  e521		       86 c9		      STX	leadbl
    920  e523		       a9 b0	   Le523      LDA	#$b0	; 176 0
    921  e525		       85 f9		      STA	char
    922  e527		       a5 f2	   Le527      LDA	pcon
    923  e529		       dd 63 e5 	      CMP	dectabl,X
    924  e52c		       a5 f3		      LDA	pcon+1
    925  e52e		       fd 68 e5 	      SBC	dectabh,X
    926  e531		       90 0d		      BCC	Le540
    927  e533		       85 f3		      STA	pcon+1
    928  e535		       a5 f2		      LDA	pcon
    929  e537		       fd 63 e5 	      SBC	dectabl,X
    930  e53a		       85 f2		      STA	pcon
    931  e53c		       e6 f9		      INC	char
    932  e53e		       d0 e7		      BNE	Le527
    933  e540		       a5 f9	   Le540      LDA	char
    934  e542		       e8		      INX
    935  e543		       ca		      DEX
    936  e544		       f0 0e		      BEQ	Le554
    937  e546		       c9 b0		      CMP	#$b0	; 176 0
    938  e548		       f0 02		      BEQ	Le54c
    939  e54a		       85 c9		      STA	leadbl
    940  e54c		       24 c9	   Le54c      BIT	leadbl
    941  e54e		       30 04		      BMI	Le554
    942  e550		       a5 fa		      LDA	leadzr
    943  e552		       f0 0b		      BEQ	Le55f
    944  e554		       20 c9 e3    Le554      JSR	cout
    945  e557		       24 f8		      BIT	auto_flag
    946  e559		       10 04		      BPL	Le55f
    947  e55b		       99 00 02 	      STA	buffer,Y
    948  e55e		       c8		      INY
    949  e55f		       ca	   Le55f      DEX
    950  e560		       10 c1		      BPL	Le523
    951  e562		       60		      RTS
    952  e563		       01 0a 64 e8*dectabl    DC.B	$01,$0a,$64,$e8,$10	; "..dh."
    953  e568		       00 00 00 03*dectabh    DC.B	$00,$00,$00,$03,$27	; "....'"
    954  e56d
    955  e56d		       a5 ca	   find_line  LDA	pp
    956  e56f		       85 e6		      STA	p3
    957  e571		       a5 cb		      LDA	pp+1
    958  e573		       85 e7		      STA	p3+1
    959  e575
    960  e575		       e8	   find_line1 INX
    961  e576
    962  e576		       a5 e7	   find_line2 LDA	p3+1
    963  e578		       85 e5		      STA	p2+1
    964  e57a		       a5 e6		      LDA	p3
    965  e57c		       85 e4		      STA	p2
    966  e57e		       c5 4c		      CMP	himem
    967  e580		       a5 e5		      LDA	p2+1
    968  e582		       e5 4d		      SBC	himem+1
    969  e584		       b0 26		      BCS	Le5ac
    970  e586		       a0 01		      LDY	#$01	; 1 .
    971  e588		       b1 e4		      LDA	(p2),Y
    972  e58a		       e5 ce		      SBC	acc
    973  e58c		       c8		      INY
    974  e58d		       b1 e4		      LDA	(p2),Y
    975  e58f		       e5 cf		      SBC	acc+1
    976  e591		       b0 19		      BCS	Le5ac
    977  e593		       a0 00		      LDY	#$00	; 0 .
    978  e595		       a5 e6		      LDA	p3
    979  e597		       71 e4		      ADC	(p2),Y
    980  e599		       85 e6		      STA	p3
    981  e59b		       90 03		      BCC	Le5a0
    982  e59d		       e6 e7		      INC	p3+1
    983  e59f		       18		      CLC
    984  e5a0		       c8	   Le5a0      INY
    985  e5a1		       a5 ce		      LDA	acc
    986  e5a3		       f1 e4		      SBC	(p2),Y
    987  e5a5		       c8		      INY
    988  e5a6		       a5 cf		      LDA	acc+1
    989  e5a8		       f1 e4		      SBC	(p2),Y
    990  e5aa		       b0 ca		      BCS	find_line2
    991  e5ac		       60	   Le5ac      RTS
    992  e5ad
    993  e5ad		       46 f8	   new_cmd    LSR	auto_flag
    994  e5af		       a5 4c		      LDA	himem
    995  e5b1		       85 ca		      STA	pp
    996  e5b3		       a5 4d		      LDA	himem+1
    997  e5b5		       85 cb		      STA	pp+1
    998  e5b7
    999  e5b7		       a5 4a	   clr	      LDA	lomem
   1000  e5b9		       85 cc		      STA	pv
   1001  e5bb		       a5 4b		      LDA	lomem+1
   1002  e5bd		       85 cd		      STA	pv+1
   1003  e5bf		       a9 00		      LDA	#$00	; 0 .
   1004  e5c1		       85 fb		      STA	for_nest_count
   1005  e5c3		       85 fc		      STA	gosub_nest_count
   1006  e5c5		       85 fe		      STA	synpag
   1007  e5c7		       a9 00		      LDA	#$00	; 0 .
   1008  e5c9		       85 1d		      STA	Z1d
   1009  e5cb		       60		      RTS
   1010  e5cc		       a5 d0	   Le5cc      LDA	srch
   1011  e5ce		       69 05		      ADC	#$05	; 5 .
   1012  e5d0		       85 d2		      STA	srch2
   1013  e5d2		       a5 d1		      LDA	tokndxstk
   1014  e5d4		       69 00		      ADC	#$00	; 0 .
   1015  e5d6		       85 d3		      STA	srch2+1
   1016  e5d8		       a5 d2		      LDA	srch2
   1017  e5da		       c5 ca		      CMP	pp
   1018  e5dc		       a5 d3		      LDA	srch2+1
   1019  e5de		       e5 cb		      SBC	pp+1
   1020  e5e0		       90 03		      BCC	Le5e5
   1021  e5e2		       4c 6b e3 	      JMP	Le36b
   1022  e5e5		       a5 ce	   Le5e5      LDA	acc
   1023  e5e7		       91 d0		      STA	(srch),Y
   1024  e5e9		       a5 cf		      LDA	acc+1
   1025  e5eb		       c8		      INY
   1026  e5ec		       91 d0		      STA	(srch),Y
   1027  e5ee		       a5 d2		      LDA	srch2
   1028  e5f0		       c8		      INY
   1029  e5f1		       91 d0		      STA	(srch),Y
   1030  e5f3		       a5 d3		      LDA	srch2+1
   1031  e5f5		       c8		      INY
   1032  e5f6		       91 d0		      STA	(srch),Y
   1033  e5f8		       a9 00		      LDA	#$00	; 0 .
   1034  e5fa		       c8		      INY
   1035  e5fb		       91 d0		      STA	(srch),Y
   1036  e5fd		       c8		      INY
   1037  e5fe		       91 d0		      STA	(srch),Y
   1038  e600		       a5 d2		      LDA	srch2
   1039  e602		       85 cc		      STA	pv
   1040  e604		       a5 d3		      LDA	srch2+1
   1041  e606		       85 cd		      STA	pv+1
   1042  e608		       a5 d0		      LDA	srch
   1043  e60a		       90 43		      BCC	Le64f
   1044  e60c		       85 ce	   execute_var STA	acc
   1045  e60e		       84 cf		      STY	acc+1
   1046  e610		       20 ff e6 	      JSR	get_next_prog_byte
   1047  e613		       30 0e		      BMI	Le623
   1048  e615		       c9 40		      CMP	#$40	; 64 @
   1049  e617		       f0 0a		      BEQ	Le623
   1050  e619		       4c 28 e6 	      JMP	Le628
   1051  e61c		       06 c9 49 d0*	      DC.B	$06,$c9,$49,$d0,$07,$a9,$49	; ".IIP.)I"
   1052  e623		       85 cf	   Le623      STA	acc+1
   1053  e625		       20 ff e6 	      JSR	get_next_prog_byte
   1054  e628		       a5 4b	   Le628      LDA	lomem+1
   1055  e62a		       85 d1		      STA	tokndxstk
   1056  e62c		       a5 4a		      LDA	lomem
   1057  e62e		       85 d0	   Le62e      STA	srch
   1058  e630		       c5 cc		      CMP	pv
   1059  e632		       a5 d1		      LDA	tokndxstk
   1060  e634		       e5 cd		      SBC	pv+1
   1061  e636		       b0 94		      BCS	Le5cc
   1062  e638		       b1 d0		      LDA	(srch),Y
   1063  e63a		       c8		      INY
   1064  e63b		       c5 ce		      CMP	acc
   1065  e63d		       d0 06		      BNE	Le645
   1066  e63f		       b1 d0		      LDA	(srch),Y
   1067  e641		       c5 cf		      CMP	acc+1
   1068  e643		       f0 0e		      BEQ	Le653
   1069  e645		       c8	   Le645      INY
   1070  e646		       b1 d0		      LDA	(srch),Y
   1071  e648		       48		      PHA
   1072  e649		       c8		      INY
   1073  e64a		       b1 d0		      LDA	(srch),Y
   1074  e64c		       85 d1		      STA	tokndxstk
   1075  e64e		       68		      PLA
   1076  e64f		       a0 00	   Le64f      LDY	#$00	; 0 .
   1077  e651		       f0 db		      BEQ	Le62e
   1078  e653		       a5 d0	   Le653      LDA	srch
   1079  e655		       69 03		      ADC	#$03	; 3 .
   1080  e657		       20 0a e7 	      JSR	push_a_noun_stk
   1081  e65a		       a5 d1		      LDA	tokndxstk
   1082  e65c		       69 00		      ADC	#$00	; 0 .
   1083  e65e		       95 78		      STA	noun_stk_h_str,X
   1084  e660		       a5 cf		      LDA	acc+1
   1085  e662		       c9 40		      CMP	#$40	; 64 @
   1086  e664		       d0 1c		      BNE	fetch_prog_byte
   1087  e666		       88		      DEY
   1088  e667		       98		      TYA
   1089  e668		       20 0a e7 	      JSR	push_a_noun_stk
   1090  e66b		       88		      DEY
   1091  e66c		       94 78		      STY	noun_stk_h_str,X
   1092  e66e		       a0 03		      LDY	#$03	; 3 .
   1093  e670		       f6 78	   Le670      INC	noun_stk_h_str,X
   1094  e672		       c8		      INY
   1095  e673		       b1 d0		      LDA	(srch),Y
   1096  e675		       30 f9		      BMI	Le670
   1097  e677		       10 09		      BPL	fetch_prog_byte
   1098  e679
   1099  e679		       a9 00	   execute_stmt LDA	#$00	; 0 .
   1100  e67b		       85 d4		      STA	if_flag
   1101  e67d		       85 d5		      STA	cr_flag
   1102  e67f		       a2 20		      LDX	#$20	; 32  
   1103  e681		       48	   push_old_verb PHA
   1104  e682		       a0 00	   fetch_prog_byte LDY	#$00	; 0 .
   1105  e684		       b1 e0		      LDA	(pverb),Y
   1106  e686		       10 18	   Le686      BPL	execute_token
   1107  e688		       0a		      ASL
   1108  e689		       30 81		      BMI	execute_var
   1109  e68b		       20 ff e6 	      JSR	get_next_prog_byte
   1110  e68e		       20 08 e7 	      JSR	push_ya_noun_stk
   1111  e691		       20 ff e6 	      JSR	get_next_prog_byte
   1112  e694		       95 a0		      STA	noun_stk_h_int,X
   1113  e696		       24 d4	   Le696      BIT	if_flag
   1114  e698		       10 01		      BPL	Le69b
   1115  e69a		       ca		      DEX
   1116  e69b		       20 ff e6    Le69b      JSR	get_next_prog_byte
   1117  e69e		       b0 e6		      BCS	Le686
   1118  e6a0		       c9 28	   execute_token CMP	#$28	; 40 (
   1119  e6a2		       d0 1f		      BNE	execute_verb
   1120  e6a4		       a5 e0		      LDA	pverb
   1121  e6a6		       20 0a e7 	      JSR	push_a_noun_stk
   1122  e6a9		       a5 e1		      LDA	pverb+1
   1123  e6ab		       95 78		      STA	noun_stk_h_str,X
   1124  e6ad		       24 d4		      BIT	if_flag
   1125  e6af		       30 0b		      BMI	Le6bc
   1126  e6b1		       a9 01		      LDA	#$01	; 1 .
   1127  e6b3		       20 0a e7 	      JSR	push_a_noun_stk
   1128  e6b6		       a9 00		      LDA	#$00	; 0 .
   1129  e6b8		       95 78		      STA	noun_stk_h_str,X
   1130  e6ba		       f6 78	   Le6ba      INC	noun_stk_h_str,X
   1131  e6bc		       20 ff e6    Le6bc      JSR	get_next_prog_byte
   1132  e6bf		       30 f9		      BMI	Le6ba
   1133  e6c1		       b0 d3		      BCS	Le696
   1134  e6c3		       24 d4	   execute_verb BIT	if_flag
   1135  e6c5		       10 06		      BPL	Le6cd
   1136  e6c7		       c9 04		      CMP	#$04	; 4 .
   1137  e6c9		       b0 d0		      BCS	Le69b
   1138  e6cb		       46 d4		      LSR	if_flag
   1139  e6cd		       a8	   Le6cd      TAY
   1140  e6ce		       85 d6		      STA	current_verb
   1141  e6d0		       b9 98 e9 	      LDA	verb_prec_tbl,Y
   1142  e6d3		       29 55		      AND	#$55	; 85 U
   1143  e6d5		       0a		      ASL
   1144  e6d6		       85 d7		      STA	precedence
   1145  e6d8		       68	   Le6d8      PLA
   1146  e6d9		       a8		      TAY
   1147  e6da		       b9 98 e9 	      LDA	verb_prec_tbl,Y
   1148  e6dd		       29 aa		      AND	#$aa	; 170 *
   1149  e6df		       c5 d7		      CMP	precedence
   1150  e6e1		       b0 09		      BCS	do_verb
   1151  e6e3		       98		      TYA
   1152  e6e4		       48		      PHA
   1153  e6e5		       20 ff e6 	      JSR	get_next_prog_byte
   1154  e6e8		       a5 d6		      LDA	current_verb
   1155  e6ea		       90 95		      BCC	push_old_verb
   1156  e6ec		       b9 10 ea    do_verb    LDA	verb_adr_l,Y
   1157  e6ef		       85 ce		      STA	acc
   1158  e6f1		       b9 88 ea 	      LDA	verb_adr_h,Y
   1159  e6f4		       85 cf		      STA	acc+1
   1160  e6f6		       20 fc e6 	      JSR	Se6fc
   1161  e6f9		       4c d8 e6 	      JMP	Le6d8
   1162  e6fc
   1163  e6fc		       6c ce 00    Se6fc      JMP	(acc)
   1164  e6ff
   1165  e6ff		       e6 e0	   get_next_prog_byte INC	pverb
   1166  e701		       d0 02		      BNE	Le705
   1167  e703		       e6 e1		      INC	pverb+1
   1168  e705		       b1 e0	   Le705      LDA	(pverb),Y
   1169  e707		       60		      RTS
   1170  e708
   1171  e708		       94 77	   push_ya_noun_stk STY	syn_stk_h+31,X
   1172  e70a
   1173  e70a		       ca	   push_a_noun_stk DEX
   1174  e70b		       30 03		      BMI	Le710
   1175  e70d		       95 50		      STA	noun_stk_l,X
   1176  e70f		       60		      RTS
   1177  e710		       a0 66	   Le710      LDY	#$66	; 102 f
   1178  e712		       4c e0 e3    go_errmess_3 JMP	print_err_msg
   1179  e715
   1180  e715		       a0 00	   get16bit   LDY	#$00	; 0 .
   1181  e717		       b5 50		      LDA	noun_stk_l,X
   1182  e719		       85 ce		      STA	acc
   1183  e71b		       b5 a0		      LDA	noun_stk_h_int,X
   1184  e71d		       85 cf		      STA	acc+1
   1185  e71f		       b5 78		      LDA	noun_stk_h_str,X
   1186  e721		       f0 0e		      BEQ	Le731
   1187  e723		       85 cf		      STA	acc+1
   1188  e725		       b1 ce		      LDA	(acc),Y
   1189  e727		       48		      PHA
   1190  e728		       c8		      INY
   1191  e729		       b1 ce		      LDA	(acc),Y
   1192  e72b		       85 cf		      STA	acc+1
   1193  e72d		       68		      PLA
   1194  e72e		       85 ce		      STA	acc
   1195  e730		       88		      DEY
   1196  e731		       e8	   Le731      INX
   1197  e732		       60		      RTS
   1198  e733
   1199  e733		       20 4a e7    eq_op      JSR	neq_op
   1200  e736
   1201  e736		       20 15 e7    not_op     JSR	get16bit
   1202  e739		       98		      TYA
   1203  e73a		       20 08 e7 	      JSR	push_ya_noun_stk
   1204  e73d		       95 a0		      STA	noun_stk_h_int,X
   1205  e73f		       c5 ce		      CMP	acc
   1206  e741		       d0 06		      BNE	Le749
   1207  e743		       c5 cf		      CMP	acc+1
   1208  e745		       d0 02		      BNE	Le749
   1209  e747		       f6 50		      INC	noun_stk_l,X
   1210  e749		       60	   Le749      RTS
   1211  e74a
   1212  e74a		       20 82 e7    neq_op     JSR	subtract
   1213  e74d		       20 59 e7 	      JSR	sgn_fn
   1214  e750
   1215  e750		       20 15 e7    abs_fn     JSR	get16bit
   1216  e753		       24 cf		      BIT	acc+1
   1217  e755		       30 1b		      BMI	Se772
   1218  e757		       ca	   Le757      DEX
   1219  e758		       60	   Le758      RTS
   1220  e759
   1221  e759		       20 15 e7    sgn_fn     JSR	get16bit
   1222  e75c		       a5 cf		      LDA	acc+1
   1223  e75e		       d0 04		      BNE	Le764
   1224  e760		       a5 ce		      LDA	acc
   1225  e762		       f0 f3		      BEQ	Le757
   1226  e764		       a9 ff	   Le764      LDA	#$ff	; 255 .
   1227  e766		       20 08 e7 	      JSR	push_ya_noun_stk
   1228  e769		       95 a0		      STA	noun_stk_h_int,X
   1229  e76b		       24 cf		      BIT	acc+1
   1230  e76d		       30 e9		      BMI	Le758
   1231  e76f
   1232  e76f		       20 15 e7    negate     JSR	get16bit
   1233  e772
   1234  e772		       98	   Se772      TYA
   1235  e773		       38		      SEC
   1236  e774		       e5 ce		      SBC	acc
   1237  e776		       20 08 e7 	      JSR	push_ya_noun_stk
   1238  e779		       98		      TYA
   1239  e77a		       e5 cf		      SBC	acc+1
   1240  e77c		       50 23		      BVC	Le7a1
   1241  e77e		       a0 00	   Le77e      LDY	#$00	; 0 .
   1242  e780		       10 90		      BPL	go_errmess_3
   1243  e782
   1244  e782		       20 6f e7    subtract   JSR	negate
   1245  e785
   1246  e785		       20 15 e7    add	      JSR	get16bit
   1247  e788		       a5 ce		      LDA	acc
   1248  e78a		       85 da		      STA	aux
   1249  e78c		       a5 cf		      LDA	acc+1
   1250  e78e		       85 db		      STA	aux+1
   1251  e790		       20 15 e7 	      JSR	get16bit
   1252  e793
   1253  e793		       18	   Se793      CLC
   1254  e794		       a5 ce		      LDA	acc
   1255  e796		       65 da		      ADC	aux
   1256  e798		       20 08 e7 	      JSR	push_ya_noun_stk
   1257  e79b		       a5 cf		      LDA	acc+1
   1258  e79d		       65 db		      ADC	aux+1
   1259  e79f		       70 dd		      BVS	Le77e
   1260  e7a1		       95 a0	   Le7a1      STA	noun_stk_h_int,X
   1261  e7a3
   1262  e7a3		       60	   unary_pos  RTS
   1263  e7a4
   1264  e7a4		       20 15 e7    tab_fn     JSR	get16bit
   1265  e7a7		       a4 ce		      LDY	acc
   1266  e7a9		       f0 05		      BEQ	Le7b0
   1267  e7ab		       88		      DEY
   1268  e7ac		       a5 cf		      LDA	acc+1
   1269  e7ae		       f0 0c		      BEQ	Le7bc
   1270  e7b0		       60	   Le7b0      RTS
   1271  e7b1
   1272  e7b1		       a5 24	   tabout     LDA	ch
   1273  e7b3		       09 07		      ORA	#$07	; 7 .
   1274  e7b5		       a8		      TAY
   1275  e7b6		       c8		      INY
   1276  e7b7		       a9 a0	   Le7b7      LDA	#$a0	; 160	
   1277  e7b9		       20 c9 e3 	      JSR	cout
   1278  e7bc		       c4 24	   Le7bc      CPY	ch
   1279  e7be		       b0 f7		      BCS	Le7b7
   1280  e7c0		       60		      RTS
   1281  e7c1
   1282  e7c1		       20 b1 e7    print_com_num JSR	tabout
   1283  e7c4
   1284  e7c4		       20 15 e7    print_num  JSR	get16bit
   1285  e7c7		       a5 cf		      LDA	acc+1
   1286  e7c9		       10 0a		      BPL	Le7d5
   1287  e7cb		       a9 ad		      LDA	#$ad	; 173 -
   1288  e7cd		       20 c9 e3 	      JSR	cout
   1289  e7d0		       20 72 e7 	      JSR	Se772
   1290  e7d3		       50 ef		      BVC	print_num
   1291  e7d5		       88	   Le7d5      DEY
   1292  e7d6		       84 d5		      STY	cr_flag
   1293  e7d8		       86 cf		      STX	acc+1
   1294  e7da		       a6 ce		      LDX	acc
   1295  e7dc		       20 1b e5 	      JSR	prdec
   1296  e7df		       a6 cf		      LDX	acc+1
   1297  e7e1		       60		      RTS
   1298  e7e2
   1299  e7e2		       20 15 e7    auto_cmd   JSR	get16bit
   1300  e7e5		       a5 ce		      LDA	acc
   1301  e7e7		       85 f6		      STA	auto_ln
   1302  e7e9		       a5 cf		      LDA	acc+1
   1303  e7eb		       85 f7		      STA	auto_ln+1
   1304  e7ed		       88		      DEY
   1305  e7ee		       84 f8		      STY	auto_flag
   1306  e7f0		       c8		      INY
   1307  e7f1		       a9 0a		      LDA	#$0a	; 10 .
   1308  e7f3		       85 f4	   Le7f3      STA	auto_inc
   1309  e7f5		       84 f5		      STY	auto_inc+1
   1310  e7f7		       60		      RTS
   1311  e7f8
   1312  e7f8		       20 15 e7    auto_com   JSR	get16bit
   1313  e7fb		       a5 ce		      LDA	acc
   1314  e7fd		       a4 cf		      LDY	acc+1
   1315  e7ff		       10 f2		      BPL	Le7f3
   1316  e801
   1317  e801		       20 15 e7    var_assign JSR	get16bit
   1318  e804		       b5 50		      LDA	noun_stk_l,X
   1319  e806		       85 da		      STA	aux
   1320  e808		       b5 78		      LDA	noun_stk_h_str,X
   1321  e80a		       85 db		      STA	aux+1
   1322  e80c		       a5 ce		      LDA	acc
   1323  e80e		       91 da		      STA	(aux),Y
   1324  e810		       c8		      INY
   1325  e811		       a5 cf		      LDA	acc+1
   1326  e813		       91 da		      STA	(aux),Y
   1327  e815		       e8		      INX
   1328  e816
   1329  e816		       60	   Te816      RTS
   1330  e817
   1331  e817		       68	   begin_line PLA
   1332  e818		       68		      PLA
   1333  e819
   1334  e819		       24 d5	   colon      BIT	cr_flag
   1335  e81b		       10 05		      BPL	Le822
   1336  e81d
   1337  e81d		       20 cd e3    print_cr   JSR	crout
   1338  e820
   1339  e820		       46 d5	   print_semi LSR	cr_flag
   1340  e822		       60	   Le822      RTS
   1341  e823
   1342  e823		       a0 ff	   left_paren LDY	#$ff	; 255 .
   1343  e825		       84 d7		      STY	precedence
   1344  e827
   1345  e827		       60	   right_paren RTS
   1346  e828
   1347  e828		       20 cd ef    if_stmt    JSR	Sefcd
   1348  e82b		       f0 07		      BEQ	Le834
   1349  e82d		       a9 25		      LDA	#$25	; 37 %
   1350  e82f		       85 d6		      STA	current_verb
   1351  e831		       88		      DEY
   1352  e832		       84 d4		      STY	if_flag
   1353  e834		       e8	   Le834      INX
   1354  e835		       60		      RTS
   1355  e836		       a5 ca	   run_warm   LDA	pp
   1356  e838		       a4 cb		      LDY	pp+1
   1357  e83a		       d0 5a		      BNE	Le896
   1358  e83c
   1359  e83c		       a0 41	   gosub_stmt LDY	#$41	; 65 A
   1360  e83e		       a5 fc		      LDA	gosub_nest_count
   1361  e840		       c9 08		      CMP	#$08	; 8 .
   1362  e842		       b0 5e		      BCS	go_errmess_4
   1363  e844		       a8		      TAY
   1364  e845		       e6 fc		      INC	gosub_nest_count
   1365  e847		       a5 e0		      LDA	pverb
   1366  e849		       99 00 01 	      STA	gstk_pverbl,Y
   1367  e84c		       a5 e1		      LDA	pverb+1
   1368  e84e		       99 08 01 	      STA	gstk_pverbh,Y
   1369  e851		       a5 dc		      LDA	pline
   1370  e853		       99 10 01 	      STA	gstk_plinel,Y
   1371  e856		       a5 dd		      LDA	pline+1
   1372  e858		       99 18 01 	      STA	gstk_plineh,Y
   1373  e85b
   1374  e85b		       20 15 e7    goto_stmt  JSR	get16bit
   1375  e85e		       20 6d e5 	      JSR	find_line
   1376  e861		       90 04		      BCC	Le867
   1377  e863		       a0 37		      LDY	#$37	; 55 7
   1378  e865		       d0 3b		      BNE	go_errmess_4
   1379  e867		       a5 e4	   Le867      LDA	p2
   1380  e869		       a4 e5		      LDY	p2+1
   1381  e86b		       85 dc	   run_loop   STA	pline
   1382  e86d		       84 dd		      STY	pline+1
   1383  e86f				  -	      IFCONST	BLD4APPLE1
   1384  e86f				  -	      BIT	KBDCR
   1385  e86f					      ELSE
   1386  e86f		       2c 00 c0 	      BIT	KBD
   1387  e872					      ENDIF
   1388  e872		       30 4f		      BMI	Le8c3
   1389  e874		       18		      CLC
   1390  e875		       69 03		      ADC	#$03	; 3 .
   1391  e877		       90 01		      BCC	Le87a
   1392  e879		       c8		      INY
   1393  e87a		       a2 ff	   Le87a      LDX	#$ff	; 255 .
   1394  e87c		       86 d9		      STX	run_flag
   1395  e87e		       9a		      TXS
   1396  e87f		       85 e0		      STA	pverb
   1397  e881		       84 e1		      STY	pverb+1
   1398  e883		       20 79 e6    Le883      JSR	execute_stmt
   1399  e886		       24 d9		      BIT	run_flag
   1400  e888		       10 49		      BPL	end_stmt
   1401  e88a		       18		      CLC
   1402  e88b		       a0 00		      LDY	#$00	; 0 .
   1403  e88d		       a5 dc		      LDA	pline
   1404  e88f		       71 dc		      ADC	(pline),Y
   1405  e891		       a4 dd		      LDY	pline+1
   1406  e893		       90 01		      BCC	Le896
   1407  e895		       c8		      INY
   1408  e896		       c5 4c	   Le896      CMP	himem
   1409  e898		       d0 d1		      BNE	run_loop
   1410  e89a		       c4 4d		      CPY	himem+1
   1411  e89c		       d0 cd		      BNE	run_loop
   1412  e89e		       a0 34		      LDY	#$34	; 52 4
   1413  e8a0		       46 d9		      LSR	run_flag
   1414  e8a2		       4c e0 e3    go_errmess_4 JMP	print_err_msg
   1415  e8a5
   1416  e8a5		       a0 4a	   return_stmt LDY	#$4a	; 74 J
   1417  e8a7		       a5 fc		      LDA	gosub_nest_count
   1418  e8a9		       f0 f7		      BEQ	go_errmess_4
   1419  e8ab		       c6 fc		      DEC	gosub_nest_count
   1420  e8ad		       a8		      TAY
   1421  e8ae		       b9 0f 01 	      LDA	gstk_plinel-1,Y
   1422  e8b1		       85 dc		      STA	pline
   1423  e8b3		       b9 17 01 	      LDA	gstk_plineh-1,Y
   1424  e8b6		       85 dd		      STA	pline+1
   1425  e8b8
   1426  e8b8		       be ff 00 	      DC.B	$be,$ff,$00
   1427  e8bb							;		LDX	synpag+1,Y
   1428  e8bb
   1429  e8bb		       b9 07 01 	      LDA	gstk_pverbh-1,Y
   1430  e8be		       a8	   Le8be      TAY
   1431  e8bf		       8a		      TXA
   1432  e8c0		       4c 7a e8 	      JMP	Le87a
   1433  e8c3		       a0 63	   Le8c3      LDY	#$63	; 99 c
   1434  e8c5		       20 c4 e3 	      JSR	Se3c4
   1435  e8c8		       a0 01		      LDY	#$01	; 1 .
   1436  e8ca		       b1 dc		      LDA	(pline),Y
   1437  e8cc		       aa		      TAX
   1438  e8cd		       c8		      INY
   1439  e8ce		       b1 dc		      LDA	(pline),Y
   1440  e8d0		       20 1b e5 	      JSR	prdec
   1441  e8d3
   1442  e8d3		       4c b3 e2    end_stmt   JMP	warm
   1443  e8d6		       c6 fb	   Le8d6      DEC	for_nest_count
   1444  e8d8
   1445  e8d8		       a0 5b	   next_stmt  LDY	#$5b	; 91 [
   1446  e8da		       a5 fb		      LDA	for_nest_count
   1447  e8dc		       f0 c4	   Le8dc      BEQ	go_errmess_4
   1448  e8de		       a8		      TAY
   1449  e8df		       b5 50		      LDA	noun_stk_l,X
   1450  e8e1		       d9 1f 01 	      CMP	fstk_varl-1,Y
   1451  e8e4		       d0 f0		      BNE	Le8d6
   1452  e8e6		       b5 78		      LDA	noun_stk_h_str,X
   1453  e8e8		       d9 27 01 	      CMP	fstk_varh-1,Y
   1454  e8eb		       d0 e9		      BNE	Le8d6
   1455  e8ed		       b9 2f 01 	      LDA	fstk_stepl-1,Y
   1456  e8f0		       85 da		      STA	aux
   1457  e8f2		       b9 37 01 	      LDA	fstk_steph-1,Y
   1458  e8f5		       85 db		      STA	aux+1
   1459  e8f7		       20 15 e7 	      JSR	get16bit
   1460  e8fa		       ca		      DEX
   1461  e8fb		       20 93 e7 	      JSR	Se793
   1462  e8fe		       20 01 e8 	      JSR	var_assign
   1463  e901		       ca		      DEX
   1464  e902		       a4 fb		      LDY	for_nest_count
   1465  e904		       b9 67 01 	      LDA	fstk_toh-1,Y
   1466  e907		       95 9f		      STA	syn_stk_l+31,X
   1467  e909		       b9 5f 01 	      LDA	fstk_tol-1,Y
   1468  e90c		       a0 00		      LDY	#$00	; 0 .
   1469  e90e		       20 08 e7 	      JSR	push_ya_noun_stk
   1470  e911		       20 82 e7 	      JSR	subtract
   1471  e914		       20 59 e7 	      JSR	sgn_fn
   1472  e917		       20 15 e7 	      JSR	get16bit
   1473  e91a		       a4 fb		      LDY	for_nest_count
   1474  e91c		       a5 ce		      LDA	acc
   1475  e91e		       f0 05		      BEQ	Le925
   1476  e920		       59 37 01 	      EOR	fstk_steph-1,Y
   1477  e923		       10 12		      BPL	Le937
   1478  e925		       b9 3f 01    Le925      LDA	fstk_plinel-1,Y
   1479  e928		       85 dc		      STA	pline
   1480  e92a		       b9 47 01 	      LDA	fstk_plineh-1,Y
   1481  e92d		       85 dd		      STA	pline+1
   1482  e92f		       be 4f 01 	      LDX	fstk_pverbl-1,Y
   1483  e932		       b9 57 01 	      LDA	fstk_pverbh-1,Y
   1484  e935		       d0 87		      BNE	Le8be
   1485  e937		       c6 fb	   Le937      DEC	for_nest_count
   1486  e939		       60		      RTS
   1487  e93a
   1488  e93a		       a0 54	   for_stmt   LDY	#$54	; 84 T
   1489  e93c		       a5 fb		      LDA	for_nest_count
   1490  e93e		       c9 08		      CMP	#$08	; 8 .
   1491  e940		       f0 9a		      BEQ	Le8dc
   1492  e942		       e6 fb		      INC	for_nest_count
   1493  e944		       a8		      TAY
   1494  e945		       b5 50		      LDA	noun_stk_l,X
   1495  e947		       99 20 01 	      STA	fstk_varl,Y
   1496  e94a		       b5 78		      LDA	noun_stk_h_str,X
   1497  e94c		       99 28 01 	      STA	fstk_varh,Y
   1498  e94f		       60		      RTS
   1499  e950
   1500  e950		       20 15 e7    to_clause  JSR	get16bit
   1501  e953		       a4 fb		      LDY	for_nest_count
   1502  e955		       a5 ce		      LDA	acc
   1503  e957		       99 5f 01 	      STA	fstk_tol-1,Y
   1504  e95a		       a5 cf		      LDA	acc+1
   1505  e95c		       99 67 01 	      STA	fstk_toh-1,Y
   1506  e95f		       a9 01		      LDA	#$01	; 1 .
   1507  e961		       99 2f 01 	      STA	fstk_stepl-1,Y
   1508  e964		       a9 00		      LDA	#$00	; 0 .
   1509  e966		       99 37 01    Le966      STA	fstk_steph-1,Y
   1510  e969		       a5 dc		      LDA	pline
   1511  e96b		       99 3f 01 	      STA	fstk_plinel-1,Y
   1512  e96e		       a5 dd		      LDA	pline+1
   1513  e970		       99 47 01 	      STA	fstk_plineh-1,Y
   1514  e973		       a5 e0		      LDA	pverb
   1515  e975		       99 4f 01 	      STA	fstk_pverbl-1,Y
   1516  e978		       a5 e1		      LDA	pverb+1
   1517  e97a		       99 57 01 	      STA	fstk_pverbh-1,Y
   1518  e97d		       60		      RTS
   1519  e97e
   1520  e97e		       20 15 e7    Te97e      JSR	get16bit
   1521  e981		       a4 fb		      LDY	for_nest_count
   1522  e983		       a5 ce		      LDA	acc
   1523  e985		       99 2f 01 	      STA	fstk_stepl-1,Y
   1524  e988		       a5 cf		      LDA	acc+1
   1525  e98a		       4c 66 e9 	      JMP	Le966
   1526  e98d		       00 00 00 00*	      DC.B	$00,$00,$00,$00,$00,$00,$00,$00	; "........"
   1527  e995		       00 00 00 	      DC.B	$00,$00,$00	; "..."
   1528  e998		       00 00 00 ab*verb_prec_tbl DC.B	$00,$00,$00,$ab,$03,$03,$03,$03	; "...+...."
   1529  e9a0		       03 03 03 03*	      DC.B	$03,$03,$03,$03,$03,$03,$03,$03	; "........"
   1530  e9a8		       03 03 3f 3f*	      DC.B	$03,$03,$3f,$3f,$c0,$c0,$3c,$3c	; "..??@@<<"
   1531  e9b0		       3c 3c 3c 3c*	      DC.B	$3c,$3c,$3c,$3c,$3c,$30,$0f,$c0	; "<<<<<0.@"
   1532  e9b8					      IFCONST	HUSTNBASIC
   1533  e9b8		       c3 ff 55 00*	      DC.B	$c3,$ff,$55,$00,$ab,$ab,$03,$03	; "L.U.++.."
   1534  e9c0				  -	      ELSE
   1535  e9c0				  -	      DC.B	$cc,$ff,$55,$00,$ab,$ab,$03,$03	; "L.U.++.."
   1536  e9c0					      ENDIF
   1537  e9c0		       ff ff 55 ff*	      DC.B	$ff,$ff,$55,$ff,$ff,$55,$cf,$cf	; "..U..UOO"
   1538  e9c8		       cf cf cf ff*	      DC.B	$cf,$cf,$cf,$ff,$55,$c3,$c3,$c3	; "OOO.UCCC"
   1539  e9d0		       55 f0 f0 cf*	      DC.B	$55,$f0,$f0,$cf,$56,$56,$56,$55	; "UppOVVVU"
   1540  e9d8		       ff ff 55 03*	      DC.B	$ff,$ff,$55,$03,$03,$03,$03,$03	; "..U....."
   1541  e9e0		       03 03 ff ff*	      DC.B	$03,$03,$ff,$ff,$ff,$03,$03,$03	; "........"
   1542  e9e8		       03 03 03 03*	      DC.B	$03,$03,$03,$03,$03,$03,$03,$03	; "........"
   1543  e9f0		       03 03 03 03*	      DC.B	$03,$03,$03,$03,$03,$00,$ab,$03	; "......+."
   1544  e9f8		       57 03 03 03*	      DC.B	$57,$03,$03,$03,$03,$07,$03,$03	; "W......."
   1545  ea00		       03 03 03 03*	      DC.B	$03,$03,$03,$03,$03,$03,$03,$03	; "........"
   1546  ea08		       03 03 aa ff*	      DC.B	$03,$03,$aa,$ff,$ff,$ff,$ff,$ff	; "..*....."
   1547  ea10
   1548  ea10
   1549  ea10				   verb_adr_l
   1550  ea10		       17 ff ff 19*	      DC.B	<begin_line,$ff,$ff,<colon,<list_cmd,<list_comman,<list_all,<Teff2
   1551  ea18		       ec 87 6f ad*	      DC.B	<Tefec,<del_cmd,<del_comma,<new_cmd,<clr,<auto_cmd,<auto_com,<man_cmd
   1552  ea20		       80 96 85 82*	      DC.B	<Tef80,<Tef96,<add,< subtract,<mult_op,<divide,<eq_op,<neq_op
   1553  ea28		       13 06 0b 4a*	      DC.B	<Tec13,< Tec06,< Tec0b,<neq_op,<Tec01,< Tec40,< Tec47,<mod_op
   1554  ea30					      IFCONST	HUSTNBASIC
   1555  ea30		       a6 ff 23 09*	      DC.B	<bogus_eea6,$ff,<left_paren,<comma_substr,<goto_stmt,<Te816,<string_input,<input_num_comma
   1556  ea38				  -	      ELSE
   1557  ea38				  -	      DC.B	$00,$ff,<left_paren,<comma_substr,<goto_stmt,<Te816,<string_input,<input_num_comma
   1558  ea38					      ENDIF
   1559  ea38		       ff ff fb ff*	      DC.B	$ff,$ff,<paren_substr,$ff,$ff,<num_array_subs,<peek_fn,<rnd_fn
   1560  ea40		       59 50 00 ff*	      DC.B	<sgn_fn,<abs_fn,$00,$ff,<left_paren,<unary_pos,<negate,<not_op
   1561  ea48		       23 d7 1c 22*	      DC.B	<left_paren,<string_eq,<string_neq,<len_fn,<bogus_eec2,<Teeae,<Teeba,<left_paren
   1562  ea50		       ff ff 21 30*	      DC.B	$ff,$ff,<str_arr_dest,<dim_str,<dim_num,<print_str,<print_num,<print_semi
   1563  ea58		       00 c1 ff ff*	      DC.B	<print_str_comma,<print_com_num,$ff,$ff,$ff,<call_stmt,<dim_str,<dim_num
   1564  ea60		       a4 d3 b6 bc*	      DC.B	<tab_fn,<end_stmt,<string_input,<input_prompt,<input_num_stmt,<for_stmt,<var_assign,<to_clause
   1565  ea68		       7e d8 d8 a5*	      DC.B	<Te97e,<next_stmt,<next_stmt,<return_stmt,<gosub_stmt,$ff,<Te816,<goto_stmt
   1566  ea70		       28 03 c4 1d*	      DC.B	<if_stmt,<print_str,<print_num,<print_cr,<poke_stmt,<Tef0c,<Tee4e,<poke_stmt
   1567  ea78		       3e 00 a6 b0*	      DC.B	<plot_comma,<poke_stmt,<bogus_eea6,<Teeb0,<poke_stmt,<Teebc,<Teec6,<vtab_stmt
   1568  ea80		       8c 01 27 ff*	      DC.B	<string_lit,<var_assign,<right_paren,$ff,$ff,$ff,$ff,$ff
   1569  ea88				   verb_adr_h
   1570  ea88		       e8 ff ff e8*	      DC.B	>begin_line,$ff,$ff,>colon,>list_cmd,>list_comman,>list_all,>Teff2
   1571  ea90		       ef e3 e3 e5*	      DC.B	>Tefec,>del_cmd,>del_comma,>new_cmd,>clr,>auto_cmd,>auto_com,>man_cmd
   1572  ea98		       ef ef e7 e7*	      DC.B	>Tef80,>Tef96,>add,> subtract,>mult_op,>divide,>eq_op,>neq_op
   1573  eaa0		       ec ec ec e7*	      DC.B	>Tec13,> Tec06,> Tec0b,>neq_op,>Tec01,> Tec40,> Tec47,>mod_op
   1574  eaa8					      IFCONST	HUSTNBASIC
   1575  eaa8		       ee ff e8 e1*	      DC.B	>bogus_eea6,$ff,>left_paren,>comma_substr,>goto_stmt,>Te816,>string_input,>input_num_comma
   1576  eab0				  -	      ELSE
   1577  eab0				  -	      DC.B	$0,$ff,>left_paren,>comma_substr,>goto_stmt,>Te816,>string_input,>input_num_comma
   1578  eab0					      ENDIF
   1579  eab0		       ff ff e0 ff*	      DC.B	$ff,$ff,>paren_substr,$ff,$ff,>num_array_subs,>peek_fn,>rnd_fn
   1580  eab8		       e7 e7 00 ff*	      DC.B	>sgn_fn,>abs_fn,$00,$ff,>left_paren,>unary_pos,>negate,>not_op
   1581  eac0		       e8 e1 e2 ee*	      DC.B	>left_paren,>string_eq,>string_neq,>len_fn,>bogus_eec2,>Teeae,>Teeba,>left_paren
   1582  eac8		       ff ff e1 e1*	      DC.B	$ff,$ff,>str_arr_dest,>dim_str,>dim_num,>print_str,>print_num,>print_semi
   1583  ead0		       ee e7 ff ff*	      DC.B	>print_str_comma,>print_com_num,$ff,$ff,$ff,>call_stmt,>dim_str,>dim_num
   1584  ead8		       e7 e8 ef ef*	      DC.B	>tab_fn,>end_stmt,>string_input,>input_prompt,>input_num_stmt,>for_stmt,>var_assign,>to_clause
   1585  eae0		       e9 e8 e8 e8*	      DC.B	>Te97e,>next_stmt,>next_stmt,>return_stmt,>gosub_stmt,$ff,>Te816,>goto_stmt
   1586  eae8		       e8 ee e7 e8*	      DC.B	>if_stmt,>print_str,>print_num,>print_cr,>poke_stmt,>Tef0c,>Tee4e,>poke_stmt
   1587  eaf0		       ee ef ee ee*	      DC.B	>plot_comma,>poke_stmt,>bogus_eea6,>Teeb0,>poke_stmt,>Teebc,>Teec6,>vtab_stmt
   1588  eaf8		       e1 e8 e8 ff*	      DC.B	>string_lit,>var_assign,>right_paren,$ff,$ff,$ff,$ff,$ff
   1589  eb00		       be b3 b2 b7*error_msg_tbl DC.B	$be,$b3,$b2,$b7,$b6,$37,$d4,$cf	; ">32767TO"
   1590  eb08		       cf a0 cc cf*	      DC.B	$cf,$a0,$cc,$cf,$ce,$47,$d3,$d9	; "O LONGSY"
   1591  eb10		       ce d4 c1 58*	      DC.B	$ce,$d4,$c1,$58,$cd,$c5,$cd,$a0	; "NTAXMEM "
   1592  eb18		       c6 d5 cc 4c*	      DC.B	$c6,$d5,$cc,$4c,$d4,$cf,$cf,$a0	; "FULLTOO "
   1593  eb20		       cd c1 ce d9*	      DC.B	$cd,$c1,$ce,$d9,$a0,$d0,$c1,$d2	; "MANY PAR"
   1594  eb28		       c5 ce 53 d3*	      DC.B	$c5,$ce,$53,$d3,$d4,$d2,$c9,$ce	; "ENSSTRIN"
   1595  eb30		       47 ce cf a0*	      DC.B	$47,$ce,$cf,$a0,$c5,$ce,$44,$c2	; "GNO ENDB"
   1596  eb38		       c1 c4 a0 c2*	      DC.B	$c1,$c4,$a0,$c2,$d2,$c1,$ce,$c3	; "AD BRANC"
   1597  eb40		       48 be b8 a0*	      DC.B	$48,$be,$b8,$a0,$c7,$cf,$d3,$d5	; "H>8 GOSU"
   1598  eb48		       c2 53 c2 c1*	      DC.B	$c2,$53,$c2,$c1,$c4,$a0,$d2,$c5	; "BSBAD RE"
   1599  eb50		       d4 d5 d2 4e*	      DC.B	$d4,$d5,$d2,$4e,$be,$b8,$a0,$c6	; "TURN>8 F"
   1600  eb58		       cf d2 53 c2*	      DC.B	$cf,$d2,$53,$c2,$c1,$c4,$a0,$ce	; "ORSBAD N"
   1601  eb60		       c5 d8 54 d3*	      DC.B	$c5,$d8,$54,$d3,$d4,$cf,$d0,$d0	; "EXTSTOPP"
   1602  eb68		       c5 c4 a0 c1*	      DC.B	$c5,$c4,$a0,$c1,$d4,$20,$aa,$aa	; "ED AT **"
   1603  eb70		       aa 20 a0 c5*	      DC.B	$aa,$20,$a0,$c5,$d2,$d2,$0d,$be	; "*  ERR.>"
   1604  eb78		       b2 b5 35 d2*	      DC.B	$b2,$b5,$35,$d2,$c1,$ce,$c7,$45	; "255RANGE"
   1605  eb80		       c4 c9 4d d3*	      DC.B	$c4,$c9,$4d,$d3,$d4,$d2,$a0,$cf	; "DIMSTR O"
   1606  eb88		       d6 c6 4c dc*	      DC.B	$d6,$c6,$4c,$dc,$0d,$d2,$c5,$d4	; "VFL\.RET"
   1607  eb90		       d9 d0 c5 a0*	      DC.B	$d9,$d0,$c5,$a0,$cc,$c9,$ce,$c5	; "YPE LINE"
   1608  eb98		       8d 3f		      DC.B	$8d,$3f	; ".?"
   1609  eb9a		       46 d9	   Leb9a      LSR	run_flag
   1610  eb9c		       90 03		      BCC	Leba1
   1611  eb9e		       4c c3 e8 	      JMP	Le8c3
   1612  eba1		       a6 cf	   Leba1      LDX	acc+1
   1613  eba3		       9a		      TXS
   1614  eba4		       a6 ce		      LDX	acc
   1615  eba6		       a0 8d		      LDY	#$8d	; 141 .
   1616  eba8		       d0 02		      BNE	Lebac
   1617  ebaa
   1618  ebaa		       a0 99	   input_num_stmt LDY	#$99	; 153 .
   1619  ebac		       20 c4 e3    Lebac      JSR	Se3c4
   1620  ebaf		       86 ce		      STX	acc
   1621  ebb1		       ba		      TSX
   1622  ebb2		       86 cf		      STX	acc+1
   1623  ebb4		       a0 fe		      LDY	#$fe	; 254 ~
   1624  ebb6		       84 d9		      STY	run_flag
   1625  ebb8		       c8		      INY
   1626  ebb9		       84 c8		      STY	text_index
   1627  ebbb		       20 99 e2 	      JSR	Se299
   1628  ebbe		       84 f1		      STY	token_index
   1629  ebc0		       a2 20		      LDX	#$20	; 32  
   1630  ebc2		       a9 30		      LDA	#$30	; 48 0
   1631  ebc4		       20 91 e4 	      JSR	Se491
   1632  ebc7		       e6 d9		      INC	run_flag
   1633  ebc9		       a6 ce		      LDX	acc
   1634  ebcb
   1635  ebcb		       a4 c8	   input_num_comma LDY	text_index
   1636  ebcd		       0a		      ASL
   1637  ebce		       85 ce	   Lebce      STA	acc
   1638  ebd0		       c8		      INY
   1639  ebd1		       b9 00 02 	      LDA	buffer,Y
   1640  ebd4		       c9 74		      CMP	#$74	; 116 t
   1641  ebd6		       f0 d2		      BEQ	input_num_stmt
   1642  ebd8		       49 b0		      EOR	#$b0	; 176 0
   1643  ebda		       c9 0a		      CMP	#$0a	; 10 .
   1644  ebdc		       b0 f0		      BCS	Lebce
   1645  ebde		       c8		      INY
   1646  ebdf		       c8		      INY
   1647  ebe0		       84 c8		      STY	text_index
   1648  ebe2		       b9 00 02 	      LDA	buffer,Y
   1649  ebe5		       48		      PHA
   1650  ebe6		       b9 ff 01 	      LDA	buffer-1,Y
   1651  ebe9		       a0 00		      LDY	#$00	; 0 .
   1652  ebeb		       20 08 e7 	      JSR	push_ya_noun_stk
   1653  ebee		       68		      PLA
   1654  ebef		       95 a0		      STA	noun_stk_h_int,X
   1655  ebf1		       a5 ce		      LDA	acc
   1656  ebf3		       c9 c7		      CMP	#$c7	; 199 G
   1657  ebf5		       d0 03		      BNE	Lebfa
   1658  ebf7		       20 6f e7 	      JSR	negate
   1659  ebfa		       4c 01 e8    Lebfa      JMP	var_assign
   1660  ebfd		       ff ff ff 50	      DC.B	$ff,$ff,$ff,$50	; "...P"
   1661  ec01
   1662  ec01		       20 13 ec    Tec01      JSR	Tec13
   1663  ec04		       d0 15		      BNE	Lec1b
   1664  ec06
   1665  ec06		       20 0b ec    Tec06      JSR	Tec0b
   1666  ec09		       d0 10		      BNE	Lec1b
   1667  ec0b
   1668  ec0b		       20 82 e7    Tec0b      JSR	subtract
   1669  ec0e		       20 6f e7 	      JSR	negate
   1670  ec11		       50 03		      BVC	Lec16
   1671  ec13
   1672  ec13		       20 82 e7    Tec13      JSR	subtract
   1673  ec16		       20 59 e7    Lec16      JSR	sgn_fn
   1674  ec19		       56 50		      LSR	noun_stk_l,X
   1675  ec1b		       4c 36 e7    Lec1b      JMP	not_op
   1676  ec1e		       ff ff		      DC.B	$ff,$ff	; ".."
   1677  ec20		       c1 ff 7f d1*syntabl_index DC.B	$c1,$ff,$7f,$d1,$cc,$c7,$cf,$ce	; "A..QLGON"
   1678  ec28		       c5 9a 98 8b*	      DC.B	$c5,$9a,$98,$8b,$96,$95,$93,$bf	; "E......?"
   1679  ec30		       b2 32 2d 2b*	      DC.B	$b2,$32,$2d,$2b,$bc,$b0,$ac,$be	; "22-+<0,>"
   1680  ec38		       35 8e 61 ff*	      DC.B	$35,$8e,$61,$ff,$ff,$ff,$dd,$fb	; "5.a...]{"
   1681  ec40
   1682  ec40		       20 c9 ef    Tec40      JSR	Sefc9
   1683  ec43		       15 4f		      ORA	rnd+1,X
   1684  ec45		       10 05		      BPL	Lec4c
   1685  ec47
   1686  ec47		       20 c9 ef    Tec47      JSR	Sefc9
   1687  ec4a		       35 4f		      AND	rnd+1,X
   1688  ec4c		       95 50	   Lec4c      STA	noun_stk_l,X
   1689  ec4e		       10 cb		      BPL	Lec1b
   1690  ec50		       4c c9 ef 	      JMP	Sefc9
   1691  ec53		       40 60 8d 60*	      DC.B	$40,$60,$8d,$60,$8b,$00,$7e,$8c	; "@`.`..~."
   1692  ec5b		       33 00 00 60*	      DC.B	$33,$00,$00,$60,$03,$bf,$12,$00	; "3..`.?.."
   1693  ec63		       40 89 c9 47*	      DC.B	$40,$89,$c9,$47,$9d,$17,$68,$9d	; "@.IG..h."
   1694  ec6b		       0a 00 40 60*	      DC.B	$0a,$00,$40,$60,$8d,$60,$8b,$00	; "..@`.`.."
   1695  ec73		       7e 8c 3c 00*	      DC.B	$7e,$8c,$3c,$00,$00,$60,$03,$bf	; "~.<..`.?"
   1696  ec7b		       1b 4b 67 b4*	      DC.B	$1b,$4b,$67,$b4,$a1,$07,$8c,$07	; ".Kg4!..."
   1697  ec83		       ae a9 ac a8*	      DC.B	$ae,$a9,$ac,$a8,$67,$8c,$07,$b4	; ".),(g..4"
   1698  ec8b		       af ac b0 67*	      DC.B	$af,$ac,$b0,$67,$9d,$b2,$af,$ac	; "/,0g.2/,"
   1699  ec93		       af a3 67 8c*	      DC.B	$af,$a3,$67,$8c,$07,$a5,$ab,$af	; "/#g..%+/"
   1700  ec9b		       b0 f4 ae a9*	      DC.B	$b0,$f4,$ae,$a9,$b2,$b0,$7f,$0e	; "0t.)20.."
   1701  eca3		       27 b4 ae a9*	      DC.B	$27,$b4,$ae,$a9,$b2,$b0,$7f,$0e	; "'4.)20.."
   1702  ecab		       28 b4 ae a9*	      DC.B	$28,$b4,$ae,$a9,$b2,$b0,$64,$07	; "(4.)20d."
   1703  ecb3		       a6 a9 67 af*	      DC.B	$a6,$a9,$67,$af,$b4,$af,$a7,$78	; "&)g/4/'x"
   1704  ecbb		       b4 a5 ac 78*	      DC.B	$b4,$a5,$ac,$78,$7f,$02,$ad,$a5	; "4%,x..-%"
   1705  ecc3		       b2 67 a2 b5*	      DC.B	$b2,$67,$a2,$b5,$b3,$af,$a7,$ee	; "2g"53/'n"
   1706  eccb		       b2 b5 b4 a5*	      DC.B	$b2,$b5,$b4,$a5,$b2,$7e,$8c,$39	; "254%2~.9"
   1707  ecd3		       b4 b8 a5 ae*	      DC.B	$b4,$b8,$a5,$ae,$67,$b0,$a5,$b4	; "48%.g0%4"
   1708  ecdb		       b3 27 af b4*	      DC.B	$b3,$27,$af,$b4,$07,$9d,$19,$b2	; "3'/4...2"
   1709  ece3		       af a6 7f 05*	      DC.B	$af,$a6,$7f,$05,$37,$b4,$b5,$b0	; "/&..7450"
   1710  eceb		       ae a9 7f 05*	      DC.B	$ae,$a9,$7f,$05,$28,$b4,$b5,$b0	; ".)..(450"
   1711  ecf3		       ae a9 7f 05*	      DC.B	$ae,$a9,$7f,$05,$2a,$b4,$b5,$b0	; ".)..*450"
   1712  ecfb		       ae a9 e4 ae*	      DC.B	$ae,$a9,$e4,$ae,$a5,$00,$ff,$ff	; ".)d.%..."
   1713  ed03		       47 a2 a1 b4*syntabl2   DC.B	$47,$a2,$a1,$b4,$7f,$0d,$30,$ad	; "G"!4..0-"
   1714  ed0b		       a9 a4 7f 0d*	      DC.B	$a9,$a4,$7f,$0d,$23,$ad,$a9,$a4	; ")$..#-)$"
   1715  ed13		       67 ac ac a1*	      DC.B	$67,$ac,$ac,$a1,$a3,$00,$40,$80	; "g,,!#.@."
   1716  ed1b		       c0 c1 80 00*	      DC.B	$c0,$c1,$80,$00,$47,$8c,$68,$8c	; "@A..G.h."
   1717  ed23		       db 67 9b 68*	      DC.B	$db,$67,$9b,$68,$9b,$50,$8c,$63	; "[g.h.P.c"
   1718  ed2b		       8c 7f 01 51*	      DC.B	$8c,$7f,$01,$51,$07,$88,$29,$84	; "...Q..)."
   1719  ed33		       80 c4 80 57*	      DC.B	$80,$c4,$80,$57,$71,$07,$88,$14	; ".D.Wq..."
   1720  ed3b		       ed a5 ad af*	      DC.B	$ed,$a5,$ad,$af,$ac,$ed,$a5,$ad	; "m%-/,m%-"
   1721  ed43		       a9 a8 f2 af*	      DC.B	$a9,$a8,$f2,$af,$ac,$af,$a3,$71	; ")(r/,/#q"
   1722  ed4b		       08 88 ae a5*	      DC.B	$08,$88,$ae,$a5,$ac,$68,$83,$08	; "...%,h.."
   1723  ed53		       68 9d 08 71*	      DC.B	$68,$9d,$08,$71,$07,$88,$60,$76	; "h..q..`v"
   1724  ed5b		       b4 af ae 76*	      DC.B	$b4,$af,$ae,$76,$8d,$76,$8b,$51	; "4/.v.v.Q"
   1725  ed63		       07 88 19 b8*	      DC.B	$07,$88,$19,$b8,$a4,$ae,$b2,$f2	; "...8$.2r"
   1726  ed6b		       b3 b5 f3 a2*	      DC.B	$b3,$b5,$f3,$a2,$a1,$ee,$a7,$b3	; "35s"!n'3"
   1727  ed73		       e4 ae b2 eb*	      DC.B	$e4,$ae,$b2,$eb,$a5,$a5,$b0,$51	; "d.2k%%0Q"
   1728  ed7b		       07 88 39 81*	      DC.B	$07,$88,$39,$81,$c1,$4f,$7f,$0f	; "..9.AO.."
   1729  ed83		       2f 00 51 06*	      DC.B	$2f,$00,$51,$06,$88,$29,$c2,$0c	; "/.Q..)B."
   1730  ed8b		       82 57 8c 6a*	      DC.B	$82,$57,$8c,$6a,$8c,$42,$ae,$a5	; ".W.j.B.%"
   1731  ed93		       a8 b4 60 ae*	      DC.B	$a8,$b4,$60,$ae,$a5,$a8,$b4,$4f	; "(4`.%(4O"
   1732  ed9b		       7e 1e 35 8c*	      DC.B	$7e,$1e,$35,$8c,$27,$51,$07,$88	; "~.5.'Q.."
   1733  eda3		       09 8b fe e4*	      DC.B	$09,$8b,$fe,$e4,$af,$ad,$f2,$af	; "..~d/-r/"
   1734  edab		       e4 ae a1 dc*	      DC.B	$e4,$ae,$a1,$dc,$de,$9c,$dd,$9c	; "d.!\^.]."
   1735  edb3		       de dd 9e c3*	      DC.B	$de,$dd,$9e,$c3,$dd,$cf,$ca,$cd	; "^].C]OJM"
   1736  edbb		       cb 00 47 9d*	      DC.B	$cb,$00,$47,$9d,$ad,$a5,$ad,$af	; "K.G.-%-/"
   1737  edc3		       ac 76 9d ad*	      DC.B	$ac,$76,$9d,$ad,$a5,$ad,$a9,$a8	; ",v.-%-)("
   1738  edcb		       e6 a6 af 60*	      DC.B	$e6,$a6,$af,$60,$8c,$20,$af,$b4	; "f&/`. /4"
   1739  edd3		       b5 a1 f2 ac*	      DC.B	$b5,$a1,$f2,$ac,$a3,$f2,$a3,$b3	; "5!r,#r#3"
   1740  eddb		       60 8c 20 ac*	      DC.B	$60,$8c,$20,$ac,$a5,$a4,$ee,$b5	; "`. ,%$n5"
   1741  ede3		       b2 60 ae b5*	      DC.B	$b2,$60,$ae,$b5,$b2,$f4,$b3,$a9	; "2`.52t3)"
   1742  edeb		       ac 60 8c 20*	      DC.B	$ac,$60,$8c,$20,$b4,$b3,$a9,$ac	; ",`. 43),"
   1743  edf3		       7a 7e 9a 22*	      DC.B	$7a,$7e,$9a,$22,$20,$00,$60,$03	; "z~." .`."
   1744  edfb		       bf 60 03 bf*	      DC.B	$bf,$60,$03,$bf,$1f	; "?`.?."
   1745  ee00
   1746  ee00		       20 b1 e7    print_str_comma JSR	tabout
   1747  ee03
   1748  ee03		       e8	   print_str  INX
   1749  ee04		       e8		      INX
   1750  ee05		       b5 4f		      LDA	rnd+1,X
   1751  ee07		       85 da		      STA	aux
   1752  ee09		       b5 77		      LDA	syn_stk_h+31,X
   1753  ee0b		       85 db		      STA	aux+1
   1754  ee0d		       b4 4e		      LDY	rnd,X
   1755  ee0f		       98	   Lee0f      TYA
   1756  ee10		       d5 76		      CMP	syn_stk_h+30,X
   1757  ee12		       b0 09		      BCS	Lee1d
   1758  ee14		       b1 da		      LDA	(aux),Y
   1759  ee16		       20 c9 e3 	      JSR	cout
   1760  ee19		       c8		      INY
   1761  ee1a		       4c 0f ee 	      JMP	Lee0f
   1762  ee1d		       a9 ff	   Lee1d      LDA	#$ff	; 255 .
   1763  ee1f		       85 d5		      STA	cr_flag
   1764  ee21		       60		      RTS
   1765  ee22
   1766  ee22		       e8	   len_fn     INX
   1767  ee23		       a9 00		      LDA	#$00	; 0 .
   1768  ee25		       95 78		      STA	noun_stk_h_str,X
   1769  ee27		       95 a0		      STA	noun_stk_h_int,X
   1770  ee29		       b5 77		      LDA	syn_stk_h+31,X
   1771  ee2b		       38		      SEC
   1772  ee2c		       f5 4f		      SBC	rnd+1,X
   1773  ee2e		       95 50		      STA	noun_stk_l,X
   1774  ee30		       4c 23 e8 	      JMP	left_paren
   1775  ee33		       ff		      DC.B	$ff	; "."
   1776  ee34
   1777  ee34		       20 15 e7    getbyte    JSR	get16bit
   1778  ee37		       a5 cf		      LDA	acc+1
   1779  ee39		       d0 28		      BNE	gr_255_err
   1780  ee3b		       a5 ce		      LDA	acc
   1781  ee3d				   Tee3d
   1782  ee3d		       60		      RTS
   1783  ee3e				   plot_comma
   1784  ee3e					      IFCONST	HUSTNBASIC
   1785  ee3e		       20 08 e7 	      JSR	push_ya_noun_stk
   1786  ee41		       94 a0		      STY	$a0,X
   1787  ee43				   Tee43
   1788  ee43		       a5 d0		      LDA	$D0
   1789  ee45		       d0 04		      BNE	Tee4b
   1790  ee47		       c6 d1		      DEC	$D1
   1791  ee49		       30 f2		      BMI	Tee3d
   1792  ee4b				   Tee4b
   1793  ee4b		       c6 d0		      DEC	$D0
   1794  ee4d							;	      LDA	$D2
   1795  ee4d		       a5		      DC.b	$a5
   1796  ee4e				   Tee4e		;MJW wrong address, so we have to break this instruction
   1797  ee4e		       d2		      DC.b	$d2
   1798  ee4f
   1799  ee4f		       a0 00		      LDY	#$00
   1800  ee51		       20 08 e7 	      JSR	push_ya_noun_stk
   1801  ee54				   man_cmd
   1802  ee54		       a5 d3		      LDA	$D3
   1803  ee56							;	      STA	$A0,X
   1804  ee56		       95		      DC.b	$95
   1805  ee57				   vtab_stmt
   1806  ee57		       a0		      DC.b	$a0
   1807  ee58		       20 22 e2 	      JSR	mult_op
   1808  ee5b		       4c 43 ee 	      JMP	Tee43
   1809  ee5e				  -	      ELSE
   1810  ee5e				  -
   1811  ee5e				  -	      JSR	getbyte
   1812  ee5e				  -	      LDY	text_index
   1813  ee5e				  -	      CMP	#$30	; 48 0
   1814  ee5e				  -	      BCS	range_err
   1815  ee5e				  -	      CPY	#$28	; 40 (
   1816  ee5e				  -	      BCS	range_err
   1817  ee5e				  -	      RTS
   1818  ee5e				  -	      NOP
   1819  ee5e				  -	      NOP
   1820  ee5e				  -
   1821  ee5e				  -
   1822  ee5e				  -Tee4e      JSR	getbyte
   1823  ee5e				  -	      RTS
   1824  ee5e					      ENDIF
   1825  ee5e							;
   1826  ee5e				  -	      IFCONST	SNDERBASIC	;WSANDER BASIC HERE
   1827  ee5e				  -	      NOP
   1828  ee5e				  -	      NOP
   1829  ee5e				  -
   1830  ee5e				  -man_cmd    LSR	auto_flag
   1831  ee5e				  -	      RTS
   1832  ee5e				  -
   1833  ee5e				  -vtab_stmt  JSR	getbyte
   1834  ee5e				  -	      CMP	#$18	; 24 .
   1835  ee5e				  -	      BCS	range_err
   1836  ee5e				  -	      STA	cv
   1837  ee5e				  -	      RTS
   1838  ee5e				  -	      NOP
   1839  ee5e				  -	      NOP
   1840  ee5e					      ELSE		;OTHER BASIC
   1841  ee5e				  -	      IFNCONST	HUSTNBASIC	; omit next 12 bytes if Hustn basic	
   1842  ee5e				  -	      nop
   1843  ee5e				  -Lee53
   1844  ee5e				  -	      txa
   1845  ee5e				  -man_cmd
   1846  ee5e				  -	      ldx	#$1
   1847  ee5e				  -Lee56
   1848  ee5e				  -			;	ldy	acc,x
   1849  ee5e				  -	      DC.b	$B4
   1850  ee5e				  -vtab_stmt		;wrong address MJW
   1851  ee5e				  -	      DC.b	acc
   1852  ee5e				  -
   1853  ee5e				  -	      sty	himem,x
   1854  ee5e				  -	      ldy	zp48,x
   1855  ee5e				  -	      sty	pp,x
   1856  ee5e				  -
   1857  ee5e				  -	      dex
   1858  ee5e				  -	      IFCONST	BRIELBASIC	;BRIEL BASIC HERE
   1859  ee5e				  -	      beq	Lee56
   1860  ee5e				  -	      ELSE
   1861  ee5e				  -	      beq	man_cmd
   1862  ee5e				  -	      ENDIF
   1863  ee5e				  -	      tax
   1864  ee5e				  -	      rts
   1865  ee5e					      ELSE		;HUSTNBASIC
   1866  ee5e		       85 25		      STA	cv
   1867  ee60		       60		      RTS
   1868  ee61		       ea		      NOP
   1869  ee62		       ea		      NOP
   1870  ee63					      ENDIF
   1871  ee63					      ENDIF
   1872  ee63		       a0 77	   gr_255_err LDY	#$77	; 119 w
   1873  ee65		       4c e0 e3    go_errmess_5 JMP	print_err_msg
   1874  ee68		       a0 7b	   range_err  LDY	#$7b	; 123 {
   1875  ee6a		       d0 f9		      BNE	go_errmess_5
   1876  ee6c
   1877  ee6c		       20 54 e2    See6c      JSR	Se254
   1878  ee6f		       a5 da		      LDA	aux
   1879  ee71		       d0 07		      BNE	Lee7a
   1880  ee73		       a5 db		      LDA	aux+1
   1881  ee75		       d0 03		      BNE	Lee7a
   1882  ee77		       4c 7e e7 	      JMP	Le77e
   1883  ee7a		       06 ce	   Lee7a      ASL	acc
   1884  ee7c		       26 cf		      ROL	acc+1
   1885  ee7e		       26 e6		      ROL	p3
   1886  ee80		       26 e7		      ROL	p3+1
   1887  ee82		       a5 e6		      LDA	p3
   1888  ee84		       c5 da		      CMP	aux
   1889  ee86		       a5 e7		      LDA	p3+1
   1890  ee88		       e5 db		      SBC	aux+1
   1891  ee8a		       90 0a		      BCC	Lee96
   1892  ee8c		       85 e7		      STA	p3+1
   1893  ee8e		       a5 e6		      LDA	p3
   1894  ee90		       e5 da		      SBC	aux
   1895  ee92		       85 e6		      STA	p3
   1896  ee94		       e6 ce		      INC	acc
   1897  ee96		       88	   Lee96      DEY
   1898  ee97		       d0 e1		      BNE	Lee7a
   1899  ee99		       60		      RTS
   1900  ee9a		       ff ff ff ff*	      DC.B	$ff,$ff,$ff,$ff,$ff,$ff	; "......"
   1901  eea0
   1902  eea0		       20 15 e7    call_stmt  JSR	get16bit
   1903  eea3		       6c ce 00 	      JMP	(acc)
   1904  eea6				  -	      IFCONST	BRIELBASIC	;BRIEL BASIC
   1905  eea6				  -bogus_eea6
   1906  eea6				  -	      LDA	himem
   1907  eea6				  -	      BNE	Leeac
   1908  eea6				  -	      dec	zp4d
   1909  eea6				  -Leeac
   1910  eea6				  -	      dec	himem
   1911  eea6				  -Teeae
   1912  eea6				  -	      lda	zp48
   1913  eea6				  -Teeb0
   1914  eea6				  -	      bne	Leeb4
   1915  eea6				  -	      dec	zp49
   1916  eea6				  -Leeb4
   1917  eea6				  -	      dec	zp48
   1918  eea6				  -Leeb6
   1919  eea6				  -	      ldy	#$00
   1920  eea6				  -	      lda	(himem),y
   1921  eea6				  -Teeba
   1922  eea6				  -	      sta	(zp48),y
   1923  eea6				  -Teebc
   1924  eea6				  -	      lda	pp
   1925  eea6				  -	      cmp	himem
   1926  eea6				  -	      lda	zpcb
   1927  eea6				  -bogus_eec2
   1928  eea6				  -	      sbc	zp4d
   1929  eea6				  -	      bcc	bogus_eea6
   1930  eea6				  -Teec6      jmp	Lee53
   1931  eea6				  -
   1932  eea6				  -
   1933  eea6				  -
   1934  eea6					      ELSE		;SANDER/HUSTON (NOT BREIL) BASIC HERE
   1935  eea6
   1936  eea6
   1937  eea6				   bogus_eea6		;DC.B	$20,$34,$ee,$c5,$c8,$90,$bb,$85	; " 4nEH.;."
   1938  eea6				  -	      IFCONST	SNDERBASIC	;WSANDER BASIC HERE
   1939  eea6				  -	      JSR	getbyte
   1940  eea6				  -	      CMP	text_index
   1941  eea6				  -	      BCC	range_err
   1942  eea6				  -			;		sta	LOCZERO
   1943  eea6				  -	      DC.b	$85
   1944  eea6				  -
   1945  eea6				  -Teeae      LDA	himem+1
   1946  eea6				  -
   1947  eea6				  -Teeb0      PHA
   1948  eea6				  -	      LDA	himem
   1949  eea6				  -	      JSR	push_ya_noun_stk
   1950  eea6				  -Leeb6
   1951  eea6				  -	      PLA
   1952  eea6				  -	      STA	noun_stk_h_int,X
   1953  eea6				  -	      RTS
   1954  eea6				  -
   1955  eea6				  -Teeba      LDA	lomem+1
   1956  eea6				  -
   1957  eea6				  -Teebc      PHA
   1958  eea6				  -	      LDA	lomem
   1959  eea6				  -	      JMP	Lefb3
   1960  eea6				  -bogus_eec2
   1961  eea6				  -	      LDA	zp85
   1962  eea6				  -	      DC.b	$2D,$60
   1963  eea6				  -Teec6      JSR	getbyte
   1964  eea6					      ELSE		;HUSTON BASIC HERE
   1965  eea6		       20 15 e7 	      JSR	get16bit
   1966  eea9		       a5 cf		      LDA	zpcf
   1967  eeab		       10 08		      BPL	Leeb5
   1968  eead		       98		      TYA
   1969  eeae				   Teeae
   1970  eeae		       ca		      DEX
   1971  eeaf							;		  JSR	push_ya_noun_stk
   1972  eeaf		       20		      DC.b	$20
   1973  eeb0				   Teeb0
   1974  eeb0		       08 e7		      DC.b	$08,$e7
   1975  eeb2
   1976  eeb2		       94 a0		      STY	noun_stk_h_int,x
   1977  eeb4		       60		      rts
   1978  eeb5				   Leeb5
   1979  eeb5							;		  STA	tokndxstk
   1980  eeb5		       85		      DC.b	$85
   1981  eeb6				   Leeb6
   1982  eeb6		       d1		      DC.b	$d1
   1983  eeb7
   1984  eeb7		       a5 ce		      LDA	acc
   1985  eeb9							;		  STA	srch
   1986  eeb9		       85		      DC.b	$85
   1987  eeba				   Teeba
   1988  eeba		       d0		      DC.b	$d0
   1989  eebb
   1990  eebb							;		  JSR	get16bit
   1991  eebb		       20		      DC.b	$20
   1992  eebc				   Teebc
   1993  eebc		       15 e7		      DC.b	$15, $e7
   1994  eebe
   1995  eebe		       a5 ce		      LDA	acc
   1996  eec0		       85 d2		      STA	srch2
   1997  eec2				   bogus_eec2
   1998  eec2		       a5 cf		      LDA	zpcf
   1999  eec4		       85 d3		      STA	$d3
   2000  eec6				   Teec6
   2001  eec6		       a9 01		      LDA	#$01
   2002  eec8		       4c 3e ee 	      JMP	plot_comma
   2003  eecb					      ENDIF
   2004  eecb					      ENDIF
   2005  eecb				  -	      IFNCONST	HUSTNBASIC	; omit next 2 bytes if Hustn basic
   2006  eecb				  -	      CMP	#$28	; 40 (
   2007  eecb					      ENDIF
   2008  eecb		       b0 9b	   Leecb      BCS	range_err
   2009  eecd		       a8		      TAY
   2010  eece		       a5 c8		      LDA	text_index
   2011  eed0		       60		      RTS
   2012  eed1		       ea		      NOP
   2013  eed2		       ea		      NOP
   2014  eed3
   2015  eed3		       98	   print_err_msg2 TYA
   2016  eed4		       aa		      TAX
   2017  eed5		       a0 6e		      LDY	#$6e	; 110 n
   2018  eed7		       20 c4 e3 	      JSR	Se3c4
   2019  eeda		       8a		      TXA
   2020  eedb		       a8		      TAY
   2021  eedc		       20 c4 e3 	      JSR	Se3c4
   2022  eedf		       a0 72		      LDY	#$72	; 114 r
   2023  eee1		       4c c4 e3 	      JMP	Se3c4
   2024  eee4
   2025  eee4		       20 15 e7    Seee4      JSR	get16bit
   2026  eee7		       06 ce	   Leee7      ASL	acc
   2027  eee9		       26 cf		      ROL	acc+1
   2028  eeeb		       30 fa		      BMI	Leee7
   2029  eeed		       b0 dc		      BCS	Leecb
   2030  eeef		       d0 04		      BNE	Leef5
   2031  eef1		       c5 ce		      CMP	acc
   2032  eef3		       b0 d6		      BCS	Leecb
   2033  eef5		       60	   Leef5      RTS
   2034  eef6
   2035  eef6				   peek_fn
   2036  eef6				  -	      IFCONST	BLD4APPLE1
   2037  eef6				  -	      JSR	get16bit
   2038  eef6					      ELSE
   2039  eef6		       4c a9 d7 	      JMP	A2PEEK
   2040  eef9					      ENDIF
   2041  eef9		       b1 ce		      LDA	(acc),Y
   2042  eefb		       94 9f		      STY	syn_stk_l+31,X
   2043  eefd		       4c 08 e7 	      JMP	push_ya_noun_stk
   2044  ef00
   2045  ef00				   poke_stmt
   2046  ef00				  -	      IFCONST	BLD4APPLE1
   2047  ef00				  -	      JSR	getbyte
   2048  ef00					      ELSE
   2049  ef00		       4c 8c d7 	      JMP	A2POKE
   2050  ef03					      ENDIF
   2051  ef03		       a5 ce		      LDA	acc
   2052  ef05		       48		      PHA
   2053  ef06		       20 15 e7 	      JSR	get16bit
   2054  ef09		       68		      PLA
   2055  ef0a		       91 ce		      STA	(acc),Y
   2056  ef0c
   2057  ef0c		       60	   Tef0c      RTS
   2058  ef0d		       ff ff ff 	      DC.B	$ff,$ff,$ff	; "..."
   2059  ef10
   2060  ef10		       20 6c ee    divide     JSR	See6c
   2061  ef13		       a5 ce		      LDA	acc
   2062  ef15		       85 e6		      STA	p3
   2063  ef17		       a5 cf		      LDA	acc+1
   2064  ef19		       85 e7		      STA	p3+1
   2065  ef1b		       4c 44 e2 	      JMP	Le244
   2066  ef1e
   2067  ef1e		       20 e4 ee    dim_num    JSR	Seee4
   2068  ef21		       4c 34 e1 	      JMP	Le134
   2069  ef24
   2070  ef24		       20 e4 ee    num_array_subs JSR	Seee4
   2071  ef27		       b4 78		      LDY	noun_stk_h_str,X
   2072  ef29		       b5 50		      LDA	noun_stk_l,X
   2073  ef2b		       69 fe		      ADC	#$fe	; 254 ~
   2074  ef2d		       b0 01		      BCS	Lef30
   2075  ef2f		       88		      DEY
   2076  ef30		       85 da	   Lef30      STA	aux
   2077  ef32		       84 db		      STY	aux+1
   2078  ef34		       18		      CLC
   2079  ef35		       65 ce		      ADC	acc
   2080  ef37		       95 50		      STA	noun_stk_l,X
   2081  ef39		       98		      TYA
   2082  ef3a		       65 cf		      ADC	acc+1
   2083  ef3c		       95 78		      STA	noun_stk_h_str,X
   2084  ef3e		       a0 00		      LDY	#$00	; 0 .
   2085  ef40		       b5 50		      LDA	noun_stk_l,X
   2086  ef42		       d1 da		      CMP	(aux),Y
   2087  ef44		       c8		      INY
   2088  ef45		       b5 78		      LDA	noun_stk_h_str,X
   2089  ef47		       f1 da		      SBC	(aux),Y
   2090  ef49		       b0 80		      BCS	Leecb
   2091  ef4b		       4c 23 e8 	      JMP	left_paren
   2092  ef4e
   2093  ef4e		       20 15 e7    rnd_fn     JSR	get16bit
   2094  ef51		       a5 4e		      LDA	rnd
   2095  ef53		       20 08 e7 	      JSR	push_ya_noun_stk
   2096  ef56		       a5 4f		      LDA	rnd+1
   2097  ef58		       d0 04		      BNE	Lef5e
   2098  ef5a		       c5 4e		      CMP	rnd
   2099  ef5c		       69 00		      ADC	#$00	; 0 .
   2100  ef5e		       29 7f	   Lef5e      AND	#$7f	; 127 .
   2101  ef60		       85 4f		      STA	rnd+1
   2102  ef62		       95 a0		      STA	noun_stk_h_int,X
   2103  ef64		       a0 11		      LDY	#$11	; 17 .
   2104  ef66		       a5 4f	   Lef66      LDA	rnd+1
   2105  ef68		       0a		      ASL
   2106  ef69		       18		      CLC
   2107  ef6a		       69 40		      ADC	#$40	; 64 @
   2108  ef6c		       0a		      ASL
   2109  ef6d		       26 4e		      ROL	rnd
   2110  ef6f		       26 4f		      ROL	rnd+1
   2111  ef71		       88		      DEY
   2112  ef72		       d0 f2		      BNE	Lef66
   2113  ef74		       a5 ce		      LDA	acc
   2114  ef76		       20 08 e7 	      JSR	push_ya_noun_stk
   2115  ef79		       a5 cf		      LDA	acc+1
   2116  ef7b		       95 a0		      STA	noun_stk_h_int,X
   2117  ef7d		       4c 7a e2 	      JMP	mod_op
   2118  ef80
   2119  ef80		       20 15 e7    Tef80      JSR	get16bit
   2120  ef83		       a4 ce		      LDY	acc
   2121  ef85				  -	      IFCONST	SNDERBASIC	;SANDER BASIC HERE
   2122  ef85				  -	      CPY	lomem
   2123  ef85				  -	      LDA	acc+1
   2124  ef85				  -	      SBC	lomem+1
   2125  ef85				  -	      BCC	Lefab_efad
   2126  ef85				  -	      STY	himem
   2127  ef85				  -	      LDA	acc+1
   2128  ef85				  -	      STA	himem+1
   2129  ef85				  -Lef93      JMP	new_cmd
   2130  ef85				  -
   2131  ef85				  -Tef96      JSR	get16bit
   2132  ef85				  -	      LDY	acc
   2133  ef85				  -	      CPY	himem
   2134  ef85				  -	      LDA	acc+1
   2135  ef85				  -	      SBC	himem+1
   2136  ef85				  -	      BCS	Lefab_efad
   2137  ef85				  -	      STY	lomem
   2138  ef85				  -	      LDA	acc+1
   2139  ef85				  -	      STA	lomem+1
   2140  ef85				  -	      BCC	Lef93
   2141  ef85				  -Lefab_efad JMP	Leecb
   2142  ef85				  -			;DC.B	;$a5,$4d,$48,$a5,$4c		; "%MH%L" 
   2143  ef85				  -	      lda	zp4d
   2144  ef85				  -	      pha
   2145  ef85				  -	      lda	himem
   2146  ef85					      ELSE
   2147  ef85					      IFCONST	HUSTNBASIC
   2148  ef85		       c4 4a		      CPY	lomem
   2149  ef87		       a5 cf		      LDA	zpcf
   2150  ef89		       e5 4b		      SBC	zp4b
   2151  ef8b		       90 1e		      BCC	Lefab
   2152  ef8d		       84 4c		      STY	himem
   2153  ef8f		       a5 cf		      LDA	zpcf
   2154  ef91		       85 4d		      STA	zp4d
   2155  ef93				   Lef93
   2156  ef93		       4c ad e5 	      JMP	new_cmd
   2157  ef96				   Tef96
   2158  ef96		       20 15 e7 	      JSR	get16bit
   2159  ef99		       a4 ce		      LDY	acc
   2160  ef9b		       c4 4c		      CPY	himem
   2161  ef9d		       a5 cf		      LDA	zpcf
   2162  ef9f		       e5 4d		      SBC	zp4d
   2163  efa1		       b0 08		      BCS	Lefab
   2164  efa3		       84 4a		      STY	lomem
   2165  efa5		       a5 cf		      LDA	zpcf
   2166  efa7		       85 4b		      sta	zp4b
   2167  efa9		       90 e8		      bcc	Lef93
   2168  efab				   Lefab
   2169  efab		       4c cb ee 	      JMP	Leecb
   2170  efae		       a5 4d		      LDA	zp4d
   2171  efb0		       48		      PHA
   2172  efb1		       a5 4c		      LDA	himem
   2173  efb3				  -	      ELSE
   2174  efb3				  -	      cpy	himem
   2175  efb3				  -	      lda	zpcf
   2176  efb3				  -	      sbc	zp4d
   2177  efb3				  -	      bcc	Lefac
   2178  efb3				  -	      sty	zp48
   2179  efb3				  -	      lda	zpcf
   2180  efb3				  -	      sta	zp49
   2181  efb3				  -	      jmp	Leeb6
   2182  efb3				  -Tef96
   2183  efb3				  -	      jsr	get16bit
   2184  efb3				  -	      ldy	acc
   2185  efb3				  -	      cpy	pp
   2186  efb3				  -	      lda	zpcf
   2187  efb3				  -	      sbc	zpcb
   2188  efb3				  -	      bcs	Lefac
   2189  efb3				  -	      sty	lomem
   2190  efb3				  -	      lda	zpcf
   2191  efb3				  -	      sta	zp4b
   2192  efb3				  -	      jmp	clr
   2193  efb3				  -Lefac
   2194  efb3				  -	      jmp	Leecb
   2195  efb3				  -
   2196  efb3				  -Lefab_efad
   2197  efb3				  -	      nop
   2198  efb3				  -	      nop
   2199  efb3				  -	      nop
   2200  efb3				  -	      nop
   2201  efb3					      ENDIF
   2202  efb3					      ENDIF
   2203  efb3		       20 c9 ef    Lefb3      JSR	Sefc9
   2204  efb6
   2205  efb6		       20 71 e1    string_input JSR	input_str
   2206  efb9		       4c bf ef 	      JMP	Lefbf
   2207  efbc
   2208  efbc		       20 03 ee    input_prompt JSR	print_str
   2209  efbf		       a9 ff	   Lefbf      LDA	#$ff	; 255 .
   2210  efc1		       85 c8		      STA	text_index
   2211  efc3		       a9 74		      LDA	#$74	; 116 t
   2212  efc5		       8d 00 02 	      STA	buffer
   2213  efc8		       60		      RTS
   2214  efc9
   2215  efc9		       20 36 e7    Sefc9      JSR	not_op
   2216  efcc		       e8		      INX
   2217  efcd
   2218  efcd		       20 36 e7    Sefcd      JSR	not_op
   2219  efd0		       b5 50		      LDA	noun_stk_l,X
   2220  efd2		       60		      RTS
   2221  efd3
   2222  efd3		       a9 00	   mem_init_4k LDA	#$00	; 0 .
   2223  efd5		       85 4a		      STA	lomem
   2224  efd7		       85 4c		      STA	himem
   2225  efd9		       a9 08		      LDA	#$08	; 8 .
   2226  efdb		       85 4b		      STA	lomem+1
   2227  efdd		       a9 10		      LDA	#$10	; 16 .
   2228  efdf		       85 4d		      STA	himem+1
   2229  efe1		       4c ad e5 	      JMP	new_cmd
   2230  efe4
   2231  efe4		       d5 78	   Sefe4      CMP	noun_stk_h_str,X
   2232  efe6		       d0 01		      BNE	Lefe9
   2233  efe8		       18		      CLC
   2234  efe9		       4c 02 e1    Lefe9      JMP	Le102
   2235  efec
   2236  efec		       20 b7 e5    Tefec      JSR	clr
   2237  efef		       4c 36 e8 	      JMP	run_warm
   2238  eff2
   2239  eff2		       20 b7 e5    Teff2      JSR	clr
   2240  eff5		       4c 5b e8 	      JMP	goto_stmt
   2241  eff8
   2242  eff8		       e0 80	   Seff8      CPX	#$80	; 128 .
   2243  effa		       d0 01		      BNE	Leffd
   2244  effc		       88		      DEY
   2245  effd		       4c 0c e0    Leffd      JMP	Se00c
   2246  f000
   2247  f000
   2248  f000
   2249  f000
------- FILE a2a1emulv5_1.asm
   1672  f000
   1673  f000							;-------------------------------------------------------------------------
   1674  f000							;
   1675  f000							;  The WOZ Monitor for the Apple 1
   1676  f000							;  Written by Steve Wozniak 1976
   1677  f000							;
   1678  f000							;-------------------------------------------------------------------------
   1679  f000
   1680  f000
   1681  f000					      IFNCONST	BLD4RAM
   1682  ff00					      ORG	$FF00
   1683  ff00					      ENDIF
   1684  ff00
   1685  ff00							;-------------------------------------------------------------------------
   1686  ff00							;  Memory declaration
   1687  ff00							;-------------------------------------------------------------------------
   1688  ff00
   1689  ff00
   1690  ff00
   1691  ff00
   1692  ff00
   1693  ff00		       00 24	   XAML       EQU	$24	;Last "opened" location Low
   1694  ff00		       00 25	   XAMH       EQU	$25	;Last "opened" location High
   1695  ff00		       00 26	   STL	      EQU	$26	;Store address Low
   1696  ff00		       00 27	   STH	      EQU	$27	;Store address High
   1697  ff00		       00 28	   L	      EQU	$28	;Hex value parsing Low
   1698  ff00		       00 29	   H	      EQU	$29	;Hex value parsing High
   1699  ff00		       00 2a	   YSAV       EQU	$2A	;Used to see if hex value is given
   1700  ff00		       00 2b	   MODE       EQU	$2B	;$00=XAM, $7F=STOR, $AE=BLOCK XAM
   1701  ff00
   1702  ff00		       02 00	   IN	      EQU	$0200	;Input buffer
   1703  ff00
   1704  ff00				  -	      IFCONST	BLD4APPLE1
   1705  ff00				  -MONDSP     EQU	$D012	;PIA.B display output register
   1706  ff00				  -MONDSPCR   EQU	$D013	;PIA.B display control register
   1707  ff00					      ENDIF
   1708  ff00
   1709  ff00							; KBD b7..b0 are inputs, b6..b0 is ASCII input, b7 is constant high
   1710  ff00							;     Programmed to respond to low to high KBD strobe
   1711  ff00							; DSP b6..b0 are outputs, b7 is input
   1712  ff00							;     CB2 goes low when data is written, returns high when CB1 goes high
   1713  ff00							; Interrupts are enabled, though not used. KBD can be jumpered to IRQ,
   1714  ff00							; whereas DSP can be jumpered to NMI.
   1715  ff00
   1716  ff00
   1717  ff00
   1718  ff00							;-------------------------------------------------------------------------
   1719  ff00							;  Let's get started
   1720  ff00							;
   1721  ff00							;  Remark the RESET routine is only to be entered by asserting the RESET
   1722  ff00							;  line of the system. This ensures that the data direction registers
   1723  ff00							;  are selected.
   1724  ff00							;-------------------------------------------------------------------------
   1725  ff00
   1726  ff00		       d8	   RESET      CLD		;Clear decimal arithmetic mode
   1727  ff01		       58		      CLI
   1728  ff02					      IFNCONST	BLD4APPLE1
   1729  ff02		       20 83 d3 	      JSR	INIT	;init display driver
   1730  ff05					      ENDIF
   1731  ff05		       a0 7f		      LDY	#$7f	;Mask for DSP data direction reg
   1732  ff07				  -	      IFCONST	BLD4APPLE1
   1733  ff07				  -	      STY	MONDSP	; (DDR mode is assumed after reset)
   1734  ff07					      ENDIF
   1735  ff07		       a9 a7		      LDA	#$a7	;KBD and DSP control register mask
   1736  ff09				  -	      IFCONST	BLD4APPLE1
   1737  ff09				  -	      STA	KBDCR	;Enable interrupts, set CA1, CB1 for
   1738  ff09				  -	      STA	MONDSPCR	; positive edge sense/output mode.
   1739  ff09					      ELSE
   1740  ff09		       ea		      NOP
   1741  ff0a		       ea		      NOP
   1742  ff0b		       ea		      NOP
   1743  ff0c		       ea		      NOP
   1744  ff0d		       ea		      NOP
   1745  ff0e		       ea		      NOP
   1746  ff0f					      ENDIF
   1747  ff0f
   1748  ff0f							; Program falls through to the GETLINE routine to save some program bytes
   1749  ff0f							; Please note that Y still holds $7F, which will cause an automatic Escape
   1750  ff0f
   1751  ff0f							;-------------------------------------------------------------------------
   1752  ff0f							; The GETLINE process
   1753  ff0f							;-------------------------------------------------------------------------
   1754  ff0f
   1755  ff0f		       c9 df	   NOTCR      CMP	#BS	;Backspace key?
   1756  ff11		       f0 13		      BEQ	BACKSPACE	;Yes
   1757  ff13		       c9 9b		      CMP	#ESC	;ESC?
   1758  ff15		       f0 03		      BEQ	ESCAPE	;Yes
   1759  ff17		       c8		      INY		;Advance text index
   1760  ff18		       10 0f		      BPL	NEXTCHAR	;Auto ESC if line longer than 127
   1761  ff1a
   1762  ff1a		       a9 5c	   ESCAPE     LDA	#PROMPT	;Print prompt character
   1763  ff1c		       20 ef ff 	      JSR	ECHO	;Output it.
   1764  ff1f
   1765  ff1f		       a9 8d	   GETLINE    LDA	#CR	;Send CR
   1766  ff21		       20 ef ff 	      JSR	ECHO
   1767  ff24
   1768  ff24		       a0 01		      LDY	#0+1	;Start a new input line
   1769  ff26		       88	   BACKSPACE  DEY		;Backup text index
   1770  ff27		       30 f6		      BMI	GETLINE	;Oops, line's empty, reinitialize
   1771  ff29
   1772  ff29				   NEXTCHAR
   1773  ff29				  -	      IFCONST	BLD4APPLE1
   1774  ff29				  -	      LDA	KBDCR	;Wait for key press
   1775  ff29				  -	      BPL	NEXTCHAR	;No key yet!
   1776  ff29				  -	      LDA	KBD	;Clear strobe
   1777  ff29					      ELSE
   1778  ff29		       20 4d d2 	      JSR	A2GETCHAR
   1779  ff2c		       ea		      NOP
   1780  ff2d		       ea		      NOP
   1781  ff2e		       ea		      NOP
   1782  ff2f		       ea		      NOP
   1783  ff30		       ea		      NOP
   1784  ff31					      ENDIF
   1785  ff31		       99 00 02 	      STA	IN,Y	;Add to text buffer
   1786  ff34		       20 ef ff 	      JSR	ECHO	;Display character
   1787  ff37		       c9 8d		      CMP	#CR
   1788  ff39		       d0 d4		      BNE	NOTCR	;It's not CR!
   1789  ff3b
   1790  ff3b							; Line received, now let's parse it
   1791  ff3b
   1792  ff3b		       a0 ff		      LDY	#-1	;Reset text index
   1793  ff3d		       a9 00		      LDA	#0	;Default mode is XAM
   1794  ff3f		       aa		      TAX		;X=0
   1795  ff40
   1796  ff40		       0a	   SETSTOR    ASL		;Leaves $7B if setting STOR mode
   1797  ff41
   1798  ff41		       85 2b	   SETMODE    STA	MODE	;Set mode flags
   1799  ff43
   1800  ff43		       c8	   BLSKIP     INY		;Advance text index
   1801  ff44
   1802  ff44		       b9 00 02    NEXTITEM   LDA	IN,Y	;Get character
   1803  ff47		       c9 8d		      CMP	#CR
   1804  ff49		       f0 d4		      BEQ	GETLINE	;We're done if it's CR!
   1805  ff4b		       c9 ae		      CMP	#$AE	;"."
   1806  ff4d		       90 f4		      BCC	BLSKIP	;Ignore everything below "."!
   1807  ff4f		       f0 f0		      BEQ	SETMODE	;Set BLOCK XAM mode ("." = $AE)
   1808  ff51		       c9 ba		      CMP	#$BA	;":"
   1809  ff53		       f0 eb		      BEQ	SETSTOR	;Set STOR mode! $BA will become $7B
   1810  ff55		       c9 d2		      CMP	#$d2	;"R"
   1811  ff57		       f0 3b		      BEQ	RUN	;Run the program! Forget the rest
   1812  ff59		       86 28		      STX	L	;Clear input value (X=0)
   1813  ff5b		       86 29		      STX	H
   1814  ff5d		       84 2a		      STY	YSAV	;Save Y for comparison
   1815  ff5f
   1816  ff5f							; Here we're trying to parse a new hex value
   1817  ff5f
   1818  ff5f		       b9 00 02    NEXTHEX    LDA	IN,Y	;Get character for hex test
   1819  ff62		       49 b0		      EOR	#$B0	;Map digits to 0-9
   1820  ff64		       c9 0a		      CMP	#9+1	;Is it a decimal digit?
   1821  ff66		       90 06		      BCC	DIG	;Yes!
   1822  ff68		       69 88		      ADC	#$88	;Map letter "A"-"F" to $FA-FF
   1823  ff6a		       c9 fa		      CMP	#$FA	;Hex letter?
   1824  ff6c		       90 11		      BCC	NOTHEX	;No! Character not hex
   1825  ff6e
   1826  ff6e		       0a	   DIG	      ASL
   1827  ff6f		       0a		      ASL		;Hex digit to MSD of A
   1828  ff70		       0a		      ASL
   1829  ff71		       0a		      ASL
   1830  ff72
   1831  ff72		       a2 04		      LDX	#4	;Shift count
   1832  ff74		       0a	   HEXSHIFT   ASL		;Hex digit left, MSB to carry
   1833  ff75		       26 28		      ROL	L	;Rotate into LSD
   1834  ff77		       26 29		      ROL	H	;Rotate into MSD's
   1835  ff79		       ca		      DEX		;Done 4 shifts?
   1836  ff7a		       d0 f8		      BNE	HEXSHIFT	;No, loop
   1837  ff7c		       c8		      INY		;Advance text index
   1838  ff7d		       d0 e0		      BNE	NEXTHEX	;Always taken
   1839  ff7f
   1840  ff7f		       c4 2a	   NOTHEX     CPY	YSAV	;Was at least 1 hex digit given?
   1841  ff81		       f0 97		      BEQ	ESCAPE	;No! Ignore all, start from scratch
   1842  ff83
   1843  ff83		       24 2b		      BIT	MODE	;Test MODE byte
   1844  ff85		       50 10		      BVC	NOTSTOR	;B6=0 is STOR, 1 is XAM or BLOCK XAM
   1845  ff87
   1846  ff87							; STOR mode, save LSD of new hex byte
   1847  ff87
   1848  ff87		       a5 28		      LDA	L	;LSD's of hex data
   1849  ff89		       81 26		      STA	(STL,X)	;Store current 'store index'(X=0)
   1850  ff8b		       e6 26		      INC	STL	;Increment store index.
   1851  ff8d		       d0 b5		      BNE	NEXTITEM	;No carry!
   1852  ff8f		       e6 27		      INC	STH	;Add carry to 'store index' high
   1853  ff91		       4c 44 ff    TONEXTITEM JMP	NEXTITEM	;Get next command item.
   1854  ff94
   1855  ff94							;-------------------------------------------------------------------------
   1856  ff94							;  RUN user's program from last opened location
   1857  ff94							;-------------------------------------------------------------------------
   1858  ff94
   1859  ff94		       6c 24 00    RUN	      JMP	(XAML)	;Run user's program
   1860  ff97
   1861  ff97							;-------------------------------------------------------------------------
   1862  ff97							;  We're not in Store mode
   1863  ff97							;-------------------------------------------------------------------------
   1864  ff97
   1865  ff97		       30 2b	   NOTSTOR    BMI	XAMNEXT	;B7 = 0 for XAM, 1 for BLOCK XAM
   1866  ff99
   1867  ff99							; We're in XAM mode now
   1868  ff99
   1869  ff99		       a2 02		      LDX	#2	;Copy 2 bytes
   1870  ff9b		       b5 27	   SETADR     LDA	L-1,X	;Copy hex data to
   1871  ff9d		       95 25		      STA	STL-1,X	; 'store index'
   1872  ff9f		       95 23		      STA	XAML-1,X	; and to 'XAM index'
   1873  ffa1		       ca		      DEX		;Next of 2 bytes
   1874  ffa2		       d0 f7		      BNE	SETADR	;Loop unless X = 0
   1875  ffa4
   1876  ffa4							; Print address and data from this address, fall through next BNE.
   1877  ffa4
   1878  ffa4		       d0 14	   NXTPRNT    BNE	PRDATA	;NE means no address to print
   1879  ffa6		       a9 8d		      LDA	#CR	;Print CR first
   1880  ffa8		       20 ef ff 	      JSR	ECHO
   1881  ffab		       a5 25		      LDA	XAMH	;Output high-order byte of address
   1882  ffad		       20 dc ff 	      JSR	PRBYTE
   1883  ffb0		       a5 24		      LDA	XAML	;Output low-order byte of address
   1884  ffb2		       20 dc ff 	      JSR	PRBYTE
   1885  ffb5		       a9 3a		      LDA	#":"	;Print colon
   1886  ffb7		       20 ef ff 	      JSR	ECHO
   1887  ffba
   1888  ffba		       a9 20	   PRDATA     LDA	#" "	;Print space
   1889  ffbc		       20 ef ff 	      JSR	ECHO
   1890  ffbf		       a1 24		      LDA	(XAML,X)	;Get data from address (X=0)
   1891  ffc1		       20 dc ff 	      JSR	PRBYTE	;Output it in hex format
   1892  ffc4		       86 2b	   XAMNEXT    STX	MODE	;0 -> MODE (XAM mode).
   1893  ffc6		       a5 24		      LDA	XAML	;See if there's more to print
   1894  ffc8		       c5 28		      CMP	L
   1895  ffca		       a5 25		      LDA	XAMH
   1896  ffcc		       e5 29		      SBC	H
   1897  ffce		       b0 c1		      BCS	TONEXTITEM	;Not less! No more data to output
   1898  ffd0
   1899  ffd0		       e6 24		      INC	XAML	;Increment 'examine index'
   1900  ffd2		       d0 02		      BNE	MOD8CHK	;No carry!
   1901  ffd4		       e6 25		      INC	XAMH
   1902  ffd6
   1903  ffd6		       a5 24	   MOD8CHK    LDA	XAML	;If address MOD 8 = 0 start new line
   1904  ffd8		       29 07		      AND	#$07
   1905  ffda		       10 c8		      BPL	NXTPRNT	;Always taken.
   1906  ffdc
   1907  ffdc							;-------------------------------------------------------------------------
   1908  ffdc							;  Subroutine to print a byte in A in hex form (destructive)
   1909  ffdc							;-------------------------------------------------------------------------
   1910  ffdc
   1911  ffdc		       48	   PRBYTE     PHA		;Save A for LSD
   1912  ffdd		       4a		      LSR
   1913  ffde		       4a		      LSR
   1914  ffdf		       4a		      LSR		;MSD to LSD position
   1915  ffe0		       4a		      LSR
   1916  ffe1		       20 e5 ff 	      JSR	PRHEX	;Output hex digit
   1917  ffe4		       68		      PLA		;Restore A
   1918  ffe5
   1919  ffe5							; Fall through to print hex routine
   1920  ffe5
   1921  ffe5							;-------------------------------------------------------------------------
   1922  ffe5							;  Subroutine to print a hexadecimal digit
   1923  ffe5							;-------------------------------------------------------------------------
   1924  ffe5
   1925  ffe5		       29 0f	   PRHEX      AND	#$0F	;Mask LSD for hex print
   1926  ffe7		       09 30		      ORA	#"0"	;Add "0"
   1927  ffe9		       c9 3a		      CMP	#"9"+1	;Is it a decimal digit?
   1928  ffeb		       90 02		      BCC	ECHO	;Yes! output it
   1929  ffed		       69 06		      ADC	#6	;Add offset for letter A-F
   1930  ffef
   1931  ffef							; Fall through to print routine
   1932  ffef
   1933  ffef							;-------------------------------------------------------------------------
   1934  ffef							;  Subroutine to print a character to the terminal
   1935  ffef							;-------------------------------------------------------------------------
   1936  ffef				   ECHO
   1937  ffef				  -	      IFCONST	BLD4APPLE1
   1938  ffef				  -	      BIT	MONDSP	;DA bit (B7) cleared yet?
   1939  ffef				  -	      BMI	ECHO	;No! Wait for display ready
   1940  ffef				  -	      STA	MONDSP	;Output character. Sets DA
   1941  ffef				  -	      RTS
   1942  ffef					      ELSE
   1943  ffef		       c9 20		      CMP	#$20
   1944  fff1		       30 02		      BMI	ECHO1
   1945  fff3		       09 80		      ORA	#$80
   1946  fff5				   ECHO1
   1947  fff5		       4c 47 d4 	      JMP	PUTCH	; use hi-res screen
   1948  fff8					      ENDIF
   1949  fff8
   1950  fff8							;-------------------------------------------------------------------------
   1951  fff8							;  Vector area
   1952  fff8							;-------------------------------------------------------------------------
   1953  fff8					      IFNCONST	BLD4RAM
   1954  fff8					      ORG	$fff8
   1955  fff8		       00 00		      DC.W	$0000	;Unused, what a pity
   1956  fffa		       00 0f	   NMI_VEC    DC.W	$0F00	;NMI vector
   1957  fffc		       00 ff	   RESET_VEC  DC.W	RESET	;RESET vector
   1958  fffe		       00 00	   IRQ_VEC    DC.W	$0000	;IRQ vector
   1959  10000					       ENDIF
   1960  10000
   1961  10000							;-------------------------------------------------------------------------
   1962  10000
   1963  10000
