C= commodore 64 

Commodore VIC-20 ROM Addresses

;
;       Commodore VIC-20 ROM Memory Map
;       V1.0    1 Sep 1994

;
; Data types in headers (for reassembler):
;
;       DATA            Misc data
;       TEXT            String terminated with 00
;       WORD            Vectors in LO/HI byte pairs
;       CHIP            I/O Area
;       EMPTY           ROM containing FF's or AA's
;

;
; BASIC v2.0 interpreter ROM ($B000 - $DFFF)
; This is almost identical to the C64 one.
;

c000    -       Basic Restart Vectors                   WORD
c004    -       'cbmbasic'                              DATA
c00c    stmdsp  BASIC Command Vectors                   WORD
c052    fundsp  BASIC Function Vectors                  WORD
c080    optab   BASIC Operator Vectors                  WORD
c09e    reslst  BASIC Command Keyword Table             DATA
c129    msclst  BASIC Misc. Keyword Table               DATA
c140    oplist  BASIC Operator Keyword Table            DATA
c14d    funlst  BASIC Function Keyword Table            DATA
c19e    errtab  Error Message Table                     DATA
c328    errptr  Error Message Pointers                  WORD
c364    okk     Misc. Messages                          DATA
;c364           'ok'                            TEXT
;c369           'error'                                 DATA

