mirror of
https://github.com/cc65/cc65.git
synced 2025-08-08 06:25:17 +00:00
Started to add support for the P500 aka CBM510
git-svn-id: svn://svn.cc65.org/cc65/trunk@911 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
35
libsrc/cbm510/Makefile
Normal file
35
libsrc/cbm510/Makefile
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
#
|
||||||
|
# makefile for CC65 runtime library
|
||||||
|
#
|
||||||
|
|
||||||
|
.SUFFIXES: .o .s .c
|
||||||
|
|
||||||
|
%.o: %.c
|
||||||
|
@$(CC) $(CFLAGS) $<
|
||||||
|
@$(AS) -o $@ $(AFLAGS) $(*).s
|
||||||
|
|
||||||
|
%.o: %.s
|
||||||
|
@$(AS) -g -o $@ $(AFLAGS) $<
|
||||||
|
|
||||||
|
OBJS = _scrsize.o \
|
||||||
|
banking.o \
|
||||||
|
break.o \
|
||||||
|
cgetc.o \
|
||||||
|
clrscr.o \
|
||||||
|
color.o \
|
||||||
|
cputc.o \
|
||||||
|
crt0.o \
|
||||||
|
crtc.o \
|
||||||
|
kbhit.o \
|
||||||
|
kirq.o \
|
||||||
|
kplot.o \
|
||||||
|
kscnkey.o \
|
||||||
|
kudtim.o \
|
||||||
|
pokesys.o \
|
||||||
|
rs232.o
|
||||||
|
|
||||||
|
all: $(OBJS)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@rm -f $(OBJS)
|
||||||
|
|
15
libsrc/cbm510/_scrsize.s
Normal file
15
libsrc/cbm510/_scrsize.s
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
;
|
||||||
|
; Ullrich von Bassewitz, 13.09.2000
|
||||||
|
;
|
||||||
|
; Screen size variables
|
||||||
|
;
|
||||||
|
|
||||||
|
.export xsize, ysize
|
||||||
|
|
||||||
|
.rodata
|
||||||
|
|
||||||
|
xsize: .byte 40
|
||||||
|
ysize: .byte 25
|
||||||
|
|
||||||
|
|
||||||
|
|
41
libsrc/cbm510/banking.s
Normal file
41
libsrc/cbm510/banking.s
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
;
|
||||||
|
; Ullrich von Bassewitz, 13.09.2001
|
||||||
|
;
|
||||||
|
; Banking routines for the 510.
|
||||||
|
;
|
||||||
|
|
||||||
|
.export set_bank, sys_bank, restore_bank
|
||||||
|
.importzp ptr1
|
||||||
|
|
||||||
|
.include "zeropage.inc"
|
||||||
|
|
||||||
|
.code
|
||||||
|
|
||||||
|
.proc sys_bank
|
||||||
|
pha
|
||||||
|
lda IndReg
|
||||||
|
sta IndSegSave
|
||||||
|
lda #$0F
|
||||||
|
sta IndReg
|
||||||
|
pla
|
||||||
|
rts
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
.proc set_bank
|
||||||
|
pha
|
||||||
|
lda IndReg
|
||||||
|
sta IndSegSave
|
||||||
|
pla
|
||||||
|
sta IndReg
|
||||||
|
rts
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
.proc restore_bank
|
||||||
|
pha
|
||||||
|
lda IndSegSave
|
||||||
|
sta IndReg
|
||||||
|
pla
|
||||||
|
rts
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
|
418
libsrc/cbm510/crt0.s
Normal file
418
libsrc/cbm510/crt0.s
Normal file
@@ -0,0 +1,418 @@
|
|||||||
|
;
|
||||||
|
; Startup code for cc65 (CBM 500 version)
|
||||||
|
;
|
||||||
|
; This must be the *first* file on the linker command line
|
||||||
|
;
|
||||||
|
|
||||||
|
.export _exit
|
||||||
|
.import initlib, donelib
|
||||||
|
.import push0, _main
|
||||||
|
.import __BSS_RUN__, __BSS_SIZE__
|
||||||
|
.import irq, nmi
|
||||||
|
.import k_irq, k_nmi, k_plot, k_udtim, k_scnkey
|
||||||
|
|
||||||
|
.include "zeropage.inc"
|
||||||
|
.include "io.inc"
|
||||||
|
|
||||||
|
|
||||||
|
; ------------------------------------------------------------------------
|
||||||
|
; Define and export the ZP variables for the CBM510 runtime
|
||||||
|
|
||||||
|
.exportzp sp, sreg, regsave
|
||||||
|
.exportzp ptr1, ptr2, ptr3, ptr4
|
||||||
|
.exportzp tmp1, tmp2, tmp3, tmp4
|
||||||
|
.exportzp regbank, zpspace
|
||||||
|
.exportzp vic, sid, IPCcia, cia, acia, tpi1, tpi2
|
||||||
|
.exportzp ktab1, ktab2, ktab3, ktab4, time, RecvBuf, SendBuf
|
||||||
|
|
||||||
|
.zeropage
|
||||||
|
|
||||||
|
zpstart = *
|
||||||
|
sp: .res 2 ; Stack pointer
|
||||||
|
sreg: .res 2 ; Secondary register/high 16 bit for longs
|
||||||
|
regsave: .res 2 ; slot to save/restore (E)AX into
|
||||||
|
ptr1: .res 2
|
||||||
|
ptr2: .res 2
|
||||||
|
ptr3: .res 2
|
||||||
|
ptr4: .res 2
|
||||||
|
tmp1: .res 1
|
||||||
|
tmp2: .res 1
|
||||||
|
tmp3: .res 1
|
||||||
|
tmp4: .res 1
|
||||||
|
regbank: .res 6 ; 6 byte register bank
|
||||||
|
|
||||||
|
zpspace = * - zpstart ; Zero page space allocated
|
||||||
|
|
||||||
|
.code
|
||||||
|
|
||||||
|
; ------------------------------------------------------------------------
|
||||||
|
; BASIC header and a small BASIC program. Since it is not possible to start
|
||||||
|
; programs in other banks using SYS, the BASIC program will write a small
|
||||||
|
; machine code program into memory at $100 and start that machine code
|
||||||
|
; program. The machine code program will then start the machine language
|
||||||
|
; code in bank 0, which will initialize the system by copying stuff from
|
||||||
|
; the system bank, and start the application.
|
||||||
|
;
|
||||||
|
; Here's the basic program that's in the following lines:
|
||||||
|
;
|
||||||
|
; 10 for i=0 to 4
|
||||||
|
; 20 read j
|
||||||
|
; 30 poke 256+i,j
|
||||||
|
; 40 next i
|
||||||
|
; 50 sys 256
|
||||||
|
; 60 data 120,169,0,133,0
|
||||||
|
;
|
||||||
|
; The machine program in the data lines is:
|
||||||
|
;
|
||||||
|
; sei
|
||||||
|
; lda #$00
|
||||||
|
; sta $00 <-- Switch to bank 0 after this command
|
||||||
|
;
|
||||||
|
; Initialization is not only complex because of the jumping from one bank
|
||||||
|
; into another. but also because we want to save memory, and because of
|
||||||
|
; this, we will use the system memory ($00-$3FF) for initialization stuff
|
||||||
|
; that is overwritten later.
|
||||||
|
;
|
||||||
|
|
||||||
|
; To make things more simple, make the code of this module absolute.
|
||||||
|
|
||||||
|
.org $0001
|
||||||
|
Head: .byte $03,$00,$11,$00,$0a,$00,$81,$20,$49,$b2,$30,$20,$a4,$20,$34,$00
|
||||||
|
.byte $19,$00,$14,$00,$87,$20,$4a,$00,$27,$00,$1e,$00,$97,$20,$32,$35
|
||||||
|
.byte $36,$aa,$49,$2c,$4a,$00,$2f,$00,$28,$00,$82,$20,$49,$00,$39,$00
|
||||||
|
.byte $32,$00,$9e,$20,$32,$35,$36,$00,$4f,$00,$3c,$00,$83,$20,$31,$32
|
||||||
|
.byte $30,$2c,$31,$36,$39,$2c,$30,$2c,$31,$33,$33,$2c,$30,$00,$00,$00
|
||||||
|
|
||||||
|
; Since we need some vectors to access stuff in the system bank for our own,
|
||||||
|
; we will include them here, starting from $60:
|
||||||
|
|
||||||
|
.res $60-*
|
||||||
|
|
||||||
|
vic: .word $d800
|
||||||
|
sid: .word $da00
|
||||||
|
IPCcia: .word $db00
|
||||||
|
cia: .word $dc00
|
||||||
|
acia: .word $dd00
|
||||||
|
tpi1: .word $de00
|
||||||
|
tpi2: .word $df00
|
||||||
|
ktab1: .word $ea29
|
||||||
|
ktab2: .word $ea89
|
||||||
|
ktab3: .word $eae9
|
||||||
|
ktab4: .word $eb49
|
||||||
|
time: .dword $0000
|
||||||
|
RecvBuf: .word $0100 ; RS232 received buffer
|
||||||
|
SendBuf: .word $0200 ; RS232 send buffer
|
||||||
|
|
||||||
|
|
||||||
|
; The code in the target bank when switching back will be put at the bottom
|
||||||
|
; of the stack. We will jump here to switch segments. The range $F2..$FF is
|
||||||
|
; not used by any kernal routine.
|
||||||
|
|
||||||
|
.res $F8-*
|
||||||
|
Back: ldx spsave
|
||||||
|
txs
|
||||||
|
lda IndReg
|
||||||
|
sta ExecReg
|
||||||
|
|
||||||
|
; The following code is a copy of the code that is poked in the system bank
|
||||||
|
; memory by the basic header program, it's only for documentation and not
|
||||||
|
; actually used here:
|
||||||
|
|
||||||
|
sei
|
||||||
|
lda #$01
|
||||||
|
sta ExecReg
|
||||||
|
|
||||||
|
; This is the actual starting point of our code after switching banks for
|
||||||
|
; startup. Beware: The following code will get overwritten as soon as we
|
||||||
|
; use the stack (since it's in page 1)!
|
||||||
|
|
||||||
|
tsx
|
||||||
|
stx spsave ; Save the system stackpointer
|
||||||
|
ldx #$FF
|
||||||
|
txs ; Set up our own stack
|
||||||
|
|
||||||
|
; Set the interrupt, NMI and other vectors
|
||||||
|
|
||||||
|
ldy #vectable_size
|
||||||
|
L0: lda vectable-1,y
|
||||||
|
sta $FF80,y
|
||||||
|
dey
|
||||||
|
bne L0
|
||||||
|
|
||||||
|
; Switch the indirect segment to the system bank
|
||||||
|
|
||||||
|
lda #$0F
|
||||||
|
sta IndReg
|
||||||
|
|
||||||
|
; Copy the kernal zero page ($90-$F2) from the system bank
|
||||||
|
|
||||||
|
lda #$90
|
||||||
|
sta ptr1
|
||||||
|
lda #$00
|
||||||
|
sta ptr1+1
|
||||||
|
ldy #$62-1
|
||||||
|
L1: lda (ptr1),y
|
||||||
|
sta $90,y
|
||||||
|
dey
|
||||||
|
bpl L1
|
||||||
|
|
||||||
|
; Copy the page 3 vectors in place
|
||||||
|
|
||||||
|
ldy #$00
|
||||||
|
L2: lda p3vectable,y
|
||||||
|
sta $300,y
|
||||||
|
iny
|
||||||
|
cpy #p3vectable_size
|
||||||
|
bne L2
|
||||||
|
|
||||||
|
; Copy the rest of page 3 from the system bank
|
||||||
|
|
||||||
|
lda #$00
|
||||||
|
sta ptr1
|
||||||
|
lda #$03
|
||||||
|
sta ptr1+1
|
||||||
|
L3: lda (ptr1),y
|
||||||
|
sta $300,y
|
||||||
|
iny
|
||||||
|
bne L3
|
||||||
|
|
||||||
|
; Set the indirect segment to bank we're executing in
|
||||||
|
|
||||||
|
lda ExecReg
|
||||||
|
sta IndReg
|
||||||
|
|
||||||
|
; Zero the BSS segment. We will do that here instead calling the routine
|
||||||
|
; in the common library, since we have the memory anyway, and this way,
|
||||||
|
; it's reused later.
|
||||||
|
|
||||||
|
lda #<__BSS_RUN__
|
||||||
|
sta ptr1
|
||||||
|
lda #>__BSS_RUN__
|
||||||
|
sta ptr1+1
|
||||||
|
lda #0
|
||||||
|
tay
|
||||||
|
|
||||||
|
; Clear full pages
|
||||||
|
|
||||||
|
ldx #>__BSS_SIZE__
|
||||||
|
beq Z2
|
||||||
|
Z1: sta (ptr1),y
|
||||||
|
iny
|
||||||
|
bne Z1
|
||||||
|
inc ptr1+1 ; Next page
|
||||||
|
dex
|
||||||
|
bne Z1
|
||||||
|
|
||||||
|
; Clear the remaining page
|
||||||
|
|
||||||
|
Z2: ldx #<__BSS_SIZE__
|
||||||
|
beq Z4
|
||||||
|
Z3: sta (ptr1),y
|
||||||
|
iny
|
||||||
|
dex
|
||||||
|
bne Z3
|
||||||
|
Z4:
|
||||||
|
|
||||||
|
; Setup the C stack
|
||||||
|
|
||||||
|
lda #<$FF81
|
||||||
|
sta sp
|
||||||
|
lda #>$FF81
|
||||||
|
sta sp+1
|
||||||
|
|
||||||
|
; We expect to be in page 2 now
|
||||||
|
|
||||||
|
.if (* < $1FD)
|
||||||
|
jmp $200
|
||||||
|
.res $200-*
|
||||||
|
.endif
|
||||||
|
.if (* < $200)
|
||||||
|
.res $200-*,$EA
|
||||||
|
.endif
|
||||||
|
.if (* >= $2F0)
|
||||||
|
.error "Code range invalid"
|
||||||
|
.endif
|
||||||
|
|
||||||
|
; This code is in page 2, so we may now start calling subroutines safely,
|
||||||
|
; since the code we execute is no longer in the stack page.
|
||||||
|
; Call module constructors
|
||||||
|
|
||||||
|
jsr initlib
|
||||||
|
|
||||||
|
; Create the (empty) command line for the program
|
||||||
|
|
||||||
|
jsr push0 ; argc
|
||||||
|
jsr push0 ; argv
|
||||||
|
|
||||||
|
; Execute the program code
|
||||||
|
|
||||||
|
jmp Start
|
||||||
|
|
||||||
|
; ------------------------------------------------------------------------
|
||||||
|
; Additional data that we need for initialization and that's overwritten
|
||||||
|
; later
|
||||||
|
|
||||||
|
vectable:
|
||||||
|
jmp $0000 ; CINT
|
||||||
|
jmp $0000 ; IOINIT
|
||||||
|
jmp $0000 ; RAMTAS
|
||||||
|
jmp $0000 ; RESTOR
|
||||||
|
jmp $0000 ; VECTOR
|
||||||
|
jmp $0000 ; SETMSG
|
||||||
|
jmp $0000 ; SECOND
|
||||||
|
jmp $0000 ; TKSA
|
||||||
|
jmp $0000 ; MEMTOP
|
||||||
|
jmp $0000 ; MEMBOT
|
||||||
|
jmp k_scnkey ; SCNKEY
|
||||||
|
jmp $0000 ; SETTMO
|
||||||
|
jmp $0000 ; ACPTR
|
||||||
|
jmp $0000 ; CIOUT
|
||||||
|
jmp $0000 ; UNTLK
|
||||||
|
jmp $0000 ; UNLSN
|
||||||
|
jmp $0000 ; LISTEN
|
||||||
|
jmp $0000 ; TALK
|
||||||
|
jmp $0000 ; READST
|
||||||
|
jmp k_setlfs ; SETLFS
|
||||||
|
jmp k_setnam ; SETNAM
|
||||||
|
jmp $0000 ; OPEN
|
||||||
|
jmp $0000 ; CLOSE
|
||||||
|
jmp $0000 ; CHKIN
|
||||||
|
jmp $0000 ; CKOUT
|
||||||
|
jmp $0000 ; CLRCH
|
||||||
|
jmp $0000 ; BASIN
|
||||||
|
jmp $0000 ; BSOUT
|
||||||
|
jmp $0000 ; LOAD
|
||||||
|
jmp $0000 ; SAVE
|
||||||
|
jmp k_settim ; SETTIM
|
||||||
|
jmp k_rdtim ; RDTIM
|
||||||
|
jmp $0000 ; STOP
|
||||||
|
jmp $0000 ; GETIN
|
||||||
|
jmp $0000 ; CLALL
|
||||||
|
jmp k_udtim ; UDTIM
|
||||||
|
jmp k_screen ; SCREEN
|
||||||
|
jmp k_plot ; PLOT
|
||||||
|
jmp k_iobase ; IOBASE
|
||||||
|
sta ExecReg
|
||||||
|
rts
|
||||||
|
.byte $01 ; Filler
|
||||||
|
.word nmi
|
||||||
|
.word 0 ; Reset - not used
|
||||||
|
.word irq
|
||||||
|
vectable_size = * - vectable
|
||||||
|
|
||||||
|
p3vectable:
|
||||||
|
.word k_irq ; IRQ user vector
|
||||||
|
.word k_brk ; BRK user vector
|
||||||
|
.word k_nmi ; NMI user vector
|
||||||
|
p3vectable_size = * - p3vectable
|
||||||
|
|
||||||
|
|
||||||
|
; ------------------------------------------------------------------------
|
||||||
|
; This is the program code after setup. It starts at $400
|
||||||
|
|
||||||
|
.res $400-*
|
||||||
|
|
||||||
|
Start:
|
||||||
|
|
||||||
|
; Enable interrupts
|
||||||
|
|
||||||
|
cli
|
||||||
|
|
||||||
|
; Call the user code
|
||||||
|
|
||||||
|
ldy #4 ; Argument size
|
||||||
|
jsr _main ; call the users code
|
||||||
|
|
||||||
|
; Call module destructors. This is also the _exit entry.
|
||||||
|
|
||||||
|
_exit: jsr donelib ; Run module destructors
|
||||||
|
|
||||||
|
; Clear the start of the zero page, since it will be interpreted as a
|
||||||
|
; (garbage) BASIC program otherwise. This is also the default entry for
|
||||||
|
; the break vector.
|
||||||
|
|
||||||
|
k_brk: sei
|
||||||
|
lda #$00
|
||||||
|
ldx #$3E
|
||||||
|
Clear: sta $02,x
|
||||||
|
dex
|
||||||
|
bne Clear
|
||||||
|
|
||||||
|
; Setup the welcome code at the stack bottom in the system bank. Use
|
||||||
|
; the F4/F5 vector to access the system bank
|
||||||
|
|
||||||
|
lda #$0F
|
||||||
|
sta IndReg
|
||||||
|
ldy #$00
|
||||||
|
sty $F4
|
||||||
|
iny
|
||||||
|
sty $F5
|
||||||
|
ldy #reset_size-1
|
||||||
|
@L1: lda reset,y
|
||||||
|
sta ($F4),y
|
||||||
|
dey
|
||||||
|
bne @L1
|
||||||
|
jmp Back
|
||||||
|
|
||||||
|
; ------------------------------------------------------------------------
|
||||||
|
; Code that is copied into the system bank at $100 when switching back
|
||||||
|
|
||||||
|
reset: cli
|
||||||
|
jmp $8000 ; BASIC cold start
|
||||||
|
reset_size = * - reset
|
||||||
|
|
||||||
|
; ------------------------------------------------------------------------
|
||||||
|
; Code for a few simpler kernal calls goes here
|
||||||
|
|
||||||
|
k_iobase:
|
||||||
|
ldx cia
|
||||||
|
ldy cia+1
|
||||||
|
rts
|
||||||
|
|
||||||
|
k_screen:
|
||||||
|
ldx #40 ; Columns
|
||||||
|
ldy #25 ; Lines
|
||||||
|
rts
|
||||||
|
|
||||||
|
k_setlfs:
|
||||||
|
sta LogicalAdr
|
||||||
|
stx FirstAdr
|
||||||
|
sty SecondAdr
|
||||||
|
rts
|
||||||
|
|
||||||
|
k_setnam:
|
||||||
|
sta FileNameLen
|
||||||
|
lda $00,x
|
||||||
|
sta FileNameAdrLo
|
||||||
|
lda $01,x
|
||||||
|
sta FileNameAdrHi
|
||||||
|
lda $02,x
|
||||||
|
sta FileNameAdrSeg
|
||||||
|
rts
|
||||||
|
|
||||||
|
k_rdtim:
|
||||||
|
sei
|
||||||
|
lda time+0
|
||||||
|
ldx time+1
|
||||||
|
ldy time+2
|
||||||
|
cli
|
||||||
|
rts
|
||||||
|
|
||||||
|
k_settim:
|
||||||
|
sei
|
||||||
|
sta time+0
|
||||||
|
stx time+1
|
||||||
|
sty time+2
|
||||||
|
cli
|
||||||
|
rts
|
||||||
|
|
||||||
|
; -------------------------------------------------------------------------
|
||||||
|
; Data area - switch back to relocatable mode
|
||||||
|
|
||||||
|
.reloc
|
||||||
|
|
||||||
|
.data
|
||||||
|
spsave: .res 1
|
||||||
|
|
||||||
|
|
||||||
|
|
23
libsrc/cbm510/kbhit.s
Normal file
23
libsrc/cbm510/kbhit.s
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
;
|
||||||
|
; Ullrich von Bassewitz, 06.08.1998
|
||||||
|
;
|
||||||
|
; int kbhit (void);
|
||||||
|
;
|
||||||
|
|
||||||
|
.export _kbhit
|
||||||
|
.import return0, return1
|
||||||
|
|
||||||
|
.include "zeropage.inc"
|
||||||
|
|
||||||
|
.proc _kbhit
|
||||||
|
lda KeyIndex ; Get number of characters
|
||||||
|
bne L1
|
||||||
|
jmp return0
|
||||||
|
L1: jmp return1
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
25
libsrc/cbm510/kudtim.s
Normal file
25
libsrc/cbm510/kudtim.s
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
;
|
||||||
|
; Ullrich von Bassewitz, 13.09.2001
|
||||||
|
;
|
||||||
|
; udtim routine for the 510. We will not check for the stop key here, since
|
||||||
|
; C programs will not use it.
|
||||||
|
;
|
||||||
|
|
||||||
|
.export k_udtim
|
||||||
|
.importzp time
|
||||||
|
|
||||||
|
|
||||||
|
.proc k_udtim
|
||||||
|
|
||||||
|
inc time
|
||||||
|
bne L9
|
||||||
|
inc time+1
|
||||||
|
bne L9
|
||||||
|
inc time+2
|
||||||
|
bne L9
|
||||||
|
inc time+3
|
||||||
|
L9: rts
|
||||||
|
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
|
105
libsrc/cbm510/zeropage.inc
Normal file
105
libsrc/cbm510/zeropage.inc
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
;
|
||||||
|
; Zero page variables for the CBM P500
|
||||||
|
;
|
||||||
|
; Taken from a kernal disassembly done by myself in 2000/2001.
|
||||||
|
;
|
||||||
|
; Ullrich von Bassewitz, 13.09.2001
|
||||||
|
|
||||||
|
|
||||||
|
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
|
||||||
|
BlinkOn = $E6
|
||||||
|
BlinkCounter = $E7
|
||||||
|
ColorRamPtr = $E8
|
||||||
|
TempColor = $EA
|
||||||
|
BlinkSwitch = $EB
|
||||||
|
CharColor = $EC
|
||||||
|
CursBackColor = $ED ; Color behind cursor
|
||||||
|
OutCharTmp = $EE
|
||||||
|
ScreenSeq = $EF ; Segment of video RAM
|
||||||
|
|
Reference in New Issue
Block a user