Commodore 64 Kernal (sic) reference

Kernal ROM (Yes, folks, Commodore did spell it "kernal", not "kernel" as God intended) contains some highly useful routines for interfacing with the outside world.

Sources:
ftp://ftp.funet.fi/pub/cbm/c64/programming/documents/c64-kernal.txt
Bruce Bailey: Commodore 64 exposed, Melbourne House, 1983, ISBN 0861611330

The file in funet had all of this information in a too-wide-to-read format so I reformatted it, and the book had the stack use information for some routines.

Truth to tell, I doubt those stack usage numbers - or maybe the Commodore programmers did a Really Good Job =)

CINT

Description  : Initialize VIC & screen editor
Jump addr    : FF81
Vector addr  :
Real code    : FF5B
I/O param    : 
Reg usage
       Entry : 
          Use: A,X,Y
      Return : 

IOINIT

Description  : Initialize CIA & IRQ
Jump addr    : FF84
Vector addr  : 
Real code    : FDA3
I/O param    : 
Reg usage
       Entry : 
          Use: A,X,Y
      Return : 

RAMTAS

Description  : RAM test & search RAM end
Jump addr    : FF87
Vector addr  : 
Real code    : FD50
I/O param    : 
Reg usage
       Entry : 
          Use: A,X,Y
      Return : 

RESTOR

Description  : restore default I/O vectors
Jump addr    : FF8A
Vector addr  : 
Real code    : FD15
Stack use    : 2
I/O param    : 
Reg usage
       Entry : 
          Use: A,Y
      Return : 

VECTOR

Description  : read/set I/O vectors
Jump addr    : FF8D
Vector addr  : 
Real code    : FD1A
Stack use    : 2
I/O param    : in: C=0 moves from Y/X to vectors
                   C=1 moves vectors to Y/X
Reg usage
       Entry : X,Y
          Use: A,Y
      Return : X

SETMSG

Description  : enable/disable KERNAL messages
Jump addr    : FF90
Vector addr  : 
Real code    : FE18
I/O param    : in: A bit7=1 error msgs on
                     bit6=1 control msgs on
Reg usage
       Entry : A
          Use: A
      Return : 

SECOND

Description  : send secondary addr after listen
Jump addr    : FF93
Vector addr  : 
Real code    : EDB9
Stack use    : 0
I/O param    : in: A=secondary address
Reg usage
       Entry : A
          Use: A
      Return : 

TKSA

Description  : send secondary addr after talk
Jump addr    : FF96
Vector addr  : 
Real code    : EDC7
Stack use    : 0
I/O param    : in: A=secondary address
Reg usage
       Entry : A
          Use: A
      Return : 

MEMTOP

Description  : read/set top of memory
Jump addr    : FF99
Vector addr  : 
Real code    : FE25
Stack use    : 2
I/O param    : in: C=0; Y/X addresses
  Reg usage
       Entry : X,Y
          Use: 
      Return : X,Y
I/O param    : out: C=1; Y/X addresses
  Reg usage
       Entry : 
          Use: X,Y
      Return : X,Y

MEMBOT

Description  : read/set bottom of memory
Jump addr    : FF9C
Vector addr  : 
Real code    : FE34
Stack use    : 0
I/O param    : in: C=0; Y/X addresses
  Reg usage
       Entry : X,Y
          Use: 
      Return : X,Y
I/O param    : out: C=1; Y/X addresses
  Reg usage
       Entry : 
          Use: X,Y
      Return : X,Y

SCNKEY

Description  : Scan keyboard
Jump addr    : FF9F
Vector addr  : 
Real code    : EA87
Stack use    : 0
I/O param    : 
Reg usage
       Entry : 
          Use: A,X,Y
      Return : 

SETTMO

Description  : Set IEEE timeout
Jump addr    : FFA2
Vector addr  : 
Real code    : FE21
I/O param    : in: A bit7=1 disable, bit7=0 enable
Reg usage
       Entry : A
          Use: 
      Return : A

ACPTR

