]> git.sur5r.net Git - cc65/commitdiff
More cbm510 changes to make file I/O and kernal access work
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 27 Dec 2003 16:11:14 +0000 (16:11 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 27 Dec 2003 16:11:14 +0000 (16:11 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@2846 b7a2c559-68d2-44c3-8de9-860c34a00d81

27 files changed:
libsrc/Makefile
libsrc/cbm510/Makefile
libsrc/cbm510/_scrsize.s
libsrc/cbm510/banking.s
libsrc/cbm510/break.s
libsrc/cbm510/cbm510-stdjoy.s
libsrc/cbm510/cbm510.inc
libsrc/cbm510/cgetc.s
libsrc/cbm510/clrscr.s
libsrc/cbm510/color.s
libsrc/cbm510/conio.s [deleted file]
libsrc/cbm510/cputc.s
libsrc/cbm510/crt0.s
libsrc/cbm510/extzp.inc
libsrc/cbm510/extzp.s
libsrc/cbm510/kbhit.s
libsrc/cbm510/kclose.s [new file with mode: 0644]
libsrc/cbm510/kernal.s [new file with mode: 0644]
libsrc/cbm510/kiobase.s [new file with mode: 0644]
libsrc/cbm510/kirq.s [deleted file]
libsrc/cbm510/kopen.s [new file with mode: 0644]
libsrc/cbm510/kplot.s [deleted file]
libsrc/cbm510/kreadst.s [new file with mode: 0644]
libsrc/cbm510/kscnkey.s
libsrc/cbm510/ksetnam.s [new file with mode: 0644]
libsrc/cbm510/kudtim.s
libsrc/cbm510/revers.s

index 71a19a8996dec9c53d338fb6078f0c75bb1d7492..dfd659e886c98ad58ec3919328db968cd9dd9972 100644 (file)
@@ -157,7 +157,7 @@ cbm510lib:
        done
        mv cbm510/crt0.o cbm510.o
        cp cbm510/*.emd .
-       cp cbm510/*.joy .
+       cp cbm510/cbm510-stdjoy.joy cbm510-std.joy
        cp cbm510/cbm510-stdser.ser cbm510-std.ser
 
 #-----------------------------------------------------------------------------
index 27c0966c01474c0e22f6167e779734d58d18f380..e1f6c43e062c01a756cc6c595e2eb3499d207b6d 100644 (file)
@@ -42,14 +42,17 @@ OBJS =      _scrsize.o      \
                cgetc.o         \
        clrscr.o        \
                color.o         \
-       conio.o         \
        cputc.o         \
                crt0.o          \
         extzp.o         \
                kbhit.o         \
-               kirq.o          \
-               kplot.o         \
+        kclose.o        \
+        kernal.o        \
+       kiobase.o       \
+       kopen.o         \
+        kreadst.o       \
        kscnkey.o       \
+        ksetnam.o       \
        kudtim.o        \
         mainargs.o      \
        mouse.o         \
index 99a7584553226e65ec753e9dca6d39083d6d312d..b97c3d2267c73b26a9d6e47bad0863ff26350707 100644 (file)
@@ -1,19 +1,12 @@
 ;
-; Ullrich von Bassewitz, 13.09.2000
+; Ullrich von Bassewitz, 26.10.2000
 ;
 ; Screen size variables
 ;
 
-       .export         screensize
-
-        .include        "cbm510.inc"
-
-.proc   screensize
-
-        ldx     #XSIZE
-        ldy     #YSIZE
-        rts
-
-.endproc
+       .export         screensize
+        .import         SCREEN
+                              
+        screensize      = SCREEN
 
 
index 77686a307e8388b612f73e775764febe6161868a..385f5d5c894c92ae54342b499d958e6c704f504c 100644 (file)
@@ -1,20 +1,20 @@
 ;
-; Ullrich von Bassewitz, 13.09.2001
+; Ullrich von Bassewitz, 28.09.1998
 ;
-; Banking routines for the 510.
+; Banking routines for the 610.
 ;
 
        .export         set_bank, sys_bank, restore_bank
-       .importzp       ptr1
+       .importzp       ptr1, segsave
 
-       .include        "cbm510.inc"
+       .include        "cbm510.inc"
 
 .code
 
 .proc  sys_bank
        pha
        lda     IndReg
-       sta     IndSegSave
+       sta     segsave
        lda     #$0F
        sta     IndReg
        pla
@@ -24,7 +24,7 @@
 .proc  set_bank
        pha
        lda     IndReg
-       sta     IndSegSave
+       sta     segsave
        pla
        sta     IndReg
        rts
@@ -32,7 +32,7 @@
 
 .proc  restore_bank
        pha
-       lda     IndSegSave
+       lda     segsave
        sta     IndReg
        pla
        rts
index 3f14b44991ed9a889173cb6a96cf95780a249fd1..2c23e77ed72ed31488f6b7d1d929e6355f3851fa 100644 (file)
@@ -7,9 +7,9 @@
 
                .export         _set_brk, _reset_brk
                .export         _brk_a, _brk_x, _brk_y, _brk_sr, _brk_pc
-       .import         _atexit
+       .import         _atexit, BRKVec
 
-       .include        "cbm510.inc"
+       .include        "cbm510.inc"
 
 
 .bss
@@ -74,6 +74,8 @@ L1:   lda     #<brk_handler   ; Set the break vector to our routine
 
 .proc  brk_handler
 
+        pla
+       sta     _brk_01
        pla
        sta     _brk_y
        pla
@@ -90,15 +92,11 @@ L1: lda     #<brk_handler   ; Set the break vector to our routine
        pla                     ; PC high
        sbc     #0
        sta     _brk_pc+1
-       lda     IndReg
-       sta     _brk_01
-       lda     ExecReg
-       sta     IndReg
 
        jsr     uservec         ; Call the user's routine
 
        lda     _brk_01
-       sta     IndReg
+        sta     IndReg
 
        lda     _brk_pc+1
        pha
index 5dc5e024f853d7c5e7d6fc4b49e03f3068714613..82962c35d19d053ec488b8d6c72efb156ce040cf 100644 (file)
@@ -11,7 +11,8 @@
        .include        "joy-kernel.inc"
         .include        "joy-error.inc"
         .include        "cbm510.inc"
-
+        .include        "extzp.inc"
+                                   
         .macpack        generic
 
 
index dd0861cb9934db84741cdf22c76ad1d58c527a48..0aad95f49beac01b12a6934085566bc4731ba536 100644 (file)
 ExecReg                = $0000
 IndReg         = $0001
 
-; Up to $20 and $60-8F used by runtime and fixed values
-; -----------------------------------
-
-KbdScanBuf             = $20           ; Intermediate for keyboard scan
-
-FileNameAdrLo          = $90
-FileNameAdrHi          = $91
-FileNameAdrSeg         = $92
-FileNameLen            = $9D
-LogicalAdr             = $9E
-FirstAdr               = $9F
-SecondAdr              = $A0
-IndSegSave             = $B5
-SCREEN_PTR     = $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
-ModKey                 = $E0
-NorKey                 = $E1
-CURS_FLAG      = $E6           ; 1 = no cursor
-CURS_BLINK     = $E7           ; cursor blink counter
-CRAM_PTR       = $E8
-CURS_STATE     = $EB           ; Cursor blink state
-CHARCOLOR      = $EC
-CURS_COLOR     = $ED           ; Color behind cursor
-
-;-----------------------------------------------------------------------------
-; Page 3 variables
-
-;
-; system ram vectors
-;
-
-IRQVec              = $0300
-BRKVec              = $0302
-NMIVec              = $0304
-
-;
-;
-;
-
-LogicalAdrTable      = $0334
-FirstAdrTable       = $033E
-SecondAdrTable      = $0348
-SysMemBot           = $0352
-SysMemTop           = $0355
-UsrMemBot           = $0358
-UsrMemTop           = $035B
-DevTabIndex         = $0360
-PgmKeyEnd           = $0380
-PgmKeySeg           = $0382
-RVS                 = $0383
-LastPrtChar         = $0399
-InsertFlag          = $039A
-ScrollFlag          = $039B
-PgmKeyIdx           = $039D
-LogScrollFlag       = $039E
-BellMode            = $039F    ; Bell on/off 00 = an
-SegSave                     = $03A0
-TabStopTable        = $03A1    ; 80 bits for tabstops
-KeyBuf              = $03AB    ; Keyboard buffer
-
 ; ---------------------------------------------------------------------------
 ; Screen size
 
index 52db5b80816de21410ee061a8c2e5f892ad46fad..5fed54e0a52592d82f29350ca4680803d96287e4 100644 (file)
@@ -9,13 +9,14 @@
        .import         cursor
 
        .include        "cbm510.inc"
+        .include        "extzp.inc"
 
 
 ; ------------------------------------------------------------------------
 
 .proc  _cgetc
 
-       lda     KeyIndex                ; Characters waiting?
+       lda     keyidx                  ; Characters waiting?
                bne     L3                      ; Jump if so
 
 ; Switch on the cursor if needed
@@ -24,7 +25,7 @@
        pha
        lda     cursor
        jsr     setcursor
-L1:    lda     KeyIndex
+L1:    lda     keyidx
        beq     L1
        ldx     #0
        pla
@@ -36,14 +37,14 @@ L2:         txa
 ; Read the character from the keyboard buffer
 
 L3:            ldx     #$00            ; Get index
-               ldy     KeyBuf          ; Get first character in the buffer
+               ldy     keybuf          ; Get first character in the buffer
                sei
-L4:            lda     KeyBuf+1,x      ; Move up the remaining chars
-               sta     KeyBuf,x
+L4:            lda     keybuf+1,x      ; Move up the remaining chars
+               sta     keybuf,x
                inx
-               cpx     KeyIndex
+               cpx     keyidx
                bne     L4
-               dec     KeyIndex
+               dec     keyidx
                cli
 
                ldx     #$00            ; High byte
@@ -61,7 +62,7 @@ L4:           lda     KeyBuf+1,x      ; Move up the remaining chars
                tax                             ; On or off?
                bne     @L9                     ; Go set it on
        lda     CURS_FLAG               ; Is the cursor currently off?
-               bne     @L8                     ; Jump if yes
+               bne     @L8                     ; Jump if yes
        lda     #1
        sta     CURS_FLAG               ; Mark it as off
        lda     CURS_STATE              ; Cursor currently displayed?
@@ -148,3 +149,4 @@ curend:     rts
 .endproc
 
 
+
index c22d51545277340791e6c677577237f12591c774..8025a30c1ff4af31fb0f0e210d080b2d26cce61f 100644 (file)
@@ -6,6 +6,7 @@
        .import         plot
 
        .include        "cbm510.inc"
+        .include        "extzp.inc"
 
 ; ------------------------------------------------------------------------
 ; void __fastcall__ clrscr (void);
index 5d0d7050da77a4f64358acf2b15d6de9d9cfc448..d75e9c9f40dcad099cc7789ce5e12b6fb2993c98 100644 (file)
@@ -4,7 +4,7 @@
 
        .export         _textcolor, _bgcolor, _bordercolor
        .import         sys_bank, restore_bank
-       .importzp       vic
+       .import         vic: zp, CHARCOLOR: zp
 
        .include        "cbm510.inc"
 
diff --git a/libsrc/cbm510/conio.s b/libsrc/cbm510/conio.s
deleted file mode 100644 (file)
index 54b3e4a..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-;
-; Ullrich von Bassewitz, 14.09.2001
-;
-; Low level stuff for screen output/console input
-;
-
-       .exportzp       CURS_X, CURS_Y
-
-       .include        "cbm510.inc"
-                               
index 6e321a0172051e5ae7efa6ce9ae756cd2ea6ddd5..e4d1ee5d43e16a5fcf66c60d50a00bddd163770d 100644 (file)
@@ -8,11 +8,15 @@
        .export         _cputcxy, _cputc, cputdirect, putchar
        .export         newline, plot
 
-        .import         PLOT
        .import         popa, _gotoxy
+        .import         __VIDRAM_START__
+        .import         CURS_X: zp, CURS_Y: zp, CHARCOLOR: zp, RVS: zp
+        .import         SCREEN_PTR: zp, CRAM_PTR: zp
 
        .include        "cbm510.inc"
 
+        .macpack        generic
+
 ; ------------------------------------------------------------------------
 ;
 
@@ -59,38 +63,32 @@ advance:
 L3:    sty     CURS_X
        rts
 
-newline:
-       clc
-       lda     #XSIZE
-       adc     SCREEN_PTR
-       sta     SCREEN_PTR
-       bcc     L4
-       inc     SCREEN_PTR+1
-       clc
-L4:    lda     #XSIZE
-       adc     CRAM_PTR
-       sta     CRAM_PTR
-       bcc     L5
-       inc     CRAM_PTR+1
-L5:    inc     CURS_Y
-       rts
-
 ; Handle character if high bit set
 
-L10:   and     #$7F
+L10:           and     #$7F
                cmp     #$7E            ; PI?
-       bne     L11
-       lda     #$5E            ; Load screen code for PI
-       bne     cputdirect
-L11:   ora     #$40
-       bne     cputdirect
+               bne     L11
+               lda     #$5E            ; Load screen code for PI
+               bne     cputdirect
+L11:           ora     #$40
+               bne     cputdirect      ; Branch always
+
+; Move the cursor into the next line
+
+newline:
+        inc    CURS_Y
 
 ; Set cursor position, calculate RAM pointers
 
-plot:  ldy     CURS_X
-       ldx     CURS_Y
-       clc
-       jmp     PLOT            ; Set the new cursor
+plot:          ldx     CURS_Y
+               lda     LineLSBTab,x
+               sta     SCREEN_PTR
+               sta     CRAM_PTR
+               lda     LineMSBTab,x
+               sta     SCREEN_PTR+1
+               add     #.hibyte(COLOR_RAM - __VIDRAM_START__)
+               sta     CRAM_PTR+1
+               rts
 
 ; Write one character to the screen without doing anything else, return X
 ; position in Y
@@ -107,3 +105,20 @@ putchar:
        stx     IndReg
        rts
 
+; -------------------------------------------------------------------------
+; Low bytes of the start address of the screen lines
+
+.rodata
+
+LineLSBTab:
+       .repeat 25, I
+               .byte   .lobyte(__VIDRAM_START__ + I * 40)
+       .endrep
+
+; -------------------------------------------------------------------------
+; High bytes of the start address of the screen lines
+
+LineMSBTab:
+       .repeat 25, I
+       .byte   .hibyte(__VIDRAM_START__ + I * 40)
+       .endrep
index 46f5d0b20ea7ddae331fcee40870dfadb214837e..aef0584b1566e7c95e2871ae0e3c162201dc6ab7 100644 (file)
@@ -6,13 +6,12 @@
 
        .export         _exit
 
-       .import         _clrscr, initlib, donelib
+       .import         _clrscr, initlib, donelib, condes
        .import         push0, callmain
        .import         __CHARRAM_START__, __CHARRAM_SIZE__, __VIDRAM_START__
-        .import         __EXTZP_RUN__, __EXTZP_SIZE__
-       .import         __BSS_RUN__, __BSS_SIZE__
-       .import         irq, nmi
-               .import         k_irq, k_nmi, PLOT, UDTIM, SCNKEY
+       .import         __BSS_RUN__, __BSS_SIZE__, __EXTZP_RUN__
+       .import         __IRQFUNC_TABLE__, __IRQFUNC_COUNT__
+       .import         scnkey, UDTIM
 
        .include        "zeropage.inc"
         .include        "extzp.inc"
 ; that is overwritten later.
 ;
 
-.code
+.segment        "BASICHDR"
 
-; 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          $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
 
+;------------------------------------------------------------------------------
+; A table that contains values that must be transfered from the system zero
+; page into out zero page. Contains pairs of bytes, first one is the address
+; in the system ZP, second one is our ZP address. The table goes into page 2,
+; but is declared here, because it is needed earlier.
+
+.SEGMENT        "PAGE2"
+
+.proc   transfer_table
+
+        .byte   $CA, CURS_Y
+        .byte   $CB, CURS_X
+        .byte   $EC, CHARCOLOR
+        .byte   
+
+.endproc
+
+
+;------------------------------------------------------------------------------
 ; 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
+.segment        "STARTUP"
+
+Back:  sei
+        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:
+; We are at $100 now. The following snippet 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     #$00
@@ -79,70 +96,151 @@ Back:      ldx     spsave
 
 ; 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)!
+; use the stack (since it's in page 1)! We jump to another location, since
+; we need some space for subroutines that aren't used later.
 
-       tsx
-               stx     spsave          ; Save the system stackpointer
-       ldx     #$FF
-       txs                     ; Set up our own stack
+        jmp     Origin
 
-; Set the interrupt, NMI and other vectors
+; Hardware vectors, copied to $FFFA
 
-       ldy     #vectable_size
-L0:    lda     vectable-1,y
-       sta     $FF81-1,y
-       dey
-               bne     L0
+.proc   vectors
+        sta     ExecReg
+        rts
+        nop
+               .word   nmi             ; NMI vector
+               .word   0               ; Reset - not used
+               .word   irq             ; IRQ vector
+.endproc
 
-; Initialize the extended zero page variables
+; Initializers for the extended zeropage. See extzp.s
 
-        ldx     #zptable_size
-L1:     lda     zptable-1,x
-        sta     <(__EXTZP_RUN__-1),x
-        dex
-        bne     L1
+.proc   extzp
+        .word   $0100           ; sysp1
+        .word   $0300           ; sysp3
+        .word          $d800           ; vic
+       .word   $da00           ; sid
+       .word   $db00           ; cia1
+       .word   $dc00           ; cia2
+       .word   $dd00           ; acia
+       .word   $de00           ; tpi1
+       .word   $df00           ; tpi2
+       .word   $eab1           ; ktab1
+       .word   $eb11           ; ktab2
+       .word   $eb71           ; ktab3
+       .word   $ebd1           ; ktab4
+.endproc
+
+; The following code is part of the kernal call subroutine. It is copied
+; to $FFAE
+
+.proc   callsysbank_15
+        php
+        pha
+        lda     #$0F                    ; Bank 15
+        sta     IndReg
+        sei
+.endproc
+
+; Save the old stack pointer from the system bank and setup our hw sp
+
+Origin: tsx
+               stx     spsave          ; Save the system stackpointer
+       ldx     #$FE            ; Leave $1FF untouched for cross bank calls
+       txs                     ; Set up our own stack
 
 ; Switch the indirect segment to the system bank
 
        lda     #$0F
        sta     IndReg
 
-; Copy the kernal zero page ($90-$F2) from the system bank
+; Initialize the extended zeropage
 
-       lda     #$90
-       sta     ptr1
-       lda     #$00
-       sta     ptr1+1
-       ldy     #$62-1
-L2:    lda     (ptr1),y
-       sta     $90,y
-       dey
-       bpl     L2
+        ldx     #.sizeof(extzp)-1
+L1:     lda     extzp,x
+        sta     <__EXTZP_RUN__,x
+        dex
+        bpl     L1
+
+; Copy stuff from the system zeropage to ours
+
+        lda     #.sizeof(transfer_table)
+        sta     ktmp
+L2:     ldx     ktmp
+        ldy     transfer_table-2,x
+        lda     transfer_table-1,x
+        tax
+        lda     (sysp0),y
+        sta     $00,x
+        dec     ktmp
+        dec     ktmp
+        bne     L2
 
-; Copy the page 3 vectors in place
+; Set the interrupt, NMI and other vectors
 
-       ldy     #$00
-L3:    lda     p3vectable,y
-       sta     $300,y
-       iny
-       cpy     #p3vectable_size
-               bne     L3
+       ldx     #.sizeof(vectors)-1
+L3:            lda     vectors,x
+       sta     $10000 - .sizeof(vectors),x
+       dex
+               bpl     L3
 
-; Copy the rest of page 3 from the system bank
+; Setup the C stack
 
-       lda     #$00
-       sta     ptr1
-       lda     #$03
-       sta     ptr1+1
-L4:    lda     (ptr1),y
-       sta     $300,y
-       iny
-       bne     L4
+       lda     #.lobyte($FEAE - .sizeof(callsysbank_15))
+       sta     sp
+       lda     #.hibyte($FEAE - .sizeof(callsysbank_15))
+       sta     sp+1
+
+; Setup the subroutine and jump vector table that redirects kernal calls to
+; the system bank. Copy the bank switch routines starting at $FEAE from the
+; system bank into the current bank.
+
+
+        ldy     #.sizeof(callsysbank_15)-1      ; Copy the modified part
+@L1:    lda     callsysbank_15,y
+        sta     $FEAE - .sizeof(callsysbank_15),y
+        dey
+        bpl     @L1
+
+        lda     #.lobyte($FEAE)                 ; Copy the ROM part
+        sta     ptr1
+        lda     #.hibyte($FEAE)
+        sta     ptr1+1
+        ldy     #$00
+@L2:    lda     (ptr1),y
+        sta     $FEAE,y
+        iny
+        cpy     #<($FF6F-$FEAE)
+        bne     @L2
+
+; Setup the jump vector table
+
+        ldy     #$00
+        ldx     #45-1                   ; Number of vectors
+@L3:    lda     #$20                    ; JSR opcode
+        sta     $FF6F,y
+        iny
+        lda     #.lobyte($FEAE - .sizeof(callsysbank_15))
+        sta     $FF6F,y
+        iny
+        lda     #.hibyte($FEAE - .sizeof(callsysbank_15))
+        sta     $FF6F,y
+        iny
+        dex
+        bpl     @L3
+
+; Copy the stack from the system bank into page 3
+
+        ldy     #$FF
+L4:     lda     (sysp1),y
+        sta     $300,y
+        dey
+        cpy     spsave
+        bne     L4
 
 ; Set the indirect segment to bank we're executing in
 
-       lda     ExecReg
-       sta     IndReg
+       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,
@@ -150,10 +248,10 @@ L4:       lda     (ptr1),y
 
        lda     #<__BSS_RUN__
        sta     ptr1
-       lda     #>__BSS_RUN__
+       lda     #>__BSS_RUN__
        sta     ptr1+1
-       lda     #0
-       tay
+       lda     #0
+       tay
 
 ; Clear full pages
 
@@ -163,7 +261,7 @@ Z1: sta     (ptr1),y
        iny
        bne     Z1
        inc     ptr1+1                  ; Next page
-       dex
+       dex
        bne     Z1
 
 ; Clear the remaining page
@@ -174,34 +272,17 @@ 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
+Z4:     jmp     Init
 
-.if    (* < $1FD)
-       jmp     $200
-       .res    $200-*
-.endif
-.if    (* < $200)
-       .res    $200-*,$EA
-.endif
-.if            (* >= $2F0)
-.error "Code range invalid"
-.endif
+; ------------------------------------------------------------------------
+; We are at $200 now. We may now start calling subroutines safely, since
+; the code we execute is no longer in the stack page.
 
-; 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.
+.segment        "PAGE2"
 
 ; Copy the character rom from the system bank into the execution bank
 
-        lda     #<$C000
+Init:   lda     #<$C000
        sta     ptr1
        lda     #>$C000
        sta     ptr1+1
@@ -213,7 +294,7 @@ Z4:
        sta     tmp1
        ldy     #$00
 ccopy: lda     #$0F
-       sta     IndReg                  ; Access the system bank
+       sta     IndReg                  ; Access the system bank
 ccopy1:        lda     (ptr1),y
                sta     __VIDRAM_START__,y
                iny
@@ -225,7 +306,7 @@ ccopy2:     lda     __VIDRAM_START__,y
                iny
                bne     ccopy2
                inc     ptr1+1
-               inc     ptr2+1                  ; Bump high pointer bytes
+               inc     ptr2+1                  ; Bump high pointer bytes
                dec     tmp1
                bne     ccopy
 
@@ -278,96 +359,11 @@ ccopy2:   lda     __VIDRAM_START__,y
         lda     ExecReg
                sta     IndReg
 
-; Call module constructors
-
-               jsr     initlib
-
-; Execute the program code
-
-       jmp     Start
+; Call module constructors, enable chained IRQs afterwards.
 
-; ------------------------------------------------------------------------
-; Additional data that we need for initialization and that's overwritten
-; later
-
-zptable:
-        .word          $d800           ; vic
-       .word   $da00           ; sid
-       .word   $db00           ; cia1
-       .word   $dc00           ; cia2
-       .word   $dd00           ; acia
-       .word   $de00           ; tpi1
-       .word   $df00           ; tpi2
-       .word   $eab1           ; ktab1
-       .word   $eb11           ; ktab2
-       .word   $eb71           ; ktab3
-       .word   $ebd1           ; ktab4
-       .dword  $0000           ; time
-        .word  $0100           ; RecvBuf
-        .word          $0200           ; SendBuf
-zptable_size    = * - zptable
-
-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     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     SETLFS
-               jmp     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     SETTIM
-               jmp     RDTIM
-       jmp     $0000           ; STOP
-       jmp     $0000           ; GETIN
-       jmp     $0000           ; CLALL
-       jmp     UDTIM
-       jmp     SCREEN
-       jmp     PLOT
-       jmp     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:
+        jsr    initlib
+        lda     #.lobyte(__IRQFUNC_COUNT__*2)
+        sta     irqcount
 
 ; Enable interrupts
 
@@ -377,14 +373,17 @@ Start:
 
                jsr     callmain
 
-; Call module destructors. This is also the _exit entry.
+; Call module destructors. This is also the _exit entry and the default entry
+; point for the break vector.
 
-_exit: jsr     donelib         ; Run module destructors
+_exit:  lda     #$00
+        sta     irqcount        ; Disable custom irq handlers
+        jsr    donelib         ; Run module destructors
 
-; We need access to the system bank now
+; Address the system bank
 
-       lda     #$0F
-       sta     IndReg
+        lda     #$0F
+        sta     IndReg
 
 ; Switch back the video to the system bank
 
@@ -400,102 +399,128 @@ _exit:  jsr     donelib         ; Run module destructors
        lda     vidsave+2
        sta     (vic),y
 
-; 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.
+; Copy stuff back from our zeropage to the systems
 
-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
-
-       ldy     #$00
-               sty     $F4
-       iny
-       sty     $F5
-       ldy     #reset_size-1
-@L1:   lda     reset,y
-       sta     ($F4),y
-       dey
-       bne     @L1
-       jmp     Back
+.if 0
+        lda     #.sizeof(transfer_table)
+        sta     ktmp
+@L0:    ldx     ktmp
+        ldy     transfer_table-2,x
+        lda     transfer_table-1,x
+        tax
+        lda     $00,x
+        sta     (sysp0),y
+        dec     ktmp
+        dec     ktmp
+        bne     @L0
+.endif
 
-; ------------------------------------------------------------------------
-; Code that is copied into the system bank at $100 when switching back
+; Copy back the old system bank stack contents
 
-reset: cli
-       jmp     $8000                   ; BASIC cold start
-reset_size = * - reset
+        ldy     #$FF
+@L1:    lda     $300,y
+        sta     (sysp1),y
+        dey
+        cpy     spsave
+        bne     @L1
 
-; ------------------------------------------------------------------------
-; Code for a few simpler kernal calls goes here
+; Setup the welcome code at the stack bottom in the system bank.
 
-.export IOBASE
-.proc   IOBASE
-        ldx    cia2
-       ldy     cia2+1
-       rts
-.endproc
+        ldy     #$00
+        lda     #$58            ; CLI opcode
+        sta     (sysp1),y
+        iny
+        lda     #$60            ; RTS opcode
+        sta     (sysp1),y
+        jmp     Back
 
-.export SCREEN
-.proc   SCREEN
-               ldx     #40             ; Columns
-       ldy     #25             ; Lines
-       rts
-.endproc
+; -------------------------------------------------------------------------
+; The IRQ handler goes into PAGE2. For performance reasons, and to allow
+; easier chaining, we do handle the IRQs in the execution bank (instead of
+; passing them to the system bank).
 
-.export SETLFS
-.proc   SETLFS
-        sta     LogicalAdr
-        stx     FirstAdr
-        sty     SecondAdr
-        rts
-.endproc
+; This is the mapping of the active irq register of the        6525 (tpi1):
+;
+; Bit   7       6       5       4       3       2       1       0
+;                               |       |       |       |       ^ 50 Hz
+;                               |       |       |       ^ SRQ IEEE 488
+;                               |       |       ^ cia
+;                               |       ^ IRQB ext. Port
+;                               ^ acia
+
+irq:    pha
+        txa
+        pha
+        tya
+        pha
+        lda     IndReg
+        pha
+        lda     ExecReg
+        sta     IndReg                  ; Be sure to address our segment
+       tsx
+               lda     $105,x                  ; Get the flags from the stack
+       and     #$10                    ; Test break flag
+               bne     dobrk
 
-.export SETNAM
-.proc   SETNAM
-        sta     FileNameLen
-        lda     $00,x
-        sta     FileNameAdrLo
-        lda     $01,x
-        sta     FileNameAdrHi
-        lda     $02,x
-        sta     FileNameAdrSeg
-        rts
-.endproc
+; It's an IRQ
 
-.export RDTIM
-.proc   RDTIM
-       sei
-       lda     time+0
-       ldx     time+1
-       ldy     time+2
-       cli
-       rts
-.endproc
+        cld
 
-.export SETTIM
-.proc   SETTIM
-       sei
-       sta     time+0
-       stx     time+1
-       sty     time+2
-       cli
-       rts
-.endproc
+; Call chained IRQ handlers
+
+               ldy     irqcount
+        beq     irqskip
+               lda     #<__IRQFUNC_TABLE__
+       ldx     #>__IRQFUNC_TABLE__
+       jsr     condes                  ; Call the functions
+
+; Done with chained IRQ handlers, check the TPI for IRQs and handle them
+
+irqskip:lda    #$0F
+       sta     IndReg
+       ldy     #TPI::AIR
+       lda     (tpi1),y                ; Interrupt Register 6525
+       beq     noirq
+
+; 50/60Hz interrupt
+
+       cmp     #%00000001              ; ticker irq?
+       bne     irqend
+               jsr     scnkey                  ; Poll the keyboard
+        jsr    UDTIM                   ; Bump the time
+
+; Done
+
+irqend:        ldy     #TPI::AIR
+               sta     (tpi1),y                ; Clear interrupt
+
+noirq: pla
+        sta     IndReg
+        pla
+        tay
+        pla
+        tax
+        pla
+nmi:   rti
+
+dobrk:  jmp    (BRKVec)
 
 ; -------------------------------------------------------------------------
-; Data area - switch back to relocatable mode
+; Page 3
+
+.segment        "PAGE3"
+
+BRKVec: .addr   _exit           ; BRK indirect vector
 
-       .reloc
+
+; -------------------------------------------------------------------------
+; Data area
 
 .data
 spsave:        .res    1
 vidsave:.res   3
 
+.bss
+irqcount:       .byte   0
+
 
index 2352224cadef57385bf5f3da2aa24df71649c00a..be0cba71f411d827c108c397e9df72889ebc6b41 100644 (file)
@@ -1,11 +1,19 @@
 ;
-; Ullrich von Bassewitz, 2003-02-16
+; Ullrich von Bassewitz, 2003-12-27
 ;
 ; Additional zero page locations for the CBM510.
 ;
 
 ; ------------------------------------------------------------------------
 
-               .globalzp       vic, sid, cia1, cia2, acia, tpi1, tpi2, ktab1
-       .globalzp       ktab2, ktab3, ktab4, time
+        .globalzp       sysp1, sysp3, vic, sid, ipccia, cia1, cia2, acia
+        .globalzp       tpi1, tpi2, ktab1, ktab2, ktab3, ktab4
+
+        .globalzp       sysp0, time, segsave, ktmp, CURS_X, CURS_Y, CURS_FLAG
+        .globalzp       CURS_STATE, CURS_BLINK, CURS_COLOR, CHARCOLOR, RVS
+        .globalzp       SCREEN_PTR, CRAM_PTR
+        .globalzp       keyidx, keybuf, keyscanbuf, keysave, modkey
+        .globalzp       norkey, graphmode, lastidx, rptdelay, rptcount
+
+
 
index 98687197578050c3424552e9e575828a86b8be60..8402a00a81733bce14b1d348598167958549ad01 100644 (file)
 
 .segment        "EXTZP" : zeropage
 
+; The following values get initialized from a table in the startup code.
+; While this sounds crazy, it has reasons that have to do with modules (and
+; we have the space anyway). So when changing anything, be sure to adjust the
+; initializer table
+sysp1:          .res    2
+sysp3:          .res    2
 vic:           .res    2
 sid:           .res    2
 cia1:          .res    2
@@ -24,5 +30,30 @@ ktab1:               .res    2
 ktab2:         .res    2
 ktab3:         .res    2
 ktab4:         .res    2
-time:          .res    4
+
+sysp0:          .word   $0000
+time:          .dword  $0000
+segsave:        .byte   0
+ktmp:           .byte   0
+CURS_X:         .byte   0
+CURS_Y:         .byte   0
+CURS_FLAG:      .byte   0
+CURS_STATE:     .byte   0
+CURS_BLINK:     .byte   0
+CURS_COLOR:     .byte   0
+CHARCOLOR:      .byte   0
+RVS:            .byte   0
+SCREEN_PTR:     .word   0
+CRAM_PTR:       .word   0
+; Stuff for our own kbd polling routine
+keyidx:         .byte   0               ; Number of keys in keyboard buffer
+keybuf:         .res    10              ; Keyboard buffer
+keyscanbuf:     .byte   0
+keysave:        .byte   0
+modkey:         .byte   0
+norkey:         .byte   0
+graphmode:      .byte   0
+lastidx:        .byte   0
+rptdelay:       .byte   0
+rptcount:       .byte   0
 
index 9e2b3f6f167b53b75e037ddb11fc30626c032f70..b9f32ed0ab1b0c45e0157ffc1bf6291803b053f4 100644 (file)
@@ -6,11 +6,11 @@
 
        .export         _kbhit
        .import         return0, return1
+        .import         keyidx: zp
 
-       .include        "cbm510.inc"
 
 .proc  _kbhit
-       lda     KeyIndex        ; Get number of characters
+       lda     keyidx          ; Get number of characters
        bne     L1
        jmp     return0
 L1:    jmp     return1
diff --git a/libsrc/cbm510/kclose.s b/libsrc/cbm510/kclose.s
new file mode 100644 (file)
index 0000000..a262313
--- /dev/null
@@ -0,0 +1,21 @@
+;
+; Ullrich von Bassewitz, 2003-12-21
+;
+; CLOSE kernal call.
+;
+; NOTE: The CLOSE system call in the CBM610 kernal will only remove the file
+; entry and not close the file on IEC if the carry is clear on entry. To make
+; this somewhat compatible with the C64, set the carry before jumping to the
+; kernal.
+
+        .export         CLOSE
+
+.proc   CLOSE
+
+        sec
+        jmp     $FFC3
+
+.endproc
+
+
+
diff --git a/libsrc/cbm510/kernal.s b/libsrc/cbm510/kernal.s
new file mode 100644 (file)
index 0000000..db9d852
--- /dev/null
@@ -0,0 +1,83 @@
+;
+; Ullrich von Bassewitz, 2003-12-20
+;
+; CBM610 kernal functions
+;
+
+        .export         CINT
+        .export         IOINIT
+        .export         RAMTAS
+        .export         RESTOR
+        .export         VECTOR
+        .export         SETMSG
+        .export         SECOND
+        .export         TKSA
+        .export         MEMTOP
+        .export         MEMBOT
+        .export         SCNKEY
+        .export         SETTMO
+        .export         ACPTR
+        .export         CIOUT
+        .export         UNTLK
+        .export         UNLSN
+        .export         LISTEN
+        .export         TALK
+        .export         SETLFS
+        .export         CHKIN
+        .export         CKOUT
+        .export         CLRCH
+        .export         BASIN
+        .export         BSOUT
+        .export         LOAD
+        .export         SAVE
+        .export         STOP
+        .export         GETIN
+        .export         CLALL
+        .export         PLOT
+
+
+;-----------------------------------------------------------------------------
+; All functions are available in the kernal jump table. Functions having
+; replacements (usually short ones where the overhead of the cross bank call
+; is not worth the trouble) are commented out.
+
+CINT           = $FF81
+IOINIT         = $FF84
+RAMTAS         = $FF87
+RESTOR         = $FF8A
+VECTOR         = $FF8D
+SETMSG         = $FF90
+SECOND         = $FF93
+TKSA           = $FF96
+MEMTOP         = $FF99
+MEMBOT         = $FF9C
+SCNKEY         = $FF9F
+SETTMO         = $FFA2
+ACPTR          = $FFA5
+CIOUT          = $FFA8
+UNTLK          = $FFAB
+UNLSN          = $FFAE
+LISTEN         = $FFB1
+TALK           = $FFB4
+;READST                = $FFB7
+SETLFS         = $FFBA
+;SETNAM                = $FFBD
+;OPEN          = $FFC0
+;CLOSE         = $FFC3
+CHKIN          = $FFC6
+CKOUT          = $FFC9
+CLRCH          = $FFCC
+BASIN          = $FFCF
+BSOUT          = $FFD2
+LOAD           = $FFD5
+SAVE           = $FFD8
+;SETTIM                = $FFDB
+;RDTIM         = $FFDE
+STOP           = $FFE1
+GETIN          = $FFE4
+CLALL          = $FFE7
+;UDTIM         = $FFEA
+;SCREEN                = $FFED
+PLOT           = $FFF0
+;IOBASE                = $FFF3
+
diff --git a/libsrc/cbm510/kiobase.s b/libsrc/cbm510/kiobase.s
new file mode 100644 (file)
index 0000000..1f21f02
--- /dev/null
@@ -0,0 +1,19 @@
+;
+; Ullrich von Bassewitz, 2003-12-19
+;
+; IOBASE kernal call
+;
+
+        .export         IOBASE
+        .import         cia : zeropage
+
+
+
+.proc   IOBASE
+
+       ldx     cia
+       ldy     cia+1
+       rts
+
+.endproc
+
diff --git a/libsrc/cbm510/kirq.s b/libsrc/cbm510/kirq.s
deleted file mode 100644 (file)
index dc63ee3..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-;
-; Ullrich von Bassewitz, 28.09.1998
-;
-; IRQ routine for the 510.
-;
-
-       .export         irq, nmi, k_irq, k_nmi
-       .import         SCNKEY, UDTIM, k_rs232
-       .import         condes
-       .import         __IRQFUNC_TABLE__, __IRQFUNC_COUNT__
-       .importzp       tpi1
-
-       .include        "cbm510.inc"
-
-
-; -------------------------------------------------------------------------
-; This is the mapping of the active irq register of the        6525 (tpi1):
-;
-; Bit   7       6       5       4       3       2       1       0
-;                               |       |       |       |       ^ 50 Hz
-;                               |       |       |       ^ SRQ IEEE 488
-;                               |       |       ^ cia2
-;                               |       ^ cia1 IRQB ext. Port
-;                               ^ acia
-
-
-
-; -------------------------------------------------------------------------
-; IRQ entry point
-
-.proc  irq
-
-       pha
-        txa
-        pha
-        tya
-        pha
-       tsx
-       lda     $104,x                  ; Get the flags from the stack
-       and     #$10                    ; Test break flag
-       bne     L1
-       jmp     (IRQVec)
-L1:    jmp     (BRKVec)
-
-.endproc
-
-; -------------------------------------------------------------------------
-; NMI entry point
-
-.proc  nmi
-
-       jmp     (NMIVec)
-
-.endproc
-
-
-; -------------------------------------------------------------------------
-; Kernal irq entry point. The IRQvec points here (usually).
-
-k_irq:
-       lda     IndReg                  ; Ind. Segment retten
-        pha
-        cld
-       lda     #$0F
-       sta     IndReg
-       ldy     #TPI::AIR
-       lda     (tpi1),y                ; Interrupt Register 6525
-       beq     noirq
-
-; -------------------------------------------------------------------------
-; 50/60Hz interrupt
-
-       cmp     #%00000001              ; ticker irq?
-       bne     irq1
-
-; Call user IRQ handlers if we have any
-
-       ldy     #<(__IRQFUNC_COUNT__*2)
-       beq     @L1
-               lda     #<__IRQFUNC_TABLE__
-       ldx     #>__IRQFUNC_TABLE__
-       jsr     condes                  ; Call the functions
-
-; Call replacement kernal IRQ routines
-
-@L1:   jsr     SCNKEY                  ; Poll the keyboard
-        jsr    UDTIM                   ; Bump the time
-
-; -------------------------------------------------------------------------
-; UART interrupt
-
-irq1:  cmp     #%00010000              ; interrupt from uart?
-       bne     irqend
-       jsr     k_rs232                 ; Read character from uart
-
-; -------------------------------------------------------------------------
-; Done
-
-irqend:        ldy     #TPI::AIR
-               sta     (tpi1),y                ; Clear interrupt
-
-noirq: pla
-        sta     IndReg
-        pla
-        tay
-        pla
-        tax
-        pla
-k_nmi: rti
-
-
diff --git a/libsrc/cbm510/kopen.s b/libsrc/cbm510/kopen.s
new file mode 100644 (file)
index 0000000..0259223
--- /dev/null
@@ -0,0 +1,22 @@
+;
+; Ullrich von Bassewitz, 2003-12-20
+;
+; OPEN kernal call.
+;
+; NOTE: The OPEN system call in the CBM610 kernal is different from the 
+; standard. It evaluates the carry flag and does a normal open if carry clear
+; and some strange things (output sa 15 + name on IEC) if carry set. To be
+; compatible with our CBM file stuff, we have to clear the carry before 
+; calling the real OPEN.
+
+        .export         OPEN
+
+.proc   OPEN
+
+        clc
+        jmp     $FFC0
+
+.endproc
+
+
+
diff --git a/libsrc/cbm510/kplot.s b/libsrc/cbm510/kplot.s
deleted file mode 100644 (file)
index c5f52f8..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-;
-; Ullrich von Bassewitz, 13.09.2001
-;
-; PLOT routine for the 510.
-;
-
-       .export         PLOT
-       .import         __VIDRAM_START__
-       .importzp       crtc
-
-       .include        "cbm510.inc"
-
-       .macpack        generic
-
-; ------------------------------------------------------------------------
-;
-
-.proc  PLOT
-
-               bcs     get
-
-       stx     CURS_Y
-       sty     CURS_X
-
-       lda     LineLSBTab,x
-       sta     SCREEN_PTR
-       sta     CRAM_PTR
-       lda     LineMSBTab,x
-       sta     SCREEN_PTR+1
-       sub     #>__VIDRAM_START__
-       add     #>COLOR_RAM
-       sta     CRAM_PTR+1
-
-get:   ldx     CURS_Y
-       ldy     CURS_X
-
-       rts
-
-.endproc
-
-; -------------------------------------------------------------------------
-; Low bytes of the start address of the screen lines
-
-.rodata
-
-.macro  LineLoTab
-       .repeat 25, I
-       .byte   <(__VIDRAM_START__ + I * 40)
-       .endrep
-.endmacro
-
-LineLSBTab:            LineLoTab
-
-; -------------------------------------------------------------------------
-; High bytes of the start address of the screen lines
-
-.macro  LineHiTab
-       .repeat 25, I
-       .byte   >(__VIDRAM_START__ + I * 40)
-       .endrep
-.endmacro
-
-LineMSBTab:    LineHiTab
-
-
-            
diff --git a/libsrc/cbm510/kreadst.s b/libsrc/cbm510/kreadst.s
new file mode 100644 (file)
index 0000000..66c0b88
--- /dev/null
@@ -0,0 +1,26 @@
+;
+; Ullrich von Bassewitz, 2003-12-19
+;
+; READST kernal call
+;
+
+        .export         READST
+
+        .import         sys_bank, restore_bank
+        .import         sysp0: zp, ktmp: zp
+
+        .include        "cbm510.inc"
+
+
+.proc   READST
+
+        jsr     sys_bank
+        sty     ktmp                    ; Save Y register
+        ldy     #$9C                    ; STATUS
+        lda     (sysp0),y               ; Load STATUS from system bank
+        ldy     ktmp
+        jmp     restore_bank            ; Will set condition codes on A
+
+.endproc
+
+
index af4edadc6c44c167b8bb189cf9c82d9bf8821f10..3413c6b8093db8f443304fa0e4222572d0195352 100644 (file)
@@ -4,19 +4,21 @@
 ; Keyboard polling stuff for the 510.
 ;
 
-       .export         SCNKEY
+       .export         scnkey
        .importzp       tpi2, ktab1, ktab2, ktab3, ktab4
+        .importzp       keyidx, keybuf, keyscanbuf, keysave, modkey, norkey
+        .importzp       graphmode, lastidx, rptdelay, rptcount
 
        .include        "cbm510.inc"
 
 
-.proc  SCNKEY
+.proc  scnkey
 
         lda     #$FF
-        sta     ModKey
-        sta     NorKey
+        sta     modkey
+        sta     norkey
         lda    #$00
-       sta     KbdScanBuf
+       sta     keyscanbuf
        ldy     #TPI::PRB
        sta     (tpi2),y
        ldy     #TPI::PRA
@@ -35,7 +37,7 @@ L1:   lda     #$FF
        sta     (tpi2),y
         jsr     Poll
         pha
-        sta     ModKey
+        sta     modkey
         ora     #$30
         bne     L3             ; Branch always
 
@@ -44,11 +46,11 @@ L3: ldx     #$05
        ldy     #$00
 L4:    lsr     a
         bcc     L5
-        inc    KbdScanBuf
+        inc    keyscanbuf
         dex
         bpl     L4
         sec
-       ldy     TPI::PRB
+       ldy     #TPI::PRB
        lda     (tpi2),y
        rol     a
        sta     (tpi2),y
@@ -60,8 +62,8 @@ L4:   lsr     a
         pla
         bcc     NoKey          ; Branch always
 
-L5:    ldy     KbdScanBuf
-       sty     NorKey
+L5:    ldy     keyscanbuf
+       sty     norkey
         pla
         asl     a
         asl     a
@@ -69,7 +71,7 @@ L5:   ldy     KbdScanBuf
         bcc     L6
         bmi     L7
         lda     (ktab2),y              ; Shifted normal key
-        ldx     GrafMode
+        ldx     graphmode
         beq     L8
         lda     (ktab3),y              ; Shifted key in graph mode
         bne     L8
@@ -80,23 +82,23 @@ L7: lda     (ktab1),y               ; Normal key
 L8:    tax
        cpx     #$FF                    ; Valid key?
         beq     Done
-        cpy     LastIndex
+        cpy     lastidx
         beq     Repeat
         ldx     #$13
-        stx     RepeatDelay
-        ldx     KeyIndex
+        stx     rptdelay
+        ldx     keyidx
         cpx     #$09
         beq     NoKey
         cpy     #$59
         bne     PutKey
         cpx     #$08
         beq     NoKey
-        sta     KeyBuf,x
+        sta     keybuf,x
         inx
         bne     PutKey
 
 NoKey: ldy     #$FF
-Done:          sty     LastIndex
+Done:          sty     lastidx
 End:   lda     #$7F
        ldy     #TPI::PRA
        sta     (tpi2),y
@@ -105,20 +107,20 @@ End:      lda     #$7F
        sta     (tpi2),y
         rts
 
-Repeat:        dec     RepeatDelay
+Repeat:        dec     rptdelay
         bpl     End
-        inc     RepeatDelay
-        dec     RepeatCount
+        inc     rptdelay
+        dec     rptcount
         bpl     End
-        inc     RepeatCount
-        ldx     KeyIndex
+        inc     rptcount
+        ldx     keyidx
         bne     End
 
-PutKey:        sta     KeyBuf,x
+PutKey:        sta     keybuf,x
         inx
-        stx     KeyIndex
+        stx     keyidx
         ldx     #$03
-        stx     RepeatCount
+        stx     rptcount
         bne     Done
 
 .endproc
@@ -127,18 +129,15 @@ PutKey:   sta     KeyBuf,x
 ; Poll the keyboard port until it's stable
 
 .proc  Poll
-       ldy     TPI::PRC
+       ldy     #TPI::PRC
 L1:    lda     (tpi2),y
-       sta     KeySave
+       sta     keysave
        lda     (tpi2),y
-       cmp     KeySave
+       cmp     keysave
        bne     L1
        rts
 .endproc
 
 
-.bss
-
-KeySave:       .res    1
 
 
diff --git a/libsrc/cbm510/ksetnam.s b/libsrc/cbm510/ksetnam.s
new file mode 100644 (file)
index 0000000..8de8f1c
--- /dev/null
@@ -0,0 +1,45 @@
+;
+; Ullrich von Bassewitz, 2003-12-18
+;
+; SETNAM kernal call.
+;
+; NOTE: The routine does not work like that in the CBM610 kernal (which works
+; different than that on all other CBMs). Instead, it works like on all other
+; Commodore machines. No segment has to be passed, the current segment is
+; assumed.
+
+        .export         SETNAM
+
+        .import         sys_bank, restore_bank
+        .import         sysp0: zp, ktmp: zp
+
+        .include        "cbm510.inc"
+
+.proc   SETNAM
+
+        pha
+        jsr     sys_bank
+        sty     ktmp
+
+        txa
+        ldy     #$90                    ; FNAM
+        sta     (sysp0),y
+
+        lda     ktmp
+        iny
+        sta     (sysp0),y
+
+       lda     ExecReg                 ; Assume name is always in this segment
+       ldy     #$92                    ; FNAM_SEG
+       sta     (sysp0),y
+
+        ldy     #$9D                    ; FNAM_LEN
+        pla
+        sta     (sysp0),y
+        ldy     ktmp
+        jmp     restore_bank
+
+.endproc
+
+
+
index 54d6eb26e687d11d5740e925b6c4efe03222492b..4653d8148a94ae7c5f0a3bea8a2fe59943aa2654 100644 (file)
@@ -1,13 +1,12 @@
 ;
-; Ullrich von Bassewitz, 13.09.2001
+; Ullrich von Bassewitz, 2003-12-21
 ;
-; udtim routine for the 510. We will not check for the stop key here, since
+; udtim routine for the 610. We will not check for the stop key here, since
 ; C programs will not use it.
-;
-
-       .export         UDTIM
-       .importzp       time
+;                                  
 
+        .export         UDTIM
+        .import         time: zp
 
 .proc  UDTIM
 
@@ -22,5 +21,3 @@ L9:   rts
 
 .endproc
 
-
-             
index 47ed9ae7a411fd5e5d4ab330faa6a36b5fbbef1c..3d21c97718e9ef44c56c179a513329becbdb7eff 100644 (file)
@@ -5,8 +5,8 @@
 ;
 
        .export         _revers
+        .import         RVS: zp
 
-        .include        "cbm510.inc"
 
 .proc   _revers