*********

Welcome to Project 64!

The goal of Project 64 is to preserve Commodore 64 related documents
in electronic text format that might otherwise cease to exist with the
rapid advancement of computer technology and declining interest in 8-
bit computers on the part of the general population. If you would like
to help by converting C64 related hardcopy documents to electronic
texts please contact the manager of Project 64, Cris Berneburg, at
<74171.2136@compuserve.com>.

Extensive efforts were made to preserve the contents of the original
document.  However, certain portions, such as diagrams, program
listings, and indexes may have been either altered or sacrificed due
to the limitations of plain vanilla text.  Diagrams may have been
eliminated where ASCII-art was not feasible.  Program listings may be
missing display codes where substitutions were not possible.  Tables
of contents and indexes may have been changed from page number
references to section number references. Please accept our apologies
for these limitations, alterations, and possible omissions.

Document names are limited to the 8.3 file convention of DOS. The
first characters of the file name are an abbreviation of the original
document name. The version number of the etext follows next. After
that a letter may appear to indicate the particular source of the
document. Finally, the document is given a .TXT extension.

The author(s) of the original document and members of Project 64 make
no representations about the accuracy or suitability of this material
for any purpose.  This etext is provided "as-is".  Please refer to the
warantee of the original document, if any, that may included in this
etext.  No other warantees, express or implied, are made to you as to
the etext or any medium it may be on.  Neither the author(s) nor the
members of Project 64 will assume liability for damages either from
the direct or indirect use of this etext or from the distribution of
or modification to this etext.

*********

The Project 64 etext of the Commodore 64 ROM disassembly, converted
by Marko Makela <Marko.Makela@hut.fi>. This etext was created by
removing the HTML tags from the file c64-diss.html downloaded from
http://www.hut.fi/~msmakela/cbm/docs/.

C64DIS10.TXT, June 1996, etext #48.

*********

CBM: Commodore 64 ROM Disassembly

There are two sections, BASIC and KERNAL.

Commodore 64 BASIC ROM Disassembly

Version 1.0  (June 1994)


A000   .WD $E394   ; RESET

A002   .WD $E37B   ; Warm Start


; CBMBASIC

A004   .BY $43,$42,$4D,$42,$41,$53,$49,$43


; address table for commands
; (address minus 1 used)

A00C   .WD $A830   ; end
A00E   .WD $A741   ; for
A010   .WD $AD1D   ; next
A012   .WD $A8F7   ; data
A014   .WD $ABA4   ; input#
A016   .WD $ABBE   ; input
A018   .WD $B080   ; dim
A01A   .WD $AC05   ; read
A01C   .WD $A9A4   ; let
A01E   .WD $A89F   ; goto
A020   .WD $A870   ; run
A022   .WD $A927   ; if
A024   .WD $A81C   ; restore
A026   .WD $A882   ; gosub
A028   .WD $A8D1   ; return
A02A   .WD $A93A   ; rem
A02C   .WD $A82E   ; stop
A02E   .WD $A94A   ; on
A030   .WD $B82C   ; wait
A032   .WD $E167   ; load
A034   .WD $E155   ; save
A036   .WD $E164   ; verify
A038   .WD $B3B2   ; def
A03A   .WD $B823   ; poke
A03C   .WD $AA7F   ; print#
A03E   .WD $AA9F   ; print
A040   .WD $A856   ; cont
A042   .WD $A69B   ; list
A044   .WD $A65D   ; clr
A046   .WD $AA85   ; cmd
A048   .WD $E129   ; sys
A04A   .WD $E1BD   ; open
A04C   .WD $E1C6   ; close
A04E   .WD $AB7A   ; get
A050   .WD $A641   ; new


; address table for functions

A052   .WD $BC39   ; sgn
A054   .WD $BCCC   ; int
A056   .WD $BC58   ; abs
A058   .WD $0310   ; usr
A05A   .WD $B37D   ; fre
A05C   .WD $B39E   ; pos
A05E   .WD $BF71   ; sqr
A060   .WD $E097   ; rnd
A062   .WD $B9EA   ; log
A064   .WD $BFED   ; exp
A066   .WD $E264   ; cos
A068   .WD $E26B   ; sin
A06A   .WD $E2B4   ; tan
A06C   .WD $E30E   ; atn
A06E   .WD $B80D   ; peek
A070   .WD $B77C   ; len
A072   .WD $B465   ; str$
A074   .WD $B7AD   ; val
A076   .WD $B78B   ; asc
A078   .WD $B6EC   ; chr$
A07A   .WD $B700   ; left$
A07C   .WD $B72C   ; right$
A07E   .WD $B737   ; mid$


; priority and address table
; for operators
; (address minus 1 used)

A080   .BY $79
A081   .WD $B869   ; plus
A083   .BY $79
A084   .WD $B852   ; minus
A086   .BY $7B
A087   .WD $BA2A   ; multiply
A089   .BY $7B
A08A   .WD $BB11   ; divide
A08C   .BY $7F
A08D   .WD $BF7A   ; power
A08F   .BY $50
A090   .WD $AFE8   ; AND
A092   .BY $46
A093   .WD $AFE5   ; OR
A095   .BY $7D
A096   .WD $BFB3   ; negative
A098   .BY $5A
A099   .WD $AED3   ; NOT
A09B   .BY $64
A09C   .WD $B015   ; greater / equal / less


; table of commands
; each ended with a +$80

A09E   .BY $45,$4E,$C4   ; end
A0A1   .BY $46,$4F,$D2   ; for
A0A4   .BY $4E,$45,$58,$D4   ; next
A0A8   .BY $44,$41,$54,$C1   ; data
A0AC   .BY $49,$4E,$50,$55,$54,$A3   ; input#
A0B2   .BY $49,$4E,$50,$55,$D4   ; input
A0B7   .BY $44,$49,$CD   ; dim
A0BA   .BY $52,$45,$41,$C4   ; read
A0BE   .BY $4C,$45,$D4   ; let
A0C1   .BY $47,$4F,$54,$CF   ; goto
A0C5   .BY $52,$55,$CE   ; run
A0C8   .BY $49,$C6   ; if
A0CA   .BY $52,$45,$53,$54,$4F,$52,$C5   ; restore
A0D1   .BY $47,$4F,$53,$55,$C2   ; gosub
A0D6   .BY $52,$45,$54,$55,$52,$CE   ; return
A0DC   .BY $52,$45,$CD   ; rem
A0DF   .BY $53,$54,$4F,$D0   ; stop
A0E3   .BY $4F,$CE   ; on
A0E5   .BY $57,$41,$49,$D4   ; wait
A0E9   .BY $4C,$4F,$41,$C4   ; load
A0ED   .BY $53,$41,$56,$C5   ; save
A0F1   .BY $56,$45,$52,$49,$46,$D9   ; verify
A0F7   .BY $44,$45,$C6   ; def
A0FA   .BY $50,$4F,$4B,$C5   ; poke
A0FE   .BY $50,$52,$49,$4E,$54,$A3   ; print#
A104   .BY $50,$52,$49,$4E,$D4   ; print
A109   .BY $43,$4F,$4E,$D4   ; cont
A10D   .BY $4C,$49,$53,$D4   ; list
A111   .BY $43,$4C,$D2   ; clr
A114   .BY $43,$4D,$C4   ; cmd
A117   .BY $53,$59,$D3   ; sys
A11A   .BY $4F,$50,$45,$CE   ; open
A11E   .BY $43,$4C,$4F,$53,$C5   ; close
A123   .BY $47,$45,$D4   ; get
A126   .BY $4E,$45,$D7   ; new


; table of functions
; each ended with a +$80

A129   .BY $54,$41,$42,$A8   ; tab(
A12D   .BY $54,$CF   ; to
A12F   .BY $46,$CE   ; fn
A131   .BY $53,$50,$43,$A8   ; spc(
A135   .BY $54,$48,$45,$CE   ; then
A139   .BY $4E,$4F,$D4   ; not
A13C   .BY $53,$54,$45,$D0   ; step
A140   .BY $AB   ; plus
A141   .BY $AD   ; minus
A142   .BY $AA   ; multiply
A143   .BY $AF   ; divide
A144   .BY $DE   ; power
A145   .BY $41,$4E,$C4   ; and
A148   .BY $4F,$D2   ; on
A14A   .BY $BE   ; greater
A14B   .BY $BD   ; equal
A14C   .BY $BC   ; less
A14D   .BY $53,$47,$CE   ; sgn
A150   .BY $49,$4E,$D4   ; int
A153   .BY $41,$42,$D3   ; abs
A156   .BY $55,$53,$D2   ; usr
A159   .BY $46,$52,$C5   ; fre
A15C   .BY $50,$4F,$D3   ; pos
A15F   .BY $53,$51,$D2   ; sqr
A162   .BY $52,$4E,$C4   ; rnd
A165   .BY $4C,$4F,$C7   ; log
A168   .BY $45,$58,$D0   ; exp
A16B   .BY $43,$4F,$D3   ; cos
A16E   .BY $53,$49,$CE   ; sin
A171   .BY $54,$41,$CE   ; tan
A174   .BY $41,$54,$CE   ; atn
A177   .BY $50,$45,$45,$CB   ; peek
A17B   .BY $4C,$45,$CE   ; len
A17E   .BY $53,$54,$52,$A4   ; str$
A182   .BY $56,$41,$CC   ; val
A185   .BY $41,$53,$C3   ; asc
A188   .BY $43,$48,$52,$A4   ; chr$
A18C   .BY $4C,$45,$46,$54,$A4   ; left$
A191   .BY $52,$49,$47,$48,$54,$A4   ; right$
A197   .BY $4D,$49,$44,$A4   ; mid$


; other commands

A19B   .BY $47,$CF   ; go
A19D   .BY $00

; table of errors messages
; each ended with a +$80

; too many files

A19E   .BY $54,$4F,$4F
A1A1   .BY $20,$4D,$41,$4E,$59
A1A6   .BY $20,$46,$49,$4C,$45,$D3

; file open

A1AC   .BY $46,$49,$4C,$45
A1B0   .BY $20,$4F,$50,$45,$CE

; file not open

A1B5   .BY $46,$49,$4C,$45
A1B9   .BY $20,$4E,$4F,$54
A1BD   .BY $20,$4F,$50,$45,$CE

; file not found

A1C2   .BY $46,$49,$4C,$45
A1C6   .BY $20,$4E,$4F,$54
A1CA   .BY $20,$46,$4F,$55,$4E,$C4

; device not present

A1D0   .BY $44,$45,$56,$49,$43,$45
A1D6   .BY $20,$4E,$4F,$54
A1DA   .BY $20,$50,$52,$45,$53,$45,$4E,$D4


; not input file
A1E2   .BY $4E,$4F,$54
A1E5   .BY $20,$49,$4E,$50,$55,$54
A1EB   .BY $20,$46,$49,$4C,$C5

; not output file

A1F0   .BY $4E,$4F,$54
A1F3   .BY $20,$4F,$55,$54,$50,$55,$54
A1FA   .BY $20,$46,$49,$4C,$C5

; missisng file name

A1FF   .BY $4D,$49,$53,$53,$49,$4E,$47
A206   .BY $20,$46,$49,$4C,$45
A20B   .BY $20,$4E,$41,$4D,$C5

; illegal device number

A210   .BY $49,$4C,$4C,$45,$47,$41,$4C
A217   .BY $20,$44,$45,$56,$49,$43,$45
A21E   .BY $20,$4E,$55,$4D,$42,$45,$D2

; next without for

A225   .BY $4E,$45,$58,$54
A229   .BY $20,$57,$49,$54,$48,$4F,$55,$54
A231   .BY $20,$46,$4F,$D2

; syntax

A235   .BY $53,$59,$4E,$54,$41,$D8

; return without gosub

A23B   .BY $52,$45,$54,$55,$52,$4E
A241   .BY $20,$57,$49,$54,$48,$4F,$55,$54
A249   .BY $20,$47,$4F,$53,$55,$C2

; out of data

A24F   .BY $4F,$55,$54
A252   .BY $20,$4F,$46
A255   .BY $20,$44,$41,$54,$C1

; illegal quantity

A25A   .BY $49,$4C,$4C,$45,$47,$41,$4C
A261   .BY $20,$51,$55,$41,$4E,$54,$49,$54,$D9

; overflow

A26A   .BY $4F,$56,$45,$52,$46,$4C,$4F,$D7

; out of memory

A272   .BY $4F,$55,$54
A275   .BY $20,$4F,$46
A278   .BY $20,$4D,$45,$4D,$4F,$52,$D9

; undef'd statement

A27F   .BY $55,$4E,$44,$45,$46,$27,$44
A286   .BY $20,$53,$54,$41,$54,$45,$4D,$45,$4E,$D4

; bad subscript

A290   .BY $42,$41,$44
A293   .BY $20,$53,$55,$42,$53,$43,$52,$49,$50,$D4

; redim'd array

A29D   .BY $52,$45,$44,$49,$4D,$27,$44
A2A4   .BY $20,$41,$52,$52,$41,$D9

; division by zero

A2AA   .BY $44,$49,$56,$49,$53,$49,$4F,$4E
A2B2   .BY $20,$42,$59
A2B5   .BY $20,$5A,$45,$52,$CF

; illegal direct

A2BA   .BY $49,$4C,$4C,$45,$47,$41,$4C
A2C1   .BY $20,$44,$49,$52,$45,$43,$D4

; type mismatch

A2C8   .BY $54,$59,$50,$45
A2CC   .BY $20,$4D,$49,$53,$4D,$41,$54,$43,$C8

; string to long

A2D5   .BY $53,$54,$52,$49,$4E,$47
A2DB   .BY $20,$54,$4F,$4F
A2DF   .BY $20,$4C,$4F,$4E,$C7

; file data

A2E4   .BY $46,$49,$4C,$45
A2E8   .BY $20,$44,$41,$54,$C1

; formula too complex

A2ED   .BY $46,$4F,$52,$4D,$55,$4C,$41
A2F4   .BY $20,$54,$4F,$4F
A2F8   .BY $20,$43,$4F,$4D,$50,$4C,$45,$D8

; can't continue

A300   .BY $43,$41,$4E,$27,$54
A305   .BY $20,$43,$4F,$4E,$54,$49,$4E,$55,$C5

; undef'd function

A30E   .BY $55,$4E,$44,$45,$46,$27,$44
A315   .BY $20,$46,$55,$4E,$43,$54,$49,$4F,$CE

; verify

A31E   .BY $56,$45,$52,$49,$46,$D9

; load

A324   .BY $4C,$4F,$41,$C4


; error message address locations

A328   .WD $A19E   ; 01 too many files
A32A   .WD $A1AC   ; 02 file open
A32C   .WD $A1B5   ; 03 file not open
A32E   .WD $A1C2   ; 04 file not found
A330   .WD $A1D0   ; 05 device not present
A332   .WD $A1E2   ; 06 not input file
A334   .WD $A1F0   ; 07 not output file
A336   .WD $A1FF   ; 08 missing file name
A338   .WD $A210   ; 09 illegal device number
A33A   .WD $A225   ; 0A next without for
A33C   .WD $A235   ; 0B syntax
A33E   .WD $A23B   ; 0C return without gosub
A340   .WD $A24F   ; 0D out of data
A342   .WD $A25A   ; 0E illegal quantity
A344   .WD $A26A   ; 0F overflow
A346   .WD $A272   ; 10 out of memory
A348   .WD $A27F   ; 11 undef'd statment
A34A   .WD $A290   ; 12 bad subscript
A34C   .WD $A29D   ; 13 redim'd array
A34E   .WD $A2AA   ; 14 devision by zero
A350   .WD $A2BA   ; 15 illegal direct
A352   .WD $A2C8   ; 16 type mismatch
A354   .WD $A2D5   ; 17 string too long
A356   .WD $A2E4   ; 18 file data
A358   .WD $A2ED   ; 19 formula too complex
A35A   .WD $A300   ; 1A can't continue
A35C   .WD $A30E   ; 1B undef'd function
A35E   .WD $A31E   ; 1C verify
A360   .WD $A324   ; 1D load
A362   .WD $A383   ; 1E break

; other messages

; ok

A364   .BY $0D,$4F,$4B,$0D
A368   .BY $00

; error

A369   .BY $20,$20,$45,$52,$52,$4F,$52
A370   .BY $00

; in

A371   .BY $20,$49,$4E,$20
A375   .BY $00

; ready.

A376   .BY $0D,$0A,$52,$45,$41,$44,$59,$2E,$0D,$0A
A380   .BY $00

; break

A381   .BY $0D,$0A

A383   .BY $42,$52,$45,$41,$4B

A388   .BY $00

A389   .BY $A0


; search for "for" blocks on stack

A38A   BA         TSX
A38B   E8         INX
A38C   E8         INX
A38D   E8         INX
A38E   E8         INX
A38F   BD 01 01   LDA $0101,X
A392   C9 81      CMP #$81   ; for block code
A394   D0 21      BNE $A3B7
A396   A5 4A      LDA $4A
A398   D0 0A      BNE $A3A4
A39A   BD 02 01   LDA $0102,X
A39D   85 49      STA $49
A39F   BD 03 01   LDA $0103,X
A3A2   85 4A      STA $4A
A3A4   DD 03 01   CMP $0103,X
A3A7   D0 07      BNE $A3B0
A3A9   A5 49      LDA $49
A3AB   DD 02 01   CMP $0102,X
A3AE   F0 07      BEQ $A3B7
A3B0   8A         TXA
A3B1   18         CLC
A3B2   69 12      ADC #$12
A3B4   AA         TAX
A3B5   D0 D8      BNE $A38F
A3B7   60         RTS


; move bytes after check for space

A3B8   20 08 A4   JSR $A408
A3BB   85 31      STA $31
A3BD   84 32      STY $32


; move bytes routine
;  $5F/$60 source start address
;  $5A/$5B source end address
;  $58/$59 destination end address

A3BF   38         SEC
A3C0   A5 5A      LDA $5A
A3C2   E5 5F      SBC $5F
A3C4   85 22      STA $22
A3C6   A8         TAY
A3C7   A5 5B      LDA $5B
A3C9   E5 60      SBC $60
A3CB   AA         TAX
A3CC   E8         INX
A3CD   98         TYA
A3CE   F0 23      BEQ $A3F3
A3D0   A5 5A      LDA $5A
A3D2   38         SEC
A3D3   E5 22      SBC $22
A3D5   85 5A      STA $5A
A3D7   B0 03      BCS $A3DC
A3D9   C6 5B      DEC $5B
A3DB   38         SEC
A3DC   A5 58      LDA $58
A3DE   E5 22      SBC $22
A3E0   85 58      STA $58
A3E2   B0 08      BCS $A3EC
A3E4   C6 59      DEC $59
A3E6   90 04      BCC $A3EC
A3E8   B1 5A      LDA ($5A),Y
A3EA   91 58      STA ($58),Y
A3EC   88         DEY
A3ED   D0 F9      BNE $A3E8
A3EF   B1 5A      LDA ($5A),Y
A3F1   91 58      STA ($58),Y
A3F3   C6 5B      DEC $5B
A3F5   C6 59      DEC $59
A3F7   CA         DEX
A3F8   D0 F2      BNE $A3EC
A3FA   60         RTS


; test for 2 * A bytes free on stack

A3FB   0A         ASL
A3FC   69 3E      ADC #$3E
A3FE   B0 35      BCS $A435
A400   85 22      STA $22
A402   BA         TSX
A403   E4 22      CPX $22
A405   90 2E      BCC $A435
A407   60         RTS


; array area overflow check

A408   C4 34      CPY $34
A40A   90 28      BCC $A434
A40C   D0 04      BNE $A412
A40E   C5 33      CMP $33
A410   90 22      BCC $A434
A412   48         PHA
A413   A2 09      LDX #$09
A415   98         TYA
A416   48         PHA
A417   B5 57      LDA $57,X
A419   CA         DEX
A41A   10 FA      BPL $A416
A41C   20 26 B5   JSR $B526
A41F   A2 F7      LDX #$F7
A421   68         PLA
A422   95 61      STA $61,X
A424   E8         INX
A425   30 FA      BMI $A421
A427   68         PLA
A428   A8         TAY
A429   68         PLA
A42A   C4 34      CPY $34
A42C   90 06      BCC $A434
A42E   D0 05      BNE $A435
A430   C5 33      CMP $33
A432   B0 01      BCS $A435
A434   60         RTS


; out of memory error

A435   A2 10      LDX #$10   ; error number


; handle error messages

A437   6C 00 03   JMP ($0300)   ; normally A43A


; standard error message handler

A43A   8A         TXA
A43B   0A         ASL
A43C   AA         TAX
A43D   BD 26 A3   LDA $A326,X
A440   85 22      STA $22
A442   BD 27 A3   LDA $A327,X
A445   85 23      STA $23
A447   20 CC FF   JSR $FFCC
A44A   A9 00      LDA #$00
A44C   85 13      STA $13
A44E   20 D7 AA   JSR $AAD7
A451   20 45 AB   JSR $AB45
A454   A0 00      LDY #$00
A456   B1 22      LDA ($22),Y
A458   48         PHA
A459   29 7F      AND #$7F
A45B   20 47 AB   JSR $AB47
A45E   C8         INY
A45F   68         PLA
A460   10 F4      BPL $A456
A462   20 7A A6   JSR $A67A
A465   A9 69      LDA #$69   ; low  A369
A467   A0 A3      LDY #$A3   ; high A369

A469   20 1E AB   JSR $AB1E

A46C   A4 3A      LDY $3A
A46E   C8         INY
A46F   F0 03      BEQ $A474
A471   20 C2 BD   JSR $BDC2

A474   A9 76      LDA #$76   ; low A376

A476   A0 A3      LDY #$A3   ; low A376
A478   20 1E AB   JSR $AB1E
A47B   A9 80      LDA #$80
A47D   20 90 FF   JSR $FF90

A480   6C 02 03   JMP ($0302)   ; normally A483


; standard warm start routine

A483   20 60 A5   JSR $A560
A486   86 7A      STX $7A
A488   84 7B      STY $7B
A48A   20 73 00   JSR $0073
A48D   AA         TAX
A48E   F0 F0      BEQ $A480
A490   A2 FF      LDX #$FF
A492   86 3A      STX $3A
A494   90 06      BCC $A49C
A496   20 79 A5   JSR $A579
A499   4C E1 A7   JMP $A7E1


; handle insert/delete basic lines

A49C   20 6B A9   JSR $A96B
A49F   20 79 A5   JSR $A579
A4A2   84 0B      STY $0B
A4A4   20 13 A6   JSR $A613
A4A7   90 44      BCC $A4ED


; delete old line

A4A9   A0 01      LDY #$01
A4AB   B1 5F      LDA ($5F),Y
A4AD   85 23      STA $23
A4AF   A5 2D      LDA $2D
A4B1   85 22      STA $22
A4B3   A5 60      LDA $60
A4B5   85 25      STA $25
A4B7   A5 5F      LDA $5F
A4B9   88         DEY
A4BA   F1 5F      SBC ($5F),Y
A4BC   18         CLC
A4BD   65 2D      ADC $2D
A4BF   85 2D      STA $2D
A4C1   85 24      STA $24
A4C3   A5 2E      LDA $2E
A4C5   69 FF      ADC #$FF
A4C7   85 2E      STA $2E
A4C9   E5 60      SBC $60
A4CB   AA         TAX
A4CC   38         SEC
A4CD   A5 5F      LDA $5F
A4CF   E5 2D      SBC $2D
A4D1   A8         TAY
A4D2   B0 03      BCS $A4D7
A4D4   E8         INX
A4D5   C6 25      DEC $25
A4D7   18         CLC
A4D8   65 22      ADC $22
A4DA   90 03      BCC $A4DF
A4DC   C6 23      DEC $23
A4DE   18         CLC
A4DF   B1 22      LDA ($22),Y
A4E1   91 24      STA ($24),Y
A4E3   C8         INY
A4E4   D0 F9      BNE $A4DF
A4E6   E6 23      INC $23
A4E8   E6 25      INC $25
A4EA   CA         DEX
A4EB   D0 F2      BNE $A4DF


; insert new line

A4ED   20 59 A6   JSR $A659
A4F0   20 33 A5   JSR $A533
A4F3   AD 00 02   LDA $0200
A4F6   F0 88      BEQ $A480
A4F8   18         CLC
A4F9   A5 2D      LDA $2D
A4FB   85 5A      STA $5A
A4FD   65 0B      ADC $0B
A4FF   85 58      STA $58
A501   A4 2E      LDY $2E
A503   84 5B      STY $5B
A505   90 01      BCC $A508
A507   C8         INY
A508   84 59      STY $59
A50A   20 B8 A3   JSR $A3B8
A50D   A5 14      LDA $14
A50F   A4 15      LDY $15
A511   8D FE 01   STA $01FE
A514   8C FF 01   STY $01FF
A517   A5 31      LDA $31
A519   A4 32      LDY $32
A51B   85 2D      STA $2D
A51D   84 2E      STY $2E
A51F   A4 0B      LDY $0B
A521   88         DEY
A522   B9 FC 01   LDA $01FC,Y
A525   91 5F      STA ($5F),Y
A527   88         DEY
A528   10 F8      BPL $A522

A52A   20 59 A6   JSR $A659

A52D   20 33 A5   JSR $A533
A530   4C 80 A4   JMP $A480


; relink basic program

A533   A5 2B      LDA $2B
A535   A4 2C      LDY $2C
A537   85 22      STA $22
A539   84 23      STY $23
A53B   18         CLC
A53C   A0 01      LDY #$01
A53E   B1 22      LDA ($22),Y
A540   F0 1D      BEQ $A55F
A542   A0 04      LDY #$04
A544   C8         INY
A545   B1 22      LDA ($22),Y
A547   D0 FB      BNE $A544
A549   C8         INY
A54A   98         TYA
A54B   65 22      ADC $22
A54D   AA         TAX
A54E   A0 00      LDY #$00
A550   91 22      STA ($22),Y
A552   A5 23      LDA $23
A554   69 00      ADC #$00
A556   C8         INY
A557   91 22      STA ($22),Y
A559   86 22      STX $22
A55B   85 23      STA $23
A55D   90 DD      BCC $A53C
A55F   60         RTS


; get statement into buffer

A560   A2 00      LDX #$00
A562   20 12 E1   JSR $E112
A565   C9 0D      CMP #$0D
A567   F0 0D      BEQ $A576
A569   9D 00 02   STA $0200,X
A56C   E8         INX
A56D   E0 59      CPX #$59
A56F   90 F1      BCC $A562
A571   A2 17      LDX #$17   ; error number
A573   4C 37 A4   JMP $A437
A576   4C CA AA   JMP $AACA   ; goto end of line


; crunch tokens

A579   6C 04 03   JMP ($0304)   ; normally A57C


; standard token cruncher

A57C   A6 7A      LDX $7A
A57E   A0 04      LDY #$04
A580   84 0F      STY $0F
A582   BD 00 02   LDA $0200,X
A585   10 07      BPL $A58E
A587   C9 FF      CMP #$FF   ; PI
A589   F0 3E      BEQ $A5C9
A58B   E8         INX
A58C   D0 F4      BNE $A582
A58E   C9 20      CMP #$20   ; space
A590   F0 37      BEQ $A5C9
A592   85 08      STA $08
A594   C9 22      CMP #$22    ; quote mark
A596   F0 56      BEQ $A5EE
A598   24 0F      BIT $0F
A59A   70 2D      BVS $A5C9
A59C   C9 3F      CMP #$3F   ; question mark
A59E   D0 04      BNE $A5A4
A5A0   A9 99      LDA #$99   ; PRINT code
A5A2   D0 25      BNE $A5C9
A5A4   C9 30      CMP #$30    ; 0
A5A6   90 04      BCC $A5AC
A5A8   C9 3C      CMP #$3C
A5AA   90 1D      BCC $A5C9
A5AC   84 71      STY $71
A5AE   A0 00      LDY #$00
A5B0   84 0B      STY $0B
A5B2   88         DEY
A5B3   86 7A      STX $7A
A5B5   CA         DEX
A5B6   C8         INY
A5B7   E8         INX
A5B8   BD 00 02   LDA $0200,X
A5BB   38         SEC
A5BC   F9 9E A0   SBC $A09E,Y
A5BF   F0 F5      BEQ $A5B6
A5C1   C9 80      CMP #$80
A5C3   D0 30      BNE $A5F5
A5C5   05 0B      ORA $0B
A5C7   A4 71      LDY $71
A5C9   E8         INX
A5CA   C8         INY
A5CB   99 FB 01   STA $01FB,Y
A5CE   B9 FB 01   LDA $01FB,Y
A5D1   F0 36      BEQ $A609
A5D3   38         SEC
A5D4   E9 3A      SBC #$3A   ; colon
A5D6   F0 04      BEQ $A5DC
A5D8   C9 49      CMP #$49   ; DATA code
A5DA   D0 02      BNE $A5DE
A5DC   85 0F      STA $0F
A5DE   38         SEC
A5DF   E9 55      SBC #$55   ; REM code
A5E1   D0 9F      BNE $A582
A5E3   85 08      STA $08
A5E5   BD 00 02   LDA $0200,X
A5E8   F0 DF      BEQ $A5C9
A5EA   C5 08      CMP $08
A5EC   F0 DB      BEQ $A5C9
A5EE   C8         INY
A5EF   99 FB 01   STA $01FB,Y
A5F2   E8         INX
A5F3   D0 F0      BNE $A5E5
A5F5   A6 7A      LDX $7A
A5F7   E6 0B      INC $0B
A5F9   C8         INY
A5FA   B9 9D A0   LDA $A09D,Y
A5FD   10 FA      BPL $A5F9
A5FF   B9 9E A0   LDA $A09E,Y
A602   D0 B4      BNE $A5B8
A604   BD 00 02   LDA $0200,X
A607   10 BE      BPL $A5C7
A609   99 FD 01   STA $01FD,Y
A60C   C6 7B      DEC $7B
A60E   A9 FF      LDA #$FF
A610   85 7A      STA $7A
A612   60         RTS


; search for a line in a program

A613   A5 2B      LDA $2B
A615   A6 2C      LDX $2C

A617   A0 01      LDY #$01

A619   85 5F      STA $5F
A61B   86 60      STX $60
A61D   B1 5F      LDA ($5F),Y
A61F   F0 1F      BEQ $A640
A621   C8         INY
A622   C8         INY
A623   A5 15      LDA $15
A625   D1 5F      CMP ($5F),Y
A627   90 18      BCC $A641
A629   F0 03      BEQ $A62E
A62B   88         DEY
A62C   D0 09      BNE $A637
A62E   A5 14      LDA $14
A630   88         DEY
A631   D1 5F      CMP ($5F),Y
A633   90 0C      BCC $A641
A635   F0 0A      BEQ $A641
A637   88         DEY
A638   B1 5F      LDA ($5F),Y
A63A   AA         TAX
A63B   88         DEY
A63C   B1 5F      LDA ($5F),Y
A63E   B0 D7      BCS $A617
A640   18         CLC
A641   60         RTS


; NEW command

A642   D0 FD      BNE $A641

A644   A9 00      LDA #$00

A646   A8         TAY
A647   91 2B      STA ($2B),Y
A649   C8         INY
A64A   91 2B      STA ($2B),Y
A64C   A5 2B      LDA $2B
A64E   18         CLC
A64F   69 02      ADC #$02
A651   85 2D      STA $2D
A653   A5 2C      LDA $2C
A655   69 00      ADC #$00
A657   85 2E      STA $2E

A659   20 8E A6   JSR $A68E

A65C   A9 00      LDA #$00


; CLR command

A65E   D0 2D      BNE $A68D

A660   20 E7 FF   JSR $FFE7


A663   A5 37      LDA $37

A665   A4 38      LDY $38
A667   85 33      STA $33
A669   84 34      STY $34
A66B   A5 2D      LDA $2D
A66D   A4 2E      LDY $2E
A66F   85 2F      STA $2F
A671   84 30      STY $30
A673   85 31      STA $31
A675   84 32      STY $32

A677   20 1D A8   JSR $A81D


; reset stack and program pointers

A67A   A2 19      LDX #$19
A67C   86 16      STX $16
A67E   68         PLA
A67F   A8         TAY
A680   68         PLA
A681   A2 FA      LDX #$FA
A683   9A         TXS
A684   48         PHA
A685   98         TYA
A686   48         PHA
A687   A9 00      LDA #$00
A689   85 3E      STA $3E
A68B   85 10      STA $10
A68D   60         RTS


; set current character pointer to start of basic - 1

A68E   18         CLC
A68F   A5 2B      LDA $2B
A691   69 FF      ADC #$FF
A693   85 7A      STA $7A
A695   A5 2C      LDA $2C
A697   69 FF      ADC #$FF
A699   85 7B      STA $7B
A69B   60         RTS


; LIST command

A69C   90 06      BCC $A6A4
A69E   F0 04      BEQ $A6A4
A6A0   C9 AB      CMP #$AB
A6A2   D0 E9      BNE $A68D
A6A4   20 6B A9   JSR $A96B
A6A7   20 13 A6   JSR $A613
A6AA   20 79 00   JSR $0079
A6AD   F0 0C      BEQ $A6BB
A6AF   C9 AB      CMP #$AB
A6B1   D0 8E      BNE $A641
A6B3   20 73 00   JSR $0073
A6B6   20 6B A9   JSR $A96B
A6B9   D0 86      BNE $A641
A6BB   68         PLA
A6BC   68         PLA
A6BD   A5 14      LDA $14
A6BF   05 15      ORA $15
A6C1   D0 06      BNE $A6C9
A6C3   A9 FF      LDA #$FF
A6C5   85 14      STA $14
A6C7   85 15      STA $15


; list lines from $5F/$60 to $14/$15

A6C9   A0 01      LDY #$01
A6CB   84 0F      STY $0F
A6CD   B1 5F      LDA ($5F),Y
A6CF   F0 43      BEQ $A714
A6D1   20 2C A8   JSR $A82C
A6D4   20 D7 AA   JSR $AAD7
A6D7   C8         INY
A6D8   B1 5F      LDA ($5F),Y
A6DA   AA         TAX
A6DB   C8         INY
A6DC   B1 5F      LDA ($5F),Y
A6DE   C5 15      CMP $15
A6E0   D0 04      BNE $A6E6
A6E2   E4 14      CPX $14
A6E4   F0 02      BEQ $A6E8
A6E6   B0 2C      BCS $A714
A6E8   84 49      STY $49
A6EA   20 CD BD   JSR $BDCD
A6ED   A9 20      LDA #$20
A6EF   A4 49      LDY $49
A6F1   29 7F      AND #$7F
A6F3   20 47 AB   JSR $AB47
A6F6   C9 22      CMP #$22
A6F8   D0 06      BNE $A700
A6FA   A5 0F      LDA $0F
A6FC   49 FF      EOR #$FF
A6FE   85 0F      STA $0F
A700   C8         INY
A701   F0 11      BEQ $A714
A703   B1 5F      LDA ($5F),Y
A705   D0 10      BNE $A717
A707   A8         TAY
A708   B1 5F      LDA ($5F),Y
A70A   AA         TAX
A70B   C8         INY
A70C   B1 5F      LDA ($5F),Y
A70E   86 5F      STX $5F
A710   85 60      STA $60
A712   D0 B5      BNE $A6C9
A714   4C 86 E3   JMP $E386


; print tokens routine

A717   6C 06 03   JMP ($0306)   ; normally A71A


; standard token printer

A71A   10 D7      BPL $A6F3
A71C   C9 FF      CMP #$FF
A71E   F0 D3      BEQ $A6F3
A720   24 0F      BIT $0F
A722   30 CF      BMI $A6F3
A724   38         SEC
A725   E9 7F      SBC #$7F
A727   AA         TAX
A728   84 49      STY $49
A72A   A0 FF      LDY #$FF
A72C   CA         DEX
A72D   F0 08      BEQ $A737
A72F   C8         INY
A730   B9 9E A0   LDA $A09E,Y
A733   10 FA      BPL $A72F
A735   30 F5      BMI $A72C


; print keyword

A737   C8         INY
A738   B9 9E A0   LDA $A09E,Y
A73B   30 B2      BMI $A6EF
A73D   20 47 AB   JSR $AB47
A740   D0 F5      BNE $A737


; FOR command

A742   A9 80      LDA #$80
A744   85 10      STA $10
A746   20 A5 A9   JSR $A9A5
A749   20 8A A3   JSR $A38A
A74C   D0 05      BNE $A753
A74E   8A         TXA
A74F   69 0F      ADC #$0F
A751   AA         TAX
A752   9A         TXS
A753   68         PLA
A754   68         PLA
A755   A9 09      LDA #$09
A757   20 FB A3   JSR $A3FB
A75A   20 06 A9   JSR $A906
A75D   18         CLC
A75E   98         TYA
A75F   65 7A      ADC $7A
A761   48         PHA
A762   A5 7B      LDA $7B
A764   69 00      ADC #$00
A766   48         PHA
A767   A5 3A      LDA $3A
A769   48         PHA
A76A   A5 39      LDA $39
A76C   48         PHA
A76D   A9 A4      LDA #$A4
A76F   20 FF AE   JSR $AEFF
A772   20 8D AD   JSR $AD8D
A775   20 8A AD   JSR $AD8A
A778   A5 66      LDA $66
A77A   09 7F      ORA #$7F
A77C   25 62      AND $62
A77E   85 62      STA $62
A780   A9 8B      LDA #$8B   ; low  A78B
A782   A0 A7      LDY #$A7   ; high A78B
A784   85 22      STA $22
A786   84 23      STY $23
A788   4C 43 AE   JMP $AE43


A78B   A9 BC      LDA #$BC   ; low  B9BC

A78D   A0 B9      LDY #$B9   ; high B9BC
A78F   20 A2 BB   JSR $BBA2
A792   20 79 00   JSR $0079
A795   C9 A9      CMP #$A9
A797   D0 06      BNE $A79F
A799   20 73 00   JSR $0073
A79C   20 8A AD   JSR $AD8A
A79F   20 2B BC   JSR $BC2B
A7A2   20 38 AE   JSR $AE38
A7A5   A5 4A      LDA $4A
A7A7   48         PHA
A7A8   A5 49      LDA $49
A7AA   48         PHA
A7AB   A9 81      LDA #$81   ; FOR block code
A7AD   48         PHA


; execute next statement

A7AE   20 2C A8   JSR $A82C
A7B1   A5 7A      LDA $7A
A7B3   A4 7B      LDY $7B
A7B5   C0 02      CPY #$02
A7B7   EA         NOP
A7B8   F0 04      BEQ $A7BE
A7BA   85 3D      STA $3D
A7BC   84 3E      STY $3E
A7BE   A0 00      LDY #$00
A7C0   B1 7A      LDA ($7A),Y
A7C2   D0 43      BNE $A807
A7C4   A0 02      LDY #$02
A7C6   B1 7A      LDA ($7A),Y
A7C8   18         CLC
A7C9   D0 03      BNE $A7CE
A7CB   4C 4B A8   JMP $A84B

A7CE   C8         INY
A7CF   B1 7A      LDA ($7A),Y
A7D1   85 39      STA $39
A7D3   C8         INY
A7D4   B1 7A      LDA ($7A),Y
A7D6   85 3A      STA $3A
A7D8   98         TYA
A7D9   65 7A      ADC $7A
A7DB   85 7A      STA $7A
A7DD   90 02      BCC $A7E1
A7DF   E6 7B      INC $7B

A7E1   6C 08 03   JMP ($0308)   ; normally A7E4


; execute a statement

A7E4   20 73 00   JSR $0073
A7E7   20 ED A7   JSR $A7ED
A7EA   4C AE A7   JMP $A7AE


; execute command in A

A7ED   F0 3C      BEQ $A82B

A7EF   E9 80      SBC #$80

A7F1   90 11      BCC $A804
A7F3   C9 23      CMP #$23
A7F5   B0 17      BCS $A80E
A7F7   0A         ASL
A7F8   A8         TAY
A7F9   B9 0D A0   LDA $A00D,Y
A7FC   48         PHA
A7FD   B9 0C A0   LDA $A00C,Y
A800   48         PHA
A801   4C 73 00   JMP $0073

A804   4C A5 A9   JMP $A9A5

A807   C9 3A      CMP #$3A   ; colon
A809   F0 D6      BEQ $A7E1
A80B   4C 08 AF   JMP $AF08

A80E   C9 4B      CMP #$4B   ; GO code
A810   D0 F9      BNE $A80B
A812   20 73 00   JSR $0073
A815   A9 A4      LDA #$A4   ; TO code
A817   20 FF AE   JSR $AEFF
A81A   4C A0 A8   JMP $A8A0   ; do GOTO


; RESTORE command

A81D   38         SEC
A81E   A5 2B      LDA $2B
A820   E9 01      SBC #$01
A822   A4 2C      LDY $2C
A824   B0 01      BCS $A827
A826   88         DEY

A827   85 41      STA $41

A829   84 42      STY $42
A82B   60         RTS


A82C   20 E1 FF   JSR $FFE1   ; test stop key


; STOP command

A82F   B0 01      BCS $A832


; END command

A831   18         CLC
A832   D0 3C      BNE $A870
A834   A5 7A      LDA $7A
A836   A4 7B      LDY $7B
A838   A6 3A      LDX $3A
A83A   E8         INX
A83B   F0 0C      BEQ $A849
A83D   85 3D      STA $3D
A83F   84 3E      STY $3E
A841   A5 39      LDA $39
A843   A4 3A      LDY $3A
A845   85 3B      STA $3B
A847   84 3C      STY $3C
A849   68         PLA
A84A   68         PLA

A84B   A9 81      LDA #$81   ; low  A381

A84D   A0 A3      LDY #$A3   ; high A381
A84F   90 03      BCC $A854
A851   4C 69 A4   JMP $A469
A854   4C 86 E3   JMP $E386


; CONT command

A857   D0 17      BNE $A870
A859   A2 1A      LDX #$1A   ; error number
A85B   A4 3E      LDY $3E
A85D   D0 03      BNE $A862
A85F   4C 37 A4   JMP $A437

A862   A5 3D      LDA $3D
A864   85 7A      STA $7A
A866   84 7B      STY $7B
A868   A5 3B      LDA $3B
A86A   A4 3C      LDY $3C
A86C   85 39      STA $39
A86E   84 3A      STY $3A
A870   60         RTS


; RUN command

A871   08         PHP
A872   A9 00      LDA #$00
A874   20 90 FF   JSR $FF90
A877   28         PLP
A878   D0 03      BNE $A87D
A87A   4C 59 A6   JMP $A659

A87D   20 60 A6   JSR $A660   ; do CLR
A880   4C 97 A8   JMP $A897   ; do GOTO


; GOSUB command

A883   A9 03      LDA #$03
A885   20 FB A3   JSR $A3FB
A888   A5 7B      LDA $7B
A88A   48         PHA
A88B   A5 7A      LDA $7A
A88D   48         PHA
A88E   A5 3A      LDA $3A
A890   48         PHA
A891   A5 39      LDA $39
A893   48         PHA
A894   A9 8D      LDA #$8D
A896   48         PHA

A897   20 79 00   JSR $0079

A89A   20 A0 A8   JSR $A8A0
A89D   4C AE A7   JMP $A7AE


; GOTO command

A8A0   20 6B A9   JSR $A96B
A8A3   20 09 A9   JSR $A909
A8A6   38         SEC
A8A7   A5 39      LDA $39
A8A9   E5 14      SBC $14
A8AB   A5 3A      LDA $3A
A8AD   E5 15      SBC $15
A8AF   B0 0B      BCS $A8BC
A8B1   98         TYA
A8B2   38         SEC
A8B3   65 7A      ADC $7A
A8B5   A6 7B      LDX $7B
A8B7   90 07      BCC $A8C0
A8B9   E8         INX
A8BA   B0 04      BCS $A8C0
A8BC   A5 2B      LDA $2B
A8BE   A6 2C      LDX $2C
A8C0   20 17 A6   JSR $A617
A8C3   90 1E      BCC $A8E3
A8C5   A5 5F      LDA $5F
A8C7   E9 01      SBC #$01
A8C9   85 7A      STA $7A
A8CB   A5 60      LDA $60
A8CD   E9 00      SBC #$00
A8CF   85 7B      STA $7B
A8D1   60         RTS


; RETURN command

A8D2   D0 FD      BNE $A8D1
A8D4   A9 FF      LDA #$FF
A8D6   85 4A      STA $4A
A8D8   20 8A A3   JSR $A38A
A8DB   9A         TXS
A8DC   C9 8D      CMP #$8D
A8DE   F0 0B      BEQ $A8EB
A8E0   A2 0C      LDX #$0C
A8E2   .BY $2C
A8E3   A2 11      LDX #$11
A8E5   4C 37 A4   JMP $A437

A8E8   4C 08 AF   JMP $AF08


; remove GOSUB block from stack

A8EB   68         PLA
A8EC   68         PLA
A8ED   85 39      STA $39
A8EF   68         PLA
A8F0   85 3A      STA $3A
A8F2   68         PLA
A8F3   85 7A      STA $7A
A8F5   68         PLA
A8F6   85 7B      STA $7B


; DATA command

A8F8   20 06 A9   JSR $A906

A8FB   98         TYA

A8FC   18         CLC
A8FD   65 7A      ADC $7A
A8FF   85 7A      STA $7A
A901   90 02      BCC $A905
A903   E6 7B      INC $7B
A905   60         RTS


; get end of statement

A906   A2 3A      LDX #$3A   ; colon
A908   .BY $2C


; get end of line

A909   A2 00      LDX #$00
A90B   86 07      STX $07
A90D   A0 00      LDY #$00
A90F   84 08      STY $08
A911   A5 08      LDA $08
A913   A6 07      LDX $07
A915   85 07      STA $07
A917   86 08      STX $08
A919   B1 7A      LDA ($7A),Y
A91B   F0 E8      BEQ $A905
A91D   C5 08      CMP $08
A91F   F0 E4      BEQ $A905
A921   C8         INY
A922   C9 22      CMP #$22   ; quote mark
A924   D0 F3      BNE $A919
A926   F0 E9      BEQ $A911


; IF command

A928   20 9E AD   JSR $AD9E
A92B   20 79 00   JSR $0079
A92E   C9 89      CMP #$89
A930   F0 05      BEQ $A937
A932   A9 A7      LDA #$A7
A934   20 FF AE   JSR $AEFF
A937   A5 61      LDA $61
A939   D0 05      BNE $A940


; REM command

A93B   20 09 A9   JSR $A909
A93E   F0 BB      BEQ $A8FB


; THEN part of IF

A940   20 79 00   JSR $0079
A943   B0 03      BCS $A948
A945   4C A0 A8   JMP $A8A0   ; do GOTO
A948   4C ED A7   JMP $A7ED


; ON command

A94B   20 9E B7   JSR $B79E
A94E   48         PHA
A94F   C9 8D      CMP #$8D   ; GOSUB code
A951   F0 04      BEQ $A957
A953   C9 89      CMP #$89   ; GOTO code
A955   D0 91      BNE $A8E8
A957   C6 65      DEC $65
A959   D0 04      BNE $A95F
A95B   68         PLA
A95C   4C EF A7   JMP $A7EF
A95F   20 73 00   JSR $0073
A962   20 6B A9   JSR $A96B
A965   C9 2C      CMP #$2C   ; comma
A967   F0 EE      BEQ $A957
A969   68         PLA
A96A   60         RTS


; get decimal number into $14/$15

A96B   A2 00      LDX #$00
A96D   86 14      STX $14
A96F   86 15      STX $15

A971   B0 F7      BCS $A96A

A973   E9 2F      SBC #$2F
A975   85 07      STA $07
A977   A5 15      LDA $15
A979   85 22      STA $22
A97B   C9 19      CMP #$19
A97D   B0 D4      BCS $A953
A97F   A5 14      LDA $14
A981   0A         ASL   ; times 2
A982   26 22      ROL $22
A984   0A         ASL   ; times 2
A985   26 22      ROL $22
A987   65 14      ADC $14   ; add original
A989   85 14      STA $14
A98B   A5 22      LDA $22
A98D   65 15      ADC $15
A98F   85 15      STA $15
A991   06 14      ASL $14   ; times 2
A993   26 15      ROL $15   ; = times 10 overall
A995   A5 14      LDA $14
A997   65 07      ADC $07
A999   85 14      STA $14
A99B   90 02      BCC $A99F
A99D   E6 15      INC $15
A99F   20 73 00   JSR $0073
A9A2   4C 71 A9   JMP $A971


; LET command

A9A5   20 8B B0   JSR $B08B
A9A8   85 49      STA $49
A9AA   84 4A      STY $4A
A9AC   A9 B2      LDA #$B2    ; equals code
A9AE   20 FF AE   JSR $AEFF
A9B1   A5 0E      LDA $0E
A9B3   48         PHA
A9B4   A5 0D      LDA $0D
A9B6   48         PHA
A9B7   20 9E AD   JSR $AD9E
A9BA   68         PLA
A9BB   2A         ROL
A9BC   20 90 AD   JSR $AD90
A9BF   D0 18      BNE $A9D9
A9C1   68         PLA

A9C2   10 12      BPL $A9D6


; assign to integer

A9C4   20 1B BC   JSR $BC1B
A9C7   20 BF B1   JSR $B1BF
A9CA   A0 00      LDY #$00
A9CC   A5 64      LDA $64
A9CE   91 49      STA ($49),Y
A9D0   C8         INY
A9D1   A5 65      LDA $65
A9D3   91 49      STA ($49),Y
A9D5   60         RTS


; assign to float

A9D6   4C D0 BB   JMP $BBD0


; assign to string

A9D9   68         PLA

A9DA   A4 4A      LDY $4A

A9DC   C0 BF      CPY #$BF
A9DE   D0 4C      BNE $AA2C


; assign to TI$

A9E0   20 A6 B6   JSR $B6A6
A9E3   C9 06      CMP #$06   ; length 6
A9E5   D0 3D      BNE $AA24
A9E7   A0 00      LDY #$00
A9E9   84 61      STY $61
A9EB   84 66      STY $66
A9ED   84 71      STY $71
A9EF   20 1D AA   JSR $AA1D
A9F2   20 E2 BA   JSR $BAE2
A9F5   E6 71      INC $71
A9F7   A4 71      LDY $71
A9F9   20 1D AA   JSR $AA1D
A9FC   20 0C BC   JSR $BC0C
A9FF   AA         TAX
AA00   F0 05      BEQ $AA07
AA02   E8         INX
AA03   8A         TXA
AA04   20 ED BA   JSR $BAED
AA07   A4 71      LDY $71
AA09   C8         INY
AA0A   C0 06      CPY #$06
AA0C   D0 DF      BNE $A9ED
AA0E   20 E2 BA   JSR $BAE2
AA11   20 9B BC   JSR $BC9B
AA14   A6 64      LDX $64
AA16   A4 63      LDY $63
AA18   A5 65      LDA $65
AA1A   4C DB FF   JMP $FFDB


; add next digit to float accum

AA1D   B1 22      LDA ($22),Y
AA1F   20 80 00   JSR $0080
AA22   90 03      BCC $AA27
AA24   4C 48 B2   JMP $B248

AA27   E9 2F      SBC #$2F
AA29   4C 7E BD   JMP $BD7E


; assign to string variable

AA2C   A0 02      LDY #$02
AA2E   B1 64      LDA ($64),Y
AA30   C5 34      CMP $34
AA32   90 17      BCC $AA4B
AA34   D0 07      BNE $AA3D
AA36   88         DEY
AA37   B1 64      LDA ($64),Y
AA39   C5 33      CMP $33
AA3B   90 0E      BCC $AA4B
AA3D   A4 65      LDY $65
AA3F   C4 2E      CPY $2E
AA41   90 08      BCC $AA4B
AA43   D0 0D      BNE $AA52
AA45   A5 64      LDA $64
AA47   C5 2D      CMP $2D
AA49   B0 07      BCS $AA52
AA4B   A5 64      LDA $64
AA4D   A4 65      LDY $65
AA4F   4C 68 AA   JMP $AA68

AA52   A0 00      LDY #$00
AA54   B1 64      LDA ($64),Y
AA56   20 75 B4   JSR $B475
AA59   A5 50      LDA $50
AA5B   A4 51      LDY $51
AA5D   85 6F      STA $6F
AA5F   84 70      STY $70
AA61   20 7A B6   JSR $B67A
AA64   A9 61      LDA #$61   ; low  0061
AA66   A0 00      LDY #$00   ; high 0061


; move descriptor into variable

AA68   85 50      STA $50
AA6A   84 51      STY $51
AA6C   20 DB B6   JSR $B6DB
AA6F   A0 00      LDY #$00
AA71   B1 50      LDA ($50),Y
AA73   91 49      STA ($49),Y
AA75   C8         INY
AA76   B1 50      LDA ($50),Y
AA78   91 49      STA ($49),Y
AA7A   C8         INY
AA7B   B1 50      LDA ($50),Y
AA7D   91 49      STA ($49),Y
AA7F   60         RTS


; PRINT# comand

AA80   20 86 AA   JSR $AA86
AA83   4C B5 AB   JMP $ABB5


; CMD command

AA86   20 9E B7   JSR $B79E
AA89   F0 05      BEQ $AA90
AA8B   A9 2C      LDA #$2C    ; comma
AA8D   20 FF AE   JSR $AEFF
AA90   08         PHP
AA91   86 13      STX $13
AA93   20 18 E1   JSR $E118
AA96   28         PLP
AA97   4C A0 AA   JMP $AAA0   ; do PRINT

AA9A   20 21 AB   JSR $AB21
AA9D   20 79 00   JSR $0079


; PRINT command

AAA0   F0 35      BEQ $AAD7

AAA2   F0 43      BEQ $AAE7

AAA4   C9 A3      CMP #$A3   ; TAB( code
AAA6   F0 50      BEQ $AAF8
AAA8   C9 A6      CMP #$A6   ; SPC( code
AAAA   18         CLC
AAAB   F0 4B      BEQ $AAF8
AAAD   C9 2C      CMP #$2C   ; comma
AAAF   F0 37      BEQ $AAE8
AAB1   C9 3B      CMP #$3B   ; semi-colon
AAB3   F0 5E      BEQ $AB13
AAB5   20 9E AD   JSR $AD9E
AAB8   24 0D      BIT $0D
AABA   30 DE      BMI $AA9A
AABC   20 DD BD   JSR $BDDD
AABF   20 87 B4   JSR $B487
AAC2   20 21 AB   JSR $AB21
AAC5   20 3B AB   JSR $AB3B
AAC8   D0 D3      BNE $AA9D


; end statement in buffer and screen

AACA   A9 00      LDA #$00
AACC   9D 00 02   STA $0200,X
AACF   A2 FF      LDX #$FF
AAD1   A0 01      LDY #$01
AAD3   A5 13      LDA $13
AAD5   D0 10      BNE $AAE7


; end line on CMD output file

AAD7   A9 0D      LDA #$0D
AAD9   20 47 AB   JSR $AB47
AADC   24 13      BIT $13
AADE   10 05      BPL $AAE5
AAE0   A9 0A      LDA #$0A
AAE2   20 47 AB   JSR $AB47

AAE5   49 FF      EOR #$FF

AAE7   60         RTS


; routine for printing TAB( and SPC(

AAE8   38         SEC
AAE9   20 F0 FF   JSR $FFF0
AAEC   98         TYA
AAED   38         SEC
AAEE   E9 0A      SBC #$0A
AAF0   B0 FC      BCS $AAEE
AAF2   49 FF      EOR #$FF
AAF4   69 01      ADC #$01
AAF6   D0 16      BNE $AB0E
AAF8   08         PHP
AAF9   38         SEC
AAFA   20 F0 FF   JSR $FFF0
AAFD   84 09      STY $09
AAFF   20 9B B7   JSR $B79B
AB02   C9 29      CMP #$29   ; )
AB04   D0 59      BNE $AB5F
AB06   28         PLP
AB07   90 06      BCC $AB0F
AB09   8A         TXA
AB0A   E5 09      SBC $09
AB0C   90 05      BCC $AB13
AB0E   AA         TAX
AB0F   E8         INX
AB10   CA         DEX
AB11   D0 06      BNE $AB19
AB13   20 73 00   JSR $0073
AB16   4C A2 AA   JMP $AAA2
AB19   20 3B AB   JSR $AB3B
AB1C   D0 F2      BNE $AB10


; print string form AY

AB1E   20 87 B4   JSR $B487


; print string from $22/$23

AB21   20 A6 B6   JSR $B6A6
AB24   AA         TAX
AB25   A0 00      LDY #$00
AB27   E8         INX

AB28   CA         DEX

AB29   F0 BC      BEQ $AAE7
AB2B   B1 22      LDA ($22),Y
AB2D   20 47 AB   JSR $AB47
AB30   C8         INY
AB31   C9 0D      CMP #$0D
AB33   D0 F3      BNE $AB28
AB35   20 E5 AA   JSR $AAE5
AB38   4C 28 AB   JMP $AB28


; print character on CMD output file

AB3B   A5 13      LDA $13
AB3D   F0 03      BEQ $AB42
AB3F   A9 20      LDA #$20   ; space
AB41   .BY $2C
AB42   A9 1D      LDA #$1D   ; csr right
AB44   .BY $2C

AB45   A9 3F      LDA #$3F   ; question mark


AB47   20 0C E1   JSR $E10C

AB4A   29 FF      AND #$FF
AB4C   60         RTS


; read errors

AB4D   A5 11      LDA $11
AB4F   F0 11      BEQ $AB62
AB51   30 04      BMI $AB57
AB53   A0 FF      LDY #$FF
AB55   D0 04      BNE $AB5B
AB57   A5 3F      LDA $3F
AB59   A4 40      LDY $40
AB5B   85 39      STA $39
AB5D   84 3A      STY $3A
AB5F   4C 08 AF   JMP $AF08
AB62   A5 13      LDA $13
AB64   F0 05      BEQ $AB6B
AB66   A2 18      LDX #$18
AB68   4C 37 A4   JMP $A437

AB6B   A9 0C      LDA #$0C   ; low  AD0C
AB6D   A0 AD      LDY #$AD   ; high AD0C
AB6F   20 1E AB   JSR $AB1E
AB72   A5 3D      LDA $3D
AB74   A4 3E      LDY $3E
AB76   85 7A      STA $7A
AB78   84 7B      STY $7B
AB7A   60         RTS


; GET command

AB7B   20 A6 B3   JSR $B3A6
AB7E   C9 23      CMP #$23   ; #
AB80   D0 10      BNE $AB92
AB82   20 73 00   JSR $0073
AB85   20 9E B7   JSR $B79E
AB88   A9 2C      LDA #$2C   ; comma
AB8A   20 FF AE   JSR $AEFF
AB8D   86 13      STX $13
AB8F   20 1E E1   JSR $E11E
AB92   A2 01      LDX #$01
AB94   A0 02      LDY #$02
AB96   A9 00      LDA #$00
AB98   8D 01 02   STA $0201
AB9B   A9 40      LDA #$40   ; GET code
AB9D   20 0F AC   JSR $AC0F
ABA0   A6 13      LDX $13
ABA2   D0 13      BNE $ABB7
ABA4   60         RTS


; INPUT# command

ABA5   20 9E B7   JSR $B79E
ABA8   A9 2C      LDA #$2C   ; comma
ABAA   20 FF AE   JSR $AEFF
ABAD   86 13      STX $13
ABAF   20 1E E1   JSR $E11E
ABB2   20 CE AB   JSR $ABCE

ABB5   A5 13      LDA $13

ABB7   20 CC FF   JSR $FFCC
ABBA   A2 00      LDX #$00
ABBC   86 13      STX $13
ABBE   60         RTS


; INPUT command

ABBF   C9 22      CMP #$22   ; quote mark
ABC1   D0 0B      BNE $ABCE
ABC3   20 BD AE   JSR $AEBD
ABC6   A9 3B      LDA #$3B   ; semi-colon
ABC8   20 FF AE   JSR $AEFF
ABCB   20 21 AB   JSR $AB21

ABCE   20 A6 B3   JSR $B3A6

ABD1   A9 2C      LDA #$2C   ; comma
ABD3   8D FF 01   STA $01FF
ABD6   20 F9 AB   JSR $ABF9
ABD9   A5 13      LDA $13
ABDB   F0 0D      BEQ $ABEA
ABDD   20 B7 FF   JSR $FFB7
ABE0   29 02      AND #$02
ABE2   F0 06      BEQ $ABEA
ABE4   20 B5 AB   JSR $ABB5
ABE7   4C F8 A8   JMP $A8F8   ; do DATA

ABEA   AD 00 02   LDA $0200
ABED   D0 1E      BNE $AC0D
ABEF   A5 13      LDA $13
ABF1   D0 E3      BNE $ABD6
ABF3   20 06 A9   JSR $A906
ABF6   4C FB A8   JMP $A8FB


; get line into input buffer

ABF9   A5 13      LDA $13
ABFB   D0 06      BNE $AC03
ABFD   20 45 AB   JSR $AB45
AC00   20 3B AB   JSR $AB3B
AC03   4C 60 A5   JMP $A560


; READ command

AC06   A6 41      LDX $41
AC08   A4 42      LDY $42
AC0A   A9 98      LDA #$98   ; READ code
AC0C   .BY $2C
AC0D   A9 00      LDA #$00

AC0F   85 11      STA $11

AC11   86 43      STX $43
AC13   84 44      STY $44

AC15   20 8B B0   JSR $B08B

AC18   85 49      STA $49
AC1A   84 4A      STY $4A
AC1C   A5 7A      LDA $7A
AC1E   A4 7B      LDY $7B
AC20   85 4B      STA $4B
AC22   84 4C      STY $4C
AC24   A6 43      LDX $43
AC26   A4 44      LDY $44
AC28   86 7A      STX $7A
AC2A   84 7B      STY $7B
AC2C   20 79 00   JSR $0079
AC2F   D0 20      BNE $AC51
AC31   24 11      BIT $11
AC33   50 0C      BVC $AC41
AC35   20 24 E1   JSR $E124
AC38   8D 00 02   STA $0200
AC3B   A2 FF      LDX #$FF
AC3D   A0 01      LDY #$01
AC3F   D0 0C      BNE $AC4D
AC41   30 75      BMI $ACB8
AC43   A5 13      LDA $13
AC45   D0 03      BNE $AC4A
AC47   20 45 AB   JSR $AB45
AC4A   20 F9 AB   JSR $ABF9
AC4D   86 7A      STX $7A
AC4F   84 7B      STY $7B

AC51   20 73 00   JSR $0073

AC54   24 0D      BIT $0D
AC56   10 31      BPL $AC89
AC58   24 11      BIT $11
AC5A   50 09      BVC $AC65
AC5C   E8         INX
AC5D   86 7A      STX $7A
AC5F   A9 00      LDA #$00
AC61   85 07      STA $07
AC63   F0 0C      BEQ $AC71
AC65   85 07      STA $07
AC67   C9 22      CMP #$22   ; quote mark
AC69   F0 07      BEQ $AC72
AC6B   A9 3A      LDA #$3A   ; colon
AC6D   85 07      STA $07
AC6F   A9 2C      LDA #$2C   ; comma
AC71   18         CLC
AC72   85 08      STA $08
AC74   A5 7A      LDA $7A
AC76   A4 7B      LDY $7B
AC78   69 00      ADC #$00
AC7A   90 01      BCC $AC7D
AC7C   C8         INY
AC7D   20 8D B4   JSR $B48D
AC80   20 E2 B7   JSR $B7E2
AC83   20 DA A9   JSR $A9DA
AC86   4C 91 AC   JMP $AC91

AC89   20 F3 BC   JSR $BCF3
AC8C   A5 0E      LDA $0E
AC8E   20 C2 A9   JSR $A9C2

AC91   20 79 00   JSR $0079

AC94   F0 07      BEQ $AC9D
AC96   C9 2C      CMP #$2C   ; comma
AC98   F0 03      BEQ $AC9D
AC9A   4C 4D AB   JMP $AB4D

AC9D   A5 7A      LDA $7A
AC9F   A4 7B      LDY $7B
ACA1   85 43      STA $43
ACA3   84 44      STY $44
ACA5   A5 4B      LDA $4B
ACA7   A4 4C      LDY $4C
ACA9   85 7A      STA $7A
ACAB   84 7B      STY $7B
ACAD   20 79 00   JSR $0079
ACB0   F0 2D      BEQ $ACDF
ACB2   20 FD AE   JSR $AEFD
ACB5   4C 15 AC   JMP $AC15

ACB8   20 06 A9   JSR $A906
ACBB   C8         INY
ACBC   AA         TAX
ACBD   D0 12      BNE $ACD1
ACBF   A2 0D      LDX #$0D   ; error number
ACC1   C8         INY
ACC2   B1 7A      LDA ($7A),Y
ACC4   F0 6C      BEQ $AD32
ACC6   C8         INY
ACC7   B1 7A      LDA ($7A),Y
ACC9   85 3F      STA $3F
ACCB   C8         INY
ACCC   B1 7A      LDA ($7A),Y
ACCE   C8         INY
ACCF   85 40      STA $40
ACD1   20 FB A8   JSR $A8FB
ACD4   20 79 00   JSR $0079
ACD7   AA         TAX
ACD8   E0 83      CPX #$83   ; DATA code
ACDA   D0 DC      BNE $ACB8
ACDC   4C 51 AC   JMP $AC51

ACDF   A5 43      LDA $43
ACE1   A4 44      LDY $44
ACE3   A6 11      LDX $11
ACE5   10 03      BPL $ACEA
ACE7   4C 27 A8   JMP $A827

ACEA   A0 00      LDY #$00
ACEC   B1 43      LDA ($43),Y
ACEE   F0 0B      BEQ $ACFB
ACF0   A5 13      LDA $13
ACF2   D0 07      BNE $ACFB
ACF4   A9 FC      LDA #$FC   ; low  ACFC
ACF6   A0 AC      LDY #$AC   ; high ACFC
ACF8   4C 1E AB   JMP $AB1E

ACFB   60         RTS

; messages used dring READ

; ?EXTRA IGNORED

ACFC   .BY $3F,$45,$58,$54,$52,$41
AD02   .BY $20,$49,$47,$4E,$4F,$52,$45,$44
AD0A   .BY $0D,$00

; ?REDO FROM START

AD0C   .BY $3F,$52,$45,$44,$4F
AD11   .BY $20,$46,$52,$4F,$4D
AD16   .BY $20,$53,$54,$41,$52,$54
AD1C   .BY $0D,$00


; NEXT command

AD1E   D0 04      BNE $AD24
AD20   A0 00      LDY #$00
AD22   F0 03      BEQ $AD27

AD24   20 8B B0   JSR $B08B

AD27   85 49      STA $49
AD29   84 4A      STY $4A
AD2B   20 8A A3   JSR $A38A
AD2E   F0 05      BEQ $AD35
AD30   A2 0A      LDX #$0A   ; error number
AD32   4C 37 A4   JMP $A437

AD35   9A         TXS
AD36   8A         TXA
AD37   18         CLC
AD38   69 04      ADC #$04
AD3A   48         PHA
AD3B   69 06      ADC #$06
AD3D   85 24      STA $24
AD3F   68         PLA
AD40   A0 01      LDY #$01
AD42   20 A2 BB   JSR $BBA2
AD45   BA         TSX
AD46   BD 09 01   LDA $0109,X
AD49   85 66      STA $66
AD4B   A5 49      LDA $49
AD4D   A4 4A      LDY $4A
AD4F   20 67 B8   JSR $B867
AD52   20 D0 BB   JSR $BBD0
AD55   A0 01      LDY #$01
AD57   20 5D BC   JSR $BC5D
AD5A   BA         TSX
AD5B   38         SEC
AD5C   FD 09 01   SBC $0109,X
AD5F   F0 17      BEQ $AD78
AD61   BD 0F 01   LDA $010F,X
AD64   85 39      STA $39
AD66   BD 10 01   LDA $0110,X
AD69   85 3A      STA $3A
AD6B   BD 12 01   LDA $0112,X
AD6E   85 7A      STA $7A
AD70   BD 11 01   LDA $0111,X
AD73   85 7B      STA $7B

AD75   4C AE A7   JMP $A7AE
AD78   8A         TXA
AD79   69 11      ADC #$11
AD7B   AA         TAX
AD7C   9A         TXS
AD7D   20 79 00   JSR $0079
AD80   C9 2C      CMP #$2C   ; comma
AD82   D0 F1      BNE $AD75
AD84   20 73 00   JSR $0073
AD87   20 24 AD   JSR $AD24


; get next non-string value

AD8A   20 9E AD   JSR $AD9E


AD8D   18         CLC

AD8E   .BY $24


; check value to be string

AD8F   38         SEC


; check value according to C flag

AD90   24 0D      BIT $0D
AD92   30 03      BMI $AD97
AD94   B0 03      BCS $AD99
AD96   60         RTS

AD97   B0 FD      BCS $AD96
AD99   A2 16      LDX #$16
AD9B   4C 37 A4   JMP $A437


; evaluate expression

AD9E   A6 7A      LDX $7A
ADA0   D0 02      BNE $ADA4
ADA2   C6 7B      DEC $7B
ADA4   C6 7A      DEC $7A
ADA6   A2 00      LDX #$00
ADA8   .BY $24

ADA9   48         PHA

ADAA   8A         TXA
ADAB   48         PHA
ADAC   A9 01      LDA #$01
ADAE   20 FB A3   JSR $A3FB
ADB1   20 83 AE   JSR $AE83
ADB4   A9 00      LDA #$00
ADB6   85 4D      STA $4D

ADB8   20 79 00   JSR $0079


ADBB   38         SEC

ADBC   E9 B1      SBC #$B1   ; code for greater than
ADBE   90 17      BCC $ADD7
ADC0   C9 03      CMP #$03
ADC2   B0 13      BCS $ADD7
ADC4   C9 01      CMP #$01
ADC6   2A         ROL
ADC7   49 01      EOR #$01
ADC9   45 4D      EOR $4D
ADCB   C5 4D      CMP $4D
ADCD   90 61      BCC $AE30
ADCF   85 4D      STA $4D
ADD1   20 73 00   JSR $0073
ADD4   4C BB AD   JMP $ADBB

ADD7   A6 4D      LDX $4D
ADD9   D0 2C      BNE $AE07
ADDB   B0 7B      BCS $AE58
ADDD   69 07      ADC #$07
ADDF   90 77      BCC $AE58
ADE1   65 0D      ADC $0D
ADE3   D0 03      BNE $ADE8
ADE5   4C 3D B6   JMP $B63D

ADE8   69 FF      ADC #$FF
ADEA   85 22      STA $22
ADEC   0A         ASL
ADED   65 22      ADC $22
ADEF   A8         TAY
ADF0   68         PLA
ADF1   D9 80 A0   CMP $A080,Y
ADF4   B0 67      BCS $AE5D
ADF6   20 8D AD   JSR $AD8D
ADF9   48         PHA

ADFA   20 20 AE   JSR $AE20

ADFD   68         PLA
ADFE   A4 4B      LDY $4B
AE00   10 17      BPL $AE19
AE02   AA         TAX
AE03   F0 56      BEQ $AE5B
AE05   D0 5F      BNE $AE66
AE07   46 0D      LSR $0D
AE09   8A         TXA
AE0A   2A         ROL
AE0B   A6 7A      LDX $7A
AE0D   D0 02      BNE $AE11
AE0F   C6 7B      DEC $7B
AE11   C6 7A      DEC $7A
AE13   A0 1B      LDY #$1B
AE15   85 4D      STA $4D
AE17   D0 D7      BNE $ADF0
AE19   D9 80 A0   CMP $A080,Y
AE1C   B0 48      BCS $AE66
AE1E   90 D9      BCC $ADF9


; recursive entry for evaluation of expressions

AE20   B9 82 A0   LDA $A082,Y
AE23   48         PHA
AE24   B9 81 A0   LDA $A081,Y
AE27   48         PHA
AE28   20 33 AE   JSR $AE33
AE2B   A5 4D      LDA $4D
AE2D   4C A9 AD   JMP $ADA9
AE30   4C 08 AF   JMP $AF08


; save rounded value of left operand

AE33   A5 66      LDA $66
AE35   BE 80 A0   LDX $A080,Y

AE38   A8         TAY

AE39   68         PLA   ; pull return address
AE3A   85 22      STA $22
AE3C   E6 22      INC $22
AE3E   68         PLA   ; and store in $22/$23
AE3F   85 23      STA $23
AE41   98         TYA
AE42   48         PHA

AE43   20 1B BC   JSR $BC1B

AE46   A5 65      LDA $65
AE48   48         PHA
AE49   A5 64      LDA $64
AE4B   48         PHA
AE4C   A5 63      LDA $63
AE4E   48         PHA
AE4F   A5 62      LDA $62
AE51   48         PHA
AE52   A5 61      LDA $61
AE54   48         PHA
AE55   6C 22 00   JMP ($0022)   ; return to caller


; apply operator

AE58   A0 FF      LDY #$FF
AE5A   68         PLA
AE5B   F0 23      BEQ $AE80
AE5D   C9 64      CMP #$64
AE5F   F0 03      BEQ $AE64
AE61   20 8D AD   JSR $AD8D
AE64   84 4B      STY $4B
AE66   68         PLA
AE67   4A         LSR
AE68   85 12      STA $12
AE6A   68         PLA
AE6B   85 69      STA $69
AE6D   68         PLA
AE6E   85 6A      STA $6A
AE70   68         PLA
AE71   85 6B      STA $6B
AE73   68         PLA
AE74   85 6C      STA $6C
AE76   68         PLA
AE77   85 6D      STA $6D
AE79   68         PLA
AE7A   85 6E      STA $6E
AE7C   45 66      EOR $66
AE7E   85 6F      STA $6F
AE80   A5 61      LDA $61
AE82   60         RTS


; get arithmetic element routine

AE83   6C 0A 03   JMP ($030A)   ; normally AE86


; standard arithmetic element

AE86   A9 00      LDA #$00
AE88   85 0D      STA $0D
AE8A   20 73 00   JSR $0073
AE8D   B0 03      BCS $AE92
AE8F   4C F3 BC   JMP $BCF3

AE92   20 13 B1   JSR $B113
AE95   90 03      BCC $AE9A
AE97   4C 28 AF   JMP $AF28

AE9A   C9 FF      CMP #$FF   ; PI
AE9C   D0 0F      BNE $AEAD
AE9E   A9 A8      LDA #$A8   ; low  AEA8
AEA0   A0 AE      LDY #$AE   ; high AEA8
AEA2   20 A2 BB   JSR $BBA2
AEA5   4C 73 00   JMP $0073


; float value of PI

AEA8   .BY $82,$49,$0F,$DA,$A1

AEAD   C9 2E      CMP #$2E   ; decimal point
AEAF   F0 DE      BEQ $AE8F
AEB1   C9 AB      CMP #$AB   ; plus code
AEB3   F0 58      BEQ $AF0D
AEB5   C9 AA      CMP #$AA   ; times code
AEB7   F0 D1      BEQ $AE8A
AEB9   C9 22      CMP #$22   ; quote mark
AEBB   D0 0F      BNE $AECC

AEBD   A5 7A      LDA $7A

AEBF   A4 7B      LDY $7B
AEC1   69 00      ADC #$00
AEC3   90 01      BCC $AEC6
AEC5   C8         INY
AEC6   20 87 B4   JSR $B487
AEC9   4C E2 B7   JMP $B7E2

AECC   C9 A8      CMP #$A8   ; NOT code
AECE   D0 13      BNE $AEE3
AED0   A0 18      LDY #$18
AED2   D0 3B      BNE $AF0F


; NOT operator

AED4   20 BF B1   JSR $B1BF
AED7   A5 65      LDA $65
AED9   49 FF      EOR #$FF
AEDB   A8         TAY
AEDC   A5 64      LDA $64
AEDE   49 FF      EOR #$FF
AEE0   4C 91 B3   JMP $B391


; GET operand

AEE3   C9 A5      CMP #$A5
AEE5   D0 03      BNE $AEEA
AEE7   4C F4 B3   JMP $B3F4

AEEA   C9 B4      CMP #$B4    ; SGN code or higher
AEEC   90 03      BCC $AEF1
AEEE   4C A7 AF   JMP $AFA7


AEF1   20 FA AE   JSR $AEFA

AEF4   20 9E AD   JSR $AD9E


; check and skip characters

AEF7   A9 29      LDA #$29   ; )
AEF9   .BY 2C

AEFA   A9 28      LDA #$28   ; (

AEFC   .BY 2C

AEFD   A9 2C      LDA #$2C   ; comma


AEFF   A0 00      LDY #$00

AF01   D1 7A      CMP ($7A),Y
AF03   D0 03      BNE $AF08
AF05   4C 73 00   JMP $0073


AF08   A2 0B      LDX #$0B   ; error number

AF0A   4C 37 A4   JMP $A437


; recursive geet value

AF0D   A0 15      LDY #$15
AF0F   68         PLA
AF10   68         PLA
AF11   4C FA AD   JMP $ADFA


; check variable pointer range

AF14   38         SEC
AF15   A5 64      LDA $64
AF17   E9 00      SBC #$00
AF19   A5 65      LDA $65
AF1B   E9 A0      SBC #$A0
AF1D   90 08      BCC $AF27
AF1F   A9 A2      LDA #$A2
AF21   E5 64      SBC $64
AF23   A9 E3      LDA #$E3
AF25   E5 65      SBC $65
AF27   60         RTS


; get value of variable

AF28   20 8B B0   JSR $B08B
AF2B   85 64      STA $64
AF2D   84 65      STY $65
AF2F   A6 45      LDX $45
AF31   A4 46      LDY $46
AF33   A5 0D      LDA $0D
AF35   F0 26      BEQ $AF5D
AF37   A9 00      LDA #$00
AF39   85 70      STA $70
AF3B   20 14 AF   JSR $AF14
AF3E   90 1C      BCC $AF5C
AF40   E0 54      CPX #$54   ; T
AF42   D0 18      BNE $AF5C
AF44   C0 C9      CPY #$C9   ; I$
AF46   D0 14      BNE $AF5C
AF48   20 84 AF   JSR $AF84
AF4B   84 5E      STY $5E
AF4D   88         DEY
AF4E   84 71      STY $71
AF50   A0 06      LDY #$06
AF52   84 5D      STY $5D
AF54   A0 24      LDY #$24
AF56   20 68 BE   JSR $BE68
AF59   4C 6F B4   JMP $B46F

AF5C   60         RTS

AF5D   24 0E      BIT $0E
AF5F   10 0D      BPL $AF6E
AF61   A0 00      LDY #$00
AF63   B1 64      LDA ($64),Y
AF65   AA         TAX
AF66   C8         INY
AF67   B1 64      LDA ($64),Y
AF69   A8         TAY
AF6A   8A         TXA
AF6B   4C 91 B3   JMP $B391

AF6E   20 14 AF   JSR $AF14
AF71   90 2D      BCC $AFA0
AF73   E0 54      CPX #$54   ; T
AF75   D0 1B      BNE $AF92
AF77   C0 49      CPY #$49   ; I
AF79   D0 25      BNE $AFA0
AF7B   20 84 AF   JSR $AF84
AF7E   98         TYA
AF7F   A2 A0      LDX #$A0
AF81   4C 4F BC   JMP $BC4F


; get time in float accu

AF84   20 DE FF   JSR $FFDE
AF87   86 64      STX $64
AF89   84 63      STY $63
AF8B   85 65      STA $65
AF8D   A0 00      LDY #$00
AF8F   84 62      STY $62
AF91   60         RTS


; continue of get value of variable

AF92   E0 53      CPX #$53   ; S
AF94   D0 0A      BNE $AFA0
AF96   C0 54      CPY #$54   ; T
AF98   D0 06      BNE $AFA0
AF9A   20 B7 FF   JSR $FFB7
AF9D   4C 3C BC   JMP $BC3C

AFA0   A5 64      LDA $64
AFA2   A4 65      LDY $65
AFA4   4C A2 BB   JMP $BBA2


; apply function

AFA7   0A         ASL
AFA8   48         PHA
AFA9   AA         TAX
AFAA   20 73 00   JSR $0073
AFAD   E0 8F      CPX #$8F
AFAF   90 20      BCC $AFD1
AFB1   20 FA AE   JSR $AEFA
AFB4   20 9E AD   JSR $AD9E
AFB7   20 FD AE   JSR $AEFD
AFBA   20 8F AD   JSR $AD8F
AFBD   68         PLA
AFBE   AA         TAX
AFBF   A5 65      LDA $65
AFC1   48         PHA
AFC2   A5 64      LDA $64
AFC4   48         PHA
AFC5   8A         TXA
AFC6   48         PHA
AFC7   20 9E B7   JSR $B79E
AFCA   68         PLA
AFCB   A8         TAY
AFCC   8A         TXA
AFCD   48         PHA
AFCE   4C D6 AF   JMP $AFD6

AFD1   20 F1 AE   JSR $AEF1
AFD4   68         PLA
AFD5   A8         TAY

AFD6   B9 EA 9F   LDA $9FEA,Y

AFD9   85 55      STA $55
AFDB   B9 EB 9F   LDA $9FEB,Y
AFDE   85 56      STA $56
AFE0   20 54 00   JSR $0054
AFE3   4C 8D AD   JMP $AD8D


; OR operator

AFE6   A0 FF      LDY #$FF
AFE8   .BY $2C


; AND operator

AFE9   A0 00      LDY #$00
AFEB   84 0B      STY $0B
AFED   20 BF B1   JSR $B1BF
AFF0   A5 64      LDA $64
AFF2   45 0B      EOR $0B
AFF4   85 07      STA $07
AFF6   A5 65      LDA $65
AFF8   45 0B      EOR $0B
AFFA   85 08      STA $08
AFFC   20 FC BB   JSR $BBFC
AFFF   20 BF B1   JSR $B1BF
B002   A5 65      LDA $65
B004   45 0B      EOR $0B
B006   25 08      AND $08
B008   45 0B      EOR $0B
B00A   A8         TAY
B00B   A5 64      LDA $64
B00D   45 0B      EOR $0B
B00F   25 07      AND $07
B011   45 0B      EOR $0B
B013   4C 91 B3   JMP $B391


; greater/equal/less operator

B016   20 90 AD   JSR $AD90
B019   B0 13      BCS $B02E
B01B   A5 6E      LDA $6E
B01D   09 7F      ORA #$7F
B01F   25 6A      AND $6A
B021   85 6A      STA $6A
B023   A9 69      LDA #$69
B025   A0 00      LDY #$00
B027   20 5B BC   JSR $BC5B
B02A   AA         TAX
B02B   4C 61 B0   JMP $B061

B02E   A9 00      LDA #$00
B030   85 0D      STA $0D
B032   C6 4D      DEC $4D
B034   20 A6 B6   JSR $B6A6
B037   85 61      STA $61
B039   86 62      STX $62
B03B   84 63      STY $63
B03D   A5 6C      LDA $6C
B03F   A4 6D      LDY $6D
B041   20 AA B6   JSR $B6AA
B044   86 6C      STX $6C
B046   84 6D      STY $6D
B048   AA         TAX
B049   38         SEC
B04A   E5 61      SBC $61
B04C   F0 08      BEQ $B056
B04E   A9 01      LDA #$01
B050   90 04      BCC $B056
B052   A6 61      LDX $61
B054   A9 FF      LDA #$FF
B056   85 66      STA $66
B058   A0 FF      LDY #$FF
B05A   E8         INX
B05B   C8         INY
B05C   CA         DEX
B05D   D0 07      BNE $B066
B05F   A6 66      LDX $66

B061   30 0F      BMI $B072

B063   18         CLC
B064   90 0C      BCC $B072
B066   B1 6C      LDA ($6C),Y
B068   D1 62      CMP ($62),Y
B06A   F0 EF      BEQ $B05B
B06C   A2 FF      LDX #$FF
B06E   B0 02      BCS $B072
B070   A2 01      LDX #$01
B072   E8         INX
B073   8A         TXA
B074   2A         ROL
B075   25 12      AND $12
B077   F0 02      BEQ $B07B
B079   A9 FF      LDA #$FF
B07B   4C 3C BC   JMP $BC3C


; DIM command

B07E   20 FD AE   JSR $AEFD

B081   AA         TAX

B082   20 90 B0   JSR $B090
B085   20 79 00   JSR $0079
B088   D0 F4      BNE $B07E
B08A   60         RTS


; get name and pointer to a variable

B08B   A2 00      LDX #$00
B08D   20 79 00   JSR $0079

B090   86 0C      STX $0C


B092   85 45      STA $45

B094   20 79 00   JSR $0079
B097   20 13 B1   JSR $B113
B09A   B0 03      BCS $B09F
B09C   4C 08 AF   JMP $AF08

B09F   A2 00      LDX #$00
B0A1   86 0D      STX $0D
B0A3   86 0E      STX $0E
B0A5   20 73 00   JSR $0073
B0A8   90 05      BCC $B0AF
B0AA   20 13 B1   JSR $B113
B0AD   90 0B      BCC $B0BA
B0AF   AA         TAX
B0B0   20 73 00   JSR $0073
B0B3   90 FB      BCC $B0B0
B0B5   20 13 B1   JSR $B113
B0B8   B0 F6      BCS $B0B0
B0BA   C9 24      CMP #$24   ; $
B0BC   D0 06      BNE $B0C4
B0BE   A9 FF      LDA #$FF
B0C0   85 0D      STA $0D
B0C2   D0 10      BNE $B0D4
B0C4   C9 25      CMP #$25   ; %
B0C6   D0 13      BNE $B0DB
B0C8   A5 10      LDA $10
B0CA   D0 D0      BNE $B09C
B0CC   A9 80      LDA #$80
B0CE   85 0E      STA $0E
B0D0   05 45      ORA $45
B0D2   85 45      STA $45
B0D4   8A         TXA
B0D5   09 80      ORA #$80
B0D7   AA         TAX
B0D8   20 73 00   JSR $0073
B0DB   86 46      STX $46
B0DD   38         SEC
B0DE   05 10      ORA $10
B0E0   E9 28      SBC #$28    ; (
B0E2   D0 03      BNE $B0E7
B0E4   4C D1 B1   JMP $B1D1

B0E7   A0 00      LDY #$00
B0E9   84 10      STY $10
B0EB   A5 2D      LDA $2D
B0ED   A6 2E      LDX $2E
B0EF   86 60      STX $60
B0F1   85 5F      STA $5F
B0F3   E4 30      CPX $30
B0F5   D0 04      BNE $B0FB
B0F7   C5 2F      CMP $2F
B0F9   F0 22      BEQ $B11D
B0FB   A5 45      LDA $45
B0FD   D1 5F      CMP ($5F),Y
B0FF   D0 08      BNE $B109
B101   A5 46      LDA $46
B103   C8         INY
B104   D1 5F      CMP ($5F),Y
B106   F0 7D      BEQ $B185
B108   88         DEY
B109   18         CLC
B10A   A5 5F      LDA $5F
B10C   69 07      ADC #$07
B10E   90 E1      BCC $B0F1
B110   E8         INX
B111   D0 DC      BNE $B0EF


; check character in A
; C=1 if alphabetic, C=0 if not

B113   C9 41      CMP #$41   ; A
B115   90 05      BCC $B11C
B117   E9 5B      SBC #$5B   ; Z
B119   38         SEC
B11A   E9 A5      SBC #$A5
B11C   60         RTS


; variable not found

B11D   68         PLA
B11E   48         PHA
B11F   C9 2A      CMP #$2A
B121   D0 05      BNE $B128
B123   A9 13      LDA #$13
B125   A0 BF      LDY #$BF
B127   60         RTS

B128   A5 45      LDA $45
B12A   A4 46      LDY $46
B12C   C9 54      CMP #$54   ; T
B12E   D0 0B      BNE $B13B
B130   C0 C9      CPY #$C9   ; I$
B132   F0 EF      BEQ $B123
B134   C0 49      CPY #$49   ; I
B136   D0 03      BNE $B13B
B138   4C 08 AF   JMP $AF08

B13B   C9 53      CMP #$53   ; S
B13D   D0 04      BNE $B143
B13F   C0 54      CPY #$54   ; T
B141   F0 F5      BEQ $B138
B143   A5 2F      LDA $2F
B145   A4 30      LDY $30
B147   85 5F      STA $5F
B149   84 60      STY $60
B14B   A5 31      LDA $31
B14D   A4 32      LDY $32
B14F   85 5A      STA $5A
B151   84 5B      STY $5B
B153   18         CLC
B154   69 07      ADC #$07
B156   90 01      BCC $B159
B158   C8         INY
B159   85 58      STA $58
B15B   84 59      STY $59
B15D   20 B8 A3   JSR $A3B8
B160   A5 58      LDA $58
B162   A4 59      LDY $59
B164   C8         INY
B165   85 2F      STA $2F
B167   84 30      STY $30
B169   A0 00      LDY #$00
B16B   A5 45      LDA $45
B16D   91 5F      STA ($5F),Y
B16F   C8         INY
B170   A5 46      LDA $46
B172   91 5F      STA ($5F),Y
B174   A9 00      LDA #$00
B176   C8         INY
B177   91 5F      STA ($5F),Y
B179   C8         INY
B17A   91 5F      STA ($5F),Y
B17C   C8         INY
B17D   91 5F      STA ($5F),Y
B17F   C8         INY
B180   91 5F      STA ($5F),Y
B182   C8         INY
B183   91 5F      STA ($5F),Y


; variable found

B185   A5 5F      LDA $5F
B187   18         CLC
B188   69 02      ADC #$02
B18A   A4 60      LDY $60
B18C   90 01      BCC $B18F
B18E   C8         INY
B18F   85 47      STA $47
B191   84 48      STY $48
B193   60         RTS


; compute pointer to array body

B194   A5 0B      LDA $0B
B196   0A         ASL
B197   69 05      ADC #$05
B199   65 5F      ADC $5F
B19B   A4 60      LDY $60
B19D   90 01      BCC $B1A0
B19F   C8         INY
B1A0   85 58      STA $58
B1A2   84 59      STY $59
B1A4   60         RTS


; float number for conversion to integer

B1A5   .BY $90,$80,$00,$00,$00


; routine to convert float to fixed point

B1AA   20 BF B1   JSR $B1BF
B1AD   A5 64      LDA $64
B1AF   A4 65      LDY $65
B1B1   60         RTS


; convert value from statement to integer

B1B2   20 73 00   JSR $0073
B1B5   20 9E AD   JSR $AD9E

B1B8   20 8D AD   JSR $AD8D

B1BB   A5 66      LDA $66
B1BD   30 0D      BMI $B1CC


; convert float number to integer

B1BF   A5 61      LDA $61
B1C1   C9 90      CMP #$90
B1C3   90 09      BCC $B1CE
B1C5   A9 A5      LDA #$A5   ; low  B1A5
B1C7   A0 B1      LDY #$B1   ; high B1A5
B1C9   20 5B BC   JSR $BC5B
B1CC   D0 7A      BNE $B248
B1CE   4C 9B BC   JMP $BC9B


; get pointer to dimensioned variable

B1D1   A5 0C      LDA $0C
B1D3   05 0E      ORA $0E
B1D5   48         PHA
B1D6   A5 0D      LDA $0D
B1D8   48         PHA
B1D9   A0 00      LDY #$00
B1DB   98         TYA
B1DC   48         PHA
B1DD   A5 46      LDA $46
B1DF   48         PHA
B1E0   A5 45      LDA $45
B1E2   48         PHA
B1E3   20 B2 B1   JSR $B1B2
B1E6   68         PLA
B1E7   85 45      STA $45
B1E9   68         PLA
B1EA   85 46      STA $46
B1EC   68         PLA
B1ED   A8         TAY
B1EE   BA         TSX
B1EF   BD 02 01   LDA $0102,X
B1F2   48         PHA
B1F3   BD 01 01   LDA $0101,X
B1F6   48         PHA
B1F7   A5 64      LDA $64
B1F9   9D 02 01   STA $0102,X
B1FC   A5 65      LDA $65
B1FE   9D 01 01   STA $0101,X
B201   C8         INY
B202   20 79 00   JSR $0079
B205   C9 2C      CMP #$2C   ; comma
B207   F0 D2      BEQ $B1DB
B209   84 0B      STY $0B
B20B   20 F7 AE   JSR $AEF7
B20E   68         PLA
B20F   85 0D      STA $0D
B211   68         PLA
B212   85 0E      STA $0E
B214   29 7F      AND #$7F
B216   85 0C      STA $0C
B218   A6 2F      LDX $2F
B21A   A5 30      LDA $30
B21C   86 5F      STX $5F
B21E   85 60      STA $60
B220   C5 32      CMP $32
B222   D0 04      BNE $B228
B224   E4 31      CPX $31
B226   F0 39      BEQ $B261
B228   A0 00      LDY #$00
B22A   B1 5F      LDA ($5F),Y
B22C   C8         INY
B22D   C5 45      CMP $45
B22F   D0 06      BNE $B237
B231   A5 46      LDA $46
B233   D1 5F      CMP ($5F),Y
B235   F0 16      BEQ $B24D
B237   C8         INY
B238   B1 5F      LDA ($5F),Y
B23A   18         CLC
B23B   65 5F      ADC $5F
B23D   AA         TAX
B23E   C8         INY
B23F   B1 5F      LDA ($5F),Y
B241   65 60      ADC $60
B243   90 D7      BCC $B21C

B245   A2 12      LDX #$12   ; error number

B247   .BY 2C

B248   A2 0E      LDX #$0E   ; error number

B24A   4C 37 A4   JMP $A437

B24D   A2 13      LDX #$13   ; error number
B24F   A5 0C      LDA $0C
B251   D0 F7      BNE $B24A
B253   20 94 B1   JSR $B194
B256   A5 0B      LDA $0B
B258   A0 04      LDY #$04
B25A   D1 5F      CMP ($5F),Y
B25C   D0 E7      BNE $B245
B25E   4C EA B2   JMP $B2EA


; allocate array

B261   20 94 B1   JSR $B194
B264   20 08 A4   JSR $A408
B267   A0 00      LDY #$00
B269   84 72      STY $72
B26B   A2 05      LDX #$05
B26D   A5 45      LDA $45
B26F   91 5F      STA ($5F),Y
B271   10 01      BPL $B274
B273   CA         DEX
B274   C8         INY
B275   A5 46      LDA $46
B277   91 5F      STA ($5F),Y
B279   10 02      BPL $B27D
B27B   CA         DEX
B27C   CA         DEX
B27D   86 71      STX $71
B27F   A5 0B      LDA $0B
B281   C8         INY
B282   C8         INY
B283   C8         INY
B284   91 5F      STA ($5F),Y
B286   A2 0B      LDX #$0B
B288   A9 00      LDA #$00
B28A   24 0C      BIT $0C
B28C   50 08      BVC $B296
B28E   68         PLA
B28F   18         CLC
B290   69 01      ADC #$01
B292   AA         TAX
B293   68         PLA
B294   69 00      ADC #$00
B296   C8         INY
B297   91 5F      STA ($5F),Y
B299   C8         INY
B29A   8A         TXA
B29B   91 5F      STA ($5F),Y
B29D   20 4C B3   JSR $B34C
B2A0   86 71      STX $71
B2A2   85 72      STA $72
B2A4   A4 22      LDY $22
B2A6   C6 0B      DEC $0B
B2A8   D0 DC      BNE $B286
B2AA   65 59      ADC $59
B2AC   B0 5D      BCS $B30B
B2AE   85 59      STA $59
B2B0   A8         TAY
B2B1   8A         TXA
B2B2   65 58      ADC $58
B2B4   90 03      BCC $B2B9
B2B6   C8         INY
B2B7   F0 52      BEQ $B30B
B2B9   20 08 A4   JSR $A408
B2BC   85 31      STA $31
B2BE   84 32      STY $32
B2C0   A9 00      LDA #$00
B2C2   E6 72      INC $72
B2C4   A4 71      LDY $71
B2C6   F0 05      BEQ $B2CD
B2C8   88         DEY
B2C9   91 58      STA ($58),Y
B2CB   D0 FB      BNE $B2C8
B2CD   C6 59      DEC $59
B2CF   C6 72      DEC $72
B2D1   D0 F5      BNE $B2C8
B2D3   E6 59      INC $59
B2D5   38         SEC
B2D6   A5 31      LDA $31
B2D8   E5 5F      SBC $5F
B2DA   A0 02      LDY #$02
B2DC   91 5F      STA ($5F),Y
B2DE   A5 32      LDA $32
B2E0   C8         INY
B2E1   E5 60      SBC $60
B2E3   91 5F      STA ($5F),Y
B2E5   A5 0C      LDA $0C
B2E7   D0 62      BNE $B34B
B2E9   C8         INY


; compute reference to array element

B2EA   B1 5F      LDA ($5F),Y
B2EC   85 0B      STA $0B
B2EE   A9 00      LDA #$00
B2F0   85 71      STA $71
B2F2   85 72      STA $72
B2F4   C8         INY
B2F5   68         PLA
B2F6   AA         TAX
B2F7   85 64      STA $64
B2F9   68         PLA
B2FA   85 65      STA $65
B2FC   D1 5F      CMP ($5F),Y
B2FE   90 0E      BCC $B30E
B300   D0 06      BNE $B308
B302   C8         INY
B303   8A         TXA
B304   D1 5F      CMP ($5F),Y
B306   90 07      BCC $B30F
B308   4C 45 B2   JMP $B245

B30B   4C 35 A4   JMP $A435

B30E   C8         INY
B30F   A5 72      LDA $72
B311   05 71      ORA $71
B313   18         CLC
B314   F0 0A      BEQ $B320
B316   20 4C B3   JSR $B34C
B319   8A         TXA
B31A   65 64      ADC $64
B31C   AA         TAX
B31D   98         TYA
B31E   A4 22      LDY $22
B320   65 65      ADC $65
B322   86 71      STX $71
B324   C6 0B      DEC $0B
B326   D0 CA      BNE $B2F2
B328   85 72      STA $72
B32A   A2 05      LDX #$05
B32C   A5 45      LDA $45
B32E   10 01      BPL $B331
B330   CA         DEX
B331   A5 46      LDA $46
B333   10 02      BPL $B337
B335   CA         DEX
B336   CA         DEX
B337   86 28      STX $28
B339   A9 00      LDA #$00
B33B   20 55 B3   JSR $B355
B33E   8A         TXA
B33F   65 58      ADC $58
B341   85 47      STA $47
B343   98         TYA
B344   65 59      ADC $59
B346   85 48      STA $48
B348   A8         TAY
B349   A5 47      LDA $47
B34B   60         RTS


; XY = XA = length * limit from array data

B34C   84 22      STY $22
B34E   B1 5F      LDA ($5F),Y
B350   85 28      STA $28
B352   88         DEY
B353   B1 5F      LDA ($5F),Y

B355   85 29      STA $29

B357   A9 10      LDA #$10
B359   85 5D      STA $5D
B35B   A2 00      LDX #$00
B35D   A0 00      LDY #$00
B35F   8A         TXA
B360   0A         ASL
B361   AA         TAX
B362   98         TYA
B363   2A         ROL
B364   A8         TAY
B365   B0 A4      BCS $B30B
B367   06 71      ASL $71
B369   26 72      ROL $72
B36B   90 0B      BCC $B378
B36D   18         CLC
B36E   8A         TXA
B36F   65 28      ADC $28
B371   AA         TAX
B372   98         TYA
B373   65 29      ADC $29
B375   A8         TAY
B376   B0 93      BCS $B30B
B378   C6 5D      DEC $5D
B37A   D0 E3      BNE $B35F
B37C   60         RTS


; FRE function

B37D   A5 0D      LDA $0D
B37F   F0 03      BEQ $B384
B381   20 A6 B6   JSR $B6A6
B384   20 26 B5   JSR $B526
B387   38         SEC
B388   A5 33      LDA $33
B38A   E5 31      SBC $31
B38C   A8         TAY
B38D   A5 34      LDA $34
B38F   E5 32      SBC $32


; routine to convert integer to float

B391   A2 00      LDX #$00
B393   86 0D      STX $0D
B395   85 62      STA $62
B397   84 63      STY $63
B399   A2 90      LDX #$90
B39B   4C 44 BC   JMP $BC44


; POS function

B39E   38         SEC
B39F   20 F0 FF   JSR $FFF0

B3A2   A9 00      LDA #$00

B3A4   F0 EB      BEQ $B391


; check for non-direct mode

B3A6   A6 3A      LDX $3A
B3A8   E8         INX
B3A9   D0 A0      BNE $B34B
B3AB   A2 15      LDX #$15   ; error number
B3AD   .BY $2C
B3AE   A2 1B      LDX #$1B   ; error number
B3B0   4C 37 A4   JMP $A437


; DEF command

B3B3   20 E1 B3   JSR $B3E1
B3B6   20 A6 B3   JSR $B3A6
B3B9   20 FA AE   JSR $AEFA
B3BC   A9 80      LDA #$80
B3BE   85 10      STA $10
B3C0   20 8B B0   JSR $B08B
B3C3   20 8D AD   JSR $AD8D
B3C6   20 F7 AE   JSR $AEF7
B3C9   A9 B2      LDA #$B2
B3CB   20 FF AE   JSR $AEFF
B3CE   48         PHA
B3CF   A5 48      LDA $48
B3D1   48         PHA
B3D2   A5 47      LDA $47
B3D4   48         PHA
B3D5   A5 7B      LDA $7B
B3D7   48         PHA
B3D8   A5 7A      LDA $7A
B3DA   48         PHA
B3DB   20 F8 A8   JSR $A8F8
B3DE   4C 4F B4   JMP $B44F


; get function name

B3E1   A9 A5      LDA #$A5
B3E3   20 FF AE   JSR $AEFF
B3E6   09 80      ORA #$80
B3E8   85 10      STA $10
B3EA   20 92 B0   JSR $B092
B3ED   85 4E      STA $4E
B3EF   84 4F      STY $4F
B3F1   4C 8D AD   JMP $AD8D


; expand FN call

B3F4   20 E1 B3   JSR $B3E1
B3F7   A5 4F      LDA $4F
B3F9   48         PHA
B3FA   A5 4E      LDA $4E
B3FC   48         PHA
B3FD   20 F1 AE   JSR $AEF1
B400   20 8D AD   JSR $AD8D
B403   68         PLA
B404   85 4E      STA $4E
B406   68         PLA
B407   85 4F      STA $4F
B409   A0 02      LDY #$02
B40B   B1 4E      LDA ($4E),Y
B40D   85 47      STA $47
B40F   AA         TAX
B410   C8         INY
B411   B1 4E      LDA ($4E),Y
B413   F0 99      BEQ $B3AE
B415   85 48      STA $48
B417   C8         INY
B418   B1 47      LDA ($47),Y
B41A   48         PHA
B41B   88         DEY
B41C   10 FA      BPL $B418
B41E   A4 48      LDY $48
B420   20 D4 BB   JSR $BBD4
B423   A5 7B      LDA $7B
B425   48         PHA
B426   A5 7A      LDA $7A
B428   48         PHA
B429   B1 4E      LDA ($4E),Y
B42B   85 7A      STA $7A
B42D   C8         INY
B42E   B1 4E      LDA ($4E),Y
B430   85 7B      STA $7B
B432   A5 48      LDA $48
B434   48         PHA
B435   A5 47      LDA $47
B437   48         PHA
B438   20 8A AD   JSR $AD8A
B43B   68         PLA
B43C   85 4E      STA $4E
B43E   68         PLA
B43F   85 4F      STA $4F
B441   20 79 00   JSR $0079
B444   F0 03      BEQ $B449
B446   4C 08 AF   JMP $AF08

B449   68         PLA
B44A   85 7A      STA $7A
B44C   68         PLA
B44D   85 7B      STA $7B

B44F   A0 00      LDY #$00

B451   68         PLA
B452   91 4E      STA ($4E),Y
B454   68         PLA
B455   C8         INY
B456   91 4E      STA ($4E),Y
B458   68         PLA
B459   C8         INY
B45A   91 4E      STA ($4E),Y
B45C   68         PLA
B45D   C8         INY
B45E   91 4E      STA ($4E),Y
B460   68         PLA
B461   C8         INY
B462   91 4E      STA ($4E),Y
B464   60         RTS


; STR$ function

B465   20 8D AD   JSR $AD8D
B468   A0 00      LDY #$00
B46A   20 DF BD   JSR $BDDF
B46D   68         PLA
B46E   68         PLA

B46F   A9 FF      LDA #$FF

B471   A0 00      LDY #$00
B473   F0 12      BEQ $B487

B475   A6 64      LDX $64

B477   A4 65      LDY $65
B479   86 50      STX $50
B47B   84 51      STY $51


; allocate area according to A

B47D   20 F4 B4   JSR $B4F4
B480   86 62      STX $62
B482   84 63      STY $63
B484   85 61      STA $61
B486   60         RTS


; get description of string into float accu

B487   A2 22      LDX #$22   ; quote mark
B489   86 07      STX $07
B48B   86 08      STX $08

B48D   85 6F      STA $6F

B48F   84 70      STY $70
B491   85 62      STA $62
B493   84 63      STY $63
B495   A0 FF      LDY #$FF
B497   C8         INY
B498   B1 6F      LDA ($6F),Y
B49A   F0 0C      BEQ $B4A8
B49C   C5 07      CMP $07
B49E   F0 04      BEQ $B4A4
B4A0   C5 08      CMP $08
B4A2   D0 F3      BNE $B497
B4A4   C9 22      CMP #$22   ; quote mark
B4A6   F0 01      BEQ $B4A9
B4A8   18         CLC
B4A9   84 61      STY $61
B4AB   98         TYA
B4AC   65 6F      ADC $6F
B4AE   85 71      STA $71
B4B0   A6 70      LDX $70
B4B2   90 01      BCC $B4B5
B4B4   E8         INX
B4B5   86 72      STX $72
B4B7   A5 70      LDA $70
B4B9   F0 04      BEQ $B4BF
B4BB   C9 02      CMP #$02
B4BD   D0 0B      BNE $B4CA
B4BF   98         TYA
B4C0   20 75 B4   JSR $B475
B4C3   A6 6F      LDX $6F
B4C5   A4 70      LDY $70
B4C7   20 88 B6   JSR $B688


; save descriptor from $61-$63 on stack

B4CA   A6 16      LDX $16
B4CC   E0 22      CPX #$22
B4CE   D0 05      BNE $B4D5
B4D0   A2 19      LDX #$19
B4D2   4C 37 A4   JMP $A437
B4D5   A5 61      LDA $61
B4D7   95 00      STA $00,X
B4D9   A5 62      LDA $62
B4DB   95 01      STA $01,X
B4DD   A5 63      LDA $63
B4DF   95 02      STA $02,X
B4E1   A0 00      LDY #$00
B4E3   86 64      STX $64
B4E5   84 65      STY $65
B4E7   84 70      STY $70
B4E9   88         DEY
B4EA   84 0D      STY $0D
B4EC   86 17      STX $17
B4EE   E8         INX
B4EF   E8         INX
B4F0   E8         INX
B4F1   86 16      STX $16
B4F3   60         RTS


; allocate number of bytes in A

B4F4   46 0F      LSR $0F
B4F6   48         PHA
B4F7   49 FF      EOR #$FF
B4F9   38         SEC
B4FA   65 33      ADC $33
B4FC   A4 34      LDY $34
B4FE   B0 01      BCS $B501
B500   88         DEY
B501   C4 32      CPY $32
B503   90 11      BCC $B516
B505   D0 04      BNE $B50B
B507   C5 31      CMP $31
B509   90 0B      BCC $B516
B50B   85 33      STA $33
B50D   84 34      STY $34
B50F   85 35      STA $35
B511   84 36      STY $36
B513   AA         TAX
B514   68         PLA
B515   60         RTS

B516   A2 10      LDX #$10
B518   A5 0F      LDA $0F
B51A   30 B6      BMI $B4D2
B51C   20 26 B5   JSR $B526
B51F   A9 80      LDA #$80
B521   85 0F      STA $0F
B523   68         PLA
B524   D0 D0      BNE $B4F6


; string garbage clean up

B526   A6 37      LDX $37
B528   A5 38      LDA $38

B52A   86 33      STX $33

B52C   85 34      STA $34
B52E   A0 00      LDY #$00
B530   84 4F      STY $4F
B532   84 4E      STY $4E
B534   A5 31      LDA $31
B536   A6 32      LDX $32
B538   85 5F      STA $5F
B53A   86 60      STX $60
B53C   A9 19      LDA #$19   ; low  0019
B53E   A2 00      LDX #$00   ; high 0019
B540   85 22      STA $22
B542   86 23      STX $23
B544   C5 16      CMP $16
B546   F0 05      BEQ $B54D
B548   20 C7 B5   JSR $B5C7
B54B   F0 F7      BEQ $B544
B54D   A9 07      LDA #$07
B54F   85 53      STA $53
B551   A5 2D      LDA $2D
B553   A6 2E      LDX $2E
B555   85 22      STA $22
B557   86 23      STX $23
B559   E4 30      CPX $30
B55B   D0 04      BNE $B561
B55D   C5 2F      CMP $2F
B55F   F0 05      BEQ $B566
B561   20 BD B5   JSR $B5BD
B564   F0 F3      BEQ $B559
B566   85 58      STA $58
B568   86 59      STX $59
B56A   A9 03      LDA #$03
B56C   85 53      STA $53
B56E   A5 58      LDA $58
B570   A6 59      LDX $59
B572   E4 32      CPX $32
B574   D0 07      BNE $B57D
B576   C5 31      CMP $31
B578   D0 03      BNE $B57D
B57A   4C 06 B6   JMP $B606
B57D   85 22      STA $22
B57F   86 23      STX $23
B581   A0 00      LDY #$00
B583   B1 22      LDA ($22),Y
B585   AA         TAX
B586   C8         INY
B587   B1 22      LDA ($22),Y
B589   08         PHP
B58A   C8         INY
B58B   B1 22      LDA ($22),Y
B58D   65 58      ADC $58
B58F   85 58      STA $58
B591   C8         INY
B592   B1 22      LDA ($22),Y
B594   65 59      ADC $59
B596   85 59      STA $59
B598   28         PLP
B599   10 D3      BPL $B56E
B59B   8A         TXA
B59C   30 D0      BMI $B56E
B59E   C8         INY
B59F   B1 22      LDA ($22),Y
B5A1   A0 00      LDY #$00
B5A3   0A         ASL
B5A4   69 05      ADC #$05
B5A6   65 22      ADC $22
B5A8   85 22      STA $22
B5AA   90 02      BCC $B5AE
B5AC   E6 23      INC $23
B5AE   A6 23      LDX $23
B5B0   E4 59      CPX $59
B5B2   D0 04      BNE $B5B8
B5B4   C5 58      CMP $58
B5B6   F0 BA      BEQ $B572
B5B8   20 C7 B5   JSR $B5C7
B5BB   F0 F3      BEQ $B5B0


; check string area

B5BD   B1 22      LDA ($22),Y
B5BF   30 35      BMI $B5F6
B5C1   C8         INY
B5C2   B1 22      LDA ($22),Y
B5C4   10 30      BPL $B5F6
B5C6   C8         INY


; check string area

B5C7   B1 22      LDA ($22),Y
B5C9   F0 2B      BEQ $B5F6
B5CB   C8         INY
B5CC   B1 22      LDA ($22),Y
B5CE   AA         TAX
B5CF   C8         INY
B5D0   B1 22      LDA ($22),Y
B5D2   C5 34      CMP $34
B5D4   90 06      BCC $B5DC
B5D6   D0 1E      BNE $B5F6
B5D8   E4 33      CPX $33
B5DA   B0 1A      BCS $B5F6
B5DC   C5 60      CMP $60
B5DE   90 16      BCC $B5F6
B5E0   D0 04      BNE $B5E6
B5E2   E4 5F      CPX $5F
B5E4   90 10      BCC $B5F6
B5E6   86 5F      STX $5F
B5E8   85 60      STA $60
B5EA   A5 22      LDA $22
B5EC   A6 23      LDX $23
B5EE   85 4E      STA $4E
B5F0   86 4F      STX $4F
B5F2   A5 53      LDA $53
B5F4   85 55      STA $55
B5F6   A5 53      LDA $53
B5F8   18         CLC
B5F9   65 22      ADC $22
B5FB   85 22      STA $22
B5FD   90 02      BCC $B601
B5FF   E6 23      INC $23
B601   A6 23      LDX $23
B603   A0 00      LDY #$00
B605   60         RTS


; continuation of garbage clean up

B606   A5 4F      LDA $4F
B608   05 4E      ORA $4E
B60A   F0 F5      BEQ $B601
B60C   A5 55      LDA $55
B60E   29 04      AND #$04
B610   4A         LSR
B611   A8         TAY
B612   85 55      STA $55
B614   B1 4E      LDA ($4E),Y
B616   65 5F      ADC $5F
B618   85 5A      STA $5A
B61A   A5 60      LDA $60
B61C   69 00      ADC #$00
B61E   85 5B      STA $5B
B620   A5 33      LDA $33
B622   A6 34      LDX $34
B624   85 58      STA $58
B626   86 59      STX $59
B628   20 BF A3   JSR $A3BF
B62B   A4 55      LDY $55
B62D   C8         INY
B62E   A5 58      LDA $58
B630   91 4E      STA ($4E),Y
B632   AA         TAX
B633   E6 59      INC $59
B635   A5 59      LDA $59
B637   C8         INY
B638   91 4E      STA ($4E),Y
B63A   4C 2A B5   JMP $B52A


; joining strings

B63D   A5 65      LDA $65
B63F   48         PHA
B640   A5 64      LDA $64
B642   48         PHA
B643   20 83 AE   JSR $AE83
B646   20 8F AD   JSR $AD8F
B649   68         PLA
B64A   85 6F      STA $6F
B64C   68         PLA
B64D   85 70      STA $70
B64F   A0 00      LDY #$00
B651   B1 6F      LDA ($6F),Y
B653   18         CLC
B654   71 64      ADC ($64),Y
B656   90 05      BCC $B65D
B658   A2 17      LDX #$17
B65A   4C 37 A4   JMP $A437

B65D   20 75 B4   JSR $B475
B660   20 7A B6   JSR $B67A
B663   A5 50      LDA $50
B665   A4 51      LDY $51
B667   20 AA B6   JSR $B6AA
B66A   20 8C B6   JSR $B68C
B66D   A5 6F      LDA $6F
B66F   A4 70      LDY $70
B671   20 AA B6   JSR $B6AA
B674   20 CA B4   JSR $B4CA
B677   4C B8 AD   JMP $ADB8


; move string

B67A   A0 00      LDY #$00
B67C   B1 6F      LDA ($6F),Y
B67E   48         PHA
B67F   C8         INY
B680   B1 6F      LDA ($6F),Y
B682   AA         TAX
B683   C8         INY
B684   B1 6F      LDA ($6F),Y
B686   A8         TAY
B687   68         PLA


; move string with length A, pointer in XY

B688   86 22      STX $22
B68A   84 23      STY $23

B68C   A8         TAY

B68D   F0 0A      BEQ $B699
B68F   48         PHA
B690   88         DEY
B691   B1 22      LDA ($22),Y
B693   91 35      STA ($35),Y
B695   98         TYA
B696   D0 F8      BNE $B690
B698   68         PLA
B699   18         CLC
B69A   65 35      ADC $35
B69C   85 35      STA $35
B69E   90 02      BCC $B6A2
B6A0   E6 36      INC $36
B6A2   60         RTS


; de-allocate temporary string

B6A3   20 8F AD   JSR $AD8F

B6A6   A5 64      LDA $64

B6A8   A4 65      LDY $65

B6AA   85 22      STA $22

B6AC   84 23      STY $23
B6AE   20 DB B6   JSR $B6DB
B6B1   08         PHP
B6B2   A0 00      LDY #$00
B6B4   B1 22      LDA ($22),Y
B6B6   48         PHA
B6B7   C8         INY
B6B8   B1 22      LDA ($22),Y
B6BA   AA         TAX
B6BB   C8         INY
B6BC   B1 22      LDA ($22),Y
B6BE   A8         TAY
B6BF   68         PLA
B6C0   28         PLP
B6C1   D0 13      BNE $B6D6
B6C3   C4 34      CPY $34
B6C5   D0 0F      BNE $B6D6
B6C7   E4 33      CPX $33
B6C9   D0 0B      BNE $B6D6
B6CB   48         PHA
B6CC   18         CLC
B6CD   65 33      ADC $33
B6CF   85 33      STA $33
B6D1   90 02      BCC $B6D5
B6D3   E6 34      INC $34
B6D5   68         PLA
B6D6   86 22      STX $22
B6D8   84 23      STY $23
B6DA   60         RTS


; check descriptor stack

B6DB   C4 18      CPY $18
B6DD   D0 0C      BNE $B6EB
B6DF   C5 17      CMP $17
B6E1   D0 08      BNE $B6EB
B6E3   85 16      STA $16
B6E5   E9 03      SBC #$03
B6E7   85 17      STA $17
B6E9   A0 00      LDY #$00
B6EB   60         RTS


; CHR$ function

B6EC   20 A1 B7   JSR $B7A1
B6EF   8A         TXA
B6F0   48         PHA
B6F1   A9 01      LDA #$01
B6F3   20 7D B4   JSR $B47D
B6F6   68         PLA
B6F7   A0 00      LDY #$00
B6F9   91 62      STA ($62),Y
B6FB   68         PLA
B6FC   68         PLA
B6FD   4C CA B4   JMP $B4CA


; LEFT$ function

B700   20 61 B7   JSR $B761
B703   D1 50      CMP ($50),Y
B705   98         TYA

B706   90 04      BCC $B70C

B708   B1 50      LDA ($50),Y
B70A   AA         TAX
B70B   98         TYA
B70C   48         PHA
B70D   8A         TXA
B70E   48         PHA
B70F   20 7D B4   JSR $B47D
B712   A5 50      LDA $50
B714   A4 51      LDY $51
B716   20 AA B6   JSR $B6AA
B719   68         PLA
B71A   A8         TAY
B71B   68         PLA
B71C   18         CLC
B71D   65 22      ADC $22
B71F   85 22      STA $22
B721   90 02      BCC $B725
B723   E6 23      INC $23
B725   98         TYA
B726   20 8C B6   JSR $B68C
B729   4C CA B4   JMP $B4CA


; RIGHT$ function

B72C   20 61 B7   JSR $B761
B72F   18         CLC
B730   F1 50      SBC ($50),Y
B732   49 FF      EOR #$FF
B734   4C 06 B7   JMP $B706


; MID$ function

B737   A9 FF      LDA #$FF   ; default 3 parameter
B739   85 65      STA $65
B73B   20 79 00   JSR $0079
B73E   C9 29      CMP #$29   ; )
B740   F0 06      BEQ $B748
B742   20 FD AE   JSR $AEFD
B745   20 9E B7   JSR $B79E
B748   20 61 B7   JSR $B761
B74B   F0 4B      BEQ $B798
B74D   CA         DEX
B74E   8A         TXA
B74F   48         PHA
B750   18         CLC
B751   A2 00      LDX #$00
B753   F1 50      SBC ($50),Y
B755   B0 B6      BCS $B70D
B757   49 FF      EOR #$FF
B759   C5 65      CMP $65
B75B   90 B1      BCC $B70E
B75D   A5 65      LDA $65
B75F   B0 AD      BCS $B70E


; get first 2 parameters for
; LEFT$, RIGHT$ and MID$

B761   20 F7 AE   JSR $AEF7
B764   68         PLA
B765   A8         TAY
B766   68         PLA
B767   85 55      STA $55
B769   68         PLA
B76A   68         PLA
B76B   68         PLA
B76C   AA         TAX
B76D   68         PLA
B76E   85 50      STA $50
B770   68         PLA
B771   85 51      STA $51
B773   A5 55      LDA $55
B775   48         PHA
B776   98         TYA
B777   48         PHA
B778   A0 00      LDY #$00
B77A   8A         TXA
B77B   60         RTS


; LEN function

B77C   20 82 B7   JSR $B782
B77F   4C A2 B3   JMP $B3A2


B782   20 A3 B6   JSR $B6A3

B785   A2 00      LDX #$00
B787   86 0D      STX $0D
B789   A8         TAY
B78A   60         RTS


; ASC function

B78B   20 82 B7   JSR $B782
B78E   F0 08      BEQ $B798
B790   A0 00      LDY #$00
B792   B1 22      LDA ($22),Y
B794   A8         TAY
B795   4C A2 B3   JMP $B3A2

B798   4C 48 B2   JMP $B248


; fetch integer value in X and check range

B79B   20 73 00   JSR $0073

B79E   20 8A AD   JSR $AD8A


B7A1   20 B8 B1   JSR $B1B8

B7A4   A6 64      LDX $64
B7A6   D0 F0      BNE $B798
B7A8   A6 65      LDX $65
B7AA   4C 79 00   JMP $0079


; VAL function

B7AD   20 82 B7   JSR $B782
B7B0   D0 03      BNE $B7B5
B7B2   4C F7 B8   JMP $B8F7
B7B5   A6 7A      LDX $7A
B7B7   A4 7B      LDY $7B
B7B9   86 71      STX $71
B7BB   84 72      STY $72
B7BD   A6 22      LDX $22
B7BF   86 7A      STX $7A
B7C1   18         CLC
B7C2   65 22      ADC $22
B7C4   85 24      STA $24
B7C6   A6 23      LDX $23
B7C8   86 7B      STX $7B
B7CA   90 01      BCC $B7CD
B7CC   E8         INX
B7CD   86 25      STX $25
B7CF   A0 00      LDY #$00
B7D1   B1 24      LDA ($24),Y
B7D3   48         PHA
B7D4   98         TYA
B7D5   91 24      STA ($24),Y
B7D7   20 79 00   JSR $0079
B7DA   20 F3 BC   JSR $BCF3
B7DD   68         PLA
B7DE   A0 00      LDY #$00
B7E0   91 24      STA ($24),Y

B7E2   A6 71      LDX $71

B7E4   A4 72      LDY $72
B7E6   86 7A      STX $7A
B7E8   84 7B      STY $7B
B7EA   60         RTS


; get address into $14/$15 and integer in X

B7EB   20 8A AD   JSR $AD8A
B7EE   20 F7 B7   JSR $B7F7

B7F1   20 FD AE   JSR $AEFD

B7F4   4C 9E B7   JMP $B79E


; convert float ti integer in $14/$15

B7F7   A5 66      LDA $66
B7F9   30 9D      BMI $B798
B7FB   A5 61      LDA $61
B7FD   C9 91      CMP #$91
B7FF   B0 97      BCS $B798
B801   20 9B BC   JSR $BC9B
B804   A5 64      LDA $64
B806   A4 65      LDY $65
B808   84 14      STY $14
B80A   85 15      STA $15
B80C   60         RTS


; PEEK function

B80D   A5 15      LDA $15
B80F   48         PHA
B810   A5 14      LDA $14
B812   48         PHA
B813   20 F7 B7   JSR $B7F7
B816   A0 00      LDY #$00
B818   B1 14      LDA ($14),Y
B81A   A8         TAY
B81B   68         PLA
B81C   85 14      STA $14
B81E   68         PLA
B81F   85 15      STA $15
B821   4C A2 B3   JMP $B3A2


; POKE command

B824   20 EB B7   JSR $B7EB
B827   8A         TXA
B828   A0 00      LDY #$00
B82A   91 14      STA ($14),Y
B82C   60         RTS


; WAIT command

B82D   20 EB B7   JSR $B7EB
B830   86 49      STX $49
B832   A2 00      LDX #$00
B834   20 79 00   JSR $0079
B837   F0 03      BEQ $B83C
B839   20 F1 B7   JSR $B7F1
B83C   86 4A      STX $4A
B83E   A0 00      LDY #$00
B840   B1 14      LDA ($14),Y
B842   45 4A      EOR $4A
B844   25 49      AND $49
B846   F0 F8      BEQ $B840
B848   60         RTS


; add 0.5 to float accu (rounding)

B849   A9 11      LDA #$11   ; low  BF11
B84B   A0 BF      LDY #$BF   ; high BF11
B84D   4C 67 B8   JMP $B867


; minus operator

B850   20 8C BA   JSR $BA8C

B853   A5 66      LDA $66

B855   49 FF      EOR #$FF
B857   85 66      STA $66
B859   45 6E      EOR $6E
B85B   85 6F      STA $6F
B85D   A5 61      LDA $61
B85F   4C 6A B8   JMP $B86A

B862   20 99 B9   JSR $B999
B865   90 3C      BCC $B8A3


; add float indexed by AY to float accu

B867   20 8C BA   JSR $BA8C


; plus operator

B86A   D0 03      BNE $B86F
B86C   4C FC BB   JMP $BBFC

B86F   A6 70      LDX $70
B871   86 56      STX $56
B873   A2 69      LDX #$69
B875   A5 69      LDA $69

B877   A8         TAY

B878   F0 CE      BEQ $B848
B87A   38         SEC
B87B   E5 61      SBC $61
B87D   F0 24      BEQ $B8A3
B87F   90 12      BCC $B893
B881   84 61      STY $61
B883   A4 6E      LDY $6E
B885   84 66      STY $66
B887   49 FF      EOR #$FF
B889   69 00      ADC #$00
B88B   A0 00      LDY #$00
B88D   84 56      STY $56
B88F   A2 61      LDX #$61
B891   D0 04      BNE $B897
B893   A0 00      LDY #$00
B895   84 70      STY $70
B897   C9 F9      CMP #$F9
B899   30 C7      BMI $B862
B89B   A8         TAY
B89C   A5 70      LDA $70
B89E   56 01      LSR $01,X
B8A0   20 B0 B9   JSR $B9B0
B8A3   24 6F      BIT $6F
B8A5   10 57      BPL $B8FE
B8A7   A0 61      LDY #$61
B8A9   E0 69      CPX #$69
B8AB   F0 02      BEQ $B8AF
B8AD   A0 69      LDY #$69
B8AF   38         SEC
B8B0   49 FF      EOR #$FF
B8B2   65 56      ADC $56
B8B4   85 70      STA $70
B8B6   B9 04 00   LDA $0004,Y
B8B9   F5 04      SBC $04,X
B8BB   85 65      STA $65
B8BD   B9 03 00   LDA $0003,Y
B8C0   F5 03      SBC $03,X
B8C2   85 64      STA $64
B8C4   B9 02 00   LDA $0002,Y
B8C7   F5 02      SBC $02,X
B8C9   85 63      STA $63
B8CB   B9 01 00   LDA $0001,Y
B8CE   F5 01      SBC $01,X
B8D0   85 62      STA $62

B8D2   B0 03      BCS $B8D7

B8D4   20 47 B9   JSR $B947

B8D7   A0 00      LDY #$00

B8D9   98         TYA
B8DA   18         CLC
B8DB   A6 62      LDX $62
B8DD   D0 4A      BNE $B929
B8DF   A6 63      LDX $63
B8E1   86 62      STX $62
B8E3   A6 64      LDX $64
B8E5   86 63      STX $63
B8E7   A6 65      LDX $65
B8E9   86 64      STX $64
B8EB   A6 70      LDX $70
B8ED   86 65      STX $65
B8EF   84 70      STY $70
B8F1   69 08      ADC #$08
B8F3   C9 20      CMP #$20
B8F5   D0 E4      BNE $B8DB

B8F7   A9 00      LDA #$00


B8F9   85 61      STA $61


B8FB   85 66      STA $66

B8FD   60         RTS


; add fractions

B8FE   65 56      ADC $56
B900   85 70      STA $70
B902   A5 65      LDA $65
B904   65 6D      ADC $6D
B906   85 65      STA $65
B908   A5 64      LDA $64
B90A   65 6C      ADC $6C
B90C   85 64      STA $64
B90E   A5 63      LDA $63
B910   65 6B      ADC $6B
B912   85 63      STA $63
B914   A5 62      LDA $62
B916   65 6A      ADC $6A
B918   85 62      STA $62
B91A   4C 36 B9   JMP $B936


; postshift

B91D   69 01      ADC #$01
B91F   06 70      ASL $70
B921   26 65      ROL $65
B923   26 64      ROL $64
B925   26 63      ROL $63
B927   26 62      ROL $62
B929   10 F2      BPL $B91D
B92B   38         SEC
B92C   E5 61      SBC $61
B92E   B0 C7      BCS $B8F7
B930   49 FF      EOR #$FF
B932   69 01      ADC #$01
B934   85 61      STA $61

B936   90 0E      BCC $B946


B938   E6 61      INC $61

B93A   F0 42      BEQ $B97E
B93C   66 62      ROR $62
B93E   66 63      ROR $63
B940   66 64      ROR $64
B942   66 65      ROR $65
B944   66 70      ROR $70
B946   60         RTS


; negate float accu

B947   A5 66      LDA $66
B949   49 FF      EOR #$FF
B94B   85 66      STA $66

B94D   A5 62      LDA $62

B94F   49 FF      EOR #$FF
B951   85 62      STA $62
B953   A5 63      LDA $63
B955   49 FF      EOR #$FF
B957   85 63      STA $63
B959   A5 64      LDA $64
B95B   49 FF      EOR #$FF
B95D   85 64      STA $64
B95F   A5 65      LDA $65
B961   49 FF      EOR #$FF
B963   85 65      STA $65
B965   A5 70      LDA $70
B967   49 FF      EOR #$FF
B969   85 70      STA $70
B96B   E6 70      INC $70
B96D   D0 0E      BNE $B97D


; increment fraction

B96F   E6 65      INC $65
B971   D0 0A      BNE $B97D
B973   E6 64      INC $64
B975   D0 06      BNE $B97D
B977   E6 63      INC $63
B979   D0 02      BNE $B97D
B97B   E6 62      INC $62
B97D   60         RTS


B97E   A2 0F      LDX #$0F   ; error number

B980   4C 37 A4   JMP $A437


; preshift

B983   A2 25      LDX #$25
B985   B4 04      LDY $04,X
B987   84 70      STY $70
B989   B4 03      LDY $03,X
B98B   94 04      STY $04,X
B98D   B4 02      LDY $02,X
B98F   94 03      STY $03,X
B991   B4 01      LDY $01,X
B993   94 02      STY $02,X
B995   A4 68      LDY $68
B997   94 01      STY $01,X

B999   69 08      ADC #$08

B99B   30 E8      BMI $B985
B99D   F0 E6      BEQ $B985
B99F   E9 08      SBC #$08
B9A1   A8         TAY
B9A2   A5 70      LDA $70
B9A4   B0 14      BCS $B9BA
B9A6   16 01      ASL $01,X
B9A8   90 02      BCC $B9AC
B9AA   F6 01      INC $01,X
B9AC   76 01      ROR $01,X
B9AE   76 01      ROR $01,X

B9B0   76 02      ROR $02,X

B9B2   76 03      ROR $03,X
B9B4   76 04      ROR $04,X
B9B6   6A         ROR
B9B7   C8         INY
B9B8   D0 EC      BNE $B9A6
B9BA   18         CLC
B9BB   60         RTS


; 1

B9BC   .BY $81,$00,$00,$00,$00


; LOG polynomial table

B9C1   .BY $03   ; degree 4
B9C2   .BY $7F,$5E,$56,$CB,$79
B9C7   .BY $80,$13,$9B,$0B,$64
B9CC   .BY $80,$76,$38,$93,$16
B9D1   .BY $82,$38,$AA,$3B,$20


; 0,5 * SQR(2)

B9D6   .BY $80,$35,$04,$F3,$34

; SQR(2)

B9DB   .BY $81,$35,$04,$F3,$34

; -0.5

B9E0   .BY $80,$80,$00,$00,$00

; LOG(2)

B9E5   .BY $80,$31,$72,$17,$F8


; LOG function

B9EA   20 2B BC   JSR $BC2B
B9ED   F0 02      BEQ $B9F1
B9EF   10 03      BPL $B9F4
B9F1   4C 48 B2   JMP $B248

B9F4   A5 61      LDA $61
B9F6   E9 7F      SBC #$7F
B9F8   48         PHA
B9F9   A9 80      LDA #$80
B9FB   85 61      STA $61
B9FD   A9 D6      LDA #$D6   ; low  B9D6
B9FF   A0 B9      LDY #$B9   ; high B9D6
BA01   20 67 B8   JSR $B867
BA04   A9 DB      LDA #$DB   ; low  B9DB
BA06   A0 B9      LDY #$B9   ; high B9DB
BA08   20 0F BB   JSR $BB0F
BA0B   A9 BC      LDA #$BC   ; low  B9BC
BA0D   A0 B9      LDY #$B9   ; high B9BC
BA0F   20 50 B8   JSR $B850
BA12   A9 C1      LDA #$C1   ; low  B9C1
BA14   A0 B9      LDY #$B9   ; high B9C1
BA16   20 43 E0   JSR $E043
BA19   A9 E0      LDA #$E0   ; low  B9E0
BA1B   A0 B9      LDY #$B9   ; high B9E0
BA1D   20 67 B8   JSR $B867
BA20   68         PLA
BA21   20 7E BD   JSR $BD7E
BA24   A9 E5      LDA #$E5   ; low  B9E5
BA26   A0 B9      LDY #$B9   ; high B9E5

BA28   20 8C BA   JSR $BA8C


; times operator

BA2B   D0 03      BNE $BA30
BA2D   4C 8B BA   JMP $BA8B

BA30   20 B7 BA   JSR $BAB7
BA33   A9 00      LDA #$00
BA35   85 26      STA $26
BA37   85 27      STA $27
BA39   85 28      STA $28
BA3B   85 29      STA $29
BA3D   A5 70      LDA $70
BA3F   20 59 BA   JSR $BA59
BA42   A5 65      LDA $65
BA44   20 59 BA   JSR $BA59
BA47   A5 64      LDA $64
BA49   20 59 BA   JSR $BA59
BA4C   A5 63      LDA $63
BA4E   20 59 BA   JSR $BA59
BA51   A5 62      LDA $62
BA53   20 5E BA   JSR $BA5E
BA56   4C 8F BB   JMP $BB8F


BA59   D0 03      BNE $BA5E

BA5B   4C 83 B9   JMP $B983


BA5E   4A         LSR

BA5F   09 80      ORA #$80
BA61   A8         TAY
BA62   90 19      BCC $BA7D
BA64   18         CLC
BA65   A5 29      LDA $29
BA67   65 6D      ADC $6D
BA69   85 29      STA $29
BA6B   A5 28      LDA $28
BA6D   65 6C      ADC $6C
BA6F   85 28      STA $28
BA71   A5 27      LDA $27
BA73   65 6B      ADC $6B
BA75   85 27      STA $27
BA77   A5 26      LDA $26
BA79   65 6A      ADC $6A
BA7B   85 26      STA $26
BA7D   66 26      ROR $26
BA7F   66 27      ROR $27
BA81   66 28      ROR $28
BA83   66 29      ROR $29
BA85   66 70      ROR $70
BA87   98         TYA
BA88   4A         LSR
BA89   D0 D6      BNE $BA61

BA8B   60         RTS


; move float indexed by AY into second float accu

BA8C   85 22      STA $22
BA8E   84 23      STY $23
BA90   A0 04      LDY #$04
BA92   B1 22      LDA ($22),Y
BA94   85 6D      STA $6D
BA96   88         DEY
BA97   B1 22      LDA ($22),Y
BA99   85 6C      STA $6C
BA9B   88         DEY
BA9C   B1 22      LDA ($22),Y
BA9E   85 6B      STA $6B
BAA0   88         DEY
BAA1   B1 22      LDA ($22),Y
BAA3   85 6E      STA $6E
BAA5   45 66      EOR $66
BAA7   85 6F      STA $6F
BAA9   A5 6E      LDA $6E
BAAB   09 80      ORA #$80
BAAD   85 6A      STA $6A
BAAF   88         DEY
BAB0   B1 22      LDA ($22),Y
BAB2   85 69      STA $69
BAB4   A5 61      LDA $61
BAB6   60         RTS


; add exponents

BAB7   A5 69      LDA $69

BAB9   F0 1F      BEQ $BADA

BABB   18         CLC
BABC   65 61      ADC $61
BABE   90 04      BCC $BAC4
BAC0   30 1D      BMI $BADF
BAC2   18         CLC
BAC3   .BY $2C
BAC4   10 14      BPL $BADA
BAC6   69 80      ADC #$80
BAC8   85 61      STA $61
BACA   D0 03      BNE $BACF
BACC   4C FB B8   JMP $B8FB

BACF   A5 6F      LDA $6F
BAD1   85 66      STA $66
BAD3   60         RTS


BAD4   A5 66      LDA $66

BAD6   49 FF      EOR #$FF
BAD8   30 05      BMI $BADF
BADA   68         PLA
BADB   68         PLA
BADC   4C F7 B8   JMP $B8F7

BADF   4C 7E B9   JMP $B97E


; multiply float accu by 10

BAE2   20 0C BC   JSR $BC0C
BAE5   AA         TAX
BAE6   F0 10      BEQ $BAF8
BAE8   18         CLC
BAE9   69 02      ADC #$02
BAEB   B0 F2      BCS $BADF

BAED   A2 00      LDX #$00

BAEF   86 6F      STX $6F
BAF1   20 77 B8   JSR $B877
BAF4   E6 61      INC $61
BAF6   F0 E7      BEQ $BADF
BAF8   60         RTS


; constant 10 for division

BAF9   .BY $84,$20,$00,$00,$00


; divide float by 10

BAFE   20 0C BC   JSR $BC0C
BB01   A9 F9      LDA #$F9   ; low  BAF9
BB03   A0 BA      LDY #$BA   ; high BAF9
BB05   A2 00      LDX #$00

BB07   86 6F      STX $6F

BB09   20 A2 BB   JSR $BBA2
BB0C   4C 12 BB   JMP $BB12


; divide number indexed by AY by float accu

BB0F   20 8C BA   JSR $BA8C


; divide operator

BB12   F0 76      BEQ $BB8A
BB14   20 1B BC   JSR $BC1B
BB17   A9 00      LDA #$00
BB19   38         SEC
BB1A   E5 61      SBC $61
BB1C   85 61      STA $61
BB1E   20 B7 BA   JSR $BAB7
BB21   E6 61      INC $61
BB23   F0 BA      BEQ $BADF
BB25   A2 FC      LDX #$FC
BB27   A9 01      LDA #$01
BB29   A4 6A      LDY $6A
BB2B   C4 62      CPY $62
BB2D   D0 10      BNE $BB3F
BB2F   A4 6B      LDY $6B
BB31   C4 63      CPY $63
BB33   D0 0A      BNE $BB3F
BB35   A4 6C      LDY $6C
BB37   C4 64      CPY $64
BB39   D0 04      BNE $BB3F
BB3B   A4 6D      LDY $6D
BB3D   C4 65      CPY $65
BB3F   08         PHP
BB40   2A         ROL
BB41   90 09      BCC $BB4C
BB43   E8         INX
BB44   95 29      STA $29,X
BB46   F0 32      BEQ $BB7A
BB48   10 34      BPL $BB7E
BB4A   A9 01      LDA #$01
BB4C   28         PLP
BB4D   B0 0E      BCS $BB5D

BB4F   06 6D      ASL $6D

BB51   26 6C      ROL $6C
BB53   26 6B      ROL $6B
BB55   26 6A      ROL $6A
BB57   B0 E6      BCS $BB3F
BB59   30 CE      BMI $BB29
BB5B   10 E2      BPL $BB3F
BB5D   A8         TAY
BB5E   A5 6D      LDA $6D
BB60   E5 65      SBC $65
BB62   85 6D      STA $6D
BB64   A5 6C      LDA $6C
BB66   E5 64      SBC $64
BB68   85 6C      STA $6C
BB6A   A5 6B      LDA $6B
BB6C   E5 63      SBC $63
BB6E   85 6B      STA $6B
BB70   A5 6A      LDA $6A
BB72   E5 62      SBC $62
BB74   85 6A      STA $6A
BB76   98         TYA
BB77   4C 4F BB   JMP $BB4F

BB7A   A9 40      LDA #$40
BB7C   D0 CE      BNE $BB4C
BB7E   0A         ASL
BB7F   0A         ASL
BB80   0A         ASL
BB81   0A         ASL
BB82   0A         ASL
BB83   0A         ASL
BB84   85 70      STA $70
BB86   28         PLP
BB87   4C 8F BB   JMP $BB8F

BB8A   A2 14      LDX #$14   ; error number
BB8C   4C 37 A4   JMP $A437


BB8F   A5 26      LDA $26

BB91   85 62      STA $62
BB93   A5 27      LDA $27
BB95   85 63      STA $63
BB97   A5 28      LDA $28
BB99   85 64      STA $64
BB9B   A5 29      LDA $29
BB9D   85 65      STA $65
BB9F   4C D7 B8   JMP $B8D7


BBA2   85 22      STA $22

BBA4   84 23      STY $23
BBA6   A0 04      LDY #$04
BBA8   B1 22      LDA ($22),Y
BBAA   85 65      STA $65
BBAC   88         DEY
BBAD   B1 22      LDA ($22),Y
BBAF   85 64      STA $64
BBB1   88         DEY
BBB2   B1 22      LDA ($22),Y
BBB4   85 63      STA $63
BBB6   88         DEY
BBB7   B1 22      LDA ($22),Y
BBB9   85 66      STA $66
BBBB   09 80      ORA #$80
BBBD   85 62      STA $62
BBBF   88         DEY
BBC0   B1 22      LDA ($22),Y
BBC2   85 61      STA $61
BBC4   84 70      STY $70
BBC6   60         RTS


; store float accu at $5C-$60

BBC7   A2 5C      LDX #$5C   ; low  005C
BBC9   .BY $2C


; store float accu at $57-$5B

BBCA   A2 57      LDX #$57   ; low  0057
BBCC   A0 00      LDY #$00   ; high 0057
BBCE   F0 04      BEQ $BBD4


; store float accu in index at $49/$4A

BBD0   A6 49      LDX $49
BBD2   A4 4A      LDY $4A


; store float accu in index XY

BBD4   20 1B BC   JSR $BC1B
BBD7   86 22      STX $22
BBD9   84 23      STY $23
BBDB   A0 04      LDY #$04
BBDD   A5 65      LDA $65
BBDF   91 22      STA ($22),Y
BBE1   88         DEY
BBE2   A5 64      LDA $64
BBE4   91 22      STA ($22),Y
BBE6   88         DEY
BBE7   A5 63      LDA $63
BBE9   91 22      STA ($22),Y
BBEB   88         DEY
BBEC   A5 66      LDA $66
BBEE   09 7F      ORA #$7F
BBF0   25 62      AND $62
BBF2   91 22      STA ($22),Y
BBF4   88         DEY
BBF5   A5 61      LDA $61
BBF7   91 22      STA ($22),Y
BBF9   84 70      STY $70
BBFB   60         RTS


; move second float accu into first

BBFC   A5 6E      LDA $6E

BBFE   85 66      STA $66

BC00   A2 05      LDX #$05
BC02   B5 68      LDA $68,X
BC04   95 60      STA $60,X
BC06   CA         DEX
BC07   D0 F9      BNE $BC02
BC09   86 70      STX $70
BC0B   60         RTS


; move rounded float accu into second

BC0C   20 1B BC   JSR $BC1B

BC0F   A2 06      LDX #$06

BC11   B5 60      LDA $60,X
BC13   95 68      STA $68,X
BC15   CA         DEX
BC16   D0 F9      BNE $BC11
BC18   86 70      STX $70
BC1A   60         RTS


; round float accu according to guard bit

BC1B   A5 61      LDA $61
BC1D   F0 FB      BEQ $BC1A
BC1F   06 70      ASL $70
BC21   90 F7      BCC $BC1A

BC23   20 6F B9   JSR $B96F

BC26   D0 F2      BNE $BC1A
BC28   4C 38 B9   JMP $B938


; get sign of float accu in A

BC2B   A5 61      LDA $61
BC2D   F0 09      BEQ $BC38
BC2F   A5 66      LDA $66

BC31   2A         ROL

BC32   A9 FF      LDA #$FF
BC34   B0 02      BCS $BC38
BC36   A9 01      LDA #$01
BC38   60         RTS


; SGN function

BC39   20 2B BC   JSR $BC2B


; move signed number from A into float accu

BC3C   85 62      STA $62
BC3E   A9 00      LDA #$00
BC40   85 63      STA $63
BC42   A2 88      LDX #$88

BC44   A5 62      LDA $62

BC46   49 FF      EOR #$FF
BC48   2A         ROL

BC49   A9 00      LDA #$00

BC4B   85 65      STA $65
BC4D   85 64      STA $64

BC4F   86 61      STX $61

BC51   85 70      STA $70
BC53   85 66      STA $66
BC55   4C D2 B8   JMP $B8D2


; ABS function

BC58   46 66      LSR $66
BC5A   60         RTS


; compare float accu to float indexed by XY

BC5B   85 24      STA $24

BC5D   84 25      STY $25

BC5F   A0 00      LDY #$00
BC61   B1 24      LDA ($24),Y
BC63   C8         INY
BC64   AA         TAX
BC65   F0 C4      BEQ $BC2B
BC67   B1 24      LDA ($24),Y
BC69   45 66      EOR $66
BC6B   30 C2      BMI $BC2F
BC6D   E4 61      CPX $61
BC6F   D0 21      BNE $BC92
BC71   B1 24      LDA ($24),Y
BC73   09 80      ORA #$80
BC75   C5 62      CMP $62
BC77   D0 19      BNE $BC92
BC79   C8         INY
BC7A   B1 24      LDA ($24),Y
BC7C   C5 63      CMP $63
BC7E   D0 12      BNE $BC92
BC80   C8         INY
BC81   B1 24      LDA ($24),Y
BC83   C5 64      CMP $64
BC85   D0 0B      BNE $BC92
BC87   C8         INY
BC88   A9 7F      LDA #$7F
BC8A   C5 70      CMP $70
BC8C   B1 24      LDA ($24),Y
BC8E   E5 65      SBC $65
BC90   F0 28      BEQ $BCBA
BC92   A5 66      LDA $66
BC94   90 02      BCC $BC98
BC96   49 FF      EOR #$FF
BC98   4C 31 BC   JMP $BC31


; convert float to a 4 byte signed integer

BC9B   A5 61      LDA $61
BC9D   F0 4A      BEQ $BCE9
BC9F   38         SEC
BCA0   E9 A0      SBC #$A0
BCA2   24 66      BIT $66
BCA4   10 09      BPL $BCAF
BCA6   AA         TAX
BCA7   A9 FF      LDA #$FF
BCA9   85 68      STA $68
BCAB   20 4D B9   JSR $B94D
BCAE   8A         TXA
BCAF   A2 61      LDX #$61
BCB1   C9 F9      CMP #$F9
BCB3   10 06      BPL $BCBB
BCB5   20 99 B9   JSR $B999
BCB8   84 68      STY $68
BCBA   60         RTS

BCBB   A8         TAY
BCBC   A5 66      LDA $66
BCBE   29 80      AND #$80
BCC0   46 62      LSR $62
BCC2   05 62      ORA $62
BCC4   85 62      STA $62
BCC6   20 B0 B9   JSR $B9B0
BCC9   84 68      STY $68
BCCB   60         RTS


; INT function

BCCC   A5 61      LDA $61
BCCE   C9 A0      CMP #$A0
BCD0   B0 20      BCS $BCF2
BCD2   20 9B BC   JSR $BC9B
BCD5   84 70      STY $70
BCD7   A5 66      LDA $66
BCD9   84 66      STY $66
BCDB   49 80      EOR #$80
BCDD   2A         ROL
BCDE   A9 A0      LDA #$A0
BCE0   85 61      STA $61
BCE2   A5 65      LDA $65
BCE4   85 07      STA $07
BCE6   4C D2 B8   JMP $B8D2


; clear float accu

BCE9   85 62      STA $62
BCEB   85 63      STA $63
BCED   85 64      STA $64
BCEF   85 65      STA $65
BCF1   A8         TAY
BCF2   60         RTS


; convert string to float in float accu

BCF3   A0 00      LDY #$00
BCF5   A2 0A      LDX #$0A
BCF7   94 5D      STY $5D,X
BCF9   CA         DEX
BCFA   10 FB      BPL $BCF7
BCFC   90 0F      BCC $BD0D
BCFE   C9 2D      CMP #$2D   ; minus
BD00   D0 04      BNE $BD06
BD02   86 67      STX $67
BD04   F0 04      BEQ $BD0A
BD06   C9 2B      CMP #$2B   ; plus
BD08   D0 05      BNE $BD0F

BD0A   20 73 00   JSR $0073

BD0D   90 5B      BCC $BD6A
BD0F   C9 2E      CMP #$2E   ; decimal point
BD11   F0 2E      BEQ $BD41
BD13   C9 45      CMP #$45   ; E
BD15   D0 30      BNE $BD47
BD17   20 73 00   JSR $0073
BD1A   90 17      BCC $BD33
BD1C   C9 AB      CMP #$AB   ; minus code
BD1E   F0 0E      BEQ $BD2E
BD20   C9 2D      CMP #$2D   ; minus
BD22   F0 0A      BEQ $BD2E
BD24   C9 AA      CMP #$AA   ; plus code
BD26   F0 08      BEQ $BD30
BD28   C9 2B      CMP #$2B   ; plus
BD2A   F0 04      BEQ $BD30
BD2C   D0 07      BNE $BD35
BD2E   66 60      ROR $60

BD30   20 73 00   JSR $0073

BD33   90 5C      BCC $BD91
BD35   24 60      BIT $60
BD37   10 0E      BPL $BD47
BD39   A9 00      LDA #$00
BD3B   38         SEC
BD3C   E5 5E      SBC $5E
BD3E   4C 49 BD   JMP $BD49

BD41   66 5F      ROR $5F
BD43   24 5F      BIT $5F
BD45   50 C3      BVC $BD0A
BD47   A5 5E      LDA $5E

BD49   38         SEC

BD4A   E5 5D      SBC $5D
BD4C   85 5E      STA $5E
BD4E   F0 12      BEQ $BD62
BD50   10 09      BPL $BD5B
BD52   20 FE BA   JSR $BAFE
BD55   E6 5E      INC $5E
BD57   D0 F9      BNE $BD52
BD59   F0 07      BEQ $BD62
BD5B   20 E2 BA   JSR $BAE2
BD5E   C6 5E      DEC $5E
BD60   D0 F9      BNE $BD5B
BD62   A5 67      LDA $67
BD64   30 01      BMI $BD67
BD66   60         RTS

BD67   4C B4 BF   JMP $BFB4

BD6A   48         PHA
BD6B   24 5F      BIT $5F
BD6D   10 02      BPL $BD71
BD6F   E6 5D      INC $5D
BD71   20 E2 BA   JSR $BAE2
BD74   68         PLA
BD75   38         SEC
BD76   E9 30      SBC #$30   ; 0
BD78   20 7E BD   JSR $BD7E
BD7B   4C 0A BD   JMP $BD0A


; add signed integer from A to float accu

BD7E   48         PHA
BD7F   20 0C BC   JSR $BC0C
BD82   68         PLA
BD83   20 3C BC   JSR $BC3C
BD86   A5 6E      LDA $6E
BD88   45 66      EOR $66
BD8A   85 6F      STA $6F
BD8C   A6 61      LDX $61
BD8E   4C 6A B8   JMP $B86A


; get exponent of number from string

BD91   A5 5E      LDA $5E
BD93   C9 0A      CMP #$0A
BD95   90 09      BCC $BDA0
BD97   A9 64      LDA #$64
BD99   24 60      BIT $60
BD9B   30 11      BMI $BDAE
BD9D   4C 7E B9   JMP $B97E

BDA0   0A         ASL
BDA1   0A         ASL
BDA2   18         CLC
BDA3   65 5E      ADC $5E
BDA5   0A         ASL
BDA6   18         CLC
BDA7   A0 00      LDY #$00
BDA9   71 7A      ADC ($7A),Y
BDAB   38         SEC
BDAC   E9 30      SBC #$30   ; 0
BDAE   85 5E      STA $5E
BDB0   4C 30 BD   JMP $BD30


; constants for float to string conversion

BDB3   .BY $9B,$3E,$BC,$1F,$FD

BDB8   .BY $9E,$6E,$6B,$27,$FD


BDBD   .BY $9E,$6E,$6B,$28,$00


; print IN followed by line number

BDC2   A9 71      LDA #$71   ; low  A371
BDC4   A0 A3      LDY #$A3   ; high A371
BDC6   20 DA BD   JSR $BDDA
BDC9   A5 3A      LDA $3A
BDCB   A6 39      LDX $39


; print number from AX

BDCD   85 62      STA $62
BDCF   86 63      STX $63
BDD1   A2 90      LDX #$90
BDD3   38         SEC
BDD4   20 49 BC   JSR $BC49
BDD7   20 DF BD   JSR $BDDF

BDDA   4C 1E AB   JMP $AB1E


; convert number in float accu to string

BDDD   A0 01      LDY #$01

BDDF   A9 20      LDA #$20

BDE1   24 66      BIT $66
BDE3   10 02      BPL $BDE7
BDE5   A9 2D      LDA #$2D   ; minus
BDE7   99 FF 00   STA $00FF,Y
BDEA   85 66      STA $66
BDEC   84 71      STY $71
BDEE   C8         INY
BDEF   A9 30      LDA #$30   ; 0
BDF1   A6 61      LDX $61
BDF3   D0 03      BNE $BDF8
BDF5   4C 04 BF   JMP $BF04

BDF8   A9 00      LDA #$00
BDFA   E0 80      CPX #$80
BDFC   F0 02      BEQ $BE00
BDFE   B0 09      BCS $BE09
BE00   A9 BD      LDA #$BD   ; low  BDBD
BE02   A0 BD      LDY #$BD   ; high BDBD
BE04   20 28 BA   JSR $BA28
BE07   A9 F7      LDA #$F7
BE09   85 5D      STA $5D
BE0B   A9 B8      LDA #$B8   ; low  BDB8
BE0D   A0 BD      LDY #$BD   ; high BDB8
BE0F   20 5B BC   JSR $BC5B
BE12   F0 1E      BEQ $BE32
BE14   10 12      BPL $BE28
BE16   A9 B3      LDA #$B3   ; low  BDB3
BE18   A0 BD      LDY #$BD   ; high BDB3
BE1A   20 5B BC   JSR $BC5B
BE1D   F0 02      BEQ $BE21
BE1F   10 0E      BPL $BE2F
BE21   20 E2 BA   JSR $BAE2
BE24   C6 5D      DEC $5D
BE26   D0 EE      BNE $BE16
BE28   20 FE BA   JSR $BAFE
BE2B   E6 5D      INC $5D
BE2D   D0 DC      BNE $BE0B
BE2F   20 49 B8   JSR $B849
BE32   20 9B BC   JSR $BC9B
BE35   A2 01      LDX #$01
BE37   A5 5D      LDA $5D
BE39   18         CLC
BE3A   69 0A      ADC #$0A
BE3C   30 09      BMI $BE47
BE3E   C9 0B      CMP #$0B
BE40   B0 06      BCS $BE48
BE42   69 FF      ADC #$FF
BE44   AA         TAX
BE45   A9 02      LDA #$02
BE47   38         SEC
BE48   E9 02      SBC #$02
BE4A   85 5E      STA $5E
BE4C   86 5D      STX $5D
BE4E   8A         TXA
BE4F   F0 02      BEQ $BE53
BE51   10 13      BPL $BE66
BE53   A4 71      LDY $71
BE55   A9 2E      LDA #$2E   ; decimal point
BE57   C8         INY
BE58   99 FF 00   STA $00FF,Y
BE5B   8A         TXA
BE5C   F0 06      BEQ $BE64
BE5E   A9 30      LDA #$30   ; 0
BE60   C8         INY
BE61   99 FF 00   STA $00FF,Y
BE64   84 71      STY $71
BE66   A0 00      LDY #$00

BE68   A2 80      LDX #$80

BE6A   A5 65      LDA $65
BE6C   18         CLC
BE6D   79 19 BF   ADC $BF19,Y
BE70   85 65      STA $65
BE72   A5 64      LDA $64
BE74   79 18 BF   ADC $BF18,Y
BE77   85 64      STA $64
BE79   A5 63      LDA $63
BE7B   79 17 BF   ADC $BF17,Y
BE7E   85 63      STA $63
BE80   A5 62      LDA $62
BE82   79 16 BF   ADC $BF16,Y
BE85   85 62      STA $62
BE87   E8         INX
BE88   B0 04      BCS $BE8E
BE8A   10 DE      BPL $BE6A
BE8C   30 02      BMI $BE90
BE8E   30 DA      BMI $BE6A
BE90   8A         TXA
BE91   90 04      BCC $BE97
BE93   49 FF      EOR #$FF
BE95   69 0A      ADC #$0A
BE97   69 2F      ADC #$2F
BE99   C8         INY
BE9A   C8         INY
BE9B   C8         INY
BE9C   C8         INY
BE9D   84 47      STY $47
BE9F   A4 71      LDY $71
BEA1   C8         INY
BEA2   AA         TAX
BEA3   29 7F      AND #$7F
BEA5   99 FF 00   STA $00FF,Y
BEA8   C6 5D      DEC $5D
BEAA   D0 06      BNE $BEB2
BEAC   A9 2E      LDA #$2E
BEAE   C8         INY
BEAF   99 FF 00   STA $00FF,Y
BEB2   84 71      STY $71
BEB4   A4 47      LDY $47
BEB6   8A         TXA
BEB7   49 FF      EOR #$FF
BEB9   29 80      AND #$80
BEBB   AA         TAX
BEBC   C0 24      CPY #$24
BEBE   F0 04      BEQ $BEC4
BEC0   C0 3C      CPY #$3C
BEC2   D0 A6      BNE $BE6A
BEC4   A4 71      LDY $71
BEC6   B9 FF 00   LDA $00FF,Y
BEC9   88         DEY
BECA   C9 30      CMP #$30   ; 0
BECC   F0 F8      BEQ $BEC6
BECE   C9 2E      CMP #$2E   ; decimal point
BED0   F0 01      BEQ $BED3
BED2   C8         INY
BED3   A9 2B      LDA #$2B   ; plus
BED5   A6 5E      LDX $5E
BED7   F0 2E      BEQ $BF07
BED9   10 08      BPL $BEE3
BEDB   A9 00      LDA #$00
BEDD   38         SEC
BEDE   E5 5E      SBC $5E
BEE0   AA         TAX
BEE1   A9 2D      LDA #$2D   ; minus
BEE3   99 01 01   STA $0101,Y
BEE6   A9 45      LDA #$45
BEE8   99 00 01   STA $0100,Y
BEEB   8A         TXA
BEEC   A2 2F      LDX #$2F
BEEE   38         SEC
BEEF   E8         INX
BEF0   E9 0A      SBC #$0A
BEF2   B0 FB      BCS $BEEF
BEF4   69 3A      ADC #$3A
BEF6   99 03 01   STA $0103,Y
BEF9   8A         TXA
BEFA   99 02 01   STA $0102,Y
BEFD   A9 00      LDA #$00
BEFF   99 04 01   STA $0104,Y
BF02   F0 08      BEQ $BF0C

BF04   99 FF 00   STA $00FF,Y

BF07   A9 00      LDA #$00
BF09   99 00 01   STA $0100,Y
BF0C   A9 00      LDA #$00   ; low  0100
BF0E   A0 01      LDY #$01   ; high 0100
BF10   60         RTS


; 0.5

BF11   .BY $80,$00,$00,$00,$00


; divisors for decimal conversion

BF16   .BY $FA,$0A,$1F,$00
BF1A   .BY $00,$98,$96,$80
BF1E   .BY $FF,$F0,$BD,$C0
BF22   .BY $00,$01,$86,$A0
BF26   .BY $FF,$FF,$D8,$F0
BF2A   .BY $00,$00,$03,$E8
BF2E   .BY $FF,$FF,$FF,$9C
BF32   .BY $00,$00,$00,$0A
BF36   .BY $FF,$FF,$FF,$FF


; divisors for time conversion

BF3A   .BY $FF,$DF,$0A,$80
BF3E   .BY $00,$03,$4B,$C0
BF42   .BY $FF,$FF,$73,$60
BF46   .BY $00,$00,$0E,$10
BF4A   .BY $FF,$FF,$FD,$A8
BF4E   .BY $00,$00,$00,$3C


; unused
; is this some version id?

BF52   .BY $EC


; unused

BF53   .BY $AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
BF5B   .BY $AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
BF63   .BY $AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
BF6B   .BY $AA,$AA,$AA,$AA,$AA,$AA


; SQR function

BF71   20 0C BC   JSR $BC0C
BF74   A9 11      LDA #$11
BF76   A0 BF      LDY #$BF
BF78   20 A2 BB   JSR $BBA2


; power operator

BF7B   F0 70      BEQ $BFED
BF7D   A5 69      LDA $69
BF7F   D0 03      BNE $BF84
BF81   4C F9 B8   JMP $B8F9

BF84   A2 4E      LDX #$4E   ; low  004E
BF86   A0 00      LDY #$00   ; high 004E
BF88   20 D4 BB   JSR $BBD4
BF8B   A5 6E      LDA $6E
BF8D   10 0F      BPL $BF9E
BF8F   20 CC BC   JSR $BCCC
BF92   A9 4E      LDA #$4E   ; low  004E
BF94   A0 00      LDY #$00   ; high 004E
BF96   20 5B BC   JSR $BC5B
BF99   D0 03      BNE $BF9E
BF9B   98         TYA
BF9C   A4 07      LDY $07
BF9E   20 FE BB   JSR $BBFE
BFA1   98         TYA
BFA2   48         PHA
BFA3   20 EA B9   JSR $B9EA
BFA6   A9 4E      LDA #$4E   ; low  004E
BFA8   A0 00      LDY #$00   ; high 004E
BFAA   20 28 BA   JSR $BA28
BFAD   20 ED BF   JSR $BFED
BFB0   68         PLA
BFB1   4A         LSR
BFB2   90 0A      BCC $BFBE


; minus operator
BFB4   A5 61      LDA $61
BFB6   F0 06      BEQ $BFBE
BFB8   A5 66      LDA $66
BFBA   49 FF      EOR #$FF
BFBC   85 66      STA $66
BFBE   60         RTS

; floating point constands for EXP

; 1/LOG(2)

BFBF   .BY $81,$38,$AA,$3B,$29


; EXP polynomial table

BFC4   .BY $07   ; degree 8
BFC5   .BY $71,$34,$58,$3E,$56
BFCA   .BY $74,$16,$7E,$B3,$1B
BFCF   .BY $77,$2F,$EE,$E3,$85
BFD4   .BY $7A,$1D,$84,$1C,$2A
BFD9   .BY $7C,$63,$59,$58,$0A
BFDE   .BY $7E,$75,$FD,$E7,$C6
BFE3   .BY $80,$31,$72,$18,$10
BFE8   .BY $81,$00,$00,$00,$00


; EXP command

BFED   A9 BF      LDA #$BF
BFEF   A0 BF      LDY #$BF
BFF1   20 28 BA   JSR $BA28
BFF4   A5 70      LDA $70
BFF6   69 50      ADC #$50
BFF8   90 03      BCC $BFFD
BFFA   20 23 BC   JSR $BC23
BFFD   4C 00 E0   JMP $E000


Commodore 64 KERNAL ($03) ROM dissasembly


Version 1.0  (June 1994)


; continuation of EXP function

E000   85 56      STA $56
E002   20 0F BC   JSR $BC0F
E005   A5 61      LDA $61
E007   C9 88      CMP #$88
E009   90 03      BCC $E00E
E00B   20 D4 BA   JSR $BAD4
E00E   20 CC BC   JSR $BCCC
E011   A5 07      LDA $07
E013   18         CLC
E014   69 81      ADC #$81
E016   F0 F3      BEQ $E00B
E018   38         SEC
E019   E9 01      SBC #$01
E01B   48         PHA
E01C   A2 05      LDX #$05
E01E   B5 69      LDA $69,X
E020   B4 61      LDY $61,X
E022   95 61      STA $61,X
E024   94 69      STY $69,X
E026   CA         DEX
E027   10 F5      BPL $E01E
E029   A5 56      LDA $56
E02B   85 70      STA $70
E02D   20 53 B8   JSR $B853
E030   20 B4 BF   JSR $BFB4
E033   A9 C4      LDA #$C4
E035   A0 BF      LDY #$BF
E037   20 59 E0   JSR $E059
E03A   A9 00      LDA #$00
E03C   85 6F      STA $6F
E03E   68         PLA
E03F   20 B9 BA   JSR $BAB9
E042   60         RTS


; compute odd degrees for SIN and ATN

E043   85 71      STA $71
E045   84 72      STY $72
E047   20 CA BB   JSR $BBCA
E04A   A9 57      LDA #$57
E04C   20 28 BA   JSR $BA28
E04F   20 5D E0   JSR $E05D
E052   A9 57      LDA #$57
E054   A0 00      LDY #$00
E056   4C 28 BA   JMP $BA28


; compute polynomials according to table indexed by AY

E059   85 71      STA $71
E05B   84 72      STY $72

E05D   20 C7 BB   JSR $BBC7

E060   B1 71      LDA ($71),Y
E062   85 67      STA $67
E064   A4 71      LDY $71
E066   C8         INY
E067   98         TYA
E068   D0 02      BNE $E06C
E06A   E6 72      INC $72
E06C   85 71      STA $71
E06E   A4 72      LDY $72
E070   20 28 BA   JSR $BA28
E073   A5 71      LDA $71
E075   A4 72      LDY $72
E077   18         CLC
E078   69 05      ADC #$05
E07A   90 01      BCC $E07D
E07C   C8         INY
E07D   85 71      STA $71
E07F   84 72      STY $72
E081   20 67 B8   JSR $B867
E084   A9 5C      LDA #$5C
E086   A0 00      LDY #$00
E088   C6 67      DEC $67
E08A   D0 E4      BNE $E070
E08C   60         RTS


; float numbers for RND

E08D   .BY $98,$35,$44,$7A,$00
E092   .BY $68,$28,$B1,$46,$00


; RND function

E097   20 2B BC   JSR $BC2B
E09A   30 37      BMI $E0D3
E09C   D0 20      BNE $E0BE
E09E   20 F3 FF   JSR $FFF3
E0A1   86 22      STX $22
E0A3   84 23      STY $23
E0A5   A0 04      LDY #$04
E0A7   B1 22      LDA ($22),Y
E0A9   85 62      STA $62
E0AB   C8         INY
E0AC   B1 22      LDA ($22),Y
E0AE   85 64      STA $64
E0B0   A0 08      LDY #$08
E0B2   B1 22      LDA ($22),Y
E0B4   85 63      STA $63
E0B6   C8         INY
E0B7   B1 22      LDA ($22),Y
E0B9   85 65      STA $65
E0BB   4C E3 E0   JMP $E0E3

E0BE   A9 8B      LDA #$8B
E0C0   A0 00      LDY #$00
E0C2   20 A2 BB   JSR $BBA2
E0C5   A9 8D      LDA #$8D
E0C7   A0 E0      LDY #$E0
E0C9   20 28 BA   JSR $BA28
E0CC   A9 92      LDA #$92
E0CE   A0 E0      LDY #$E0
E0D0   20 67 B8   JSR $B867
E0D3   A6 65      LDX $65
E0D5   A5 62      LDA $62
E0D7   85 65      STA $65
E0D9   86 62      STX $62
E0DB   A6 63      LDX $63
E0DD   A5 64      LDA $64
E0DF   85 63      STA $63
E0E1   86 64      STX $64

E0E3   A9 00      LDA #$00

E0E5   85 66      STA $66
E0E7   A5 61      LDA $61
E0E9   85 70      STA $70
E0EB   A9 80      LDA #$80
E0ED   85 61      STA $61
E0EF   20 D7 B8   JSR $B8D7
E0F2   A2 8B      LDX #$8B
E0F4   A0 00      LDY #$00

E0F6   4C D4 BB   JMP $BBD4


; handle errors for direct I/O
; calls from basic

E0F9   C9 F0      CMP #$F0
E0FB   D0 07      BNE $E104
E0FD   84 38      STY $38
E0FF   86 37      STX $37
E101   4C 63 A6   JMP $A663

E104   AA         TAX
E105   D0 02      BNE $E109
E107   A2 1E      LDX #$1E
E109   4C 37 A4   JMP $A437


E10C   20 D2 FF   JSR $FFD2

E10F   B0 E8      BCS $E0F9
E111   60         RTS


E112   20 CF FF   JSR $FFCF

E115   B0 E2      BCS $E0F9
E117   60         RTS


E118   20 AD E4   JSR $E4AD

E11B   B0 DC      BCS $E0F9
E11D   60         RTS


E11E   20 C6 FF   JSR $FFC6

E121   B0 D6      BCS $E0F9
E123   60         RTS


E124   20 E4 FF   JSR $FFE4

E127   B0 D0      BCS $E0F9
E129   60         RTS


; SYS command

E12A   20 8A AD   JSR $AD8A
E12D   20 F7 B7   JSR $B7F7
E130   A9 E1      LDA #$E1   ; low  E146
E132   48         PHA
E133   A9 46      LDA #$46   ; high E146
E135   48         PHA
E136   AD 0F 03   LDA $030F
E139   48         PHA
E13A   AD 0C 03   LDA $030C
E13D   AE 0D 03   LDX $030D
E140   AC 0E 03   LDY $030E
E143   28         PLP
E144   6C 14 00   JMP ($0014)


E147   08         PHP

E148   8D 0C 03   STA $030C
E14B   8E 0D 03   STX $030D
E14E   8C 0E 03   STY $030E
E151   68         PLA
E152   8D 0F 03   STA $030F
E155   60         RTS


; SAVE command

E156   20 D4 E1   JSR $E1D4
E159   A6 2D      LDX $2D
E15B   A4 2E      LDY $2E
E15D   A9 2B      LDA #$2B
E15F   20 D8 FF   JSR $FFD8
E162   B0 95      BCS $E0F9
E164   60         RTS


; VERIFY command

E165   A9 01      LDA #$01
E167   .BY $2C


; LOAD command

E168   A9 00      LDA #$00
E16A   85 0A      STA $0A
E16C   20 D4 E1   JSR $E1D4
E16F   A5 0A      LDA $0A
E171   A6 2B      LDX $2B
E173   A4 2C      LDY $2C
E175   20 D5 FF   JSR $FFD5
E178   B0 57      BCS $E1D1
E17A   A5 0A      LDA $0A
E17C   F0 17      BEQ $E195
E17E   A2 1C      LDX #$1C
E180   20 B7 FF   JSR $FFB7
E183   29 10      AND #$10
E185   D0 17      BNE $E19E
E187   A5 7A      LDA $7A
E189   C9 02      CMP #$02
E18B   F0 07      BEQ $E194
E18D   A9 64      LDA #$64
E18F   A0 A3      LDY #$A3
E191   4C 1E AB   JMP $AB1E
E194   60         RTS

E195   20 B7 FF   JSR $FFB7
E198   29 BF      AND #$BF
E19A   F0 05      BEQ $E1A1
E19C   A2 1D      LDX #$1D
E19E   4C 37 A4   JMP $A437

E1A1   A5 7B      LDA $7B
E1A3   C9 02      CMP #$02
E1A5   D0 0E      BNE $E1B5
E1A7   86 2D      STX $2D
E1A9   84 2E      STY $2E
E1AB   A9 76      LDA #$76
E1AD   A0 A3      LDY #$A3
E1AF   20 1E AB   JSR $AB1E
E1B2   4C 2A A5   JMP $A52A

E1B5   20 8E A6   JSR $A68E
E1B8   20 33 A5   JSR $A533
E1BB   4C 77 A6   JMP $A677


; OPEN command

E1BE   20 19 E2   JSR $E219
E1C1   20 C0 FF   JSR $FFC0
E1C4   B0 0B      BCS $E1D1
E1C6   60         RTS


; CLOSE command

E1C7   20 19 E2   JSR $E219
E1CA   A5 49      LDA $49
E1CC   20 C3 FF   JSR $FFC3
E1CF   90 C3      BCC $E194
E1D1   4C F9 E0   JMP $E0F9


; set parameters for load/verify/save

E1D4   A9 00      LDA #$00
E1D6   20 BD FF   JSR $FFBD
E1D9   A2 01      LDX #$01
E1DB   A0 00      LDY #$00
E1DD   20 BA FF   JSR $FFBA
E1E0   20 06 E2   JSR $E206
E1E3   20 57 E2   JSR $E257
E1E6   20 06 E2   JSR $E206
E1E9   20 00 E2   JSR $E200
E1EC   A0 00      LDY #$00
E1EE   86 49      STX $49
E1F0   20 BA FF   JSR $FFBA
E1F3   20 06 E2   JSR $E206
E1F6   20 00 E2   JSR $E200
E1F9   8A         TXA
E1FA   A8         TAY
E1FB   A6 49      LDX $49
E1FD   4C BA FF   JMP $FFBA


; skip comma and get integer in X

E200   20 0E E2   JSR $E20E
E203   4C 9E B7   JMP $B79E


; get character and check for end of line

E206   20 79 00   JSR $0079
E209   D0 02      BNE $E20D
E20B   68         PLA
E20C   68         PLA
E20D   60         RTS


; check for comma and skip it

E20E   20 FD AE   JSR $AEFD

E211   20 79 00   JSR $0079

E214   D0 F7      BNE $E20D
E216   4C 08 AF   JMP $AF08


; get open/close parameters

E219   A9 00      LDA #$00
E21B   20 BD FF   JSR $FFBD
E21E   20 11 E2   JSR $E211
E221   20 9E B7   JSR $B79E
E224   86 49      STX $49
E226   8A         TXA
E227   A2 01      LDX #$01
E229   A0 00      LDY #$00
E22B   20 BA FF   JSR $FFBA
E22E   20 06 E2   JSR $E206
E231   20 00 E2   JSR $E200
E234   86 4A      STX $4A
E236   A0 00      LDY #$00
E238   A5 49      LDA $49
E23A   E0 03      CPX #$03
E23C   90 01      BCC $E23F
E23E   88         DEY
E23F   20 BA FF   JSR $FFBA
E242   20 06 E2   JSR $E206
E245   20 00 E2   JSR $E200
E248   8A         TXA
E249   A8         TAY
E24A   A6 4A      LDX $4A
E24C   A5 49      LDA $49
E24E   20 BA FF   JSR $FFBA
E251   20 06 E2   JSR $E206
E254   20 0E E2   JSR $E20E

E257   20 9E AD   JSR $AD9E

E25A   20 A3 B6   JSR $B6A3
E25D   A6 22      LDX $22
E25F   A4 23      LDY $23
E261   4C BD FF   JMP $FFBD


; COS function

E264   A9 E0      LDA #$E0   ; low  E2E0
E266   A0 E2      LDY #$E2   ; high E2E0
E268   20 67 B8   JSR $B867


; SIN function

E26B   20 0C BC   JSR $BC0C
E26E   A9 E5      LDA #$E5   ; low  E2E5
E270   A0 E2      LDY #$E2   ; high E2E5
E272   A6 6E      LDX $6E
E274   20 07 BB   JSR $BB07
E277   20 0C BC   JSR $BC0C
E27A   20 CC BC   JSR $BCCC
E27D   A9 00      LDA #$00
E27F   85 6F      STA $6F
E281   20 53 B8   JSR $B853
E284   A9 EA      LDA #$EA   ; low  E2EA
E286   A0 E2      LDY #$E2   ; high E2EA
E288   20 50 B8   JSR $B850
E28B   A5 66      LDA $66
E28D   48         PHA
E28E   10 0D      BPL $E29D
E290   20 49 B8   JSR $B849
E293   A5 66      LDA $66
E295   30 09      BMI $E2A0
E297   A5 12      LDA $12
E299   49 FF      EOR #$FF
E29B   85 12      STA $12

E29D   20 B4 BF   JSR $BFB4

E2A0   A9 EA      LDA #$EA   ; low  E2EA
E2A2   A0 E2      LDY #$E2   ; high E2EA
E2A4   20 67 B8   JSR $B867
E2A7   68         PLA
E2A8   10 03      BPL $E2AD
E2AA   20 B4 BF   JSR $BFB4
E2AD   A9 EF      LDA #$EF
E2AF   A0 E2      LDY #$E2
E2B1   4C 43 E0   JMP $E043


; TAN function

E2B4   20 CA BB   JSR $BBCA
E2B7   A9 00      LDA #$00
E2B9   85 12      STA $12
E2BB   20 6B E2   JSR $E26B
E2BE   A2 4E      LDX #$4E   ; low  004E
E2C0   A0 00      LDY #$00   ; high 004E
E2C2   20 F6 E0   JSR $E0F6
E2C5   A9 57      LDA #$57   ; low  005F
E2C7   A0 00      LDY #$00   ; high 005F
E2C9   20 A2 BB   JSR $BBA2
E2CC   A9 00      LDA #$00
E2CE   85 66      STA $66
E2D0   A5 12      LDA $12
E2D2   20 DC E2   JSR $E2DC
E2D5   A9 4E      LDA #$4E   ; low  004E
E2D7   A0 00      LDY #$00   ; high 004E
E2D9   4C 0F BB   JMP $BB0F


E2DC   48         PHA

E2DD   4C 9D E2   JMP $E29D


; float numbers for SIN, COS and TAN

; 0.5 * PI
E2E0   .BY $81,$49,$0F,$DA,$A2
; 2 * PI
E2E5   .BY $83,$49,$0F,$DA,$A2
; 0,25
E2EA   .BY $7F,$00,$00,$00,$00


; polynomial table

E2EF   .BY $05   ; degree 6
E2F0   .BY $84,$E6,$1A,$2D,$1B
E2F5   .BY $86,$28,$07,$FB,$F8
E2FA   .BY $87,$99,$68,$89,$01
E2FF   .BY $87,$23,$35,$DF,$E1
E304   .BY $86,$A5,$5D,$E7,$28
E309   .BY $83,$49,$0F,$DA,$A2


; ATN function

E30E   A5 66      LDA $66
E310   48         PHA
E311   10 03      BPL $E316
E313   20 B4 BF   JSR $BFB4
E316   A5 61      LDA $61
E318   48         PHA
E319   C9 81      CMP #$81
E31B   90 07      BCC $E324
E31D   A9 BC      LDA #$BC   ; low  B9BC
E31F   A0 B9      LDY #$B9   ; high B9BC
E321   20 0F BB   JSR $BB0F
E324   A9 3E      LDA #$3E   ; low  E33E
E326   A0 E3      LDY #$E3   ; high E33E
E328   20 43 E0   JSR $E043
E32B   68         PLA
E32C   C9 81      CMP #$81
E32E   90 07      BCC $E337
E330   A9 E0      LDA #$E0   ; low  E2E0
E332   A0 E2      LDY #$E2   ; high E2E0
E334   20 50 B8   JSR $B850
E337   68         PLA
E338   10 03      BPL $E33D
E33A   4C B4 BF   JMP $BFB4
E33D   60         RTS


; float numbers for ATN
; polynomial table

E33E   .BY $0B   ; degree 12
E33F   .BY $76,$B3,$83,$BD,$D3
E344   .BY $79,$1E,$F4,$A6,$F5
E349   .BY $7B,$83,$FC,$B0,$10
E34E   .BY $7C,$0C,$1F,$67,$CA
E353   .BY $7C,$DE,$53,$CB,$C1
E358   .BY $7D,$14,$64,$70,$4C
E35D   .BY $7D,$B7,$EA,$51,$7A
E362   .BY $7D,$63,$30,$88,$7E
E367   .BY $7E,$92,$44,$99,$3A
E36C   .BY $7E,$4C,$CC,$91,$C7
E371   .BY $7F,$AA,$AA,$AA,$13
E376   .BY $81,$00,$00,$00,$00


; warm start entry

E37B   20 CC FF   JSR $FFCC
E37E   A9 00      LDA #$00
E380   85 13      STA $13
E382   20 7A A6   JSR $A67A
E385   58         CLI

E386   A2 80      LDX #$80

E388   6C 00 03   JMP ($0300)   ; normally E38B


; handle error messages

E38B   8A         TXA
E38C   30 03      BMI $E391
E38E   4C 3A A4   JMP $A43A

E391   4C 74 A4   JMP $A474


; RESET routine

E394   20 53 E4   JSR $E453
E397   20 BF E3   JSR $E3BF
E39A   20 22 E4   JSR $E422
E39D   A2 FB      LDX #$FB
E39F   9A         TXS
E3A0   D0 E4      BNE $E386


; character fetch code for zero page $0073-$008F

E3A2   E6 7A      INC $7A
E3A4   D0 02      BNE $E3A8
E3A6   E6 7B      INC $7B
E3A8   AD 60 EA   LDA $EA60
E3AB   C9 3A      CMP #$3A   ; colon
E3AD   B0 0A      BCS $E3B9
E3AF   C9 20      CMP #$20   ; space
E3B1   F0 EF      BEQ $E3A2
E3B3   38         SEC
E3B4   E9 30      SBC #$30   ; 0
E3B6   38         SEC
E3B7   E9 D0      SBC #$D0
E3B9   60         RTS


; first RND seed value

E3BA   .BY $80,$4F,$C7,$52,$58


; initialisation of basic

E3BF   A9 4C      LDA #$4C
E3C1   85 54      STA $54
E3C3   8D 10 03   STA $0310
E3C6   A9 48      LDA #$48   ; low  B248
E3C8   A0 B2      LDY #$B2   ; high B248
E3CA   8D 11 03   STA $0311
E3CD   8C 12 03   STY $0312
E3D0   A9 91      LDA #$91   ; lowh B391
E3D2   A0 B3      LDY #$B3   ; high B391
E3D4   85 05      STA $05
E3D6   84 06      STY $06
E3D8   A9 AA      LDA #$AA   ; low  B1AA
E3DA   A0 B1      LDY #$B1   ; high B1AA
E3DC   85 03      STA $03
E3DE   84 04      STY $04
E3E0   A2 1C      LDX #$1C
E3E2   BD A2 E3   LDA $E3A2,X
E3E5   95 73      STA $73,X
E3E7   CA         DEX
E3E8   10 F8      BPL $E3E2
E3EA   A9 03      LDA #$03
E3EC   85 53      STA $53
E3EE   A9 00      LDA #$00
E3F0   85 68      STA $68
E3F2   85 13      STA $13
E3F4   85 18      STA $18
E3F6   A2 01      LDX #$01
E3F8   8E FD 01   STX $01FD
E3FB   8E FC 01   STX $01FC
E3FE   A2 19      LDX #$19
E400   86 16      STX $16
E402   38         SEC
E403   20 9C FF   JSR $FF9C
E406   86 2B      STX $2B
E408   84 2C      STY $2C
E40A   38         SEC
E40B   20 99 FF   JSR $FF99
E40E   86 37      STX $37
E410   84 38      STY $38
E412   86 33      STX $33
E414   84 34      STY $34
E416   A0 00      LDY #$00
E418   98         TYA
E419   91 2B      STA ($2B),Y
E41B   E6 2B      INC $2B
E41D   D0 02      BNE $E421
E41F   E6 2C      INC $2C
E421   60         RTS


; print BASIC start up messages

E422   A5 2B      LDA $2B
E424   A4 2C      LDY $2C
E426   20 08 A4   JSR $A408
E429   A9 73      LDA #$73   ; low  E473
E42B   A0 E4      LDY #$E4   ; high E473
E42D   20 1E AB   JSR $AB1E
E430   A5 37      LDA $37
E432   38         SEC
E433   E5 2B      SBC $2B
E435   AA         TAX
E436   A5 38      LDA $38
E438   E5 2C      SBC $2C
E43A   20 CD BD   JSR $BDCD
E43D   A9 60      LDA #$60   ; low  E460
E43F   A0 E4      LDY #$E4   ; high E460
E441   20 1E AB   JSR $AB1E
E444   4C 44 A6   JMP $A644


; vectors for $0300-$030B

E447   .WD $E38B
E449   .WD $A483
E44B   .WD $A57C
E44D   .WD $A71A
E44F   .WD $A7E4
E451   .WD $AE86


; initialise vectors

E453   A2 0B      LDX #$0B
E455   BD 47 E4   LDA $E447,X
E458   9D 00 03   STA $0300,X
E45B   CA         DEX
E45C   10 F7      BPL $E455
E45E   60         RTS


; startup messages

E45F   .BY $00

; basic bytes free

E460   .BY $20,$42,$41,$53,$49,$43
E466   .BY $20,$42,$59,$54,$45,$53
E46C   .BY $20,$46,$52,$45,$45
E471   .BY $0D
E472   .BY $00

; **** commodore 64 basic v2 ****

E473   .BY $93,$0D,$20,$20,$20
E478   .BY $20,$2A,$2A,$2A,$2A
E47D   .BY $20,$43,$4F,$4D,$4D,$4F,$44,$4F,$52,$45
E487   .BY $20,$36,$34
E48A   .BY $20,$42,$41,$53,$49,$43
E490   .BY $20,$56,$32
E493   .BY $20,$2A,$2A,$2A,$2A
E498   .BY $0D,$0D

; 64k ram system

E49A   .BY $20,$36,$34,$4B
E49E   .BY $20,$52,$41,$4D
E4A2   .BY $20,$53,$59,$53,$54,$45,$4D
E4A9   .BY $20,$20
E4AB   .BY $00

E4AC   .BY $81


; set output device

E4AD   48         PHA
E4AE   20 C9 FF   JSR $FFC9
E4B1   AA         TAX
E4B2   68         PLA
E4B3   90 01      BCC $E4B6
E4B5   8A         TXA
E4B6   60         RTS


; unused

E4B7   .BY $AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
E4BF   .BY $AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
E4C7   .BY $AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
E4CF   .BY $AA,$AA,$AA,$AA


E4D3   85 A9      STA $A9

E4D5   A9 01      LDA #$01
E4D7   85 AB      STA $AB
E4D9   60         RTS


; clear byte in color ram

E4DA   AD 86 02   LDA $0286
E4DD   91 F3      STA ($F3),Y
E4DF   60         RTS


; pause after finding a file on casette

E4E0   69 02      ADC #$02
E4E2   A4 91      LDY $91
E4E4   C8         INY
E4E5   D0 04      BNE $E4EB
E4E7   C5 A1      CMP $A1
E4E9   D0 F7      BNE $E4E2
E4EB   60         RTS


; baud rate factor table

E4EC   .WD $2619   ; 50
E4EE   .WD $1944   ; 75
E4F0   .WD $111A   ; 110
E4F2   .WD $0DE8   ; 134.5
E4F4   .WD $0C70   ; 150
E4F6   .WD $0606   ; 300
E4F8   .WD $02D1   ; 600
E4FA   .WD $0137   ; 1200
E4FC   .WD $00AE   ; 1800
E4FE   .WD $0069   ; 2400


; read base address of I/O device into XY

E500   A2 00      LDX #$00   ; low  DC00
E502   A0 DC      LDY #$DC   ; high DC00
E504   60         RTS


; read screen size

E505   A2 28      LDX #$28   ; 40 columns
E507   A0 19      LDY #$19   ; 25 rows
E509   60         RTS


; read/set XY cursor position

E50A   B0 07      BCS $E513
E50C   86 D6      STX $D6
E50E   84 D3      STY $D3
E510   20 6C E5   JSR $E56C
E513   A6 D6      LDX $D6
E515   A4 D3      LDY $D3
E517   60         RTS


; initialise screen and keyboard

E518   20 A0 E5   JSR $E5A0
E51B   A9 00      LDA #$00
E51D   8D 91 02   STA $0291
E520   85 CF      STA $CF
E522   A9 48      LDA #$48   ; low  EB48
E524   8D 8F 02   STA $028F
E527   A9 EB      LDA #$EB   ; high EB48
E529   8D 90 02   STA $0290
E52C   A9 0A      LDA #$0A
E52E   8D 89 02   STA $0289
E531   8D 8C 02   STA $028C
E534   A9 0E      LDA #$0E
E536   8D 86 02   STA $0286
E539   A9 04      LDA #$04
E53B   8D 8B 02   STA $028B
E53E   A9 0C      LDA #$0C
E540   85 CD      STA $CD
E542   85 CC      STA $CC

E544   AD 88 02   LDA $0288

E547   09 80      ORA #$80
E549   A8         TAY
E54A   A9 00      LDA #$00
E54C   AA         TAX
E54D   94 D9      STY $D9,X
E54F   18         CLC
E550   69 28      ADC #$28
E552   90 01      BCC $E555
E554   C8         INY
E555   E8         INX
E556   E0 1A      CPX #$1A
E558   D0 F3      BNE $E54D
E55A   A9 FF      LDA #$FF
E55C   95 D9      STA $D9,X
E55E   A2 18      LDX #$18
E560   20 FF E9   JSR $E9FF
E563   CA         DEX
E564   10 FA      BPL $E560

E566   A0 00      LDY #$00

E568   84 D3      STY $D3
E56A   84 D6      STY $D6


; set address of curent screen line

E56C   A6 D6      LDX $D6
E56E   A5 D3      LDA $D3
E570   B4 D9      LDY $D9,X
E572   30 08      BMI $E57C
E574   18         CLC
E575   69 28      ADC #$28
E577   85 D3      STA $D3
E579   CA         DEX
E57A   10 F4      BPL $E570
E57C   20 F0 E9   JSR $E9F0
E57F   A9 27      LDA #$27
E581   E8         INX
E582   B4 D9      LDY $D9,X
E584   30 06      BMI $E58C
E586   18         CLC
E587   69 28      ADC #$28
E589   E8         INX
E58A   10 F6      BPL $E582
E58C   85 D5      STA $D5
E58E   4C 24 EA   JMP $EA24

E591   E4 C9      CPX $C9

E593   F0 03      BEQ $E598
E595   4C ED E6   JMP $E6ED
E598   60         RTS

E599   EA         NOP


; this code is unused by kernel
; since no other part of the
; rom jumps to this location!

E59A   20 A0 E5   JSR $E5A0
E59D   4C 66 E5   JMP $E566


; initialise vic chip

E5A0   A9 03      LDA #$03
E5A2   85 9A      STA $9A
E5A4   A9 00      LDA #$00
E5A6   85 99      STA $99
E5A8   A2 2F      LDX #$2F
E5AA   BD B8 EC   LDA $ECB8,X
E5AD   9D FF CF   STA $CFFF,X
E5B0   CA         DEX
E5B1   D0 F7      BNE $E5AA
E5B3   60         RTS


; get character from keyboard buffer

E5B4   AC 77 02   LDY $0277
E5B7   A2 00      LDX #$00
E5B9   BD 78 02   LDA $0278,X
E5BC   9D 77 02   STA $0277,X
E5BF   E8         INX
E5C0   E4 C6      CPX $C6
E5C2   D0 F5      BNE $E5B9
E5C4   C6 C6      DEC $C6
E5C6   98         TYA
E5C7   58         CLI
E5C8   18         CLC
E5C9   60         RTS

; wait for return for keyboard
E5CA   20 16 E7   JSR $E716
E5CD   A5 C6      LDA $C6
E5CF   85 CC      STA $CC
E5D1   8D 92 02   STA $0292
E5D4   F0 F7      BEQ $E5CD
E5D6   78         SEI
E5D7   A5 CF      LDA $CF
E5D9   F0 0C      BEQ $E5E7
E5DB   A5 CE      LDA $CE
E5DD   AE 87 02   LDX $0287
E5E0   A0 00      LDY #$00
E5E2   84 CF      STY $CF
E5E4   20 13 EA   JSR $EA13
E5E7   20 B4 E5   JSR $E5B4
E5EA   C9 83      CMP #$83
E5EC   D0 10      BNE $E5FE
E5EE   A2 09      LDX #$09
E5F0   78         SEI
E5F1   86 C6      STX $C6
E5F3   BD E6 EC   LDA $ECE6,X
E5F6   9D 76 02   STA $0276,X
E5F9   CA         DEX
E5FA   D0 F7      BNE $E5F3
E5FC   F0 CF      BEQ $E5CD
E5FE   C9 0D      CMP #$0D
E600   D0 C8      BNE $E5CA
E602   A4 D5      LDY $D5
E604   84 D0      STY $D0
E606   B1 D1      LDA ($D1),Y
E608   C9 20      CMP #$20
E60A   D0 03      BNE $E60F
E60C   88         DEY
E60D   D0 F7      BNE $E606
E60F   C8         INY
E610   84 C8      STY $C8
E612   A0 00      LDY #$00
E614   8C 92 02   STY $0292
E617   84 D3      STY $D3
E619   84 D4      STY $D4
E61B   A5 C9      LDA $C9
E61D   30 1B      BMI $E63A
E61F   A6 D6      LDX $D6
E621   20 91 E5   JSR $E591
E624   E4 C9      CPX $C9
E626   D0 12      BNE $E63A
E628   A5 CA      LDA $CA
E62A   85 D3      STA $D3
E62C   C5 C8      CMP $C8
E62E   90 0A      BCC $E63A
E630   B0 2B      BCS $E65D


; get character from device 0 or 3

E632   98         TYA
E633   48         PHA
E634   8A         TXA
E635   48         PHA
E636   A5 D0      LDA $D0
E638   F0 93      BEQ $E5CD


; get character from current screen line

E63A   A4 D3      LDY $D3
E63C   B1 D1      LDA ($D1),Y
E63E   85 D7      STA $D7
E640   29 3F      AND #$3F
E642   06 D7      ASL $D7
E644   24 D7      BIT $D7
E646   10 02      BPL $E64A
E648   09 80      ORA #$80
E64A   90 04      BCC $E650
E64C   A6 D4      LDX $D4
E64E   D0 04      BNE $E654
E650   70 02      BVS $E654
E652   09 40      ORA #$40
E654   E6 D3      INC $D3
E656   20 84 E6   JSR $E684
E659   C4 C8      CPY $C8
E65B   D0 17      BNE $E674
E65D   A9 00      LDA #$00
E65F   85 D0      STA $D0
E661   A9 0D      LDA #$0D
E663   A6 99      LDX $99
E665   E0 03      CPX #$03
E667   F0 06      BEQ $E66F
E669   A6 9A      LDX $9A
E66B   E0 03      CPX #$03
E66D   F0 03      BEQ $E672
E66F   20 16 E7   JSR $E716
E672   A9 0D      LDA #$0D
E674   85 D7      STA $D7
E676   68         PLA
E677   AA         TAX
E678   68         PLA
E679   A8         TAY
E67A   A5 D7      LDA $D7
E67C   C9 DE      CMP #$DE   ; screen PI code
E67E   D0 02      BNE $E682
E680   A9 FF      LDA #$FF   ; petscii PI code
E682   18         CLC
E683   60         RTS


; check for quote mark and set flag

E684   C9 22      CMP #$22   ; quote mark
E686   D0 08      BNE $E690
E688   A5 D4      LDA $D4
E68A   49 01      EOR #$01
E68C   85 D4      STA $D4
E68E   A9 22      LDA #$22   ; quote mark
E690   60         RTS


; fill screen at current position

E691   09 40      ORA #$40

E693   A6 C7      LDX $C7

E695   F0 02      BEQ $E699

E697   09 80      ORA #$80

E699   A6 D8      LDX $D8
E69B   F0 02      BEQ $E69F
E69D   C6 D8      DEC $D8
E69F   AE 86 02   LDX $0286
E6A2   20 13 EA   JSR $EA13
E6A5   20 B6 E6   JSR $E6B6


; return from output to the screen

E6A8   68         PLA
E6A9   A8         TAY
E6AA   A5 D8      LDA $D8
E6AC   F0 02      BEQ $E6B0
E6AE   46 D4      LSR $D4
E6B0   68         PLA
E6B1   AA         TAX
E6B2   68         PLA
E6B3   18         CLC
E6B4   58         CLI
E6B5   60         RTS


; get/insert new line

E6B6   20 B3 E8   JSR $E8B3
E6B9   E6 D3      INC $D3
E6BB   A5 D5      LDA $D5
E6BD   C5 D3      CMP $D3
E6BF   B0 3F      BCS $E700
E6C1   C9 4F      CMP #$4F
E6C3   F0 32      BEQ $E6F7
E6C5   AD 92 02   LDA $0292
E6C8   F0 03      BEQ $E6CD
E6CA   4C 67 E9   JMP $E967

E6CD   A6 D6      LDX $D6
E6CF   E0 19      CPX #$19
E6D1   90 07      BCC $E6DA
E6D3   20 EA E8   JSR $E8EA
E6D6   C6 D6      DEC $D6
E6D8   A6 D6      LDX $D6

E6DA   16 D9      ASL $D9,X

E6DC   56 D9      LSR $D9,X
E6DE   E8         INX
E6DF   B5 D9      LDA $D9,X
E6E1   09 80      ORA #$80
E6E3   95 D9      STA $D9,X
E6E5   CA         DEX
E6E6   A5 D5      LDA $D5
E6E8   18         CLC
E6E9   69 28      ADC #$28
E6EB   85 D5      STA $D5

E6ED   B5 D9      LDA $D9,X

E6EF   30 03      BMI $E6F4
E6F1   CA         DEX
E6F2   D0 F9      BNE $E6ED
E6F4   4C F0 E9   JMP $E9F0

E6F7   C6 D6      DEC $D6
E6F9   20 7C E8   JSR $E87C
E6FC   A9 00      LDA #$00
E6FE   85 D3      STA $D3
E700   60         RTS


; move backwards over a line boundary

E701   A6 D6      LDX $D6
E703   D0 06      BNE $E70B
E705   86 D3      STX $D3
E707   68         PLA
E708   68         PLA
E709   D0 9D      BNE $E6A8
E70B   CA         DEX
E70C   86 D6      STX $D6
E70E   20 6C E5   JSR $E56C
E711   A4 D5      LDY $D5
E713   84 D3      STY $D3
E715   60         RTS


; put a character to screen

E716   48         PHA
E717   85 D7      STA $D7
E719   8A         TXA
E71A   48         PHA
E71B   98         TYA
E71C   48         PHA
E71D   A9 00      LDA #$00
E71F   85 D0      STA $D0
E721   A4 D3      LDY $D3
E723   A5 D7      LDA $D7
E725   10 03      BPL $E72A
E727   4C D4 E7   JMP $E7D4

E72A   C9 0D      CMP #$0D   ; return code
E72C   D0 03      BNE $E731
E72E   4C 91 E8   JMP $E891

E731   C9 20      CMP #$20
E733   90 10      BCC $E745
E735   C9 60      CMP #$60
E737   90 04      BCC $E73D
E739   29 DF      AND #$DF
E73B   D0 02      BNE $E73F
E73D   29 3F      AND #$3F
E73F   20 84 E6   JSR $E684
E742   4C 93 E6   JMP $E693

E745   A6 D8      LDX $D8
E747   F0 03      BEQ $E74C
E749   4C 97 E6   JMP $E697

E74C   C9 14      CMP #$14    ; delete code
E74E   D0 2E      BNE $E77E
E750   98         TYA
E751   D0 06      BNE $E759
E753   20 01 E7   JSR $E701
E756   4C 73 E7   JMP $E773

E759   20 A1 E8   JSR $E8A1
E75C   88         DEY
E75D   84 D3      STY $D3
E75F   20 24 EA   JSR $EA24
E762   C8         INY
E763   B1 D1      LDA ($D1),Y
E765   88         DEY
E766   91 D1      STA ($D1),Y
E768   C8         INY
E769   B1 F3      LDA ($F3),Y
E76B   88         DEY
E76C   91 F3      STA ($F3),Y
E76E   C8         INY
E76F   C4 D5      CPY $D5
E771   D0 EF      BNE $E762

E773   A9 20      LDA #$20   ; space

E775   91 D1      STA ($D1),Y
E777   AD 86 02   LDA $0286
E77A   91 F3      STA ($F3),Y
E77C   10 4D      BPL $E7CB
E77E   A6 D4      LDX $D4
E780   F0 03      BEQ $E785
E782   4C 97 E6   JMP $E697

E785   C9 12      CMP #$12   ;  reverse code
E787   D0 02      BNE $E78B
E789   85 C7      STA $C7
E78B   C9 13      CMP #$13   ; home code
E78D   D0 03      BNE $E792
E78F   20 66 E5   JSR $E566
E792   C9 1D      CMP #$1D   ; csr right
E794   D0 17      BNE $E7AD
E796   C8         INY
E797   20 B3 E8   JSR $E8B3
E79A   84 D3      STY $D3
E79C   88         DEY
E79D   C4 D5      CPY $D5
E79F   90 09      BCC $E7AA
E7A1   C6 D6      DEC $D6
E7A3   20 7C E8   JSR $E87C
E7A6   A0 00      LDY #$00
E7A8   84 D3      STY $D3
E7AA   4C A8 E6   JMP $E6A8

E7AD   C9 11      CMP #$11   ; csr down
E7AF   D0 1D      BNE $E7CE
E7B1   18         CLC
E7B2   98         TYA
E7B3   69 28      ADC #$28
E7B5   A8         TAY
E7B6   E6 D6      INC $D6
E7B8   C5 D5      CMP $D5
E7BA   90 EC      BCC $E7A8
E7BC   F0 EA      BEQ $E7A8
E7BE   C6 D6      DEC $D6
E7C0   E9 28      SBC #$28
E7C2   90 04      BCC $E7C8
E7C4   85 D3      STA $D3
E7C6   D0 F8      BNE $E7C0
E7C8   20 7C E8   JSR $E87C
E7CB   4C A8 E6   JMP $E6A8

E7CE   20 CB E8   JSR $E8CB
E7D1   4C 44 EC   JMP $EC44


; put shifted chars to screen

E7D4   29 7F      AND #$7F   ; remove shift bit
E7D6   C9 7F      CMP #$7F   ; code for PI
E7D8   D0 02      BNE $E7DC
E7DA   A9 5E      LDA #$5E   ; screen PI
E7DC   C9 20      CMP #$20
E7DE   90 03      BCC $E7E3
E7E0   4C 91 E6   JMP $E691

E7E3   C9 0D      CMP #$0D   ; shift return
E7E5   D0 03      BNE $E7EA
E7E7   4C 91 E8   JMP $E891
E7EA   A6 D4      LDX $D4
E7EC   D0 3F      BNE $E82D
E7EE   C9 14      CMP #$14   ; insert
E7F0   D0 37      BNE $E829
E7F2   A4 D5      LDY $D5
E7F4   B1 D1      LDA ($D1),Y
E7F6   C9 20      CMP #$20
E7F8   D0 04      BNE $E7FE
E7FA   C4 D3      CPY $D3
E7FC   D0 07      BNE $E805
E7FE   C0 4F      CPY #$4F
E800   F0 24      BEQ $E826
E802   20 65 E9   JSR $E965
E805   A4 D5      LDY $D5
E807   20 24 EA   JSR $EA24
E80A   88         DEY
E80B   B1 D1      LDA ($D1),Y
E80D   C8         INY
E80E   91 D1      STA ($D1),Y
E810   88         DEY
E811   B1 F3      LDA ($F3),Y
E813   C8         INY
E814   91 F3      STA ($F3),Y
E816   88         DEY
E817   C4 D3      CPY $D3
E819   D0 EF      BNE $E80A
E81B   A9 20      LDA #$20
E81D   91 D1      STA ($D1),Y
E81F   AD 86 02   LDA $0286
E822   91 F3      STA ($F3),Y
E824   E6 D8      INC $D8
E826   4C A8 E6   JMP $E6A8

E829   A6 D8      LDX $D8
E82B   F0 05      BEQ $E832
E82D   09 40      ORA #$40
E82F   4C 97 E6   JMP $E697

E832   C9 11      CMP #$11   ; csr up
E834   D0 16      BNE $E84C
E836   A6 D6      LDX $D6
E838   F0 37      BEQ $E871
E83A   C6 D6      DEC $D6
E83C   A5 D3      LDA $D3
E83E   38         SEC
E83F   E9 28      SBC #$28
E841   90 04      BCC $E847
E843   85 D3      STA $D3
E845   10 2A      BPL $E871
E847   20 6C E5   JSR $E56C
E84A   D0 25      BNE $E871
E84C   C9 12      CMP #$12    ; reverse off
E84E   D0 04      BNE $E854
E850   A9 00      LDA #$00
E852   85 C7      STA $C7
E854   C9 1D      CMP #$1D   ; csr left
E856   D0 12      BNE $E86A
E858   98         TYA
E859   F0 09      BEQ $E864
E85B   20 A1 E8   JSR $E8A1
E85E   88         DEY
E85F   84 D3      STY $D3
E861   4C A8 E6   JMP $E6A8

E864   20 01 E7   JSR $E701
E867   4C A8 E6   JMP $E6A8

E86A   C9 13      CMP #$13   ; clr code
E86C   D0 06      BNE $E874
E86E   20 44 E5   JSR $E544
E871   4C A8 E6   JMP $E6A8

E874   09 80      ORA #$80
E876   20 CB E8   JSR $E8CB
E879   4C 4F EC   JMP $EC4F


; set next line number

E87C   46 C9      LSR $C9
E87E   A6 D6      LDX $D6
E880   E8         INX
E881   E0 19      CPX #$19
E883   D0 03      BNE $E888
E885   20 EA E8   JSR $E8EA
E888   B5 D9      LDA $D9,X
E88A   10 F4      BPL $E880
E88C   86 D6      STX $D6
E88E   4C 6C E5   JMP $E56C


; action for return

E891   A2 00      LDX #$00
E893   86 D8      STX $D8
E895   86 C7      STX $C7
E897   86 D4      STX $D4
E899   86 D3      STX $D3
E89B   20 7C E8   JSR $E87C
E89E   4C A8 E6   JMP $E6A8


; move cursor to previous line if
; at start of line

E8A1   A2 02      LDX #$02
E8A3   A9 00      LDA #$00
E8A5   C5 D3      CMP $D3
E8A7   F0 07      BEQ $E8B0
E8A9   18         CLC
E8AA   69 28      ADC #$28
E8AC   CA         DEX
E8AD   D0 F6      BNE $E8A5
E8AF   60         RTS

E8B0   C6 D6      DEC $D6
E8B2   60         RTS


; move cursor to next line if
; at end of line

E8B3   A2 02      LDX #$02
E8B5   A9 27      LDA #$27
E8B7   C5 D3      CMP $D3
E8B9   F0 07      BEQ $E8C2
E8BB   18         CLC
E8BC   69 28      ADC #$28
E8BE   CA         DEX
E8BF   D0 F6      BNE $E8B7
E8C1   60         RTS

E8C2   A6 D6      LDX $D6
E8C4   E0 19      CPX #$19
E8C6   F0 02      BEQ $E8CA
E8C8   E6 D6      INC $D6
E8CA   60         RTS


; check for colour change codes

E8CB   A2 0F      LDX #$0F
E8CD   DD DA E8   CMP $E8DA,X
E8D0   F0 04      BEQ $E8D6
E8D2   CA         DEX
E8D3   10 F8      BPL $E8CD
E8D5   60         RTS

E8D6   8E 86 02   STX $0286
E8D9   60         RTS


; colour key codes

E8DA   .BY $90,$05,$1C,$9F,$9C,$1E,$1F,$9E
E8E2   .BY $81,$95,$96,$97,$98,$99,$9A,$9B


; scroll screen

E8EA   A5 AC      LDA $AC
E8EC   48         PHA
E8ED   A5 AD      LDA $AD
E8EF   48         PHA
E8F0   A5 AE      LDA $AE
E8F2   48         PHA
E8F3   A5 AF      LDA $AF
E8F5   48         PHA
E8F6   A2 FF      LDX #$FF
E8F8   C6 D6      DEC $D6
E8FA   C6 C9      DEC $C9
E8FC   CE A5 02   DEC $02A5
E8FF   E8         INX
E900   20 F0 E9   JSR $E9F0
E903   E0 18      CPX #$18
E905   B0 0C      BCS $E913
E907   BD F1 EC   LDA $ECF1,X
E90A   85 AC      STA $AC
E90C   B5 DA      LDA $DA,X
E90E   20 C8 E9   JSR $E9C8
E911   30 EC      BMI $E8FF
E913   20 FF E9   JSR $E9FF
E916   A2 00      LDX #$00
E918   B5 D9      LDA $D9,X
E91A   29 7F      AND #$7F
E91C   B4 DA      LDY $DA,X
E91E   10 02      BPL $E922
E920   09 80      ORA #$80
E922   95 D9      STA $D9,X
E924   E8         INX
E925   E0 18      CPX #$18
E927   D0 EF      BNE $E918
E929   A5 F1      LDA $F1
E92B   09 80      ORA #$80
E92D   85 F1      STA $F1
E92F   A5 D9      LDA $D9
E931   10 C3      BPL $E8F6
E933   E6 D6      INC $D6
E935   EE A5 02   INC $02A5
E938   A9 7F      LDA #$7F
E93A   8D 00 DC   STA $DC00
E93D   AD 01 DC   LDA $DC01
E940   C9 FB      CMP #$FB
E942   08         PHP
E943   A9 7F      LDA #$7F
E945   8D 00 DC   STA $DC00
E948   28         PLP
E949   D0 0B      BNE $E956
E94B   A0 00      LDY #$00
E94D   EA         NOP
E94E   CA         DEX
E94F   D0 FC      BNE $E94D
E951   88         DEY
E952   D0 F9      BNE $E94D
E954   84 C6      STY $C6
E956   A6 D6      LDX $D6

E958   68         PLA

E959   85 AF      STA $AF
E95B   68         PLA
E95C   85 AE      STA $AE
E95E   68         PLA
E95F   85 AD      STA $AD
E961   68         PLA
E962   85 AC      STA $AC
E964   60         RTS


; insert blank line in screen

E965   A6 D6      LDX $D6

E967   E8         INX

E968   B5 D9      LDA $D9,X
E96A   10 FB      BPL $E967
E96C   8E A5 02   STX $02A5
E96F   E0 18      CPX #$18
E971   F0 0E      BEQ $E981
E973   90 0C      BCC $E981
E975   20 EA E8   JSR $E8EA
E978   AE A5 02   LDX $02A5
E97B   CA         DEX
E97C   C6 D6      DEC $D6
E97E   4C DA E6   JMP $E6DA

E981   A5 AC      LDA $AC
E983   48         PHA
E984   A5 AD      LDA $AD
E986   48         PHA
E987   A5 AE      LDA $AE
E989   48         PHA
E98A   A5 AF      LDA $AF
E98C   48         PHA
E98D   A2 19      LDX #$19
E98F   CA         DEX
E990   20 F0 E9   JSR $E9F0
E993   EC A5 02   CPX $02A5
E996   90 0E      BCC $E9A6
E998   F0 0C      BEQ $E9A6
E99A   BD EF EC   LDA $ECEF,X
E99D   85 AC      STA $AC
E99F   B5 D8      LDA $D8,X
E9A1   20 C8 E9   JSR $E9C8
E9A4   30 E9      BMI $E98F
E9A6   20 FF E9   JSR $E9FF
E9A9   A2 17      LDX #$17
E9AB   EC A5 02   CPX $02A5
E9AE   90 0F      BCC $E9BF
E9B0   B5 DA      LDA $DA,X
E9B2   29 7F      AND #$7F
E9B4   B4 D9      LDY $D9,X
E9B6   10 02      BPL $E9BA
E9B8   09 80      ORA #$80
E9BA   95 DA      STA $DA,X
E9BC   CA         DEX
E9BD   D0 EC      BNE $E9AB
E9BF   AE A5 02   LDX $02A5
E9C2   20 DA E6   JSR $E6DA
E9C5   4C 58 E9   JMP $E958


; move one screen line

E9C8   29 03      AND #$03
E9CA   0D 88 02   ORA $0288
E9CD   85 AD      STA $AD
E9CF   20 E0 E9   JSR $E9E0
E9D2   A0 27      LDY #$27
E9D4   B1 AC      LDA ($AC),Y
E9D6   91 D1      STA ($D1),Y
E9D8   B1 AE      LDA ($AE),Y
E9DA   91 F3      STA ($F3),Y
E9DC   88         DEY
E9DD   10 F5      BPL $E9D4
E9DF   60         RTS


; set colour and screen addresses

E9E0   20 24 EA   JSR $EA24
E9E3   A5 AC      LDA $AC
E9E5   85 AE      STA $AE
E9E7   A5 AD      LDA $AD
E9E9   29 03      AND #$03
E9EB   09 D8      ORA #$D8
E9ED   85 AF      STA $AF
E9EF   60         RTS


; fetch screen addresses

E9F0   BD F0 EC   LDA $ECF0,X
E9F3   85 D1      STA $D1
E9F5   B5 D9      LDA $D9,X
E9F7   29 03      AND #$03
E9F9   0D 88 02   ORA $0288
E9FC   85 D2      STA $D2
E9FE   60         RTS


; clear one screen line

E9FF   A0 27      LDY #$27
EA01   20 F0 E9   JSR $E9F0
EA04   20 24 EA   JSR $EA24
EA07   20 DA E4   JSR $E4DA
EA0A   A9 20      LDA #$20
EA0C   91 D1      STA ($D1),Y
EA0E   88         DEY
EA0F   10 F6      BPL $EA07
EA11   60         RTS

EA12   EA         NOP


; set cursor flash timing and colour memory addresses

EA13   A8         TAY
EA14   A9 02      LDA #$02
EA16   85 CD      STA $CD
EA18   20 24 EA   JSR $EA24
EA1B   98         TYA


; put a char on the screen

EA1C   A4 D3      LDY $D3
EA1E   91 D1      STA ($D1),Y
EA20   8A         TXA
EA21   91 F3      STA ($F3),Y
EA23   60         RTS


; set colour memory adress parallel to screen

EA24   A5 D1      LDA $D1
EA26   85 F3      STA $F3
EA28   A5 D2      LDA $D2
EA2A   29 03      AND #$03
EA2C   09 D8      ORA #$D8
EA2E   85 F4      STA $F4
EA30   60         RTS


; normal IRQ interrupt

EA31   20 EA FF   JSR $FFEA   ; do clock
EA34   A5 CC      LDA $CC   ; flash cursor
EA36   D0 29      BNE $EA61
EA38   C6 CD      DEC $CD
EA3A   D0 25      BNE $EA61
EA3C   A9 14      LDA #$14
EA3E   85 CD      STA $CD
EA40   A4 D3      LDY $D3
EA42   46 CF      LSR $CF
EA44   AE 87 02   LDX $0287
EA47   B1 D1      LDA ($D1),Y
EA49   B0 11      BCS $EA5C
EA4B   E6 CF      INC $CF
EA4D   85 CE      STA $CE
EA4F   20 24 EA   JSR $EA24
EA52   B1 F3      LDA ($F3),Y
EA54   8D 87 02   STA $0287
EA57   AE 86 02   LDX $0286
EA5A   A5 CE      LDA $CE
EA5C   49 80      EOR #$80
EA5E   20 1C EA   JSR $EA1C   ; display cursor
EA61   A5 01      LDA $01   ; checl cassette sense
EA63   29 10      AND #$10
EA65   F0 0A      BEQ $EA71
EA67   A0 00      LDY #$00
EA69   84 C0      STY $C0
EA6B   A5 01      LDA $01
EA6D   09 20      ORA #$20
EA6F   D0 08      BNE $EA79
EA71   A5 C0      LDA $C0
EA73   D0 06      BNE $EA7B
EA75   A5 01      LDA $01
EA77   29 1F      AND #$1F
EA79   85 01      STA $01
EA7B   20 87 EA   JSR $EA87   ; scan keyboard
EA7E   AD 0D DC   LDA $DC0D
EA81   68         PLA
EA82   A8         TAY
EA83   68         PLA
EA84   AA         TAX
EA85   68         PLA
EA86   40         RTI


; scan keyboard

EA87   A9 00      LDA #$00
EA89   8D 8D 02   STA $028D
EA8C   A0 40      LDY #$40
EA8E   84 CB      STY $CB
EA90   8D 00 DC   STA $DC00
EA93   AE 01 DC   LDX $DC01
EA96   E0 FF      CPX #$FF
EA98   F0 61      BEQ $EAFB
EA9A   A8         TAY
EA9B   A9 81      LDA #$81
EA9D   85 F5      STA $F5
EA9F   A9 EB      LDA #$EB
EAA1   85 F6      STA $F6
EAA3   A9 FE      LDA #$FE
EAA5   8D 00 DC   STA $DC00
EAA8   A2 08      LDX #$08
EAAA   48         PHA
EAAB   AD 01 DC   LDA $DC01
EAAE   CD 01 DC   CMP $DC01
EAB1   D0 F8      BNE $EAAB
EAB3   4A         LSR
EAB4   B0 16      BCS $EACC
EAB6   48         PHA
EAB7   B1 F5      LDA ($F5),Y
EAB9   C9 05      CMP #$05
EABB   B0 0C      BCS $EAC9
EABD   C9 03      CMP #$03
EABF   F0 08      BEQ $EAC9
EAC1   0D 8D 02   ORA $028D
EAC4   8D 8D 02   STA $028D
EAC7   10 02      BPL $EACB
EAC9   84 CB      STY $CB
EACB   68         PLA
EACC   C8         INY
EACD   C0 41      CPY #$41
EACF   B0 0B      BCS $EADC
EAD1   CA         DEX
EAD2   D0 DF      BNE $EAB3
EAD4   38         SEC
EAD5   68         PLA
EAD6   2A         ROL
EAD7   8D 00 DC   STA $DC00
EADA   D0 CC      BNE $EAA8
EADC   68         PLA
EADD   6C 8F 02   JMP ($028F)

EAE0   A4 CB      LDY $CB

EAE2   B1 F5      LDA ($F5),Y
EAE4   AA         TAX
EAE5   C4 C5      CPY $C5
EAE7   F0 07      BEQ $EAF0
EAE9   A0 10      LDY #$10
EAEB   8C 8C 02   STY $028C
EAEE   D0 36      BNE $EB26
EAF0   29 7F      AND #$7F
EAF2   2C 8A 02   BIT $028A
EAF5   30 16      BMI $EB0D
EAF7   70 49      BVS $EB42
EAF9   C9 7F      CMP #$7F
EAFB   F0 29      BEQ $EB26
EAFD   C9 14      CMP #$14   ; delete
EAFF   F0 0C      BEQ $EB0D
EB01   C9 20      CMP #$20   ; space
EB03   F0 08      BEQ $EB0D
EB05   C9 1D      CMP #$1D   ; csr right/left
EB07   F0 04      BEQ $EB0D
EB09   C9 11      CMP #$11   ; csr up/down
EB0B   D0 35      BNE $EB42
EB0D   AC 8C 02   LDY $028C
EB10   F0 05      BEQ $EB17
EB12   CE 8C 02   DEC $028C
EB15   D0 2B      BNE $EB42
EB17   CE 8B 02   DEC $028B
EB1A   D0 26      BNE $EB42
EB1C   A0 04      LDY #$04
EB1E   8C 8B 02   STY $028B
EB21   A4 C6      LDY $C6
EB23   88         DEY
EB24   10 1C      BPL $EB42
EB26   A4 CB      LDY $CB
EB28   84 C5      STY $C5
EB2A   AC 8D 02   LDY $028D
EB2D   8C 8E 02   STY $028E
EB30   E0 FF      CPX #$FF
EB32   F0 0E      BEQ $EB42
EB34   8A         TXA
EB35   A6 C6      LDX $C6
EB37   EC 89 02   CPX $0289
EB3A   B0 06      BCS $EB42
EB3C   9D 77 02   STA $0277,X
EB3F   E8         INX
EB40   86 C6      STX $C6
EB42   A9 7F      LDA #$7F
EB44   8D 00 DC   STA $DC00
EB47   60         RTS

EB48   AD 8D 02   LDA $028D
EB4B   C9 03      CMP #$03
EB4D   D0 15      BNE $EB64
EB4F   CD 8E 02   CMP $028E
EB52   F0 EE      BEQ $EB42
EB54   AD 91 02   LDA $0291
EB57   30 1D      BMI $EB76
EB59   AD 18 D0   LDA $D018
EB5C   49 02      EOR #$02
EB5E   8D 18 D0   STA $D018
EB61   4C 76 EB   JMP $EB76


; select keyboard table

EB64   0A         ASL
EB65   C9 08      CMP #$08
EB67   90 02      BCC $EB6B
EB69   A9 06      LDA #$06
EB6B   AA         TAX
EB6C   BD 79 EB   LDA $EB79,X
EB6F   85 F5      STA $F5
EB71   BD 7A EB   LDA $EB7A,X
EB74   85 F6      STA $F6

EB76   4C E0 EA   JMP $EAE0


; table addresses

EB79   .WD $EB81   ; standard
EB7B   .WD $EBC2   ; shift
EB7D   .WD $EC03   ; commodore key
EB7F   .WD $EC78   ; control


; standard keyboard table

EB81   .BY $14,$0D,$1D,$88,$85,$86,$87,$11
EB89   .BY $33,$57,$41,$34,$5A,$53,$45,$01
EB91   .BY $35,$52,$44,$36,$43,$46,$54,$58
EB99   .BY $37,$59,$47,$38,$42,$48,$55,$56
EBA1   .BY $39,$49,$4A,$30,$4D,$4B,$4F,$4E
EBA9   .BY $2B,$50,$4C,$2D,$2E,$3A,$40,$2C
EBB1   .BY $5C,$2A,$3B,$13,$01,$3D,$5E,$2F
EBB9   .BY $31,$5F,$04,$32,$20,$02,$51,$03
EBC1   .BY $FF


; shift keyboard table

EBC2   .BY $94,$8D,$9D,$8C,$89,$8A,$8B,$91
EBCA   .BY $23,$D7,$C1,$24,$DA,$D3,$C5,$01
EBD2   .BY $25,$D2,$C4,$26,$C3,$C6,$D4,$D8
EBDA   .BY $27,$D9,$C7,$28,$C2,$C8,$D5,$D6
EBE2   .BY $29,$C9,$CA,$30,$CD,$CB,$CF,$CE
EBEA   .BY $DB,$D0,$CC,$DD,$3E,$5B,$BA,$3C
EBF2   .BY $A9,$C0,$5D,$93,$01,$3D,$DE,$3F
EBFA   .BY $21,$5F,$04,$22,$A0,$02,$D1,$83
EC02   .BY $FF


; commodore key keyboard table

EC03   .BY $94,$8D,$9D,$8C,$89,$8A,$8B,$91
EC0B   .BY $96,$B3,$B0,$97,$AD,$AE,$B1,$01
EC13   .BY $98,$B2,$AC,$99,$BC,$BB,$A3,$BD
EC1B   .BY $9A,$B7,$A5,$9B,$BF,$B4,$B8,$BE
EC23   .BY $29,$A2,$B5,$30,$A7,$A1,$B9,$AA
EC2B   .BY $A6,$AF,$B6,$DC,$3E,$5B,$A4,$3C
EC33   .BY $A8,$DF,$5D,$93,$01,$3D,$DE,$3F
EC3B   .BY $81,$5F,$04,$95,$A0,$02,$AB,$83
EC43   .BY $FF


; check for special petscii codes

EC44   C9 0E      CMP #$0E
EC46   D0 07      BNE $EC4F
EC48   AD 18 D0   LDA $D018
EC4B   09 02      ORA #$02
EC4D   D0 09      BNE $EC58

EC4F   C9 8E      CMP #$8E

EC51   D0 0B      BNE $EC5E
EC53   AD 18 D0   LDA $D018
EC56   29 FD      AND #$FD
EC58   8D 18 D0   STA $D018
EC5B   4C A8 E6   JMP $E6A8


; shift + commodore key check

EC5E   C9 08      CMP #$08
EC60   D0 07      BNE $EC69
EC62   A9 80      LDA #$80
EC64   0D 91 02   ORA $0291
EC67   30 09      BMI $EC72
EC69   C9 09      CMP #$09
EC6B   D0 EE      BNE $EC5B
EC6D   A9 7F      LDA #$7F
EC6F   2D 91 02   AND $0291
EC72   8D 91 02   STA $0291
EC75   4C A8 E6   JMP $E6A8


; control keyboard table

EC78   .BY $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
EC80   .BY $1C,$17,$01,$9F,$1A,$13,$05,$FF
EC88   .BY $9C,$12,$04,$1E,$03,$06,$14,$18
EC90   .BY $1F,$19,$07,$9E,$02,$08,$15,$16
EC98   .BY $12,$09,$0A,$92,$0D,$0B,$0F,$0E
ECA0   .BY $FF,$10,$0C,$FF,$FF,$1B,$00,$FF
ECA8   .BY $1C,$FF,$1D,$FF,$FF,$1F,$1E,$FF
ECB0   .BY $90,$06,$FF,$05,$FF,$FF,$11,$FF
ECB8   .BY $FF


; default values for VIC chip

ECB9   .BY $00,$00   ; sprite 1 x,y
ECBB   .BY $00,$00   ; sprite 2 x,y
ECBD   .BY $00,$00   ; sprite 3 x,y
ECBF   .BY $00,$00   ; sprite 4 x,y
ECC1   .BY $00,$00   ; sprite 5 x,y
ECC3   .BY $00,$00   ; sprite 6 x,y
ECC5   .BY $00,$00   ; sprite 7 x,y
ECC7   .BY $00,$00   ; sprite 8 x,y
ECC9   .BY $00
ECCA   .BY $9B
ECCB   .BY $37
ECCC   .BY $00
ECCD   .BY $00
ECCE   .BY $00
ECCF   .BY $08
ECD0   .BY $00   ; sprite Y expand
ECD1   .BY $14
ECD2   .BY $0F
ECD3   .BY $00
ECD4   .BY $00
ECD5   .BY $00   ; sprite multi-colour
ECD6   .BY $00   ; sprite X expand
ECD7   .BY $00
ECD8   .BY $00
ECD9   .BY $0E   ; boarder colour
ECDA   .BY $06   ; background colour
ECDB   .BY $01
ECDC   .BY $02
ECDD   .BY $03
ECDE   .BY $04
ECDF   .BY $00   ; sprite colour
ECE0   .BY $01   ; sprite colour
ECE1   .BY $02   ; sprite colour
ECE2   .BY $03   ; sprite colour
ECE3   .BY $04   ; sprite colour
ECE4   .BY $05   ; sprite colour
ECE5   .BY $06   ; sprite colour
ECE6   .BY $07   ; sprite colour


; load

ECE7   .BY $4C,$4F,$41,$44,$0D

; run

ECEC   .BY $52,$55,$4E,$0D


; low bytes of screen line addresses

ECF0   .BY $00,$28,$50,$78,$A0
ECF5   .BY $C8,$F0,$18,$40,$68
ECFA   .BY $90,$B8,$E0,$08,$30
ECFF   .BY $58,$80,$A8,$D0,$F8
ED04   .BY $20,$48,$70,$98,$C0


; send talk on serial bus

ED09   09 40      ORA #$40
ED0B   .BY $2C


; send listen on serial bus

ED0C   09 20      ORA #$20
ED0E   20 A4 F0   JSR $F0A4

ED11   48         PHA

ED12   24 94      BIT $94
ED14   10 0A      BPL $ED20
ED16   38         SEC
ED17   66 A3      ROR $A3
ED19   20 40 ED   JSR $ED40
ED1C   46 94      LSR $94
ED1E   46 A3      LSR $A3
ED20   68         PLA
ED21   85 95      STA $95
ED23   78         SEI
ED24   20 97 EE   JSR $EE97
ED27   C9 3F      CMP #$3F
ED29   D0 03      BNE $ED2E
ED2B   20 85 EE   JSR $EE85
ED2E   AD 00 DD   LDA $DD00
ED31   09 08      ORA #$08
ED33   8D 00 DD   STA $DD00

ED36   78         SEI

ED37   20 8E EE   JSR $EE8E
ED3A   20 97 EE   JSR $EE97
ED3D   20 B3 EE   JSR $EEB3


; send byte from $95 on serial bus

ED40   78         SEI
ED41   20 97 EE   JSR $EE97
ED44   20 A9 EE   JSR $EEA9
ED47   B0 64      BCS $EDAD
ED49   20 85 EE   JSR $EE85
ED4C   24 A3      BIT $A3
ED4E   10 0A      BPL $ED5A
ED50   20 A9 EE   JSR $EEA9
ED53   90 FB      BCC $ED50
ED55   20 A9 EE   JSR $EEA9
ED58   B0 FB      BCS $ED55
ED5A   20 A9 EE   JSR $EEA9
ED5D   90 FB      BCC $ED5A
ED5F   20 8E EE   JSR $EE8E
ED62   A9 08      LDA #$08
ED64   85 A5      STA $A5
ED66   AD 00 DD   LDA $DD00
ED69   CD 00 DD   CMP $DD00
ED6C   D0 F8      BNE $ED66
ED6E   0A         ASL
ED6F   90 3F      BCC $EDB0
ED71   66 95      ROR $95
ED73   B0 05      BCS $ED7A
ED75   20 A0 EE   JSR $EEA0
ED78   D0 03      BNE $ED7D
ED7A   20 97 EE   JSR $EE97
ED7D   20 85 EE   JSR $EE85
ED80   EA         NOP
ED81   EA         NOP
ED82   EA         NOP
ED83   EA         NOP
ED84   AD 00 DD   LDA $DD00
ED87   29 DF      AND #$DF
ED89   09 10      ORA #$10
ED8B   8D 00 DD   STA $DD00
ED8E   C6 A5      DEC $A5
ED90   D0 D4      BNE $ED66
ED92   A9 04      LDA #$04
ED94   8D 07 DC   STA $DC07
ED97   A9 19      LDA #$19
ED99   8D 0F DC   STA $DC0F
ED9C   AD 0D DC   LDA $DC0D
ED9F   AD 0D DC   LDA $DC0D
EDA2   29 02      AND #$02
EDA4   D0 0A      BNE $EDB0
EDA6   20 A9 EE   JSR $EEA9
EDA9   B0 F4      BCS $ED9F
EDAB   58         CLI
EDAC   60         RTS

EDAD   A9 80      LDA #$80
EDAF   .BY $2C
EDB0   A9 03      LDA #$03

EDB2   20 1C FE   JSR $FE1C

EDB5   58         CLI
EDB6   18         CLC
EDB7   90 4A      BCC $EE03


; send secondary address (listen) on serial bus

EDB9   85 95      STA $95
EDBB   20 36 ED   JSR $ED36

EDBE   AD 00 DD   LDA $DD00

EDC1   29 F7      AND #$F7
EDC3   8D 00 DD   STA $DD00
EDC6   60         RTS


; send secondary address (talk) on serial bus

EDC7   85 95      STA $95
EDC9   20 36 ED   JSR $ED36

EDCC   78         SEI

EDCD   20 A0 EE   JSR $EEA0
EDD0   20 BE ED   JSR $EDBE
EDD3   20 85 EE   JSR $EE85
EDD6   20 A9 EE   JSR $EEA9
EDD9   30 FB      BMI $EDD6
EDDB   58         CLI
EDDC   60         RTS


; output byte on serial bus

EDDD   24 94      BIT $94
EDDF   30 05      BMI $EDE6
EDE1   38         SEC
EDE2   66 94      ROR $94
EDE4   D0 05      BNE $EDEB
EDE6   48         PHA
EDE7   20 40 ED   JSR $ED40
EDEA   68         PLA
EDEB   85 95      STA $95
EDED   18         CLC
EDEE   60         RTS


; send talk on serial bus

EDEF   78         SEI
EDF0   20 8E EE   JSR $EE8E
EDF3   AD 00 DD   LDA $DD00
EDF6   09 08      ORA #$08
EDF8   8D 00 DD   STA $DD00
EDFB   A9 5F      LDA #$5F
EDFD   .BY $2C


; send unlisten on serial bus

EDFE   A9 3F      LDA #$3F
EE00   20 11 ED   JSR $ED11
EE03   20 BE ED   JSR $EDBE

EE06   8A         TXA

EE07   A2 0A      LDX #$0A
EE09   CA         DEX
EE0A   D0 FD      BNE $EE09
EE0C   AA         TAX
EE0D   20 85 EE   JSR $EE85
EE10   4C 97 EE   JMP $EE97


; input byte on serial bus

EE13   78         SEI
EE14   A9 00      LDA #$00
EE16   85 A5      STA $A5
EE18   20 85 EE   JSR $EE85
EE1B   20 A9 EE   JSR $EEA9
EE1E   10 FB      BPL $EE1B
EE20   A9 01      LDA #$01
EE22   8D 07 DC   STA $DC07
EE25   A9 19      LDA #$19
EE27   8D 0F DC   STA $DC0F
EE2A   20 97 EE   JSR $EE97
EE2D   AD 0D DC   LDA $DC0D
EE30   AD 0D DC   LDA $DC0D
EE33   29 02      AND #$02
EE35   D0 07      BNE $EE3E
EE37   20 A9 EE   JSR $EEA9
EE3A   30 F4      BMI $EE30
EE3C   10 18      BPL $EE56
EE3E   A5 A5      LDA $A5
EE40   F0 05      BEQ $EE47
EE42   A9 02      LDA #$02
EE44   4C B2 ED   JMP $EDB2

EE47   20 A0 EE   JSR $EEA0
EE4A   20 85 EE   JSR $EE85
EE4D   A9 40      LDA #$40
EE4F   20 1C FE   JSR $FE1C
EE52   E6 A5      INC $A5
EE54   D0 CA      BNE $EE20
EE56   A9 08      LDA #$08
EE58   85 A5      STA $A5
EE5A   AD 00 DD   LDA $DD00
EE5D   CD 00 DD   CMP $DD00
EE60   D0 F8      BNE $EE5A
EE62   0A         ASL
EE63   10 F5      BPL $EE5A
EE65   66 A4      ROR $A4
EE67   AD 00 DD   LDA $DD00
EE6A   CD 00 DD   CMP $DD00
EE6D   D0 F8      BNE $EE67
EE6F   0A         ASL
EE70   30 F5      BMI $EE67
EE72   C6 A5      DEC $A5
EE74   D0 E4      BNE $EE5A
EE76   20 A0 EE   JSR $EEA0
EE79   24 90      BIT $90
EE7B   50 03      BVC $EE80
EE7D   20 06 EE   JSR $EE06
EE80   A5 A4      LDA $A4
EE82   58         CLI
EE83   18         CLC
EE84   60         RTS


; set serial clock line low

EE85   AD 00 DD   LDA $DD00
EE88   29 EF      AND #$EF
EE8A   8D 00 DD   STA $DD00
EE8D   60         RTS


; set serial clock line high

EE8E   AD 00 DD   LDA $DD00
EE91   09 10      ORA #$10
EE93   8D 00 DD   STA $DD00
EE96   60         RTS


; set serial data line low

EE97   AD 00 DD   LDA $DD00
EE9A   29 DF      AND #$DF
EE9C   8D 00 DD   STA $DD00
EE9F   60         RTS


; set serial data line high

EEA0   AD 00 DD   LDA $DD00
EEA3   09 20      ORA #$20
EEA5   8D 00 DD   STA $DD00
EEA8   60         RTS


EEA9   AD 00 DD   LDA $DD00

EEAC   CD 00 DD   CMP $DD00
EEAF   D0 F8      BNE $EEA9
EEB1   0A         ASL
EEB2   60         RTS


; delay 1 millisecond

EEB3   8A         TXA
EEB4   A2 B8      LDX #$B8
EEB6   CA         DEX
EEB7   D0 FD      BNE $EEB6
EEB9   AA         TAX
EEBA   60         RTS


; set next bit to transmit on RS-232

EEBB   A5 B4      LDA $B4
EEBD   F0 47      BEQ $EF06
EEBF   30 3F      BMI $EF00
EEC1   46 B6      LSR $B6
EEC3   A2 00      LDX #$00
EEC5   90 01      BCC $EEC8
EEC7   CA         DEX
EEC8   8A         TXA
EEC9   45 BD      EOR $BD
EECB   85 BD      STA $BD
EECD   C6 B4      DEC $B4
EECF   F0 06      BEQ $EED7
EED1   8A         TXA
EED2   29 04      AND #$04
EED4   85 B5      STA $B5
EED6   60         RTS

EED7   A9 20      LDA #$20
EED9   2C 94 02   BIT $0294
EEDC   F0 14      BEQ $EEF2
EEDE   30 1C      BMI $EEFC
EEE0   70 14      BVS $EEF6
EEE2   A5 BD      LDA $BD
EEE4   D0 01      BNE $EEE7
EEE6   CA         DEX
EEE7   C6 B4      DEC $B4
EEE9   AD 93 02   LDA $0293
EEEC   10 E3      BPL $EED1
EEEE   C6 B4      DEC $B4
EEF0   D0 DF      BNE $EED1
EEF2   E6 B4      INC $B4
EEF4   D0 F0      BNE $EEE6
EEF6   A5 BD      LDA $BD
EEF8   F0 ED      BEQ $EEE7
EEFA   D0 EA      BNE $EEE6
EEFC   70 E9      BVS $EEE7
EEFE   50 E6      BVC $EEE6
EF00   E6 B4      INC $B4
EF02   A2 FF      LDX #$FF
EF04   D0 CB      BNE $EED1

EF06   AD 94 02   LDA $0294

EF09   4A         LSR
EF0A   90 07      BCC $EF13
EF0C   2C 01 DD   BIT $DD01
EF0F   10 1D      BPL $EF2E
EF11   50 1E      BVC $EF31
EF13   A9 00      LDA #$00
EF15   85 BD      STA $BD
EF17   85 B5      STA $B5
EF19   AE 98 02   LDX $0298
EF1C   86 B4      STX $B4
EF1E   AC 9D 02   LDY $029D
EF21   CC 9E 02   CPY $029E
EF24   F0 13      BEQ $EF39
EF26   B1 F9      LDA ($F9),Y
EF28   85 B6      STA $B6
EF2A   EE 9D 02   INC $029D
EF2D   60         RTS


; handle RS-232 errors

EF2E   A9 40      LDA #$40
EF30   .BY $2C
EF31   A9 10      LDA #$10
EF33   0D 97 02   ORA $0297
EF36   8D 97 02   STA $0297
EF39   A9 01      LDA #$01

EF3B   8D 0D DD   STA $DD0D

EF3E   4D A1 02   EOR $02A1
EF41   09 80      ORA #$80
EF43   8D A1 02   STA $02A1
EF46   8D 0D DD   STA $DD0D
EF49   60         RTS


; check control register

EF4A   A2 09      LDX #$09
EF4C   A9 20      LDA #$20
EF4E   2C 93 02   BIT $0293
EF51   F0 01      BEQ $EF54
EF53   CA         DEX
EF54   50 02      BVC $EF58
EF56   CA         DEX
EF57   CA         DEX
EF58   60         RTS


; add bit input on RS-232 bus to word being input

EF59   A6 A9      LDX $A9
EF5B   D0 33      BNE $EF90
EF5D   C6 A8      DEC $A8
EF5F   F0 36      BEQ $EF97
EF61   30 0D      BMI $EF70
EF63   A5 A7      LDA $A7
EF65   45 AB      EOR $AB
EF67   85 AB      STA $AB
EF69   46 A7      LSR $A7
EF6B   66 AA      ROR $AA
EF6D   60         RTS


; handle end of word for RS-232 input

EF6E   C6 A8      DEC $A8
EF70   A5 A7      LDA $A7
EF72   F0 67      BEQ $EFDB
EF74   AD 93 02   LDA $0293
EF77   0A         ASL
EF78   A9 01      LDA #$01
EF7A   65 A8      ADC $A8
EF7C   D0 EF      BNE $EF6D


; enable byte reception

EF7E   A9 90      LDA #$90
EF80   8D 0D DD   STA $DD0D
EF83   0D A1 02   ORA $02A1
EF86   8D A1 02   STA $02A1
EF89   85 A9      STA $A9
EF8B   A9 02      LDA #$02
EF8D   4C 3B EF   JMP $EF3B


; receiver start bit test

EF90   A5 A7      LDA $A7
EF92   D0 EA      BNE $EF7E
EF94   4C D3 E4   JMP $E4D3


; put received data into RS-232 buffer

EF97   AC 9B 02   LDY $029B
EF9A   C8         INY
EF9B   CC 9C 02   CPY $029C
EF9E   F0 2A      BEQ $EFCA
EFA0   8C 9B 02   STY $029B
EFA3   88         DEY
EFA4   A5 AA      LDA $AA
EFA6   AE 98 02   LDX $0298
EFA9   E0 09      CPX #$09
EFAB   F0 04      BEQ $EFB1
EFAD   4A         LSR
EFAE   E8         INX
EFAF   D0 F8      BNE $EFA9
EFB1   91 F7      STA ($F7),Y
EFB3   A9 20      LDA #$20
EFB5   2C 94 02   BIT $0294
EFB8   F0 B4      BEQ $EF6E
EFBA   30 B1      BMI $EF6D
EFBC   A5 A7      LDA $A7
EFBE   45 AB      EOR $AB
EFC0   F0 03      BEQ $EFC5
EFC2   70 A9      BVS $EF6D
EFC4   .BY $2C
EFC5   50 A6      BVC $EF6D
EFC7   A9 01      LDA #$01
EFC9   .BY $2C
EFCA   A9 04      LDA #$04
EFCC   .BY $2C
EFCD   A9 80      LDA #$80
EFCF   .BY $2C
EFD0   A9 02      LDA #$02
EFD2   0D 97 02   ORA $0297
EFD5   8D 97 02   STA $0297
EFD8   4C 7E EF   JMP $EF7E

EFDB   A5 AA      LDA $AA
EFDD   D0 F1      BNE $EFD0
EFDF   F0 EC      BEQ $EFCD


; output of RS-232 device

EFE1   85 9A      STA $9A
EFE3   AD 94 02   LDA $0294
EFE6   4A         LSR
EFE7   90 29      BCC $F012
EFE9   A9 02      LDA #$02
EFEB   2C 01 DD   BIT $DD01
EFEE   10 1D      BPL $F00D
EFF0   D0 20      BNE $F012
EFF2   AD A1 02   LDA $02A1
EFF5   29 02      AND #$02
EFF7   D0 F9      BNE $EFF2
EFF9   2C 01 DD   BIT $DD01
EFFC   70 FB      BVS $EFF9
EFFE   AD 01 DD   LDA $DD01
F001   09 02      ORA #$02
F003   8D 01 DD   STA $DD01
F006   2C 01 DD   BIT $DD01
F009   70 07      BVS $F012
F00B   30 F9      BMI $F006

F00D   A9 40      LDA #$40

F00F   8D 97 02   STA $0297
F012   18         CLC
F013   60         RTS


; buffer char to output on RS-232

F014   20 28 F0   JSR $F028

F017   AC 9E 02   LDY $029E

F01A   C8         INY
F01B   CC 9D 02   CPY $029D
F01E   F0 F4      BEQ $F014
F020   8C 9E 02   STY $029E
F023   88         DEY
F024   A5 9E      LDA $9E
F026   91 F9      STA ($F9),Y

F028   AD A1 02   LDA $02A1

F02B   4A         LSR
F02C   B0 1E      BCS $F04C
F02E   A9 10      LDA #$10
F030   8D 0E DD   STA $DD0E
F033   AD 99 02   LDA $0299
F036   8D 04 DD   STA $DD04
F039   AD 9A 02   LDA $029A
F03C   8D 05 DD   STA $DD05
F03F   A9 81      LDA #$81
F041   20 3B EF   JSR $EF3B
F044   20 06 EF   JSR $EF06
F047   A9 11      LDA #$11
F049   8D 0E DD   STA $DD0E
F04C   60         RTS


; initalise RS-232 input

F04D   85 99      STA $99
F04F   AD 94 02   LDA $0294
F052   4A         LSR
F053   90 28      BCC $F07D
F055   29 08      AND #$08
F057   F0 24      BEQ $F07D
F059   A9 02      LDA #$02
F05B   2C 01 DD   BIT $DD01
F05E   10 AD      BPL $F00D
F060   F0 22      BEQ $F084
F062   AD A1 02   LDA $02A1
F065   4A         LSR
F066   B0 FA      BCS $F062
F068   AD 01 DD   LDA $DD01
F06B   29 FD      AND #$FD
F06D   8D 01 DD   STA $DD01
F070   AD 01 DD   LDA $DD01
F073   29 04      AND #$04
F075   F0 F9      BEQ $F070
F077   A9 90      LDA #$90
F079   18         CLC
F07A   4C 3B EF   JMP $EF3B

F07D   AD A1 02   LDA $02A1
F080   29 12      AND #$12
F082   F0 F3      BEQ $F077
F084   18         CLC
F085   60         RTS


; get next character from RS-232 input buffer

F086   AD 97 02   LDA $0297
F089   AC 9C 02   LDY $029C
F08C   CC 9B 02   CPY $029B
F08F   F0 0B      BEQ $F09C
F091   29 F7      AND #$F7
F093   8D 97 02   STA $0297
F096   B1 F7      LDA ($F7),Y
F098   EE 9C 02   INC $029C
F09B   60         RTS

F09C   09 08      ORA #$08
F09E   8D 97 02   STA $0297
F0A1   A9 00      LDA #$00
F0A3   60         RTS


; protect serial/casette routine from RS-232 NMI's

F0A4   48         PHA
F0A5   AD A1 02   LDA $02A1
F0A8   F0 11      BEQ $F0BB
F0AA   AD A1 02   LDA $02A1
F0AD   29 03      AND #$03
F0AF   D0 F9      BNE $F0AA
F0B1   A9 10      LDA #$10
F0B3   8D 0D DD   STA $DD0D
F0B6   A9 00      LDA #$00
F0B8   8D A1 02   STA $02A1
F0BB   68         PLA
F0BC   60         RTS


; kernal I/O messages
; I/O error

F0BD   .BY $0D
F0BE   .BY $49,$2F,$4F
F0C1   .BY $20,$45,$52,$52,$4F,$52
F0C7   .BY $20,$A3

; searching for

F0C9   .BY $0D
F0CA   .BY $53,$45,$41,$52,$43,$48,$49,$4E,$47,$A0
F0D4   .BY $46,$4F,$52,$A0

; press play on tape

F0D8   .BY $0D
F0D9   .BY $50,$52,$45,$53,$53
F0DE   .BY $20,$50,$4C,$41,$59
F0E3   .BY $20,$4F,$4E
F0E6   .BY $20,$54,$41,$50,$C5

; press record and play on tape

F0EB   .BY $50,$52,$45,$53,$53
F0F0   .BY $20,$52,$45,$43,$4F,$52,$44
F0F7   .BY $20,$26
F0F9   .BY $20,$50,$4C,$41,$59
F0FE   .BY $20,$4F,$4E
F101   .BY $20,$54,$41,$50,$C5

; loading

F106   .BY $0D
F107   .BY $4C,$4F,$41,$44,$49,$4E,$C7

; saving

F10E   .BY $0D
F10F   .BY $53,$41,$56,$49,$4E,$47,$A0

; verifying

F116   .BY $0D
F117   .BY $56,$45,$52,$49,$46,$59,$49,$4E,$C7

; found

F120   .BY $0D
F121   .BY $46,$4F,$55,$4E,$44,$A0

; ok

F127   .BY $0D
F128   .BY $4F,$4B,$8D


; print kernal message indexed by Y

F12B   24 9D      BIT $9D
F12D   10 0D      BPL $F13C

F12F   B9 BD F0   LDA $F0BD,Y

F132   08         PHP
F133   29 7F      AND #$7F
F135   20 D2 FF   JSR $FFD2
F138   C8         INY
F139   28         PLP
F13A   10 F3      BPL $F12F
F13C   18         CLC
F13D   60         RTS


; get a character

F13E   A5 99      LDA $99
F140   D0 08      BNE $F14A
F142   A5 C6      LDA $C6
F144   F0 0F      BEQ $F155
F146   78         SEI
F147   4C B4 E5   JMP $E5B4

F14A   C9 02      CMP #$02
F14C   D0 18      BNE $F166

F14E   84 97      STY $97

F150   20 86 F0   JSR $F086
F153   A4 97      LDY $97
F155   18         CLC
F156   60         RTS


; input a character

F157   A5 99      LDA $99
F159   D0 0B      BNE $F166
F15B   A5 D3      LDA $D3
F15D   85 CA      STA $CA
F15F   A5 D6      LDA $D6
F161   85 C9      STA $C9
F163   4C 32 E6   JMP $E632

F166   C9 03      CMP #$03
F168   D0 09      BNE $F173
F16A   85 D0      STA $D0
F16C   A5 D5      LDA $D5
F16E   85 C8      STA $C8
F170   4C 32 E6   JMP $E632

F173   B0 38      BCS $F1AD
F175   C9 02      CMP #$02
F177   F0 3F      BEQ $F1B8
F179   86 97      STX $97
F17B   20 99 F1   JSR $F199
F17E   B0 16      BCS $F196
F180   48         PHA
F181   20 99 F1   JSR $F199
F184   B0 0D      BCS $F193
F186   D0 05      BNE $F18D
F188   A9 40      LDA #$40
F18A   20 1C FE   JSR $FE1C
F18D   C6 A6      DEC $A6
F18F   A6 97      LDX $97
F191   68         PLA
F192   60         RTS

F193   AA         TAX
F194   68         PLA
F195   8A         TXA
F196   A6 97      LDX $97
F198   60         RTS


; read a byte from cassette buffer

F199   20 0D F8   JSR $F80D
F19C   D0 0B      BNE $F1A9
F19E   20 41 F8   JSR $F841
F1A1   B0 11      BCS $F1B4
F1A3   A9 00      LDA #$00
F1A5   85 A6      STA $A6
F1A7   F0 F0      BEQ $F199
F1A9   B1 B2      LDA ($B2),Y
F1AB   18         CLC
F1AC   60         RTS

F1AD   A5 90      LDA $90
F1AF   F0 04      BEQ $F1B5
F1B1   A9 0D      LDA #$0D
F1B3   18         CLC
F1B4   60         RTS


; read a byte from serial bus

F1B5   4C 13 EE   JMP $EE13


; read a byte from RS-232 bus

F1B8   20 4E F1   JSR $F14E
F1BB   B0 F7      BCS $F1B4
F1BD   C9 00      CMP #$00
F1BF   D0 F2      BNE $F1B3
F1C1   AD 97 02   LDA $0297
F1C4   29 60      AND #$60
F1C6   D0 E9      BNE $F1B1
F1C8   F0 EE      BEQ $F1B8


; output a character

F1CA   48         PHA
F1CB   A5 9A      LDA $9A
F1CD   C9 03      CMP #$03
F1CF   D0 04      BNE $F1D5
F1D1   68         PLA
F1D2   4C 16 E7   JMP $E716

F1D5   90 04      BCC $F1DB
F1D7   68         PLA
F1D8   4C DD ED   JMP $EDDD

F1DB   4A         LSR
F1DC   68         PLA

F1DD   85 9E      STA $9E

F1DF   8A         TXA
F1E0   48         PHA
F1E1   98         TYA
F1E2   48         PHA
F1E3   90 23      BCC $F208
F1E5   20 0D F8   JSR $F80D
F1E8   D0 0E      BNE $F1F8
F1EA   20 64 F8   JSR $F864
F1ED   B0 0E      BCS $F1FD
F1EF   A9 02      LDA #$02
F1F1   A0 00      LDY #$00
F1F3   91 B2      STA ($B2),Y
F1F5   C8         INY
F1F6   84 A6      STY $A6
F1F8   A5 9E      LDA $9E
F1FA   91 B2      STA ($B2),Y

F1FC   18         CLC

F1FD   68         PLA
F1FE   A8         TAY
F1FF   68         PLA
F200   AA         TAX
F201   A5 9E      LDA $9E
F203   90 02      BCC $F207
F205   A9 00      LDA #$00
F207   60         RTS

F208   20 17 F0   JSR $F017
F20B   4C FC F1   JMP $F1FC


; set input device

F20E   20 0F F3   JSR $F30F
F211   F0 03      BEQ $F216
F213   4C 01 F7   JMP $F701

F216   20 1F F3   JSR $F31F
F219   A5 BA      LDA $BA
F21B   F0 16      BEQ $F233
F21D   C9 03      CMP #$03
F21F   F0 12      BEQ $F233
F221   B0 14      BCS $F237
F223   C9 02      CMP #$02
F225   D0 03      BNE $F22A
F227   4C 4D F0   JMP $F04D

F22A   A6 B9      LDX $B9
F22C   E0 60      CPX #$60
F22E   F0 03      BEQ $F233
F230   4C 0A F7   JMP $F70A

F233   85 99      STA $99
F235   18         CLC
F236   60         RTS


; set serial bus input device

F237   AA         TAX
F238   20 09 ED   JSR $ED09
F23B   A5 B9      LDA $B9
F23D   10 06      BPL $F245
F23F   20 CC ED   JSR $EDCC
F242   4C 48 F2   JMP $F248

F245   20 C7 ED   JSR $EDC7

F248   8A         TXA

F249   24 90      BIT $90
F24B   10 E6      BPL $F233
F24D   4C 07 F7   JMP $F707


; set output device

F250   20 0F F3   JSR $F30F
F253   F0 03      BEQ $F258
F255   4C 01 F7   JMP $F701

F258   20 1F F3   JSR $F31F
F25B   A5 BA      LDA $BA
F25D   D0 03      BNE $F262
F25F   4C 0D F7   JMP $F70D

F262   C9 03      CMP #$03
F264   F0 0F      BEQ $F275
F266   B0 11      BCS $F279
F268   C9 02      CMP #$02
F26A   D0 03      BNE $F26F
F26C   4C E1 EF   JMP $EFE1

F26F   A6 B9      LDX $B9
F271   E0 60      CPX #$60
F273   F0 EA      BEQ $F25F
F275   85 9A      STA $9A
F277   18         CLC
F278   60         RTS


; set serial bus output device

F279   AA         TAX
F27A   20 0C ED   JSR $ED0C
F27D   A5 B9      LDA $B9
F27F   10 05      BPL $F286
F281   20 BE ED   JSR $EDBE
F284   D0 03      BNE $F289
F286   20 B9 ED   JSR $EDB9
F289   8A         TXA
F28A   24 90      BIT $90
F28C   10 E7      BPL $F275
F28E   4C 07 F7   JMP $F707


; close a file

F291   20 14 F3   JSR $F314
F294   F0 02      BEQ $F298
F296   18         CLC
F297   60         RTS

F298   20 1F F3   JSR $F31F
F29B   8A         TXA
F29C   48         PHA
F29D   A5 BA      LDA $BA
F29F   F0 50      BEQ $F2F1
F2A1   C9 03      CMP #$03
F2A3   F0 4C      BEQ $F2F1
F2A5   B0 47      BCS $F2EE
F2A7   C9 02      CMP #$02
F2A9   D0 1D      BNE $F2C8
F2AB   68         PLA
F2AC   20 F2 F2   JSR $F2F2
F2AF   20 83 F4   JSR $F483
F2B2   20 27 FE   JSR $FE27
F2B5   A5 F8      LDA $F8
F2B7   F0 01      BEQ $F2BA
F2B9   C8         INY
F2BA   A5 FA      LDA $FA
F2BC   F0 01      BEQ $F2BF
F2BE   C8         INY
F2BF   A9 00      LDA #$00
F2C1   85 F8      STA $F8
F2C3   85 FA      STA $FA
F2C5   4C 7D F4   JMP $F47D


; close cassette device

F2C8   A5 B9      LDA $B9
F2CA   29 0F      AND #$0F
F2CC   F0 23      BEQ $F2F1
F2CE   20 D0 F7   JSR $F7D0
F2D1   A9 00      LDA #$00
F2D3   38         SEC
F2D4   20 DD F1   JSR $F1DD
F2D7   20 64 F8   JSR $F864
F2DA   90 04      BCC $F2E0
F2DC   68         PLA
F2DD   A9 00      LDA #$00
F2DF   60         RTS

F2E0   A5 B9      LDA $B9
F2E2   C9 62      CMP #$62
F2E4   D0 0B      BNE $F2F1
F2E6   A9 05      LDA #$05
F2E8   20 6A F7   JSR $F76A
F2EB   4C F1 F2   JMP $F2F1


; close serial bus device

F2EE   20 42 F6   JSR $F642

F2F1   68         PLA


; reorganise file tables

F2F2   AA         TAX
F2F3   C6 98      DEC $98
F2F5   E4 98      CPX $98
F2F7   F0 14      BEQ $F30D
F2F9   A4 98      LDY $98
F2FB   B9 59 02   LDA $0259,Y
F2FE   9D 59 02   STA $0259,X
F301   B9 63 02   LDA $0263,Y
F304   9D 63 02   STA $0263,X
F307   B9 6D 02   LDA $026D,Y
F30A   9D 6D 02   STA $026D,X
F30D   18         CLC
F30E   60         RTS


; check X against logical file table

F30F   A9 00      LDA #$00
F311   85 90      STA $90
F313   8A         TXA

F314   A6 98      LDX $98

F316   CA         DEX
F317   30 15      BMI $F32E
F319   DD 59 02   CMP $0259,X
F31C   D0 F8      BNE $F316
F31E   60         RTS


; set file parameters depending on X

F31F   BD 59 02   LDA $0259,X
F322   85 B8      STA $B8
F324   BD 63 02   LDA $0263,X
F327   85 BA      STA $BA
F329   BD 6D 02   LDA $026D,X
F32C   85 B9      STA $B9
F32E   60         RTS


; close all files

F32F   A9 00      LDA #$00
F331   85 98      STA $98


; restore I/O to default devices

F333   A2 03      LDX #$03
F335   E4 9A      CPX $9A
F337   B0 03      BCS $F33C
F339   20 FE ED   JSR $EDFE
F33C   E4 99      CPX $99
F33E   B0 03      BCS $F343
F340   20 EF ED   JSR $EDEF
F343   86 9A      STX $9A
F345   A9 00      LDA #$00
F347   85 99      STA $99
F349   60         RTS


; open a file

F34A   A6 B8      LDX $B8
F34C   D0 03      BNE $F351
F34E   4C 0A F7   JMP $F70A

F351   20 0F F3   JSR $F30F
F354   D0 03      BNE $F359
F356   4C FE F6   JMP $F6FE

F359   A6 98      LDX $98
F35B   E0 0A      CPX #$0A
F35D   90 03      BCC $F362
F35F   4C FB F6   JMP $F6FB

F362   E6 98      INC $98
F364   A5 B8      LDA $B8
F366   9D 59 02   STA $0259,X
F369   A5 B9      LDA $B9
F36B   09 60      ORA #$60
F36D   85 B9      STA $B9
F36F   9D 6D 02   STA $026D,X
F372   A5 BA      LDA $BA
F374   9D 63 02   STA $0263,X
F377   F0 5A      BEQ $F3D3
F379   C9 03      CMP #$03
F37B   F0 56      BEQ $F3D3
F37D   90 05      BCC $F384
F37F   20 D5 F3   JSR $F3D5
F382   90 4F      BCC $F3D3
F384   C9 02      CMP #$02
F386   D0 03      BNE $F38B
F388   4C 09 F4   JMP $F409


; open for cassette device

F38B   20 D0 F7   JSR $F7D0
F38E   B0 03      BCS $F393
F390   4C 13 F7   JMP $F713

F393   A5 B9      LDA $B9
F395   29 0F      AND #$0F
F397   D0 1F      BNE $F3B8
F399   20 17 F8   JSR $F817
F39C   B0 36      BCS $F3D4
F39E   20 AF F5   JSR $F5AF
F3A1   A5 B7      LDA $B7
F3A3   F0 0A      BEQ $F3AF
F3A5   20 EA F7   JSR $F7EA
F3A8   90 18      BCC $F3C2
F3AA   F0 28      BEQ $F3D4
F3AC   4C 04 F7   JMP $F704

F3AF   20 2C F7   JSR $F72C
F3B2   F0 20      BEQ $F3D4
F3B4   90 0C      BCC $F3C2
F3B6   B0 F4      BCS $F3AC


; open cassette for input

F3B8   20 38 F8   JSR $F838
F3BB   B0 17      BCS $F3D4
F3BD   A9 04      LDA #$04
F3BF   20 6A F7   JSR $F76A
F3C2   A9 BF      LDA #$BF
F3C4   A4 B9      LDY $B9
F3C6   C0 60      CPY #$60
F3C8   F0 07      BEQ $F3D1
F3CA   A0 00      LDY #$00
F3CC   A9 02      LDA #$02
F3CE   91 B2      STA ($B2),Y
F3D0   98         TYA
F3D1   85 A6      STA $A6
F3D3   18         CLC
F3D4   60         RTS


; open for serial bus devices

F3D5   A5 B9      LDA $B9
F3D7   30 FA      BMI $F3D3
F3D9   A4 B7      LDY $B7
F3DB   F0 F6      BEQ $F3D3
F3DD   A9 00      LDA #$00
F3DF   85 90      STA $90
F3E1   A5 BA      LDA $BA
F3E3   20 0C ED   JSR $ED0C
F3E6   A5 B9      LDA $B9
F3E8   09 F0      ORA #$F0
F3EA   20 B9 ED   JSR $EDB9
F3ED   A5 90      LDA $90
F3EF   10 05      BPL $F3F6
F3F1   68         PLA
F3F2   68         PLA
F3F3   4C 07 F7   JMP $F707

F3F6   A5 B7      LDA $B7
F3F8   F0 0C      BEQ $F406
F3FA   A0 00      LDY #$00
F3FC   B1 BB      LDA ($BB),Y
F3FE   20 DD ED   JSR $EDDD
F401   C8         INY
F402   C4 B7      CPY $B7
F404   D0 F6      BNE $F3FC
F406   4C 54 F6   JMP $F654


; open RS-232 device

F409   20 83 F4   JSR $F483
F40C   8C 97 02   STY $0297
F40F   C4 B7      CPY $B7
F411   F0 0A      BEQ $F41D
F413   B1 BB      LDA ($BB),Y
F415   99 93 02   STA $0293,Y
F418   C8         INY
F419   C0 04      CPY #$04
F41B   D0 F2      BNE $F40F
F41D   20 4A EF   JSR $EF4A
F420   8E 98 02   STX $0298
F423   AD 93 02   LDA $0293
F426   29 0F      AND #$0F
F428   F0 1C      BEQ $F446
F42A   0A         ASL
F42B   AA         TAX
F42C   AD A6 02   LDA $02A6
F42F   D0 09      BNE $F43A
F431   BC C1 FE   LDY $FEC1,X
F434   BD C0 FE   LDA $FEC0,X
F437   4C 40 F4   JMP $F440
F43A   BC EB E4   LDY $E4EB,X
F43D   BD EA E4   LDA $E4EA,X

F440   8C 96 02   STY $0296

F443   8D 95 02   STA $0295
F446   AD 95 02   LDA $0295
F449   0A         ASL
F44A   20 2E FF   JSR $FF2E
F44D   AD 94 02   LDA $0294
F450   4A         LSR
F451   90 09      BCC $F45C
F453   AD 01 DD   LDA $DD01
F456   0A         ASL
F457   B0 03      BCS $F45C
F459   20 0D F0   JSR $F00D
F45C   AD 9B 02   LDA $029B
F45F   8D 9C 02   STA $029C
F462   AD 9E 02   LDA $029E
F465   8D 9D 02   STA $029D
F468   20 27 FE   JSR $FE27
F46B   A5 F8      LDA $F8
F46D   D0 05      BNE $F474
F46F   88         DEY
F470   84 F8      STY $F8
F472   86 F7      STX $F7
F474   A5 FA      LDA $FA
F476   D0 05      BNE $F47D
F478   88         DEY
F479   84 FA      STY $FA
F47B   86 F9      STX $F9

F47D   38         SEC

F47E   A9 F0      LDA #$F0
F480   4C 2D FE   JMP $FE2D


; initialise CIA2

F483   A9 7F      LDA #$7F
F485   8D 0D DD   STA $DD0D
F488   A9 06      LDA #$06
F48A   8D 03 DD   STA $DD03
F48D   8D 01 DD   STA $DD01
F490   A9 04      LDA #$04
F492   0D 00 DD   ORA $DD00
F495   8D 00 DD   STA $DD00
F498   A0 00      LDY #$00
F49A   8C A1 02   STY $02A1
F49D   60         RTS


; load ram from a device

F49E   86 C3      STX $C3
F4A0   84 C4      STY $C4
F4A2   6C 30 03   JMP ($0330)   ; normally F4A5


; standard load ram entry

F4A5   85 93      STA $93
F4A7   A9 00      LDA #$00
F4A9   85 90      STA $90
F4AB   A5 BA      LDA $BA
F4AD   D0 03      BNE $F4B2
F4AF   4C 13 F7   JMP $F713

F4B2   C9 03      CMP #$03
F4B4   F0 F9      BEQ $F4AF
F4B6   90 7B      BCC $F533
F4B8   A4 B7      LDY $B7
F4BA   D0 03      BNE $F4BF
F4BC   4C 10 F7   JMP $F710

F4BF   A6 B9      LDX $B9
F4C1   20 AF F5   JSR $F5AF
F4C4   A9 60      LDA #$60
F4C6   85 B9      STA $B9
F4C8   20 D5 F3   JSR $F3D5
F4CB   A5 BA      LDA $BA
F4CD   20 09 ED   JSR $ED09
F4D0   A5 B9      LDA $B9
F4D2   20 C7 ED   JSR $EDC7
F4D5   20 13 EE   JSR $EE13
F4D8   85 AE      STA $AE
F4DA   A5 90      LDA $90
F4DC   4A         LSR
F4DD   4A         LSR
F4DE   B0 50      BCS $F530
F4E0   20 13 EE   JSR $EE13
F4E3   85 AF      STA $AF
F4E5   8A         TXA
F4E6   D0 08      BNE $F4F0
F4E8   A5 C3      LDA $C3
F4EA   85 AE      STA $AE
F4EC   A5 C4      LDA $C4
F4EE   85 AF      STA $AF
F4F0   20 D2 F5   JSR $F5D2
F4F3   A9 FD      LDA #$FD
F4F5   25 90      AND $90
F4F7   85 90      STA $90
F4F9   20 E1 FF   JSR $FFE1
F4FC   D0 03      BNE $F501
F4FE   4C 33 F6   JMP $F633

F501   20 13 EE   JSR $EE13
F504   AA         TAX
F505   A5 90      LDA $90
F507   4A         LSR
F508   4A         LSR
F509   B0 E8      BCS $F4F3
F50B   8A         TXA
F50C   A4 93      LDY $93
F50E   F0 0C      BEQ $F51C
F510   A0 00      LDY #$00
F512   D1 AE      CMP ($AE),Y
F514   F0 08      BEQ $F51E
F516   A9 10      LDA #$10
F518   20 1C FE   JSR $FE1C
F51B   .BY $2C
F51C   91 AE      STA ($AE),Y
F51E   E6 AE      INC $AE
F520   D0 02      BNE $F524
F522   E6 AF      INC $AF
F524   24 90      BIT $90
F526   50 CB      BVC $F4F3
F528   20 EF ED   JSR $EDEF
F52B   20 42 F6   JSR $F642
F52E   90 79      BCC $F5A9
F530   4C 04 F7   JMP $F704
F533   4A         LSR
F534   B0 03      BCS $F539
F536   4C 13 F7   JMP $F713

F539   20 D0 F7   JSR $F7D0
F53C   B0 03      BCS $F541
F53E   4C 13 F7   JMP $F713
F541   20 17 F8   JSR $F817
F544   B0 68      BCS $F5AE
F546   20 AF F5   JSR $F5AF
F549   A5 B7      LDA $B7
F54B   F0 09      BEQ $F556
F54D   20 EA F7   JSR $F7EA
F550   90 0B      BCC $F55D
F552   F0 5A      BEQ $F5AE
F554   B0 DA      BCS $F530
F556   20 2C F7   JSR $F72C
F559   F0 53      BEQ $F5AE
F55B   B0 D3      BCS $F530
F55D   A5 90      LDA $90
F55F   29 10      AND #$10
F561   38         SEC
F562   D0 4A      BNE $F5AE
F564   E0 01      CPX #$01
F566   F0 11      BEQ $F579
F568   E0 03      CPX #$03
F56A   D0 DD      BNE $F549
F56C   A0 01      LDY #$01
F56E   B1 B2      LDA ($B2),Y
F570   85 C3      STA $C3
F572   C8         INY
F573   B1 B2      LDA ($B2),Y
F575   85 C4      STA $C4
F577   B0 04      BCS $F57D
F579   A5 B9      LDA $B9
F57B   D0 EF      BNE $F56C
F57D   A0 03      LDY #$03
F57F   B1 B2      LDA ($B2),Y
F581   A0 01      LDY #$01
F583   F1 B2      SBC ($B2),Y
F585   AA         TAX
F586   A0 04      LDY #$04
F588   B1 B2      LDA ($B2),Y
F58A   A0 02      LDY #$02
F58C   F1 B2      SBC ($B2),Y
F58E   A8         TAY
F58F   18         CLC
F590   8A         TXA
F591   65 C3      ADC $C3
F593   85 AE      STA $AE
F595   98         TYA
F596   65 C4      ADC $C4
F598   85 AF      STA $AF
F59A   A5 C3      LDA $C3
F59C   85 C1      STA $C1
F59E   A5 C4      LDA $C4
F5A0   85 C2      STA $C2
F5A2   20 D2 F5   JSR $F5D2
F5A5   20 4A F8   JSR $F84A
F5A8   .BY $24
F5A9   18         CLC
F5AA   A6 AE      LDX $AE
F5AC   A4 AF      LDY $AF
F5AE   60         RTS


; handle messages for loading

F5AF   A5 9D      LDA $9D
F5B1   10 1E      BPL $F5D1
F5B3   A0 0C      LDY #$0C
F5B5   20 2F F1   JSR $F12F
F5B8   A5 B7      LDA $B7
F5BA   F0 15      BEQ $F5D1
F5BC   A0 17      LDY #$17
F5BE   20 2F F1   JSR $F12F

F5C1   A4 B7      LDY $B7

F5C3   F0 0C      BEQ $F5D1
F5C5   A0 00      LDY #$00
F5C7   B1 BB      LDA ($BB),Y
F5C9   20 D2 FF   JSR $FFD2
F5CC   C8         INY
F5CD   C4 B7      CPY $B7
F5CF   D0 F6      BNE $F5C7
F5D1   60         RTS


; do load/verify message

F5D2   A0 49      LDY #$49
F5D4   A5 93      LDA $93
F5D6   F0 02      BEQ $F5DA
F5D8   A0 59      LDY #$59
F5DA   4C 2B F1   JMP $F12B


; save ram to a device

F5DD   86 AE      STX $AE
F5DF   84 AF      STY $AF
F5E1   AA         TAX
F5E2   B5 00      LDA $00,X
F5E4   85 C1      STA $C1
F5E6   B5 01      LDA $01,X
F5E8   85 C2      STA $C2
F5EA   6C 32 03   JMP ($0332)   ; normally F5ED


; standard save ram entry

F5ED   A5 BA      LDA $BA
F5EF   D0 03      BNE $F5F4
F5F1   4C 13 F7   JMP $F713

F5F4   C9 03      CMP #$03
F5F6   F0 F9      BEQ $F5F1
F5F8   90 5F      BCC $F659
F5FA   A9 61      LDA #$61
F5FC   85 B9      STA $B9
F5FE   A4 B7      LDY $B7
F600   D0 03      BNE $F605
F602   4C 10 F7   JMP $F710

F605   20 D5 F3   JSR $F3D5
F608   20 8F F6   JSR $F68F
F60B   A5 BA      LDA $BA
F60D   20 0C ED   JSR $ED0C
F610   A5 B9      LDA $B9
F612   20 B9 ED   JSR $EDB9
F615   A0 00      LDY #$00
F617   20 8E FB   JSR $FB8E
F61A   A5 AC      LDA $AC
F61C   20 DD ED   JSR $EDDD
F61F   A5 AD      LDA $AD
F621   20 DD ED   JSR $EDDD
F624   20 D1 FC   JSR $FCD1
F627   B0 16      BCS $F63F
F629   B1 AC      LDA ($AC),Y
F62B   20 DD ED   JSR $EDDD
F62E   20 E1 FF   JSR $FFE1
F631   D0 07      BNE $F63A

F633   20 42 F6   JSR $F642

F636   A9 00      LDA #$00
F638   38         SEC
F639   60         RTS

F63A   20 DB FC   JSR $FCDB
F63D   D0 E5      BNE $F624
F63F   20 FE ED   JSR $EDFE


; close serial bus device

F642   24 B9      BIT $B9
F644   30 11      BMI $F657
F646   A5 BA      LDA $BA
F648   20 0C ED   JSR $ED0C
F64B   A5 B9      LDA $B9
F64D   29 EF      AND #$EF
F64F   09 E0      ORA #$E0
F651   20 B9 ED   JSR $EDB9

F654   20 FE ED   JSR $EDFE

F657   18         CLC
F658   60         RTS

F659   4A         LSR
F65A   B0 03      BCS $F65F
F65C   4C 13 F7   JMP $F713


; save ram to cassette

F65F   20 D0 F7   JSR $F7D0
F662   90 8D      BCC $F5F1
F664   20 38 F8   JSR $F838
F667   B0 25      BCS $F68E
F669   20 8F F6   JSR $F68F
F66C   A2 03      LDX #$03
F66E   A5 B9      LDA $B9
F670   29 01      AND #$01
F672   D0 02      BNE $F676
F674   A2 01      LDX #$01
F676   8A         TXA
F677   20 6A F7   JSR $F76A
F67A   B0 12      BCS $F68E
F67C   20 67 F8   JSR $F867
F67F   B0 0D      BCS $F68E
F681   A5 B9      LDA $B9
F683   29 02      AND #$02
F685   F0 06      BEQ $F68D
F687   A9 05      LDA #$05
F689   20 6A F7   JSR $F76A
F68C   .BY $24
F68D   18         CLC
F68E   60         RTS


; do saving message and filename

F68F   A5 9D      LDA $9D
F691   10 FB      BPL $F68E
F693   A0 51      LDY #$51
F695   20 2F F1   JSR $F12F
F698   4C C1 F5   JMP $F5C1


; increment real time clock

F69B   A2 00      LDX #$00
F69D   E6 A2      INC $A2
F69F   D0 06      BNE $F6A7
F6A1   E6 A1      INC $A1
F6A3   D0 02      BNE $F6A7
F6A5   E6 A0      INC $A0
F6A7   38         SEC
F6A8   A5 A2      LDA $A2
F6AA   E9 01      SBC #$01
F6AC   A5 A1      LDA $A1
F6AE   E9 1A      SBC #$1A
F6B0   A5 A0      LDA $A0
F6B2   E9 4F      SBC #$4F
F6B4   90 06      BCC $F6BC
F6B6   86 A0      STX $A0
F6B8   86 A1      STX $A1
F6BA   86 A2      STX $A2

F6BC   AD 01 DC   LDA $DC01

F6BF   CD 01 DC   CMP $DC01
F6C2   D0 F8      BNE $F6BC
F6C4   AA         TAX
F6C5   30 13      BMI $F6DA
F6C7   A2 BD      LDX #$BD
F6C9   8E 00 DC   STX $DC00
F6CC   AE 01 DC   LDX $DC01
F6CF   EC 01 DC   CPX $DC01
F6D2   D0 F8      BNE $F6CC
F6D4   8D 00 DC   STA $DC00
F6D7   E8         INX
F6D8   D0 02      BNE $F6DC
F6DA   85 91      STA $91
F6DC   60         RTS


; read real time clock

F6DD   78         SEI
F6DE   A5 A2      LDA $A2
F6E0   A6 A1      LDX $A1
F6E2   A4 A0      LDY $A0


; set real time clock

F6E4   78         SEI
F6E5   85 A2      STA $A2
F6E7   86 A1      STX $A1
F6E9   84 A0      STY $A0
F6EB   58         CLI
F6EC   60         RTS


; test STOP key

F6ED   A5 91      LDA $91
F6EF   C9 7F      CMP #$7F
F6F1   D0 07      BNE $F6FA
F6F3   08         PHP
F6F4   20 CC FF   JSR $FFCC
F6F7   85 C6      STA $C6
F6F9   28         PLP
F6FA   60         RTS


; handle I/O errors

F6FB   A9 01      LDA #$01   ; too many files
F6FD   .BY $2C

F6FE   A9 02      LDA #$02   ; file open

F700   .BY $2C

F701   A9 03      LDA #$03   ; file not open

F703   .BY $2C

F704   A9 04      LDA #$04   ; file not found

F706   .BY $2C

F707   A9 05      LDA #$05   ; device not present

F709   .BY $2C

F70A   A9 06      LDA #$06   ; not input file

F70C   .BY $2C

F70D   A9 07      LDA #$07   ; not output file

F70F   .BY $2C

F710   A9 08      LDA #$08   ; file name missing

F712   .BY $2C

F713   A9 09      LDA #$09   ; illegal device no.

F715   48         PHA
F716   20 CC FF   JSR $FFCC
F719   A0 00      LDY #$00
F71B   24 9D      BIT $9D
F71D   50 0A      BVC $F729
F71F   20 2F F1   JSR $F12F
F722   68         PLA
F723   48         PHA
F724   09 30      ORA #$30
F726   20 D2 FF   JSR $FFD2
F729   68         PLA
F72A   38         SEC
F72B   60         RTS


; get next file header from cassette

F72C   A5 93      LDA $93
F72E   48         PHA
F72F   20 41 F8   JSR $F841
F732   68         PLA
F733   85 93      STA $93
F735   B0 32      BCS $F769
F737   A0 00      LDY #$00
F739   B1 B2      LDA ($B2),Y
F73B   C9 05      CMP #$05
F73D   F0 2A      BEQ $F769
F73F   C9 01      CMP #$01
F741   F0 08      BEQ $F74B
F743   C9 03      CMP #$03
F745   F0 04      BEQ $F74B
F747   C9 04      CMP #$04
F749   D0 E1      BNE $F72C
F74B   AA         TAX
F74C   24 9D      BIT $9D
F74E   10 17      BPL $F767
F750   A0 63      LDY #$63
F752   20 2F F1   JSR $F12F
F755   A0 05      LDY #$05
F757   B1 B2      LDA ($B2),Y
F759   20 D2 FF   JSR $FFD2
F75C   C8         INY
F75D   C0 15      CPY #$15
F75F   D0 F6      BNE $F757
F761   A5 A1      LDA $A1
F763   20 E0 E4   JSR $E4E0
F766   EA         NOP
F767   18         CLC
F768   88         DEY
F769   60         RTS


; write a special block to cassette with code in A

F76A   85 9E      STA $9E
F76C   20 D0 F7   JSR $F7D0
F76F   90 5E      BCC $F7CF
F771   A5 C2      LDA $C2
F773   48         PHA
F774   A5 C1      LDA $C1
F776   48         PHA
F777   A5 AF      LDA $AF
F779   48         PHA
F77A   A5 AE      LDA $AE
F77C   48         PHA
F77D   A0 BF      LDY #$BF
F77F   A9 20      LDA #$20
F781   91 B2      STA ($B2),Y
F783   88         DEY
F784   D0 FB      BNE $F781
F786   A5 9E      LDA $9E
F788   91 B2      STA ($B2),Y
F78A   C8         INY
F78B   A5 C1      LDA $C1
F78D   91 B2      STA ($B2),Y
F78F   C8         INY
F790   A5 C2      LDA $C2
F792   91 B2      STA ($B2),Y
F794   C8         INY
F795   A5 AE      LDA $AE
F797   91 B2      STA ($B2),Y
F799   C8         INY
F79A   A5 AF      LDA $AF
F79C   91 B2      STA ($B2),Y
F79E   C8         INY
F79F   84 9F      STY $9F
F7A1   A0 00      LDY #$00
F7A3   84 9E      STY $9E
F7A5   A4 9E      LDY $9E
F7A7   C4 B7      CPY $B7
F7A9   F0 0C      BEQ $F7B7
F7AB   B1 BB      LDA ($BB),Y
F7AD   A4 9F      LDY $9F
F7AF   91 B2      STA ($B2),Y
F7B1   E6 9E      INC $9E
F7B3   E6 9F      INC $9F
F7B5   D0 EE      BNE $F7A5
F7B7   20 D7 F7   JSR $F7D7
F7BA   A9 69      LDA #$69
F7BC   85 AB      STA $AB
F7BE   20 6B F8   JSR $F86B
F7C1   A8         TAY
F7C2   68         PLA
F7C3   85 AE      STA $AE
F7C5   68         PLA
F7C6   85 AF      STA $AF
F7C8   68         PLA
F7C9   85 C1      STA $C1
F7CB   68         PLA
F7CC   85 C2      STA $C2
F7CE   98         TYA
F7CF   60         RTS


; set tape buffer pointer in XY

F7D0   A6 B2      LDX $B2
F7D2   A4 B3      LDY $B3
F7D4   C0 02      CPY #$02
F7D6   60         RTS


; set cassette buffer to I/O area

F7D7   20 D0 F7   JSR $F7D0
F7DA   8A         TXA
F7DB   85 C1      STA $C1
F7DD   18         CLC
F7DE   69 C0      ADC #$C0
F7E0   85 AE      STA $AE
F7E2   98         TYA
F7E3   85 C2      STA $C2
F7E5   69 00      ADC #$00
F7E7   85 AF      STA $AF
F7E9   60         RTS


; search tape for a file name

F7EA   20 2C F7   JSR $F72C
F7ED   B0 1D      BCS $F80C
F7EF   A0 05      LDY #$05
F7F1   84 9F      STY $9F
F7F3   A0 00      LDY #$00
F7F5   84 9E      STY $9E
F7F7   C4 B7      CPY $B7
F7F9   F0 10      BEQ $F80B
F7FB   B1 BB      LDA ($BB),Y
F7FD   A4 9F      LDY $9F
F7FF   D1 B2      CMP ($B2),Y
F801   D0 E7      BNE $F7EA
F803   E6 9E      INC $9E
F805   E6 9F      INC $9F
F807   A4 9E      LDY $9E
F809   D0 EC      BNE $F7F7
F80B   18         CLC
F80C   60         RTS


; add 1 to tape index and test for overflow

F80D   20 D0 F7   JSR $F7D0
F810   E6 A6      INC $A6
F812   A4 A6      LDY $A6
F814   C0 C0      CPY #$C0
F816   60         RTS


; handle messages and
; test cassette buttons for read

F817   20 2E F8   JSR $F82E
F81A   F0 1A      BEQ $F836
F81C   A0 1B      LDY #$1B
F81E   20 2F F1   JSR $F12F
F821   20 D0 F8   JSR $F8D0
F824   20 2E F8   JSR $F82E
F827   D0 F8      BNE $F821
F829   A0 6A      LDY #$6A
F82B   4C 2F F1   JMP $F12F


; test sense line for a button
; depressed on cassette

F82E   A9 10      LDA #$10
F830   24 01      BIT $01
F832   D0 02      BNE $F836
F834   24 01      BIT $01
F836   18         CLC
F837   60         RTS


; set messages and test cassette line
; for input

F838   20 2E F8   JSR $F82E
F83B   F0 F9      BEQ $F836
F83D   A0 2E      LDY #$2E
F83F   D0 DD      BNE $F81E


; read a block from cassette

F841   A9 00      LDA #$00
F843   85 90      STA $90
F845   85 93      STA $93
F847   20 D7 F7   JSR $F7D7

F84A   20 17 F8   JSR $F817

F84D   B0 1F      BCS $F86E
F84F   78         SEI
F850   A9 00      LDA #$00
F852   85 AA      STA $AA
F854   85 B4      STA $B4
F856   85 B0      STA $B0
F858   85 9E      STA $9E
F85A   85 9F      STA $9F
F85C   85 9C      STA $9C
F85E   A9 90      LDA #$90
F860   A2 0E      LDX #$0E
F862   D0 11      BNE $F875


; write a block from cassette

F864   20 D7 F7   JSR $F7D7

F867   A9 14      LDA #$14

F869   85 AB      STA $AB

F86B   20 38 F8   JSR $F838

F86E   B0 6C      BCS $F8DC
F870   78         SEI
F871   A9 82      LDA #$82
F873   A2 08      LDX #$08


; common code for cassette read and write

F875   A0 7F      LDY #$7F
F877   8C 0D DC   STY $DC0D
F87A   8D 0D DC   STA $DC0D
F87D   AD 0E DC   LDA $DC0E
F880   09 19      ORA #$19
F882   8D 0F DC   STA $DC0F
F885   29 91      AND #$91
F887   8D A2 02   STA $02A2
F88A   20 A4 F0   JSR $F0A4
F88D   AD 11 D0   LDA $D011
F890   29 EF      AND #$EF
F892   8D 11 D0   STA $D011
F895   AD 14 03   LDA $0314
F898   8D 9F 02   STA $029F
F89B   AD 15 03   LDA $0315
F89E   8D A0 02   STA $02A0
F8A1   20 BD FC   JSR $FCBD
F8A4   A9 02      LDA #$02
F8A6   85 BE      STA $BE
F8A8   20 97 FB   JSR $FB97
F8AB   A5 01      LDA $01
F8AD   29 1F      AND #$1F
F8AF   85 01      STA $01
F8B1   85 C0      STA $C0
F8B3   A2 FF      LDX #$FF
F8B5   A0 FF      LDY #$FF
F8B7   88         DEY
F8B8   D0 FD      BNE $F8B7
F8BA   CA         DEX
F8BB   D0 F8      BNE $F8B5
F8BD   58         CLI

F8BE   AD A0 02   LDA $02A0

F8C1   CD 15 03   CMP $0315
F8C4   18         CLC
F8C5   F0 15      BEQ $F8DC
F8C7   20 D0 F8   JSR $F8D0
F8CA   20 BC F6   JSR $F6BC
F8CD   4C BE F8   JMP $F8BE


; handle stop key during cassette operations

F8D0   20 E1 FF   JSR $FFE1
F8D3   18         CLC
F8D4   D0 0B      BNE $F8E1
F8D6   20 93 FC   JSR $FC93
F8D9   38         SEC
F8DA   68         PLA
F8DB   68         PLA
F8DC   A9 00      LDA #$00
F8DE   8D A0 02   STA $02A0
F8E1   60         RTS


; schedule CIA1 timer A depending on X

F8E2   86 B1      STX $B1
F8E4   A5 B0      LDA $B0
F8E6   0A         ASL
F8E7   0A         ASL
F8E8   18         CLC
F8E9   65 B0      ADC $B0
F8EB   18         CLC
F8EC   65 B1      ADC $B1
F8EE   85 B1      STA $B1
F8F0   A9 00      LDA #$00
F8F2   24 B0      BIT $B0
F8F4   30 01      BMI $F8F7
F8F6   2A         ROL
F8F7   06 B1      ASL $B1
F8F9   2A         ROL
F8FA   06 B1      ASL $B1
F8FC   2A         ROL
F8FD   AA         TAX
F8FE   AD 06 DC   LDA $DC06
F901   C9 16      CMP #$16
F903   90 F9      BCC $F8FE
F905   65 B1      ADC $B1
F907   8D 04 DC   STA $DC04
F90A   8A         TXA
F90B   6D 07 DC   ADC $DC07
F90E   8D 05 DC   STA $DC05
F911   AD A2 02   LDA $02A2
F914   8D 0E DC   STA $DC0E
F917   8D A4 02   STA $02A4
F91A   AD 0D DC   LDA $DC0D
F91D   29 10      AND #$10
F91F   F0 09      BEQ $F92A
F921   A9 F9      LDA #$F9
F923   48         PHA
F924   A9 2A      LDA #$2A
F926   48         PHA
F927   4C 43 FF   JMP $FF43
F92A   58         CLI
F92B   60         RTS


; cassette read IRQ routine

F92C   AE 07 DC   LDX $DC07
F92F   A0 FF      LDY #$FF
F931   98         TYA
F932   ED 06 DC   SBC $DC06
F935   EC 07 DC   CPX $DC07
F938   D0 F2      BNE $F92C
F93A   86 B1      STX $B1
F93C   AA         TAX
F93D   8C 06 DC   STY $DC06
F940   8C 07 DC   STY $DC07
F943   A9 19      LDA #$19
F945   8D 0F DC   STA $DC0F
F948   AD 0D DC   LDA $DC0D
F94B   8D A3 02   STA $02A3
F94E   98         TYA
F94F   E5 B1      SBC $B1
F951   86 B1      STX $B1
F953   4A         LSR
F954   66 B1      ROR $B1
F956   4A         LSR
F957   66 B1      ROR $B1
F959   A5 B0      LDA $B0
F95B   18         CLC
F95C   69 3C      ADC #$3C
F95E   C5 B1      CMP $B1
F960   B0 4A      BCS $F9AC
F962   A6 9C      LDX $9C
F964   F0 03      BEQ $F969
F966   4C 60 FA   JMP $FA60

F969   A6 A3      LDX $A3
F96B   30 1B      BMI $F988
F96D   A2 00      LDX #$00
F96F   69 30      ADC #$30
F971   65 B0      ADC $B0
F973   C5 B1      CMP $B1
F975   B0 1C      BCS $F993
F977   E8         INX
F978   69 26      ADC #$26
F97A   65 B0      ADC $B0
F97C   C5 B1      CMP $B1
F97E   B0 17      BCS $F997
F980   69 2C      ADC #$2C
F982   65 B0      ADC $B0
F984   C5 B1      CMP $B1
F986   90 03      BCC $F98B
F988   4C 10 FA   JMP $FA10

F98B   A5 B4      LDA $B4
F98D   F0 1D      BEQ $F9AC
F98F   85 A8      STA $A8
F991   D0 19      BNE $F9AC
F993   E6 A9      INC $A9
F995   B0 02      BCS $F999

F997   C6 A9      DEC $A9

F999   38         SEC
F99A   E9 13      SBC #$13
F99C   E5 B1      SBC $B1
F99E   65 92      ADC $92
F9A0   85 92      STA $92
F9A2   A5 A4      LDA $A4
F9A4   49 01      EOR #$01
F9A6   85 A4      STA $A4
F9A8   F0 2B      BEQ $F9D5
F9AA   86 D7      STX $D7
F9AC   A5 B4      LDA $B4
F9AE   F0 22      BEQ $F9D2
F9B0   AD A3 02   LDA $02A3
F9B3   29 01      AND #$01
F9B5   D0 05      BNE $F9BC
F9B7   AD A4 02   LDA $02A4
F9BA   D0 16      BNE $F9D2
F9BC   A9 00      LDA #$00
F9BE   85 A4      STA $A4
F9C0   8D A4 02   STA $02A4
F9C3   A5 A3      LDA $A3
F9C5   10 30      BPL $F9F7
F9C7   30 BF      BMI $F988
F9C9   A2 A6      LDX #$A6
F9CB   20 E2 F8   JSR $F8E2
F9CE   A5 9B      LDA $9B
F9D0   D0 B9      BNE $F98B
F9D2   4C BC FE   JMP $FEBC

F9D5   A5 92      LDA $92
F9D7   F0 07      BEQ $F9E0
F9D9   30 03      BMI $F9DE
F9DB   C6 B0      DEC $B0
F9DD   .BY $2C
F9DE   E6 B0      INC $B0
F9E0   A9 00      LDA #$00
F9E2   85 92      STA $92
F9E4   E4 D7      CPX $D7
F9E6   D0 0F      BNE $F9F7
F9E8   8A         TXA
F9E9   D0 A0      BNE $F98B
F9EB   A5 A9      LDA $A9
F9ED   30 BD      BMI $F9AC
F9EF   C9 10      CMP #$10
F9F1   90 B9      BCC $F9AC
F9F3   85 96      STA $96
F9F5   B0 B5      BCS $F9AC
F9F7   8A         TXA
F9F8   45 9B      EOR $9B
F9FA   85 9B      STA $9B
F9FC   A5 B4      LDA $B4
F9FE   F0 D2      BEQ $F9D2
FA00   C6 A3      DEC $A3
FA02   30 C5      BMI $F9C9
FA04   46 D7      LSR $D7
FA06   66 BF      ROR $BF
FA08   A2 DA      LDX #$DA
FA0A   20 E2 F8   JSR $F8E2
FA0D   4C BC FE   JMP $FEBC


FA10   A5 96      LDA $96

FA12   F0 04      BEQ $FA18
FA14   A5 B4      LDA $B4
FA16   F0 07      BEQ $FA1F
FA18   A5 A3      LDA $A3
FA1A   30 03      BMI $FA1F
FA1C   4C 97 F9   JMP $F997

FA1F   46 B1      LSR $B1
FA21   A9 93      LDA #$93
FA23   38         SEC
FA24   E5 B1      SBC $B1
FA26   65 B0      ADC $B0
FA28   0A         ASL
FA29   AA         TAX
FA2A   20 E2 F8   JSR $F8E2
FA2D   E6 9C      INC $9C
FA2F   A5 B4      LDA $B4
FA31   D0 11      BNE $FA44
FA33   A5 96      LDA $96
FA35   F0 26      BEQ $FA5D
FA37   85 A8      STA $A8
FA39   A9 00      LDA #$00
FA3B   85 96      STA $96
FA3D   A9 81      LDA #$81
FA3F   8D 0D DC   STA $DC0D
FA42   85 B4      STA $B4
FA44   A5 96      LDA $96
FA46   85 B5      STA $B5
FA48   F0 09      BEQ $FA53
FA4A   A9 00      LDA #$00
FA4C   85 B4      STA $B4
FA4E   A9 01      LDA #$01
FA50   8D 0D DC   STA $DC0D
FA53   A5 BF      LDA $BF
FA55   85 BD      STA $BD
FA57   A5 A8      LDA $A8
FA59   05 A9      ORA $A9
FA5B   85 B6      STA $B6
FA5D   4C BC FE   JMP $FEBC


; receive next byte from cassette

FA60   20 97 FB   JSR $FB97
FA63   85 9C      STA $9C
FA65   A2 DA      LDX #$DA
FA67   20 E2 F8   JSR $F8E2
FA6A   A5 BE      LDA $BE
FA6C   F0 02      BEQ $FA70
FA6E   85 A7      STA $A7
FA70   A9 0F      LDA #$0F
FA72   24 AA      BIT $AA
FA74   10 17      BPL $FA8D
FA76   A5 B5      LDA $B5
FA78   D0 0C      BNE $FA86
FA7A   A6 BE      LDX $BE
FA7C   CA         DEX
FA7D   D0 0B      BNE $FA8A
FA7F   A9 08      LDA #$08
FA81   20 1C FE   JSR $FE1C
FA84   D0 04      BNE $FA8A
FA86   A9 00      LDA #$00
FA88   85 AA      STA $AA
FA8A   4C BC FE   JMP $FEBC

FA8D   70 31      BVS $FAC0
FA8F   D0 18      BNE $FAA9
FA91   A5 B5      LDA $B5
FA93   D0 F5      BNE $FA8A
FA95   A5 B6      LDA $B6
FA97   D0 F1      BNE $FA8A
FA99   A5 A7      LDA $A7
FA9B   4A         LSR
FA9C   A5 BD      LDA $BD
FA9E   30 03      BMI $FAA3
FAA0   90 18      BCC $FABA
FAA2   18         CLC
FAA3   B0 15      BCS $FABA
FAA5   29 0F      AND #$0F
FAA7   85 AA      STA $AA
FAA9   C6 AA      DEC $AA
FAAB   D0 DD      BNE $FA8A
FAAD   A9 40      LDA #$40
FAAF   85 AA      STA $AA
FAB1   20 8E FB   JSR $FB8E
FAB4   A9 00      LDA #$00
FAB6   85 AB      STA $AB
FAB8   F0 D0      BEQ $FA8A
FABA   A9 80      LDA #$80
FABC   85 AA      STA $AA
FABE   D0 CA      BNE $FA8A
FAC0   A5 B5      LDA $B5
FAC2   F0 0A      BEQ $FACE
FAC4   A9 04      LDA #$04
FAC6   20 1C FE   JSR $FE1C
FAC9   A9 00      LDA #$00
FACB   4C 4A FB   JMP $FB4A

FACE   20 D1 FC   JSR $FCD1
FAD1   90 03      BCC $FAD6
FAD3   4C 48 FB   JMP $FB48
FAD6   A6 A7      LDX $A7
FAD8   CA         DEX
FAD9   F0 2D      BEQ $FB08
FADB   A5 93      LDA $93
FADD   F0 0C      BEQ $FAEB
FADF   A0 00      LDY #$00
FAE1   A5 BD      LDA $BD
FAE3   D1 AC      CMP ($AC),Y
FAE5   F0 04      BEQ $FAEB
FAE7   A9 01      LDA #$01
FAE9   85 B6      STA $B6
FAEB   A5 B6      LDA $B6
FAED   F0 4B      BEQ $FB3A
FAEF   A2 3D      LDX #$3D
FAF1   E4 9E      CPX $9E
FAF3   90 3E      BCC $FB33
FAF5   A6 9E      LDX $9E
FAF7   A5 AD      LDA $AD
FAF9   9D 01 01   STA $0101,X
FAFC   A5 AC      LDA $AC
FAFE   9D 00 01   STA $0100,X
FB01   E8         INX
FB02   E8         INX
FB03   86 9E      STX $9E
FB05   4C 3A FB   JMP $FB3A

FB08   A6 9F      LDX $9F
FB0A   E4 9E      CPX $9E
FB0C   F0 35      BEQ $FB43
FB0E   A5 AC      LDA $AC
FB10   DD 00 01   CMP $0100,X
FB13   D0 2E      BNE $FB43
FB15   A5 AD      LDA $AD
FB17   DD 01 01   CMP $0101,X
FB1A   D0 27      BNE $FB43
FB1C   E6 9F      INC $9F
FB1E   E6 9F      INC $9F
FB20   A5 93      LDA $93
FB22   F0 0B      BEQ $FB2F
FB24   A5 BD      LDA $BD
FB26   A0 00      LDY #$00
FB28   D1 AC      CMP ($AC),Y
FB2A   F0 17      BEQ $FB43
FB2C   C8         INY
FB2D   84 B6      STY $B6
FB2F   A5 B6      LDA $B6
FB31   F0 07      BEQ $FB3A
FB33   A9 10      LDA #$10
FB35   20 1C FE   JSR $FE1C
FB38   D0 09      BNE $FB43

FB3A   A5 93      LDA $93

FB3C   D0 05      BNE $FB43
FB3E   A8         TAY
FB3F   A5 BD      LDA $BD
FB41   91 AC      STA ($AC),Y
FB43   20 DB FC   JSR $FCDB
FB46   D0 43      BNE $FB8B

FB48   A9 80      LDA #$80


FB4A   85 AA      STA $AA

FB4C   78         SEI
FB4D   A2 01      LDX #$01
FB4F   8E 0D DC   STX $DC0D
FB52   AE 0D DC   LDX $DC0D
FB55   A6 BE      LDX $BE
FB57   CA         DEX
FB58   30 02      BMI $FB5C
FB5A   86 BE      STX $BE
FB5C   C6 A7      DEC $A7
FB5E   F0 08      BEQ $FB68
FB60   A5 9E      LDA $9E
FB62   D0 27      BNE $FB8B
FB64   85 BE      STA $BE
FB66   F0 23      BEQ $FB8B
FB68   20 93 FC   JSR $FC93
FB6B   20 8E FB   JSR $FB8E
FB6E   A0 00      LDY #$00
FB70   84 AB      STY $AB
FB72   B1 AC      LDA ($AC),Y
FB74   45 AB      EOR $AB
FB76   85 AB      STA $AB
FB78   20 DB FC   JSR $FCDB
FB7B   20 D1 FC   JSR $FCD1
FB7E   90 F2      BCC $FB72
FB80   A5 AB      LDA $AB
FB82   45 BD      EOR $BD
FB84   F0 05      BEQ $FB8B
FB86   A9 20      LDA #$20
FB88   20 1C FE   JSR $FE1C
FB8B   4C BC FE   JMP $FEBC


; move save/load address into $AC/$AD

FB8E   A5 C2      LDA $C2
FB90   85 AD      STA $AD
FB92   A5 C1      LDA $C1
FB94   85 AC      STA $AC
FB96   60         RTS


; initalise cassette read/write variables

FB97   A9 08      LDA #$08
FB99   85 A3      STA $A3
FB9B   A9 00      LDA #$00
FB9D   85 A4      STA $A4
FB9F   85 A8      STA $A8
FBA1   85 9B      STA $9B
FBA3   85 A9      STA $A9
FBA5   60         RTS


; schedule CIA1 timer B and
; invert casette write line

FBA6   A5 BD      LDA $BD
FBA8   4A         LSR
FBA9   A9 60      LDA #$60
FBAB   90 02      BCC $FBAF

FBAD   A9 B0      LDA #$B0


FBAF   A2 00      LDX #$00


FBB1   8D 06 DC   STA $DC06

FBB4   8E 07 DC   STX $DC07
FBB7   AD 0D DC   LDA $DC0D
FBBA   A9 19      LDA #$19
FBBC   8D 0F DC   STA $DC0F
FBBF   A5 01      LDA $01
FBC1   49 08      EOR #$08
FBC3   85 01      STA $01
FBC5   29 08      AND #$08
FBC7   60         RTS


; IRQ routine for cassette write B

FBC8   38         SEC
FBC9   66 B6      ROR $B6
FBCB   30 3C      BMI $FC09

FBCD   A5 A8      LDA $A8

FBCF   D0 12      BNE $FBE3
FBD1   A9 10      LDA #$10
FBD3   A2 01      LDX #$01
FBD5   20 B1 FB   JSR $FBB1
FBD8   D0 2F      BNE $FC09
FBDA   E6 A8      INC $A8
FBDC   A5 B6      LDA $B6
FBDE   10 29      BPL $FC09
FBE0   4C 57 FC   JMP $FC57

FBE3   A5 A9      LDA $A9
FBE5   D0 09      BNE $FBF0
FBE7   20 AD FB   JSR $FBAD
FBEA   D0 1D      BNE $FC09
FBEC   E6 A9      INC $A9
FBEE   D0 19      BNE $FC09
FBF0   20 A6 FB   JSR $FBA6
FBF3   D0 14      BNE $FC09
FBF5   A5 A4      LDA $A4
FBF7   49 01      EOR #$01
FBF9   85 A4      STA $A4
FBFB   F0 0F      BEQ $FC0C
FBFD   A5 BD      LDA $BD
FBFF   49 01      EOR #$01
FC01   85 BD      STA $BD
FC03   29 01      AND #$01
FC05   45 9B      EOR $9B
FC07   85 9B      STA $9B
FC09   4C BC FE   JMP $FEBC

FC0C   46 BD      LSR $BD
FC0E   C6 A3      DEC $A3
FC10   A5 A3      LDA $A3
FC12   F0 3A      BEQ $FC4E
FC14   10 F3      BPL $FC09
FC16   20 97 FB   JSR $FB97
FC19   58         CLI
FC1A   A5 A5      LDA $A5
FC1C   F0 12      BEQ $FC30
FC1E   A2 00      LDX #$00
FC20   86 D7      STX $D7
FC22   C6 A5      DEC $A5
FC24   A6 BE      LDX $BE
FC26   E0 02      CPX #$02
FC28   D0 02      BNE $FC2C
FC2A   09 80      ORA #$80
FC2C   85 BD      STA $BD
FC2E   D0 D9      BNE $FC09
FC30   20 D1 FC   JSR $FCD1
FC33   90 0A      BCC $FC3F
FC35   D0 91      BNE $FBC8
FC37   E6 AD      INC $AD
FC39   A5 D7      LDA $D7
FC3B   85 BD      STA $BD
FC3D   B0 CA      BCS $FC09
FC3F   A0 00      LDY #$00
FC41   B1 AC      LDA ($AC),Y
FC43   85 BD      STA $BD
FC45   45 D7      EOR $D7
FC47   85 D7      STA $D7
FC49   20 DB FC   JSR $FCDB
FC4C   D0 BB      BNE $FC09
FC4E   A5 9B      LDA $9B
FC50   49 01      EOR #$01
FC52   85 BD      STA $BD
FC54   4C BC FE   JMP $FEBC


FC57   C6 BE      DEC $BE

FC59   D0 03      BNE $FC5E
FC5B   20 CA FC   JSR $FCCA
FC5E   A9 50      LDA #$50
FC60   85 A7      STA $A7
FC62   A2 08      LDX #$08
FC64   78         SEI
FC65   20 BD FC   JSR $FCBD
FC68   D0 EA      BNE $FC54


; IRQ routine for cassette write A

FC6A   A9 78      LDA #$78
FC6C   20 AF FB   JSR $FBAF
FC6F   D0 E3      BNE $FC54
FC71   C6 A7      DEC $A7
FC73   D0 DF      BNE $FC54
FC75   20 97 FB   JSR $FB97
FC78   C6 AB      DEC $AB
FC7A   10 D8      BPL $FC54
FC7C   A2 0A      LDX #$0A
FC7E   20 BD FC   JSR $FCBD
FC81   58         CLI
FC82   E6 AB      INC $AB
FC84   A5 BE      LDA $BE
FC86   F0 30      BEQ $FCB8
FC88   20 8E FB   JSR $FB8E
FC8B   A2 09      LDX #$09
FC8D   86 A5      STX $A5
FC8F   86 B6      STX $B6
FC91   D0 83      BNE $FC16


; switch from cassette IRQ to default IRQ

FC93   08         PHP
FC94   78         SEI
FC95   AD 11 D0   LDA $D011
FC98   09 10      ORA #$10
FC9A   8D 11 D0   STA $D011
FC9D   20 CA FC   JSR $FCCA
FCA0   A9 7F      LDA #$7F
FCA2   8D 0D DC   STA $DC0D
FCA5   20 DD FD   JSR $FDDD
FCA8   AD A0 02   LDA $02A0
FCAB   F0 09      BEQ $FCB6
FCAD   8D 15 03   STA $0315
FCB0   AD 9F 02   LDA $029F
FCB3   8D 14 03   STA $0314
FCB6   28         PLP
FCB7   60         RTS


; terminate cassette I/O

FCB8   20 93 FC   JSR $FC93
FCBB   F0 97      BEQ $FC54


; set IRQ vector depending on X

FCBD   BD 93 FD   LDA $FD93,X
FCC0   8D 14 03   STA $0314
FCC3   BD 94 FD   LDA $FD94,X
FCC6   8D 15 03   STA $0315
FCC9   60         RTS


; stop cassette motor

FCCA   A5 01      LDA $01
FCCC   09 20      ORA #$20
FCCE   85 01      STA $01
FCD0   60         RTS


; compare $AC/$AD with $AE/$AF

FCD1   38         SEC
FCD2   A5 AC      LDA $AC
FCD4   E5 AE      SBC $AE
FCD6   A5 AD      LDA $AD
FCD8   E5 AF      SBC $AF
FCDA   60         RTS


; increment $AC/$AD

FCDB   E6 AC      INC $AC
FCDD   D0 02      BNE $FCE1
FCDF   E6 AD      INC $AD
FCE1   60         RTS


; RESET routine

FCE2   A2 FF      LDX #$FF
FCE4   78         SEI
FCE5   9A         TXS
FCE6   D8         CLD
FCE7   20 02 FD   JSR $FD02
FCEA   D0 03      BNE $FCEF
FCEC   6C 00 80   JMP ($8000)   ; start cartridge

FCEF   8E 16 D0   STX $D016
FCF2   20 A3 FD   JSR $FDA3
FCF5   20 50 FD   JSR $FD50
FCF8   20 15 FD   JSR $FD15
FCFB   20 5B FF   JSR $FF5B
FCFE   58         CLI
FCFF   6C 00 A0   JMP ($A000)   ; start basic


; check for a cartridge

FD02   A2 05      LDX #$05
FD04   BD 0F FD   LDA $FD0F,X
FD07   DD 03 80   CMP $8003,X
FD0A   D0 03      BNE $FD0F
FD0C   CA         DEX
FD0D   D0 F5      BNE $FD04
FD0F   60         RTS


; CBM80

FD10   .BY $C3,$C2,$CD,$38,$30


; restore I/O vectors

FD15   A2 30      LDX #$30   ; low  FD30
FD17   A0 FD      LDY #$FD   ; high FD30
FD19   18         CLC


; set I/O vectors depending on XY

FD1A   86 C3      STX $C3
FD1C   84 C4      STY $C4
FD1E   A0 1F      LDY #$1F
FD20   B9 14 03   LDA $0314,Y
FD23   B0 02      BCS $FD27
FD25   B1 C3      LDA ($C3),Y
FD27   91 C3      STA ($C3),Y
FD29   99 14 03   STA $0314,Y
FD2C   88         DEY
FD2D   10 F1      BPL $FD20
FD2F   60         RTS


; vectors for OS at $0314-$0333

FD30   .WD $EA31   ; IRQ
FD32   .WD $FE66   ; BRK
FD34   .WD $FE47   ; NMI
FD36   .WD $F34A   ; open
FD38   .WD $F291   ; close
FD3A   .WD $F20E   ; set input dev
FD3C   .WD $F250   ; set output dev
FD3E   .WD $F333   ; restore I/O
FD40   .WD $F157   ; input
FD42   .WD $F1CA   ; output
FD44   .WD $F6ED   ; test stop key
FD46   .WD $F13E   ; get
FD48   .WD $F32F   ; abort I/O
FD4A   .WD $FE66   ; unused (BRK)
FD4C   .WD $F4A5   ; load ram
FD4E   .WD $F5ED   ; save ram


; initalise memory pointers

FD50   A9 00      LDA #$00
FD52   A8         TAY
FD53   99 02 00   STA $0002,Y
FD56   99 00 02   STA $0200,Y
FD59   99 00 03   STA $0300,Y
FD5C   C8         INY
FD5D   D0 F4      BNE $FD53
FD5F   A2 3C      LDX #$3C
FD61   A0 03      LDY #$03
FD63   86 B2      STX $B2
FD65   84 B3      STY $B3
FD67   A8         TAY
FD68   A9 03      LDA #$03
FD6A   85 C2      STA $C2
FD6C   E6 C2      INC $C2
FD6E   B1 C1      LDA ($C1),Y
FD70   AA         TAX
FD71   A9 55      LDA #$55
FD73   91 C1      STA ($C1),Y
FD75   D1 C1      CMP ($C1),Y
FD77   D0 0F      BNE $FD88
FD79   2A         ROL
FD7A   91 C1      STA ($C1),Y
FD7C   D1 C1      CMP ($C1),Y
FD7E   D0 08      BNE $FD88
FD80   8A         TXA
FD81   91 C1      STA ($C1),Y
FD83   C8         INY
FD84   D0 E8      BNE $FD6E
FD86   F0 E4      BEQ $FD6C
FD88   98         TYA
FD89   AA         TAX
FD8A   A4 C2      LDY $C2
FD8C   18         CLC
FD8D   20 2D FE   JSR $FE2D
FD90   A9 08      LDA #$08
FD92   8D 82 02   STA $0282
FD95   A9 04      LDA #$04
FD97   8D 88 02   STA $0288
FD9A   60         RTS


; IRQ vectors

FD9B   .WD $FC6A   ; cassette write A
FD9D   .WD $FBCD   ; cassette write B
FD9F   .WD $EA31   ; standard IRQ
FDA1   .WD $F92C   ; cassette read


; initaliase I/O devices

FDA3   A9 7F      LDA #$7F
FDA5   8D 0D DC   STA $DC0D
FDA8   8D 0D DD   STA $DD0D
FDAB   8D 00 DC   STA $DC00
FDAE   A9 08      LDA #$08
FDB0   8D 0E DC   STA $DC0E
FDB3   8D 0E DD   STA $DD0E
FDB6   8D 0F DC   STA $DC0F
FDB9   8D 0F DD   STA $DD0F
FDBC   A2 00      LDX #$00
FDBE   8E 03 DC   STX $DC03
FDC1   8E 03 DD   STX $DD03
FDC4   8E 18 D4   STX $D418
FDC7   CA         DEX
FDC8   8E 02 DC   STX $DC02
FDCB   A9 07      LDA #$07
FDCD   8D 00 DD   STA $DD00
FDD0   A9 3F      LDA #$3F
FDD2   8D 02 DD   STA $DD02
FDD5   A9 E7      LDA #$E7
FDD7   85 01      STA $01
FDD9   A9 2F      LDA #$2F
FDDB   85 00      STA $00


; initalise TAL1/TAH1 fpr 1/60 of a second

FDDD   AD A6 02   LDA $02A6
FDE0   F0 0A      BEQ $FDEC
FDE2   A9 25      LDA #$25
FDE4   8D 04 DC   STA $DC04
FDE7   A9 40      LDA #$40
FDE9   4C F3 FD   JMP $FDF3

FDEC   A9 95      LDA #$95
FDEE   8D 04 DC   STA $DC04
FDF1   A9 42      LDA #$42

FDF3   8D 05 DC   STA $DC05

FDF6   4C 6E FF   JMP $FF6E


; initalise file name parameters

FDF9   85 B7      STA $B7
FDFB   86 BB      STX $BB
FDFD   84 BC      STY $BC
FDFF   60         RTS


; inatalise file parameters

FE00   85 B8      STA $B8
FE02   86 BA      STX $BA
FE04   84 B9      STY $B9
FE06   60         RTS


; read I/O status word

FE07   A5 BA      LDA $BA
FE09   C9 02      CMP #$02
FE0B   D0 0D      BNE $FE1A
FE0D   AD 97 02   LDA $0297
FE10   48         PHA
FE11   A9 00      LDA #$00
FE13   8D 97 02   STA $0297
FE16   68         PLA
FE17   60         RTS


; control kernel messages

FE18   85 9D      STA $9D


; read ST

FE1A   A5 90      LDA $90


; add A to ST

FE1C   05 90      ORA $90
FE1E   85 90      STA $90
FE20   60         RTS


; set timeout on serail bus

FE21   8D 85 02   STA $0285
FE24   60         RTS


; read/set top of memory

FE25   90 06      BCC $FE2D

FE27   AE 83 02   LDX $0283

FE2A   AC 84 02   LDY $0284

FE2D   8E 83 02   STX $0283

FE30   8C 84 02   STY $0284
FE33   60         RTS


; read/set bottom of memory

FE34   90 06      BCC $FE3C
FE36   AE 81 02   LDX $0281
FE39   AC 82 02   LDY $0282
FE3C   8E 81 02   STX $0281
FE3F   8C 82 02   STY $0282
FE42   60         RTS


; NMI entry

FE43   78         SEI
FE44   6C 18 03   JMP ($0318)   ; normally FE47


; standard NMI routine

FE47   48         PHA
FE48   8A         TXA
FE49   48         PHA
FE4A   98         TYA
FE4B   48         PHA
FE4C   A9 7F      LDA #$7F
FE4E   8D 0D DD   STA $DD0D
FE51   AC 0D DD   LDY $DD0D
FE54   30 1C      BMI $FE72
FE56   20 02 FD   JSR $FD02
FE59   D0 03      BNE $FE5E
FE5B   6C 02 80   JMP ($8002)   ; cartridge warm start

FE5E   20 BC F6   JSR $F6BC
FE61   20 E1 FF   JSR $FFE1
FE64   D0 0C      BNE $FE72


; BRK routine

FE66   20 15 FD   JSR $FD15
FE69   20 A3 FD   JSR $FDA3
FE6C   20 18 E5   JSR $E518
FE6F   6C 02 A0   JMP ($A002)


; internal NMI

FE72   98         TYA
FE73   2D A1 02   AND $02A1
FE76   AA         TAX
FE77   29 01      AND #$01
FE79   F0 28      BEQ $FEA3
FE7B   AD 00 DD   LDA $DD00
FE7E   29 FB      AND #$FB
FE80   05 B5      ORA $B5
FE82   8D 00 DD   STA $DD00
FE85   AD A1 02   LDA $02A1
FE88   8D 0D DD   STA $DD0D
FE8B   8A         TXA
FE8C   29 12      AND #$12
FE8E   F0 0D      BEQ $FE9D
FE90   29 02      AND #$02
FE92   F0 06      BEQ $FE9A
FE94   20 D6 FE   JSR $FED6
FE97   4C 9D FE   JMP $FE9D

FE9A   20 07 FF   JSR $FF07

FE9D   20 BB EE   JSR $EEBB

FEA0   4C B6 FE   JMP $FEB6

FEA3   8A         TXA
FEA4   29 02      AND #$02
FEA6   F0 06      BEQ $FEAE
FEA8   20 D6 FE   JSR $FED6
FEAB   4C B6 FE   JMP $FEB6

FEAE   8A         TXA
FEAF   29 10      AND #$10
FEB1   F0 03      BEQ $FEB6
FEB3   20 07 FF   JSR $FF07

FEB6   AD A1 02   LDA $02A1

FEB9   8D 0D DD   STA $DD0D

FEBC   68         PLA

FEBD   A8         TAY
FEBE   68         PLA
FEBF   AA         TAX
FEC0   68         PLA
FEC1   40         RTI


; baud rate tables

FEC2   .WD $27C1   ; 50
FEC4   .WD $1A3E   ; 75
FEC6   .WD $11C5   ; 110
FEC8   .WD $0E74   ; 134.5
FECA   .WD $0CED   ; 150
FECC   .WD $0645   ; 300
FECE   .WD $02F0   ; 600
FED0   .WD $0146   ; 1200
FED2   .WD $00B8   ; 1800
FED4   .WD $0071   ; 2400


; input next bit on RS-232 and schedule TB2

FED6   AD 01 DD   LDA $DD01
FED9   29 01      AND #$01
FEDB   85 A7      STA $A7
FEDD   AD 06 DD   LDA $DD06
FEE0   E9 1C      SBC #$1C
FEE2   6D 99 02   ADC $0299
FEE5   8D 06 DD   STA $DD06
FEE8   AD 07 DD   LDA $DD07
FEEB   6D 9A 02   ADC $029A
FEEE   8D 07 DD   STA $DD07
FEF1   A9 11      LDA #$11
FEF3   8D 0F DD   STA $DD0F
FEF6   AD A1 02   LDA $02A1
FEF9   8D 0D DD   STA $DD0D
FEFC   A9 FF      LDA #$FF
FEFE   8D 06 DD   STA $DD06
FF01   8D 07 DD   STA $DD07
FF04   4C 59 EF   JMP $EF59


; schedule TB2 using baud rate factor

FF07   AD 95 02   LDA $0295
FF0A   8D 06 DD   STA $DD06
FF0D   AD 96 02   LDA $0296
FF10   8D 07 DD   STA $DD07
FF13   A9 11      LDA #$11
FF15   8D 0F DD   STA $DD0F
FF18   A9 12      LDA #$12
FF1A   4D A1 02   EOR $02A1
FF1D   8D A1 02   STA $02A1
FF20   A9 FF      LDA #$FF
FF22   8D 06 DD   STA $DD06
FF25   8D 07 DD   STA $DD07
FF28   AE 98 02   LDX $0298
FF2B   86 A8      STX $A8
FF2D   60         RTS


; continuation of baud rate calculation

FF2E   AA         TAX
FF2F   AD 96 02   LDA $0296
FF32   2A         ROL
FF33   A8         TAY
FF34   8A         TXA
FF35   69 C8      ADC #$C8
FF37   8D 99 02   STA $0299
FF3A   98         TYA
FF3B   69 00      ADC #$00
FF3D   8D 9A 02   STA $029A
FF40   60         RTS

FF41   EA         NOP
FF42   EA         NOP


FF43   08         PHP

FF44   68         PLA
FF45   29 EF      AND #$EF
FF47   48         PHA


; IRQ entry point

FF48   48         PHA
FF49   8A         TXA
FF4A   48         PHA
FF4B   98         TYA
FF4C   48         PHA
FF4D   BA         TSX
FF4E   BD 04 01   LDA $0104,X
FF51   29 10      AND #$10
FF53   F0 03      BEQ $FF58
FF55   6C 16 03   JMP ($0316)   ; normally FE66

FF58   6C 14 03   JMP ($0314)   ; normally EA31


; addition to I/O device initalisation

FF5B   20 18 E5   JSR $E518
FF5E   AD 12 D0   LDA $D012
FF61   D0 FB      BNE $FF5E
FF63   AD 19 D0   LDA $D019
FF66   29 01      AND #$01
FF68   8D A6 02   STA $02A6
FF6B   4C DD FD   JMP $FDDD


; end of scheduling TA for 1/60 second IRQ's

FF6E   A9 81      LDA #$81
FF70   8D 0D DC   STA $DC0D
FF73   AD 0E DC   LDA $DC0E
FF76   29 80      AND #$80
FF78   09 11      ORA #$11
FF7A   8D 0E DC   STA $DC0E
FF7D   4C 8E EE   JMP $EE8E

FF80   .BY $03   ; kernal version number


; kernal vectors

FF81   4C 5B FF   JMP $FF5B   ; initalise screen and keyboard
FF84   4C A3 FD   JMP $FDA3   ; initalise I/O devices
FF87   4C 50 FD   JMP $FD50   ; initalise memory pointers
FF8A   4C 15 FD   JMP $FD15   ; restore I/O vectors
FF8D   4C 1A FD   JMP $FD1A   ; set I/O vectors from XY

FF90   4C 18 FE   JMP $FE18   ; control kernal messages

FF93   4C B9 ED   JMP $EDB9   ; read secondary address after listen
FF96   4C C7 ED   JMP $EDC7   ; read secondary address after talk

FF99   4C 25 FE   JMP $FE25   ; read/set top of memory


FF9C   4C 34 FE   JMP $FE34   ; read/set bottom of memory

FF9F   4C 87 EA   JMP $EA87   ; scan keyboard
FFA2   4C 21 FE   JMP $FE21   ; set timout for serial bus
FFA5   4C 13 EE   JMP $EE13   ; input on serial bus
FFA8   4C DD ED   JMP $EDDD   ; output byte on serial bus
FFAB   4C EF ED   JMP $EDEF   ; send untalk on serial bus
FFAE   4C FE ED   JMP $EDFE   ; send unlisten on serial bus
FFB1   4C 0C ED   JMP $ED0C   ; send listen on serial bus
FFB4   4C 09 ED   JMP $ED09   ; send talk on serial bus

FFB7   4C 07 FE   JMP $FE07   ; read I/O status word


FFBA   4C 00 FE   JMP $FE00   ; set file parameters


FFBD   4C F9 FD   JMP $FDF9   ; set filename parameters


FFC0   6C 1A 03   JMP ($031A)   ; (F34A) open a file


FFC3   6C 1C 03   JMP ($031C)   ; (F291) close a file


FFC6   6C 1E 03   JMP ($031E)   ; (F20E) set input device


FFC9   6C 20 03   JMP ($0320)   ; (F250) set output device


FFCC   6C 22 03   JMP ($0322)   ; (F333) restore I/O devices to default


FFCF   6C 24 03   JMP ($0324)   ; (F157) input char on current device


FFD2   6C 26 03   JMP ($0326)   ; (F1CA) output char on current device


FFD5   4C 9E F4   JMP $F49E   ; load ram from device


FFD8   4C DD F5   JMP $F5DD   ; save ram to device


FFDB   4C E4 F6   JMP $F6E4   ; set real time clock


FFDE   4C DD F6   JMP $F6DD   ; read real time clock


FFE1   6C 28 03   JMP ($0328)   ; (F6ED) check stop key


FFE4   6C 2A 03   JMP ($032A)   ; (F13E) get a character


FFE7   6C 2C 03   JMP ($032C)   ; (F32F) close all channels and files


FFEA   4C 9B F6   JMP $F69B   ; increment real time clock

FFED   4C 05 E5   JMP $E505   ; read organisation of screen into XY

FFF0   4C 0A E5   JMP $E50A   ; read/set XY cursor position


FFF3   4C 00 E5   JMP $E500   ; read base address of I/O devices


; unused

FFF6   .BY $52,$52,$42,$59

FFFA   .WD $FE43   ; NMI vector
FFFC   .WD $FCE2   ; RESET vector
FFFE   .WD $FF48   ; IRQ/BRK vector


Marko Makela
(Marko.Makela@HUT.FI)

*********

The end of the Project 64 etext of the Commodore 64 ROM disassembly.

*********