c389    -       Unused byte                             DATA
c38a    fndfor  Find FOR/GOSUB Entry on Stack
c3b8    bltu    Open Space in Memory
c3fb    getstk  Check Stack Depth
c408    reason  Check Memory Overlap
c435    omerr   Output ?OUT OF MEMORY Error
c437    error   Error Routine
c469    errfin  Break Entry
c474    ready   Restart BASIC
c480    main    Input & Identify BASIC Line
c49c    main1   Get Line Number & Tokenise Text
c4a2    inslin  Insert BASIC Text
c533    linkprg Rechain Lines
c560    inlin   Input Line Into Buffer
c579    crunch  Tokenise Input Buffer
c613    fndlin  Search for Line Number
c642    scrtch  Perform [new]
c65e    clear   Perform [clr]
c68e    stxpt   Reset TXTPTR
c69c    list    Perform [list]
c717    qplop   Handle LIST Character
c742    for     Perform [for]
c7ae    newstt  BASIC Warm Start
c7c4    ckeol   Check End of Program
c7e1    gone    Prepare to execute statement
c7ed    gone3   Perform BASIC Keyword
c81d    restor  Perform [restore]
c82c    stop    Perform [stop], [end], break
c857    cont    Perform [cont]
c871    run     Perform [run]
c883    gosub   Perform [gosub]
c8a0    goto    Perform [goto]
c8d2    return  Perform [return]
c8f8    data    Perform [data]
c906    datan   Search for Next Statement / Line
c928    if      Perform [if]
c93b    rem     Perform [rem]
c94b    ongoto  Perform [on]
c96b    linget  Fetch linnum From BASIC
c9a5    let     Perform [let]
c9c4    putint  Assign Integer
c9d6    ptflpt  Assign Floating Point
c9d9    putstr  Assign String
c9e3    puttim  Assign TI$
ca2c    getspt  Add Digit to FAC#1
ca80    printn  Perform [print]#
ca86    cmd     Perform [cmd]
ca9a    strdon  Print String From Memory
caa0    print   Perform [print]
cab8    varop   Output Variable
cad7    crdo    Output CR/LF
cae8    comprt  Handle comma, TAB(, SPC(
cb1e    strout  Output String
cb3b    outspc  Output Format Character
cb4d    doagin  Handle Bad Data
cb7b    get     Perform [get]
cba5    inputn  Perform [input#]
cbbf    input   Perform [input]
cbea    bufful  Read Input Buffer
cbf9    qinlin  Do Input Prompt
cc06    read    Perform [read]
cc35    rdget   General Purpose Read Routine
ccfc    exint   Input Error Messages                    DATA
;ccfc   '?extra ignored'
;cd0c   '?redo from start'

cd1e    next    Perform [next]
cd61    donext  Check Valid Loop
cd8a    frmnum  Confirm Result
cd9e    frmevl  Evaluate Expression in Text
ce83    eval    Evaluate Single Term
cea8    pival   Constant - pi                           DATA
cead    qdot    Continue Expression
cef1    parchk  Expression in Brackets
cef7    chkcls  Confirm Character
cef7    -       -test ')'-
cefa    -       -test '('-
cefd    -       -test comma-
cf08    synerr  Output ?SYNTAX Error
cf0d    domin   Set up NOT Function
cf14    rsvvar  Identify Reserved Variable
cf28    isvar   Search for Variable
cf48    tisasc  Convert TI to ASCII String
cfa7    isfun   Identify Function Type
cfb1    strfun  Evaluate String Function
cfd1    numfun  Evaluate Numeric Function
cfe6    orop    Perform [or], [and]
d016    dorel   Perform <, =, >
d01b    numrel  Numeric Comparison
d02e    strrel  String Comparison
d07e    dim     Perform [dim]
d08b    ptrget  Identify Variable
d0e7    ordvar  Locate Ordinary Variable
d11d    notfns  Create New Variable
d128    notevl  Create Variable
d194    aryget  Allocate Array Pointer Space
d1a5    n32768  Constant 32768 in Flpt                  DATA
d1aa    facinx  FAC#1 to Integer in (AC/YR)
d1b2    intidx  Evaluate Text for Integer
d1bf    ayint   FAC#1 to Positive Integer
d1d1    isary   Get Array Parameters
d218    fndary  Find Array
d245    bserr   '?bad subscript error'
d248    -       '?illegal quantity error'
d261    notfdd  Create Array
d30e    inlpn2  Locate Element in Array
d34c    umult   Number of Bytes in Subscript
d37d    fre     Perform [fre]
d391    givayf  Convert Integer in (AC/YR) to Flpt
d39e    pos     Perform [pos]
d3a6    errdir  Confirm Program Mode
d3e1    getfnm  Check Syntax of FN
d3f4    fndoer  Perform [fn]
d465    strd    Perform [str$]
d487    strlit  Set Up String
d4d5    putnw1  Save String Descriptor
d4f4    getspa  Allocate Space for String
d526    garbag  Garbage Collection
d5bd    dvars   Search for Next String
d606    grbpas  Collect a String
d63d    cat     Concatenate Two Strings
d67a    movins  Store String in High RAM
d6a3    frestr  Perform String Housekeeping
d6db    frefac  Clean Descriptor Stack
d6ec    chrd    Perform [chr$]
d700    leftd   Perform [left$]
d72c    rightd  Perform [right$]
d737    midd    Perform [mid$]
d761    pream   Pull sTring Parameters
d77c    len     Perform [len]
d782    len1    Exit String Mode
d78b    asc     Perform [asc]
d79b    gtbytc  Evaluate Text to 1 Byte in XR
d7ad    val     Perform [val]
d7b5    strval  Convert ASCII String to Flpt
d7eb    getnum  Get parameters for POKE/WAIT
d7f7    getadr  Convert FAC#1 to Integer in LINNUM
d80d    peek    Perform [peek]
d824    poke    Perform [poke]
d82d    wait    Perform [wait]
d849    faddh   Add 0.5 to FAC#1
d850    fsub    Perform Subtraction
d862    fadd5   Normalise Addition
d867    fadd    Perform Addition
d947    negfac  2's Complement FAC#1
d97e    overr   Output ?OVERFLOW Error
d983    mulshf  Multiply by Zero Byte
d9bc    fone    Table of Flpt Constants                 DATA
d9ea    log     Perform [log]
da28    fmult   Perform Multiply
da59    mulply  Multiply by a Byte
da8c    conupk  Load FAC#2 From Memory
dab7    muldiv  Test Both Accumulators
dad4    mldvex  Overflow / Underflow
dae2    mul10   Multiply FAC#1 by 10
daf9    tenc    Constant 10 in Flpt                     DATA
dafe    div10   Divide FAC#1 by 10
db07    fdiv    Divide FAC#2 by Flpt at (AC/YR)
db0f    fdivt   Divide FAC#2 by FAC#1
dba2    movfm   Load FAC#1 From Memory
dbc7    mov2f   Store FAC#1 in Memory
dbfc    movfa   Copy FAC#2 into FAC#1
dc0c    movaf   Copy FAC#1 into FAC#2
dc1b    round   Round FAC#1
dc2b    sign    Check Sign of FAC#1
dc39    sgn     Perform [sgn]
dc58    abs     Perform [abs]
dc5b    fcomp   Compare FAC#1 With Memory
dc9b    qint    Convert FAC#1 to Integer
dccc    int     Perform [int]
dcf3    fin     Convert ASCII String to a Number in FAC#1
ddb3    n0999   String Conversion Constants             DATA
ddc2    inprt   Output 'IN' and Line Number
dddd    fout    Convert FAC#1 to ASCII String
de68    foutim  Convert TI to String
df11    fhalf   Table of Constants                      DATA
df71    sqr     Perform [sqr]
df7b    fpwrt   Perform power ($)
dfb4    negop   Negate FAC#1
dfbf    logeb2  Table of Constants                      DATA
dfed    exp     Perform [exp]

;
;       VIC-20 Kernel ROM
;

;e000   (exp continues) EXP continued From BASIC ROM
e040    polyx   Series Evaluation
e08a    rmulc   Constants for RND                       DATA
e094    rnd     Perform [rnd]
e0f6    bioerr  Handle I/O Error in BASIC
e109    bchout  Output Character
e10f    bchin   Input Character
e115    bckout  Set Up For Output
e11b    bckin   Set Up For Input
e121    bgetin  Get One Character
e127    sys     Perform [sys]
e153    savet   Perform [save]
e162    verfyt  Perform [verify / load]
e1bb    opent   Perform [open]
e1c4    closet  Perform [close]
e1d1    slpara  Get Parameters For LOAD/SAVE
e1fd    combyt  Get Next One Byte Parameter
e203    deflt   Check Default Parameters
e20b    cmmerr  Check For Comma
e216    ocpara  Get Parameters For OPEN/CLOSE
e261    cos     Perform [cos]
e268    sin     Perform [sin]
e2b1    tan     Perform [tan]
e2dd    pi2     Table of Trig Constants                 DATA

;e2dd   1.570796327     pi/2
;e2e2   6.28318531      pi*2
;e2e7   0.25

;e2ec   #05     (counter)
;e2ed   -14.3813907
;e2f2   42.0077971
;e2f7   -76.7041703
;e2fc   81.6052237
;e301   -41.3417021
;e306   6.28318531

e30b    atn     Perform [atn]
e33b    atncon  Table of ATN Constants                  DATA

;e33b   #0b     (counter)
;e3ec   -0.000684793912
;e341    0.00485094216
;e346   -0.161117018
;e34b    0.034209638
;e350   -0.0542791328
;e355    0.0724571965
;e35a   -0.0898023954
;e35f    0.110932413
;e364   -0.142839808
;e369    0.19999912
;e36e   -0.333333316
;e373    1.00

e378    init    BASIC Cold Start
e387    initat  CHRGET For Zero-page
e39f    rndsed  RND Seed For zero-page                  DATA
;e39f   0.811635157
e3a4    initcz  Initialize BASIC RAM
e404    initms  Output Power-Up Message
e429    words   Power-Up Message                        DATA
;e429   ' bytes free'
;e436   '**** cbm basic v2 ****'

e44f    bvtrs   Table of BASIC Vectors (for 0300)       WORD
e45b    initv   Initialize Vectors
e467    bassft  BASIC Warm Restart [RUNSTOP-RESTORE]

e475    ?
e47c    -       Unused Bytes For Future Patches         EMPTY
e4a0    -       Serial Output 1
e4a9    -       Serial Output 0
e4b2    -       Get Serial Data And Clock In
e4bc    -       Get Secondary Address patch for Serial LOAD/VERIFY
e4c1    -       Relocated Load patch for Serial LOAD/VERIFY
e4cf    -       Tape Write patch for CLOSE
e4da    -       Unused                                  EMPTY

e500    iobase  Return I/O Base Address
e505    screen  Return Screen Organization
e50a    plot    Read / Set Cursor X/Y Position
e518    cint1   Initialize I/O
e55f    -       Clear Screen
e581    -       Home Cursor
e587    -       Set Screen Pointers
e5b5    -       Set I/O Defaults (Unused Entry)
e5bb    -       Set I/O Defaults
e5cf    lp2     Get Character From Keyboard Buffer
e5e5    -       Input From Keyboard
e64f    -       Input From Screen or Keyboard
e6b8    -       Quotes Test
e6c5    -       Set Up Screen Print
e6ea    -       Advance Cursor
e719    -       Retreat Cursor
e72d    -       Back on to Previous Line
e742    -       Output to Screen
e756    -       -unshifted characters-
e800    -       -shifted characters-
e8c3    -       Go to Next Line
e8d8    -       Output 
e8e8    -       Check Line Decrement
e8fa    -       Check Line Increment
e912    -       Set Colour Code
e921    -       Colour Code Table                       DATA

e929    ?                                               DATA

e975    -       Scroll Screen
e9ee    -       Open A Space On The Screen
ea56    -       Move A Screen Line
ea6e    -       Syncronise Colour Transfer
ea7e    -       Set Start of Line
ea8d    -       Clear Screen Line
eaa1    -       Print To Screen
eab2    -       Syncronise Colour Pointer
eabf    -       Main IRQ Entry Point
eb1e    scnkey  Scan Keyboard
eb71    -       Process Key Image
ec46    -       Pointers to Keyboard decoding tables    WORD
ec5e    -       Keyboard Decoding Table - Unshifted     DATA
ec9f    -       Keyboard Decoding Table - Shifted       DATA
ece0    -       Keyboard Decoding Table - Commodore     DATA
ed21    -       Graphics/Text Control
ed69    -       Keyboard Decoding Table                 DATA
eda3    -       Keyboard Decoding Table - Control       DATA

ede4    -       Video Chip Set Up Table                 DATA
edf4    -       Shift-Run Equivalent                    DATA
edfd    -       Low Byte Screen Line Addresses          DATA
ee14    talk    Send TALK Command on Serial Bus
ee17    listn   Send LISTEN Command on Serial Bus
ee49    -       Send Data On Serial Bus
eeb4    -       Flag Errors
eeb4    Status #80 - device not present
eeb7    Status #03 - write timeout

eec0    second  Send LISTEN Secondary Address
eec5    -       Clear ATN
eece    tksa    Send TALK Secondary Address
eed3    -       Wait For Clock
eee4    ciout   Send Serial Deferred
eef6    untlk   Send UNTALK on Serial Bus
ef04    unlsn   Send UNLISTEN on Serial Bus
ef19    acptr   Receive From Serial Bus
ef84    -       Serial Clock On
ef8d    -       Serial Clock Off
ef96    -       Delay 1 ms
efa3    -       RS-232 Send
efee    -       Send New RS-232 Byte
f016    -       'No DSR' Error
f019    -       'No CTS' Error
f021    -       Disable Timer
f027    -       Compute Bit Count
f036    -       RS-232 Receive
f05b    -       Set Up To Receive
f068    -       Process RS-232 Byte
f0bc    -       Submit to RS-232
f0ed    -       Send to RS-232 Buffer
f116    -       Input From RS-232
f14f    -       Get From RS-232
f160    -       Serial Bus Idle

f174    -       Table of Kernal I/O Messages            DATA
;f174   ' i/o error #'
; ...
;f1df   'ok'

f1e2    -       Print Message if Direct
f1e6    -       Print Message
f1f5    getin   Get a byte
f20e    chrin   Input a byte
f250    -       Get From Tape / Serial / RS-232
f27a    chrout  Output One Character
f2c7    chkin   Set Input Device
f309    chkout  Set Output Devic
f34a    close   Close File
f3cf    -       Find File
f3df    -       Set File values
f3ef    clall   Abort All Files
f3f3    clrchn  Restore Default I/O
f40a    open    Open File
f495    -       Send Secondary Address
f4c7    -       Open RS-232
f542    load    Load RAM From Device
f549    LOAD    -load-
f55c    -       Load File From Serial Bus
f5ca    -       Load File From Tape
f647    -       Print "SEARCHING"
f659    -       Print Filename
f66a    -       Print "LOADING / VERIFYING"
f675    save    Save RAM To Device
f685    SAVE    -save-
f692    -       Save to Serial Bus
f6f1    -       Save to Tape
f728    -       Print "SAVING"
f734    udtim   Increment Real-Time Clock
f760    rdtim   Read Real-Time Clock
f767    settim  Set Real-Time Clock
f770    STOP    Check STOP Key

;f77e   -       Output I/O Error Messages
f77e    'too many files'
f781    'file open'
f784    'file not open'
f787    'file not found'
f78a    'device not present'
f78d    'not input file'
f790    'not output file'
f793    'missing filename'
f796    'illegal device number'

f7af    -       Find Any Tape Header
f7e7    -       Write Tape Header
f84d    -       Get Buffer Address
f854    -       Set Buffer Stat / End Pointers
f867    -       Find Specific Tape Header
f88a    -       Bump Tape Pointer
f894    -       Print "PRESS PLAY ON TAPE"
f8ab    -       Check Tape Status
f8b7    -       Print "PRESS RECORD..."
f8c0    -       Initiate Tape Read
f8e3    -       Initiate Tape Write
f8f4    -       Common Tape Code
f94b    -       Check Tape Stop
f95d    -       Set Read Timing
f98e    -       Read Tape Bits
faad    -       Store Tape Characters

fbd2    -       Reset Tape Pointer
fbdb    -       New Character Setup
fbea    -       Send Tone to Tape
fc06    -       Write Data to Tape
fc95    -       Write Tape Leader
fccf    -       Restore Normal IRQ
fcf6    -       Set IRQ Vector
fd08    -       Kill Tape Motor
fd11    -       Check Read / Write Pointer
fd1b    -       Bump Read / Write Pointer
fd22    -       Power-Up RESET Entry
fd3f    -       Check For A-ROM
fd4d    -       ROM Mask 'a0CBM'                        DATA
fd52    restor  Restore Kernal Vectors (at 0314)
fd57    vector  Change Vectors For User
fd6d    -       Kernal Reset Vectors                    WORD
fd8d    ramtas  Initialise System Constants
fdf1    -       IRQ Vectors For Tape I/O                WORD
fdf9    ioinit  Initialise I/O
fe39    -       Enable Timer
fe49    setnam  Set Filename
fe50    setlfs  Set Logical File Parameters
fe57    readss  Get I/O Status Word
fe66    setmsg  Control OS Messages
fe6f    settmo  Set IEEE Timeout
fe73    memtop  Set / Read Top of Memory
fe82    membot  Set / Read Bottom of Memory
fea9            NMI Transfer Entry
fed2            Warm Start Basic [BRK]
;fed2   User Vector (default BRK)

ff56            Exit Interrupt
ff5b            RS-232 Timing Table                     DATA
ff72            IRQ Transfer Entry


;
;ff8a   Vic-20 Kernel Jump Table
;
ff8a    jmp $fd52       restor          Restore Vectors
ff8d    jmp $fd57       vector          Change Vectors For User
ff90    jmp $fe66       setmsg          Control OS Messages
ff93    jmp $eec0       secnd           Send SA After Listen
ff96    jmp $eece       tksa            Send SA After Talk
ff99    jmp $fe73       memtop          Set/Read System RAM Top
ff9c    jmp $fe82       membot          Set/Read System RAM Bottom
ff9f    jmp $eb1e       scnkey          Scan Keyboard
ffa2    jmp $fe6f       settmo          Set Timeout In IEEE
ffa5    jmp $ef19       acptr           Handshake Serial Byte In
ffa8    jmp $eee4       ciout           Handshake Serial Byte Out
ffab    jmp $eef6       untalk          Command Serial Bus UNTALK
ffae    jmp $ef04       unlsn           Command Serial Bus UNLISTEN
ffb1    jmp $ee17       listn           Command Serial Bus LISTEN
ffb4    jmp $ee14       talk            Command Serial Bus TALK
ffb7    jmp $fe57       readss          Read I/O Status Word
ffba    jmp $fe50       setlfs          Set Logical File Parameters
ffbd    jmp $fe49       setnam          Set Filename
ffc0    jmp ($031a)     (iopen)         Open Vector [F40A]
ffc3    jmp ($031c)     (iclose)        Close Vector [F34A]
ffc6    jmp ($031e)     (ichkin)        Set Input [F2C7]
ffc9    jmp ($0320)     (ichkout)       Set Output [F309]
ffcc    jmp ($0322)     (iclrch)        Restore I/O Vector [F353]
ffcf    jmp ($0324)     (ichrin)        Input Vector, chrin [F20E]
ffd2    jmp ($0326)     (ichrout)       Output Vector, chrout [F27A]
ffd5    jmp $f542       load            Load RAM From Device
ffd8    jmp $f675       save            Save RAM To Device
ffdb    jmp $f767       settim          Set Real-Time Clock
ffde    jmp $f760       rdtim           Read Real-Time Clock
ffe1    jmp ($0328)     (istop)         Test-Stop Vector [F770]
ffe4    jmp ($032a)     (igetin)        Get From Keyboad [F1F5]
ffe7    jmp ($032c)     (iclall)        Close All Channels And Files [F3EF]
ffea    jmp $f734       udtim           Increment Real-Time Clock
ffed    jmp $e505       screen          Return Screen Organization
fff0    jmp $e50a       plot            Read / Set Cursor X/Y Position
fff3    jmp $e500       iobase          Return I/O Base Address

;fff6   Unused Vectors
fff6    [ffff]
fff8    [ffff]

;fffa   Transfer Vectors
fffa    [fea9]          NMI
fffc    [fd22]          RESET
fffe    [ff72]          IRQ




Converted to a Human Readable format by the IIRG