Description  : input byte from SERIAL
Jump addr    : FFA5
Vector addr  : 
Real code    : EE13
Stack use    : 13
I/O param    : out:A=byte, C=1 and ST=2 if timeout
Reg usage
       Entry : 
          Use: A
      Return : A

CIOUT

Description  : Output byte to SERIAL
Jump addr    : FFA8
Vector addr  : 
Real code    : EDDD
Stack use    : 0
I/O param    : in: A=byte, C=1 and ST=3 if timeout
Reg usage
       Entry : A
          Use: 
      Return : A

UNTLK

Description  : Untalk all SERIAL devices
Jump addr    : FFAB
Vector addr  : 
Real code    : EDEF
Stack use    : 0
I/O param    : 
Reg usage
       Entry : 
          Use: A
      Return : 

UNLSN

Description  : Unlisten all SERIAL devices
Jump addr    : FFAE
Vector addr  : 
Real code    : EDFE
Stack use    : 0
I/O param    : 
Reg usage
       Entry : 
          Use: A
      Return : 

LISTEN

Description  : Make SERIAL device listen
Jump addr    : FFB1
Vector addr  : 
Real code    : ED0C
Stack use    : 0
I/O param    : in: A=device number
Reg usage
       Entry : A
          Use: A
      Return : 

TALK

Description  : Make SERIAL device talk
Jump addr    : FFB4
Vector addr  : 
Real code    : ED09
Stack use    : 0
I/O param    : in: A=device number
Reg usage
       Entry : A
          Use: A
      Return : 

READST

Description  : Read I/O status byte
Jump addr    : FFB7
Vector addr  : 
Real code    : FE07
Stack use    : 2
I/O param    : out: A=status byte
Reg usage
       Entry : 
          Use: A
      Return : A

SETLFS

Description  : Set file parameters
Jump addr    : FFBA
Vector addr  : 
Real code    : FE00
Stack use    : 2
I/O param    : in: A=logical file number
                   X=device number
                   Y=secondary addr
Reg usage
       Entry : A,X,Y
          Use: 
      Return : A,X,Y

SETNAM

Description  : Set file name
Jump addr    : FFBD
Vector addr  : 
Real code    : FDF9
Stack use    : 0
I/O param    : in: A=length of filename
                   Y/X=pointer to name addr
Reg usage
       Entry : A,X,Y
          Use: 
      Return : A,X,Y

OPEN

Description  : Open logical file
Jump addr    : FFC0
Vector addr  : 031A
Real code    : F34A
Stack use    : 0
I/O param    : out: A=error# if C=1
Reg usage
       Entry : 
          Use: A,X,Y
      Return : 
Comment      : First call SETLFS and SETNAM with appropriate
               parameters.

CLOSE

Description  : Close a logical file
Jump addr    : FFC3
Vector addr  : 031C
Real code    : F291
Stack use    : 0
I/O param    : in: A=logical file number
Reg usage
       Entry : A
          Use: A,X,Y
      Return : 

CHKIN

Description  : Open channel for input
Jump addr    : FFC6
Vector addr  : 031E
Real code    : F20E
Stack use    : 0
I/O param    : in: X=logical file number
Reg usage
       Entry : X
          Use: 
      Return : A,X

CHKOUT

Description  : Open channel for output
Jump addr    : FFC9
Vector addr  : 0320
Real code    : F250
Stack use    : 0
I/O param    : in: X=logical file number
Reg usage
       Entry : X
          Use: 
      Return : A,X

CLRCHN

Description  : Restore default devices
Jump addr    : FFCC
Vector addr  : 0322
Real code    : F333
Stack use    : 9
I/O param    : 
Reg usage
       Entry : 
          Use: A,X
      Return : 

CHRIN

Description  : Input character
Jump addr    : FFCF
Vector addr  : 0324
Real code    : F147
Stack use    : 0
I/O param    : out:A=character, C=1 and ST=error
Reg usage
       Entry : 
          Use: A
      Return : A

CHROUT

