;
-; CBM610 generic definitions.
+; Zeropage and I/O definitions for the CBM 610
;
+; Taken from a kernal disassembly done by myself in 1987.
+;
+; Ullrich von Bassewitz, 28.09.1998
+
+
+; ---------------------------------------------------------------------------
+; Zeropage stuff
+
+ExecReg = $0000
+IndReg = $0001
+
+; Up to $20 and $60-8F used by runtime and fixed values
+; -----------------------------------
+
+KbdScanBuf = $20 ; Intermediate for keyboard scan
+; RS232 stuff
+RecvHead = $21 ; Head of receive buffer
+RecvTail = $22 ; Tail of receive buffer
+RecvFreeCnt = $23 ; Number of bytes in receive buffer
+SendHead = $24 ; Head of send buffer
+SendTail = $25 ; Tail of send buffer
+SendFreeCnt = $26 ; Number of bytes free in send buffer
+
+FileNameAdrLo = $90
+FileNameAdrHi = $91
+FileNameAdrSeg = $92
+SaveAdrLow = $93
+SaveAdrHi = $94
+SaveAdrSeg = $95
+EndAdrLow = $96
+EndAdrHi = $97
+EndAdrSeg = $98
+StartAdrLow = $99
+StartAdrHi = $9A
+StartAdrSeg = $9B
+Status = $9C
+FileNameLen = $9D
+LogicalAdr = $9E
+FirstAdr = $9F
+SecondAdr = $A0
+DefInpDev = $A1
+DefOutDev = $A2
+TapeBufPtr = $A3
+TapeBufPtrSeg = $A5
+rs232BufPtr = $A6
+rs232BufPtrSeg = $A8
+StopKeyFlag = $A9
+CTemp = $AA
+snsw1 = $AB
+SegChgPtr = $AC
+PChighSave = $AE
+PClowSave = $AF
+SRSave = $B0
+ACSave = $B1
+XRSave = $B2
+YRSave = $B3
+SPSave = $B4
+IndSegSave = $B5
+IRQSaveHi = $B7
+IRQSaveLo = $B8
+Adr1 = $B9
+Adr2 = $BB
+MoniCntr = $BD
+MoniTmp = $BE
+MoniDevNr = $BF
+PgmKeyBuf = $C0
+PgmKeyPtr = $C2
+sedsal = $C4
+sedeal = $C6
+CharPtr = $C8
+CURS_Y = $CA
+CURS_X = $CB
+GrafMode = $CC
+LastIndex = $CD
+LastLine = $CE
+LastCol = $CF
+crsw = $D0
+KeyIndex = $D1
+QuoteSw = $D2
+Insrt = $D3
+Config = $D4
+LastLinePos = $D5
+PgmKeyIndex = $D6
+RepeatCount = $D7
+RepeatDelay = $D8
+sedt1 = $D9 ; Temp
+sedt2 = $DA ; Temp, frequently used
+PrtData = $DB
+ScreenTop = $DC
+ScreenBot = $DD
+ScreenLeft = $DE
+ScreenRight = $DF
+ModKey = $E0
+NorKey = $E1
+BitTable = $E2
+
+
+; ---------------------------------------------------------------------------
+; Page 3 variables
+
+;
+; system ram vectors
+;
+
+IRQVec = $0300
+BRKVec = $0302
+NMIVec = $0304
+openVec = $0306
+closeVec = $0308
+chkinVec = $030A
+ckoutVec = $030C
+clrchVec = $030E
+basinVec = $0310
+bsoutVec = $0312
+stopVec = $0314
+getinVec = $0316
+clallVec = $0318
+loadVec = $031A
+saveVec = $031C
+usrcmd = $031E
+escvec = $0320
+ctrlvec = $0322
+secndVec = $0324
+tksaVec = $0326
+acptrVec = $0328
+cioutVec = $032A
+untlkVec = $032C
+unlsnVec = $032E
+listnVec = $0330
+talkVec = $0332
+
+;
+;
+;
+
+LogicalAdrTable = $0334
+FirstAdrTable = $033E
+SecondAdrTable = $0348
+SysMemBot = $0352
+SysMemTop = $0355
+UsrMemBot = $0358
+UsrMemTop = $035B
+TimOut = $035E
+VerifyFlag = $035F
+DevTabIndex = $0360
+MsgFlag = $0361
+CassBufPtr = $0362
+t1 = $0363
+t2 = $0364
+XSave = $0365
+SaveX = $0366
+SaveXt = $0367
+temp = $0368
+alarm = $0369
+TapeVec = $036A
+LoadStAdr = $036F
+CassMotFlag = $0375
+m6551Ctrl = $0376
+m6551Cmd = $0377
+rs232status = $037A
+dcddsr = $037B
+rs232head = $037C
+rs232tail = $037D
+PgmKeyEnd = $0380
+PgmKeySeg = $0382
+PgmKeySize = $0383
+RVS = $0397
+linetmp = $0398
+LastPrtChar = $0399
+InsertFlag = $039A
+ScrollFlag = $039B
+FktTemp = $039C
+PgmKeyIdx = $039D
+LogScrollFlag = $039E
+BellMode = $039F ; Bell on/off 00 = an
+SegSave = $03A0
+TabStopTable = $03A1 ; 80 bits for tabstops
+KeyBuf = $03AB ; Keyboard buffer
+FUNKEY_VEC = $03B5 ; Vector for function key handline
+FunKeyTmp = $03B7
+sedt3 = $03B9
+MoniSegSave = $03f0
+wstvec = $03F8
+WstFlag = $03FA ; Warm start flag
; ---------------------------------------------------------------------------
-; Vector and other locations
+; Screen size
-FUNKEY_VEC = $03B5
+XSIZE = 80
+YSIZE = 25
; ---------------------------------------------------------------------------
-; I/O
+; I/O definitions
+
+
+; I/O $d800: CRTC 6545
CRTC = $D800
CRTC_ADDR = $00
CRTC_DATA = $01
+
+; I/O $da00: SID 6581
+
+; sid = $da00
+
+Osc1 = $00
+Osc2 = $07
+Osc3 = $0e
+
+FreqLo = $00
+FreqHi = $01
+PulseF = $02
+PulseC = $03
+OscCtl = $04
+AtkDcy = $05
+SusRel = $06
+
+FiCtlLo = $15
+FiCtlHi = $16
+Resonance = $17
+Volume = $18
+PotX = $19
+PotY = $1A
+Random = $1B
+Env3 = $1C
+
+
+
+; I/O $db00: CIA 6526 Inter Process Communication
+
+; IPCcia = $db00
+
+PortA = $00
+PortB = $01
+DDRA = $02
+DDRB = $03
+TimALo = $04
+TimAHi = $05
+TimBLo = $06
+TimBHi = $07
+TOD10 = $08
+TODsec = $09
+TODmin = $0A
+TODhour = $0B
+SerDataReg = $0C
+IntCtrReg = $0D
+CtrlA = $0E
+CtrlB = $0F
+
+
+
+; I/O $dc00: CIA 6526
+
+; cia = $dc00
+
+
+
+; I/O $dd00: ACIA 6551
+
+; acia = $dd00
+
+ADataReg = $00
+AStatusReg = $01
+ACmdReg = $02
+ACtrlReg = $03
+
+
+
+; I/O $de00: Triport #1 6525
+
+; tpi1 = $de00
+
+tpiPortA = $00
+tpiPortB = $01
+tpiPortC = $02
+tpiIntLatch = $02
+tpiDDRA = $03
+tpiDDRB = $04
+tpiDDRC = $05
+tpiIntMask = $05
+tpiCtrlReg = $06
+tpiActIntReg = $07
+
+
+
+; I/O $df00: Triport #2 6525
+
+; tpi2 = $df00
+
+