Description  : Output character
Jump addr    : FFD2
Vector addr  : 0326
Real code    : F1CA
Stack use    : 0
I/O param    : in: A=character, C=1 and ST=error
Reg usage
       Entry : A
          Use: 
      Return : A

LOAD

Description  : Load after call SETLFS, SETNAM
Jump addr    : FFD5
Vector addr  : 0330
Real code    : F49E
Stack use    : 0
I/O param    : in: A=0 load, a=1 verify
                   Y/X = dest.addr if sec.addr=0
Reg usage
       Entry : A,X,Y
          Use: A,X,Y
      Return : A,X,Y

SAVE

Description  : Save.
Jump addr    : FFD8
Vector addr  : 0332
Real code    : F5DD
Stack use    : 0
I/O param    : in: A=zero page pointer to start.addr
                   Y/X=ending address
Reg usage
       Entry : A,X,Y
          Use: A,X,Y
      Return : 
Comments     : First call SETLFS and SETNAM with appropriate
               parameters

SETTIM

Description  : Set jiffy clock
Jump addr    : FFDB
Vector addr  : 
Real code    : F6E4
Stack use    : 2
I/O param    : in: A=MSB, X=middle, Y=LSB
Reg usage
       Entry : A,X,Y
          Use: 
      Return : 

RDTIM

Description  : Read jiffy clock
Jump addr    : FFDE
Vector addr  : 
Real code    : F6DD
Stack use    : 2
I/O param    : out:A=MSB, X=middle, Y=LSB
Reg usage
       Entry : 
          Use: A,X,Y
      Return : A,X,Y

STOP

Description  : Check stop key
Jump addr    : FFE1
Vector addr  : 0328
Real code    : F6ED
Stack use    : 0
I/O param    : out: Z=0 if STOP not used, X unchanged
                    Z=1 if STOP used, X changed
                    A=last line of keyboard matrix
Reg usage
       Entry : 
          Use: A
      Return : A (X if STOP used)

GETIN

Description  : Get a byte from channel
Jump addr    : FFE4
Vector addr  : 032A
Real code    : F13E
Stack use    : 0
I/O param    : out:keyboard:A=0 if buffer empty
  Reg usage
       Entry : 
          Use: A,X,Y
      Return : A
I/O param    : out:RS232:status byte
  Reg usage
       Entry : 
          Use: A
      Return : A
I/O param    : out:serial:status byte
  Reg usage
       Entry : 
          Use: A
      Return : A
I/O param    : out:tape:status byte
  Reg usage
       Entry : 
          Use: A,Y
      Return : A

CLALL

Description  : Close or abort all files
Jump addr    : FFE7
Vector addr  : 032C
Real code    : F32F
Stack use    : 11
I/O param    : 
Reg usage
       Entry : 
          Use: A,X
      Return : 

UDTIM

Description  : Update jiffy clock
Jump addr    : FFEA
Vector addr  : 
Real code    : F69B
I/O param    : 
Reg usage
       Entry : 
          Use: 
      Return : A,X
Comment      : To update the yiffy clock, JSR $6969. =)

SCREEN

Description  : Return screen size
Jump addr    : FFED
Vector addr  : 
Real code    : E505
Stack use    : 2
I/O param    : out:X=columns, Y=rows
Reg usage
       Entry : 
          Use: X,Y
      Return : X,Y
Comment      : I wonder if there's any actual use for this call???

PLOT

Description  : Read/set cursor position
Jump addr    : FFF0
Vector addr  : 
Real code    : E50A
Stack use    : 2
I/O param    : in: C=0, X=row, Y=column
  Reg usage
       Entry : X,Y
          Use: 
      Return : X,Y
I/O param    : out:C=1, X=row, Y=column
  Reg usage
       Entry : 
          Use: X,Y
      Return : X,Y

IOBASE

Description  : Returns the addr of I/O devices
Jump addr    : FFF3
Vector addr  : 
Real code    : E500
Stack use    : 2 (?)
I/O param    : out:Y/X=addr($DC00)
Reg usage
       Entry : 
          Use: X,Y
      Return : X,Y

Log in or register to write something here or to contact authors.