]> git.sur5r.net Git - cc65/commitdiff
Renamed 'devel' to 'drivers'.
authorol.sc <ol.sc@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 7 Feb 2012 17:02:34 +0000 (17:02 +0000)
committerol.sc <ol.sc@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 7 Feb 2012 17:02:34 +0000 (17:02 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@5490 b7a2c559-68d2-44c3-8de9-860c34a00d81

21 files changed:
libsrc/geos-cbm/Makefile
libsrc/geos-cbm/devel/Makefile [deleted file]
libsrc/geos-cbm/devel/fio_module.s [deleted file]
libsrc/geos-cbm/devel/geos-stdjoy.s [deleted file]
libsrc/geos-cbm/devel/geos-tgi.s [deleted file]
libsrc/geos-cbm/devel/geos-vdc.s [deleted file]
libsrc/geos-cbm/devel/joy_stddrv.s [deleted file]
libsrc/geos-cbm/devel/mcbdefault.s [deleted file]
libsrc/geos-cbm/devel/mouse_stddrv.s [deleted file]
libsrc/geos-cbm/devel/tgi_colors.s [deleted file]
libsrc/geos-cbm/devel/tgi_stddrv.s [deleted file]
libsrc/geos-cbm/drivers/Makefile [new file with mode: 0644]
libsrc/geos-cbm/drivers/fio_module.s [new file with mode: 0644]
libsrc/geos-cbm/drivers/geos-stdjoy.s [new file with mode: 0644]
libsrc/geos-cbm/drivers/geos-tgi.s [new file with mode: 0644]
libsrc/geos-cbm/drivers/geos-vdc.s [new file with mode: 0644]
libsrc/geos-cbm/drivers/joy_stddrv.s [new file with mode: 0644]
libsrc/geos-cbm/drivers/mcbdefault.s [new file with mode: 0644]
libsrc/geos-cbm/drivers/mouse_stddrv.s [new file with mode: 0644]
libsrc/geos-cbm/drivers/tgi_colors.s [new file with mode: 0644]
libsrc/geos-cbm/drivers/tgi_stddrv.s [new file with mode: 0644]

index 8c1a056be3db1f9a246a02c71a80ede27b30754c..cbf3029fc7df9362f78c09645fd6dc15ee42b328 100644 (file)
@@ -44,8 +44,8 @@ CFLAGS        = -Osir -g -T -t $(SYS) --forget-inc-paths -I . -I ../../include
 #--------------------------------------------------------------------------
 # Directories
 
-DIRS = devel           \
-       disk            \
+DIRS = disk            \
+       drivers         \
        file            \
        memory          \
        system
diff --git a/libsrc/geos-cbm/devel/Makefile b/libsrc/geos-cbm/devel/Makefile
deleted file mode 100644 (file)
index 1e3d5d4..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#
-# makefile for CC65 runtime library
-#
-
-#--------------------------------------------------------------------------
-# Object files
-
-S_OBJS +=      fio_module.o    \
-               joy_stddrv.o    \
-               mcbdefault.o    \
-               mouse_stddrv.o  \
-               tgi_colors.o    \
-               tgi_stddrv.o
diff --git a/libsrc/geos-cbm/devel/fio_module.s b/libsrc/geos-cbm/devel/fio_module.s
deleted file mode 100644 (file)
index 166acdc..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-;
-; Low level file I/O routines, ONLY for module loading OR sth similar
-;
-; Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl>
-; 25.12.2002
-;
-; only ONE opened file at a time, only O_RDONLY flag
-
-; int open (const char* name, int flags, ...); /* May take a mode argument */
-; int __fastcall__ close (int fd);
-; int __fastcall__ read (int fd, void* buf, unsigned count);
-
-FILEDES        = 3     ; first free to use file descriptor
-
-       .include        "geossym.inc"
-       .include        "const.inc"
-               .include        "errno.inc"
-       .include        "fcntl.inc"
-
-        .importzp       ptr1, ptr2, ptr3, tmp1
-        .import         addysp, popax
-        .import         __oserror
-       .import         _FindFile, _ReadByte
-
-       .export         _open, _close, _read
-
-
-;--------------------------------------------------------------------------
-; _open
-
-_open:
-
-       cpy     #4              ; correct # of arguments (bytes)?
-       beq     @parmok         ; parameter count ok
-       tya                     ; parm count < 4 shouldn't be needed to be...
-               sec                     ; ...checked (it generates a c compiler warning)
-       sbc     #4
-       tay
-       jsr     addysp          ; fix stack, throw away unused parameters
-
-; Parameters ok. Pop the flags and save them into tmp3
-
-@parmok:
-       jsr     popax           ; Get flags
-       sta     tmp1
-        jsr     popax           ; Get name
-       sta     ptr1
-       stx     ptr1+1
-
-       lda     filedesc        ; is there a file already open?
-       bne     @alreadyopen
-
-       lda     tmp1            ; check open mode
-       and     #(O_RDWR | O_CREAT)
-       cmp     #O_RDONLY       ; only O_RDONLY is valid
-       bne     @badmode
-
-       lda     ptr1
-       ldx     ptr1+1
-       jsr     _FindFile       ; try to find the file
-       tax
-       bne     @oserror
-
-       lda     dirEntryBuf + OFF_DE_TR_SC              ; tr&se for ReadByte (r1)
-       sta     f_track
-       lda     dirEntryBuf + OFF_DE_TR_SC + 1
-       sta     f_sector
-       lda     #<diskBlkBuf                            ; buffer for ReadByte (r4)
-       sta     f_buffer
-       lda     #>diskBlkBuf
-       sta     f_buffer+1
-       ldx     #0                                      ; offset for ReadByte (r5)
-       stx     f_offset
-       stx     f_offset+1
-       lda     #0                                      ; clear errors
-       sta     __oserror
-       jsr     __seterrno
-       lda     #FILEDES        ; return fd
-       sta     filedesc
-       rts
-@badmode:
-       lda     #EINVAL         ; invalid parameters - invalid open mode
-       .byte   $2c             ; skip
-@alreadyopen:
-       lda     #EMFILE         ; too many opened files (there can be only one)
-       jmp     __directerrno   ; set errno, clear oserror, return -1
-@oserror:
-       jmp     __mappederrno   ; set platform error code, return -1
-
-_close:
-       lda     #0
-       sta     __oserror
-       jsr     __seterrno      ; clear errors
-       lda     #0              ; clear fd
-       sta     filedesc
-       tax
-       rts
-
-_read:
-    ; a/x - number of bytes
-    ; popax - buffer ptr
-    ; popax - fd, must be == to the above one
-    ; return -1+__oserror or number of bytes read
-
-       eor     #$ff
-       sta     ptr1
-       txa
-       eor     #$ff
-       sta     ptr1+1          ; -(# of bytes to read)-1
-       jsr     popax
-       sta     ptr2
-       stx     ptr2+1          ; buffer ptr
-       jsr     popax
-       cmp     #FILEDES        ; lo-byte == FILEDES
-       bne     @filenotopen
-       txa                     ; hi-byte == 0
-       beq     @fileok         ; fd must be == FILEDES
-
-@filenotopen:
-       lda     #EBADF
-       jmp     __directerrno   ; Sets _errno, clears _oserror, returns -1
-
-@fileok:
-       lda     #0
-       sta     ptr3
-       sta     ptr3+1          ; put 0 into ptr3 (number of bytes read)
-       sta     __oserror       ; clear error flags
-       jsr     __seterrno
-
-       lda     f_track         ; restore stuff for ReadByte
-       ldx     f_sector
-       sta     r1L
-       stx     r1H
-       lda     f_buffer
-       ldx     f_buffer+1
-       sta     r4L
-       stx     r4H
-       lda     f_offset
-       ldx     f_offset+1
-       sta     r5L
-       stx     r5H
-
-       clc
-       bcc     @L3             ; branch always
-
-@L0:   jsr     _ReadByte
-       ldy     #0              ; store the byte
-       sta     (ptr2),y
-       inc     ptr2            ; increment target address
-       bne     @L1
-       inc     ptr2+1
-
-@L1:   inc     ptr3            ; increment byte count
-       bne     @L2
-       inc     ptr3+1
-
-@L2:   lda     __oserror       ; was there error ?
-       beq     @L3
-       cmp     #BFR_OVERFLOW   ; EOF?
-       beq     @done           ; yes, we're done
-       jmp     __mappederrno   ; no, we're screwed
-
-@L3:   inc     ptr1            ; decrement the count
-       bne     @L0
-       inc     ptr1+1
-       bne     @L0
-
-@done:
-       lda     r1L             ; preserve data for ReadByte
-       ldx     r1H
-       sta     f_track
-       stx     f_sector
-       lda     r4L
-       ldx     r4H
-       sta     f_buffer
-       stx     f_buffer+1
-       lda     r5L
-       ldx     r5H
-       sta     f_offset
-       stx     f_offset+1
-
-       lda     ptr3            ; return byte count
-       ldx     ptr3+1
-       rts
-
-.bss
-filedesc:      .res 1          ; file open flag - 0 (no file opened) or 1
-f_track:       .res 1          ; values preserved for ReadByte
-f_sector:      .res 1
-f_offset:      .res 2
-f_buffer:      .res 2
diff --git a/libsrc/geos-cbm/devel/geos-stdjoy.s b/libsrc/geos-cbm/devel/geos-stdjoy.s
deleted file mode 100644 (file)
index 61d2906..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-;
-; Standard joystick driver for the C64. May be used multiple times when linked
-; to the statically application.
-;
-; Ullrich von Bassewitz, 2002-12-20
-;
-
-       .include        "zeropage.inc"
-
-       .include        "joy-kernel.inc"
-        .include        "joy-error.inc"
-       .include        "geossym.inc"
-
-        .macpack        generic
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-.segment        "JUMPTABLE"
-                                            
-; Driver signature
-
-        .byte   $6A, $6F, $79          ; "joy"
-        .byte   JOY_API_VERSION                ; Driver API version number
-
-; Button state masks (8 values)
-
-        .byte   $01                     ; JOY_UP
-        .byte   $02                     ; JOY_DOWN
-        .byte   $04                     ; JOY_LEFT
-        .byte   $08                     ; JOY_RIGHT
-        .byte   $10                     ; JOY_FIRE
-        .byte   $00                     ; Future expansion
-        .byte   $00                     ; Future expansion
-        .byte   $00                     ; Future expansion
-
-; Jump table.
-
-        .word   INSTALL
-        .word   UNINSTALL
-        .word   COUNT
-        .word   READ
-
-; ------------------------------------------------------------------------
-; Constants
-
-JOY_COUNT       = 2             ; Number of joysticks we support
-
-
-; ------------------------------------------------------------------------
-; Data.
-
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an JOY_ERR_xx code in a/x.
-;
-
-INSTALL:
-        lda     #<JOY_ERR_OK
-        ldx     #>JOY_ERR_OK
-;      rts                     ; Run into UNINSTALL instead
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; COUNT: Return the total number of available joysticks in a/x.
-;
-
-COUNT:
-        lda     #<JOY_COUNT
-        ldx     #>JOY_COUNT
-        rts
-
-; ------------------------------------------------------------------------
-; READ: Read a particular joystick passed in A.
-;
-
-READ:
-       tax
-       php
-       sei                     ; disable IRQ
-       lda     $01
-       pha
-       lda     #$35
-       sta     $01             ; enable I/O
-
-       txa                     ; Joystick number into X
-       bne     joy2
-
-; Read joystick 1
-
-joy1:
-       lda     #$7F
-       sta     cia1base
-       lda     cia1base+1
-back:  tay
-       pla
-       sta     $01
-       plp
-       tya
-       and     #$1F
-       eor     #$1F
-       rts
-
-; Read joystick 2
-
-joy2:  ldx     #0
-       lda     #$E0
-       ldy     #$FF
-       sta     cia1base+2
-       lda     cia1base+1
-       sty     cia1base+2
-       jmp     back
diff --git a/libsrc/geos-cbm/devel/geos-tgi.s b/libsrc/geos-cbm/devel/geos-tgi.s
deleted file mode 100644 (file)
index 542e8a0..0000000
+++ /dev/null
@@ -1,673 +0,0 @@
-;
-; Graphics driver for the 320x200x2 and 640x200x2 modes on GEOS 64/128
-; 2010-08-17, Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl>
-; 2010-08-18, Greg King
-
-       .include        "zeropage.inc"
-
-       .include        "tgi-kernel.inc"
-        .include        "tgi-error.inc"
-
-       .include        "const.inc"
-       .include        "jumptab.inc"
-       .include        "geossym.inc"
-       .include        "geossym2.inc"
-
-        .macpack        generic
-
-; ------------------------------------------------------------------------
-; Constants
-
-VDC_ADDR_REG     := $D600                ; VDC address
-VDC_DATA_REG     := $D601                ; VDC data
-
-VDC_DSP_HI       = 12                    ; registers used
-VDC_DSP_LO       = 13
-VDC_DATA_HI      = 18
-VDC_DATA_LO      = 19
-VDC_VSCROLL      = 24
-VDC_HSCROLL      = 25
-VDC_COLORS       = 26
-VDC_CSET         = 28
-VDC_COUNT        = 30
-VDC_DATA         = 31
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table and constants.
-
-.segment        "JUMPTABLE"
-
-; First part of the header is a structure that has a magic signature,
-; and defines the capabilities of the driver.
-
-        .byte   $74, $67, $69           ; "tgi"
-        .byte   TGI_API_VERSION         ; TGI API version number
-xres:   .word   320                     ; X resolution
-yres:   .word   200                     ; Y resolution
-        .byte   2                       ; Number of drawing colors
-pages: .byte   1                       ; Number of screens available
-        .byte   8                       ; System font X size
-        .byte   8                       ; System font Y size
-aspect: .word   $00D4                   ; Aspect ratio (based on 4/3 display)
-        .byte   0                       ; TGI driver flags
-
-; Next comes the jump table. With the exception of IRQ, all entries must be
-; valid, and may point to an RTS for test versions (function not implemented).
-
-       .addr   INSTALL
-       .addr   UNINSTALL
-       .addr   INIT
-       .addr   DONE
-       .addr   GETERROR
-       .addr   CONTROL
-       .addr   CLEAR
-       .addr   SETVIEWPAGE
-       .addr   SETDRAWPAGE
-       .addr   SETCOLOR
-       .addr   SETPALETTE
-       .addr   GETPALETTE
-       .addr   GETDEFPALETTE
-       .addr   SETPIXEL
-       .addr   GETPIXEL
-       .addr   LINE
-       .addr   BAR
-       .addr   TEXTSTYLE
-       .addr   OUTTEXT
-       .addr   0                       ; IRQ entry is unused
-
-; ------------------------------------------------------------------------
-; Data.
-
-; Variables mapped to the zero-page segment variables. Some of these are
-; used for passing parameters to the driver.
-
-X1              = ptr1
-Y1              = ptr2
-X2              = ptr3
-Y2              = ptr4
-
-; Absolute variables used in the code
-
-.bss
-
-SCRBASE:       .res    1       ; High byte of screen base (64k VDC only)
-
-ERROR:         .res    1       ; Error code
-PALETTE:        .res    2       ; The current palette
-
-BITMASK:        .res    1       ; $00 = clear, $01 = set pixels
-
-OLDCOLOR:      .res    1       ; colors before entering gfx mode
-
-; Text output stuff
-TEXTMAGX:       .res    1
-TEXTMAGY:       .res    1
-TEXTDIR:        .res    1
-
-; Constants and tables
-
-.rodata
-
-DEFPALETTE:     .byte   $00, $0f        ; White on black
-PALETTESIZE     = * - DEFPALETTE
-
-; color translation table (indexed by VIC color)
-COLTRANS:      .byte $00, $0f, $08, $06, $0a, $04, $02, $0c
-               .byte $0d, $0b, $09, $01, $0e, $05, $03, $07
-               ; colors BROWN and GRAY3 are wrong
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. May
-; initialize anything that has to be done just once. Is probably empty
-; most of the time.
-;
-; Must set an error code: NO
-;
-
-INSTALL:
-       lda version             ; if GEOS 1.0...
-       and #$f0
-       cmp #$10
-       beq @L40
-       lda c128Flag            ; at least GEOS 2.0, but we're on C128?
-       bpl @L40
-        lda graphMode          ; GEOS 2.0, C128, but is 80 column screen enabled?
-        bmi @L80
-@L40:  rts                     ; leave default values for 40 column screen
-
-       ; check for VDC version and update register $19 value
-
-@L80:
-       ; double the x resolution and halve the aspect ratio
-
-       asl     xres
-       rol     xres+1
-
-       lsr     aspect+1
-       ror     aspect
-
-       ; update number of available screens
-
-       ldx     #VDC_CSET       ; determine size of RAM...
-       jsr     VDCReadReg
-       sta     tmp1
-       ora     #%00010000
-       jsr     VDCWriteReg     ; turn on 64k
-
-       jsr     settestadr1     ; save original value of test byte
-       jsr     VDCReadByte
-       sta     tmp2
-
-       lda     #$55            ; write $55 here
-       ldy     #ptr1
-       jsr     test64k         ; read it here and there
-       lda     #$aa            ; write $aa here
-       ldy     #ptr2
-       jsr     test64k         ; read it here and there
-
-       jsr     settestadr1
-       lda     tmp2
-       jsr     VDCWriteByte    ; restore original value of test byte
-
-       lda     ptr1            ; do bytes match?
-       cmp     ptr1+1
-       bne     @have64k
-       lda     ptr2
-       cmp     ptr2+1
-       bne     @have64k
-
-       ldx     #VDC_CSET
-       lda     tmp1
-       jsr     VDCWriteReg     ; restore 16/64k flag
-       jmp     @endok          ; and leave default values for 16k
-
-@have64k:
-       lda     #4
-       sta     pages
-@endok:
-       lda     #0
-       sta     SCRBASE         ; draw page 0 as default
-        rts
-
-test64k:
-       sta     tmp1
-       sty     ptr3
-       lda     #0
-       sta     ptr3+1
-       jsr     settestadr1
-       lda     tmp1
-       jsr     VDCWriteByte            ; write $55
-       jsr     settestadr1
-       jsr     VDCReadByte             ; read here
-       pha
-       jsr     settestadr2
-       jsr     VDCReadByte             ; and there
-       ldy     #1
-       sta     (ptr3),y
-       pla
-       dey
-       sta     (ptr3),y
-       rts
-
-settestadr1:
-       ldy     #$02                    ; test page 2 (here)
-       .byte   $2c
-settestadr2:
-       ldy     #$42                    ; or page 64+2 (there)
-       lda     #0
-       jmp     VDCSetSourceAddr
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory. May
-; clean up anything done by INSTALL but is probably empty most of the time.
-;
-; Must set an error code: NO
-;
-
-UNINSTALL:
-        rts
-
-
-; ------------------------------------------------------------------------
-; INIT: Changes an already installed device from text mode to graphics
-; mode.
-; Note that INIT/DONE may be called multiple times while the driver
-; is loaded, while INSTALL is only called once, so any code that is needed
-; to initializes variables and so on must go here. Setting palette and
-; clearing the screen is not needed because this is called by the graphics
-; kernel later.
-; The graphics kernel will never call INIT when a graphics mode is already
-; active, so there is no need to protect against that.
-;
-; Must set an error code: YES
-;
-
-INIT:
-       ldx #$01
-       stx BITMASK             ; solid black as pattern
-       lda #1
-       jsr SetPattern
-       lda #ST_WR_FORE         ; write only on foreground
-       sta dispBufferOn
-
-        lda graphMode
-        bmi @L80
-
-; Remember current color value (40 columns)
-       lda screencolors
-       sta OLDCOLOR
-       jmp @L99
-
-; Remember current color value (80 columns)
-@L80:  lda scr80colors
-       sta OLDCOLOR
-@L99:  lda #0
-       jsr SETVIEWPAGE         ; switch into viewpage 0
-
-; Done, reset the error code
-
-       lda     #TGI_ERR_OK
-       sta     ERROR
-        rts
-
-; ------------------------------------------------------------------------
-; DONE: Will be called to switch the graphics device back into text mode.
-; The graphics kernel will never call DONE when no graphics mode is active,
-; so there is no need to protect against that.
-;
-; Must set an error code: NO
-;
-
-DONE:
-       lda #0
-       jsr SETVIEWPAGE         ; switch into viewpage 0
-
-       lda graphMode
-       bmi @L80
-
-       lda OLDCOLOR
-       sta screencolors        ; restore color for 40 columns
-       ldx #0
-@L1:   sta COLOR_MATRIX,x
-       sta COLOR_MATRIX+$0100,x
-       sta COLOR_MATRIX+$0200,x
-       sta COLOR_MATRIX+1000-256,x
-       inx
-       bne @L1
-       rts
-
-@L80:  lda OLDCOLOR            ; restore color for 80 columns
-       ldx #VDC_COLORS
-       jmp VDCWriteReg
-
-; ------------------------------------------------------------------------
-; GETERROR: Return the error code in A and clear it.
-
-GETERROR:
-               ldx     #TGI_ERR_OK
-       lda     ERROR
-       stx     ERROR
-        rts
-
-; ------------------------------------------------------------------------
-; CONTROL: Platform/driver specific entry point.
-;
-; Must set an error code: YES
-;
-
-CONTROL:
-       lda     #TGI_ERR_INV_FUNC
-       sta     ERROR
-        rts
-
-; ------------------------------------------------------------------------
-; CLEAR: Clears the screen.
-;
-; Must set an error code: NO
-;
-
-CLEAR:
-           lda curPattern
-           pha
-           lda #0
-           jsr SetPattern
-           ldx #0
-           stx r3L
-           stx r3H
-           stx r2L
-           lda #199
-           sta r2H
-           lda graphMode
-           bpl @L40
-           lda #>639                   ; 80 columns
-           ldx #<639
-           bne @L99
-@L40:      lda #>319                   ; 40 columns
-           ldx #<319
-@L99:      sta r4H
-           stx r4L
-           jsr Rectangle
-           pla
-           sta curPattern
-           rts
-
-; ------------------------------------------------------------------------
-; SETVIEWPAGE: Set the visible page. Called with the new page in A (0..n).
-; The page number is already checked to be valid by the graphics kernel.
-;
-; Must set an error code: NO (will only be called if page ok)
-;
-
-SETVIEWPAGE:
-       ldx graphMode
-       bmi @L80
-       rts
-@L80:  clc
-       ror
-       ror
-       ror
-       ldx     #VDC_DSP_HI
-       jmp     VDCWriteReg
-
-; ------------------------------------------------------------------------
-; SETDRAWPAGE: Set the drawable page. Called with the new page in A (0..n).
-; The page number is already checked to be valid by the graphics kernel.
-;
-; Must set an error code: NO (will only be called if page ok)
-;
-
-SETDRAWPAGE:
-       ldx graphMode
-       bmi @L80
-       rts
-@L80:  clc
-       ror
-       ror
-       ror
-       sta     SCRBASE
-       rts
-
-; ------------------------------------------------------------------------
-; SETCOLOR: Set the drawing color (in A). The new color is already checked
-; to be in a valid range (0..maxcolor-1).
-;
-; Must set an error code: NO (will only be called if color ok)
-;
-
-SETCOLOR:
-        tax
-        beq     @L1
-        lda    #1
-@L1:    sta     BITMASK
-       jmp     SetPattern      ; need to have either 0 or 1
-
-; ------------------------------------------------------------------------
-; SETPALETTE: Set the palette (not available with all drivers/hardware).
-; A pointer to the palette is passed in ptr1. Must set an error if palettes
-; are not supported
-;
-; Must set an error code: YES
-;
-
-SETPALETTE:
-       jsr     GETERROR        ; clear error (if any)
-
-        ldy     #PALETTESIZE - 1
-@L1:    lda     (ptr1),y        ; Copy the palette
-        and     #$0F            ; Make a valid color
-        sta     PALETTE,y
-        dey
-        bpl     @L1
-
-; Put colors from palette into screen
-
-       lda     graphMode
-       bmi     @L80
-
-       lda     PALETTE+1       ; foreground
-       asl     a
-       asl     a
-       asl     a
-       asl     a
-       ora     PALETTE         ; background
-       ldx     #0
-@L2:   sta     COLOR_MATRIX,x
-       sta     COLOR_MATRIX+$0100,x
-       sta     COLOR_MATRIX+$0200,x
-       sta     COLOR_MATRIX+1000-256,x
-       inx
-       bne     @L2
-       rts
-
-@L80:   ldy     PALETTE+1       ; Foreground color
-       lda     COLTRANS,y
-        asl     a
-        asl     a
-        asl     a
-        asl     a
-        ldy     PALETTE         ; Background color
-       ora     COLTRANS,y
-
-       ldx     #VDC_COLORS
-       jmp     VDCWriteReg
-
-; ------------------------------------------------------------------------
-; GETPALETTE: Return the current palette in A/X. Even drivers that cannot
-; set the palette should return the default palette here, so there's no
-; way for this function to fail.
-;
-; Must set an error code: NO
-;
-
-GETPALETTE:
-        lda     #<PALETTE
-        ldx     #>PALETTE
-        rts
-
-; ------------------------------------------------------------------------
-; GETDEFPALETTE: Return the default palette for the driver in A/X. All
-; drivers should return something reasonable here, even drivers that don't
-; support palettes, otherwise the caller has no way to determine the colors
-; of the (not changeable) palette.
-;
-; Must set an error code: NO (all drivers must have a default palette)
-;
-
-GETDEFPALETTE:
-        lda     #<DEFPALETTE
-        ldx     #>DEFPALETTE
-        rts
-
-; ------------------------------------------------------------------------
-; SETPIXEL: Draw one pixel at X1/Y1 = ptr1/ptr2 with the current drawing
-; color. The coordinates passed to this function are never outside the
-; visible screen area, so there is no need for clipping inside this function.
-;
-; Must set an error code: NO
-;
-
-SETPIXEL:
-       lda     X1
-       ldx     X1+1
-       ldy     Y1
-       sta     r3L
-       stx     r3H
-       sty     r11L
-       sec
-       lda     BITMASK         ; set or clear C flag
-       bne     @L1
-       clc
-@L1:   lda     #0
-       jmp     DrawPoint
-
-; ------------------------------------------------------------------------
-; GETPIXEL: Read the color value of a pixel and return it in A/X. The
-; coordinates passed to this function are never outside the visible screen
-; area, so there is no need for clipping inside this function.
-
-
-GETPIXEL:
-       lda     X1
-       ldx     X1+1
-       ldy     Y1
-       sta     r3L
-       stx     r3H
-       sty     r11L
-       jsr     TestPoint
-       ldx     #0
-       bcc     @L1
-       inx
-@L1:   txa
-       ldx     #0
-       rts
-
-; ------------------------------------------------------------------------
-; LINE: Draw a line from X1/Y1 to X2/Y2, where X1/Y1 = ptr1/ptr2 and
-; X2/Y2 = ptr3/ptr4 using the current drawing color.
-;
-; Must set an error code: NO
-;
-
-LINE:
-       lda     X1
-       ldx     X1+1
-       ldy     Y1
-       sta     r3L
-       stx     r3H
-       sty     r11L
-       lda     X2
-       ldx     X2+1
-       ldy     Y2
-       sta     r4L
-       stx     r4H
-       sty     r11H
-       sec
-       lda     BITMASK         ; set or clear C flag
-       bne     @L1
-       clc
-@L1:   lda     #0
-       jmp     DrawLine
-
-; ------------------------------------------------------------------------
-; BAR: Draw a filled rectangle with the corners X1/Y1, X2/Y2, where
-; X1/Y1 = ptr1/ptr2 and X2/Y2 = ptr3/ptr4 using the current drawing color.
-; Contrary to most other functions, the graphics kernel will sort and clip
-; the coordinates before calling the driver, so on entry the following
-; conditions are valid:
-;       X1 <= X2
-;       Y1 <= Y2
-;       (X1 >= 0) && (X1 < XRES)
-;       (X2 >= 0) && (X2 < XRES)
-;       (Y1 >= 0) && (Y1 < YRES)
-;       (Y2 >= 0) && (Y2 < YRES)
-;
-; Must set an error code: NO
-;
-
-BAR:
-       lda     X1
-       ldx     X1+1
-       ldy     Y1
-       sta     r3L
-       stx     r3H
-       sty     r2L
-       lda     X2
-       ldx     X2+1
-       ldy     Y2
-       sta     r4L
-       stx     r4H
-       sty     r2H
-       jmp     Rectangle
-
-; ------------------------------------------------------------------------
-; TEXTSTYLE: Set the style used when calling OUTTEXT. Text scaling in X and Y
-; direction is passend in X/Y, the text direction is passed in A.
-;
-; Must set an error code: NO
-;
-
-TEXTSTYLE:
-        stx     TEXTMAGX
-        sty     TEXTMAGY
-        sta     TEXTDIR
-        rts
-
-
-; ------------------------------------------------------------------------
-; OUTTEXT: Output text at X/Y = ptr1/ptr2 using the current color and the
-; current text style. The text to output is given as a zero terminated
-; string with address in ptr3.
-;
-; Must set an error code: NO
-;
-
-OUTTEXT:
-       lda     TEXTDIR
-;      cmp     #TGI_TEXT_HORIZONTAL    ; this is equal 0
-       bne     @vertical
-
-       lda     X1              ; horizontal text output
-       ldx     X1+1
-       ldy     Y1
-       sta     r11L
-       stx     r11H
-       sty     r1H
-       lda     ptr3
-       ldx     ptr3+1
-       sta     r0L
-       stx     r0H
-       jmp     PutString
-
-@vertical:
-       lda     X1              ; vertical text output
-       ldx     X1+1
-       ldy     Y1
-       sta     r11L
-       stx     r11H
-       sty     r1H
-       ldy     #0
-       lda     (ptr3),y
-       beq     @end
-       jsr     PutChar
-       inc     ptr3
-       bne     @L1
-       inc     ptr3+1
-@L1:   lda     Y1
-       clc
-       adc     #8
-       sta     Y1
-       bne     @vertical
-@end:  rts
-
-;-------------
-; VDC helpers
-
-VDCSetSourceAddr:
-       pha
-       tya
-       ldx     #VDC_DATA_HI
-       jsr     VDCWriteReg
-       pla
-       ldx     #VDC_DATA_LO
-       bne     VDCWriteReg
-
-VDCReadByte:
-       ldx     #VDC_DATA
-VDCReadReg:
-       stx     VDC_ADDR_REG
-@L0:   bit     VDC_ADDR_REG
-       bpl     @L0
-       lda     VDC_DATA_REG
-       rts
-
-VDCWriteByte:
-       ldx     #VDC_DATA
-VDCWriteReg:
-       stx     VDC_ADDR_REG
-@L0:   bit     VDC_ADDR_REG
-       bpl     @L0
-       sta     VDC_DATA_REG
-       rts
-
diff --git a/libsrc/geos-cbm/devel/geos-vdc.s b/libsrc/geos-cbm/devel/geos-vdc.s
deleted file mode 100644 (file)
index dda119b..0000000
+++ /dev/null
@@ -1,426 +0,0 @@
-;
-; Extended memory driver for the VDC RAM available on all C128 machines
-; version for GEOS enters safe I/O config on C64 (transparent on C128)
-;
-; Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl>
-; 06,20,25.12.2002
-
-       .include        "zeropage.inc"
-
-       .include        "em-kernel.inc"
-        .include       "em-error.inc"
-
-
-        .macpack        generic
-
-
-; ------------------------------------------------------------------------
-; Header. Includes jump table
-
-.segment        "JUMPTABLE"
-
-; Driver signature
-
-        .byte   $65, $6d, $64           ; "emd"
-        .byte   EMD_API_VERSION                ; EM API version number
-
-; Jump table.
-
-        .word   INSTALL
-        .word   UNINSTALL
-        .word   PAGECOUNT
-        .word   MAP
-       .word   USE
-        .word   COMMIT
-       .word   COPYFROM
-        .word   COPYTO
-
-; ------------------------------------------------------------------------
-; Constants
-
-VDC_ADDR_REG     = $D600                 ; VDC address
-VDC_DATA_REG     = $D601                 ; VDC data
-
-VDC_DATA_HI      = 18                    ; used registers
-VDC_DATA_LO      = 19
-VDC_CSET         = 28
-VDC_DATA         = 31
-
-; ------------------------------------------------------------------------
-; Data.
-
-.data
-
-pagecount:      .word  64                 ; $0000-$3fff as 16k default
-curpage:       .word  $ffff               ; currently mapped-in page (invalid)
-
-.bss
-
-window:                .res    256                ; memory window
-
-.code
-
-; ------------------------------------------------------------------------
-; INSTALL routine. Is called after the driver is loaded into memory. If
-; possible, check if the hardware is present and determine the amount of
-; memory available.
-; Must return an EM_ERR_xx code in a/x.
-;
-
-INSTALL:
-       ; do test for VDC presence here???
-
-       php
-       sei
-       lda     $01
-       pha
-       lda     #$35
-       sta     $01
-
-       ldx     #VDC_CSET       ; determine size of RAM...
-       jsr     vdcgetreg
-       sta     tmp1
-       ora     #%00010000
-       jsr     vdcputreg       ; turn on 64k
-
-       jsr     settestadr1     ; save original value of test byte
-       jsr     vdcgetbyte
-       sta     tmp2
-
-       lda     #$55            ; write $55 here
-       ldy     #ptr1
-       jsr     test64k         ; read it here and there
-       lda     #$aa            ; write $aa here
-       ldy     #ptr2
-       jsr     test64k         ; read it here and there
-
-       jsr     settestadr1
-       lda     tmp2
-       jsr     vdcputbyte      ; restore original value of test byte
-
-       lda     ptr1            ; do bytes match?
-       cmp     ptr1+1
-       bne     @have64k
-       lda     ptr2
-       cmp     ptr2+1
-       bne     @have64k
-
-       ldx     #VDC_CSET
-       lda     tmp1
-       jsr     vdcputreg       ; restore 16/64k flag
-       jmp     @endok          ; and leave default values for 16k
-
-@have64k:
-       lda     #<256
-       ldx     #>256
-       sta     pagecount
-       stx     pagecount+1
-@endok:
-       pla
-       sta     $01
-       plp
-       lda     #<EM_ERR_OK
-        ldx     #>EM_ERR_OK
-        rts
-
-test64k:
-       sta     tmp1
-       sty     ptr3
-       lda     #0
-       sta     ptr3+1
-       jsr     settestadr1
-       lda     tmp1
-       jsr     vdcputbyte              ; write $55
-       jsr     settestadr1
-       jsr     vdcgetbyte              ; read here
-       pha
-       jsr     settestadr2
-       jsr     vdcgetbyte              ; and there
-       ldy     #1
-       sta     (ptr3),y
-       pla
-       dey
-       sta     (ptr3),y
-       rts
-
-settestadr1:
-       ldy     #$02                    ; test page 2 (here)
-       .byte   $2c
-settestadr2:
-       ldy     #$42                    ; or page 64+2 (there)
-       lda     #0
-       jmp     vdcsetsrcaddr
-
-; ------------------------------------------------------------------------
-; UNINSTALL routine. Is called before the driver is removed from memory.
-; Can do cleanup or whatever. Must not return anything.
-;
-
-UNINSTALL:
-       ;on C128 restore font and clear the screen?
-        rts
-
-; ------------------------------------------------------------------------
-; PAGECOUNT: Return the total number of available pages in a/x.
-;
-
-PAGECOUNT:
-        lda     pagecount
-        ldx     pagecount+1
-        rts
-
-; ------------------------------------------------------------------------
-; MAP: Map the page in a/x into memory and return a pointer to the page in
-; a/x. The contents of the currently mapped page (if any) may be discarded
-; by the driver.
-;
-
-MAP:   sta     curpage
-       stx     curpage+1
-       sta     ptr1+1
-       ldy     #0
-       sty     ptr1
-
-       lda     #<window
-       sta     ptr2
-       lda     #>window
-       sta     ptr2+1
-
-       jsr     transferin
-
-        lda     #<window
-        ldx     #>window
-       rts
-
-; copy a single page from (ptr1):VDCRAM to (ptr2):RAM
-
-transferin:
-       php
-       sei
-       lda     $01
-       pha
-       lda     #$35
-       sta     $01
-       lda     ptr1
-       ldy     ptr1+1
-       jsr     vdcsetsrcaddr           ; set source address in VDC
-       ldy     #0
-       ldx     #VDC_DATA
-       stx     VDC_ADDR_REG
-@L0:   bit     VDC_ADDR_REG
-       bpl     @L0
-       lda     VDC_DATA_REG            ; get 2 bytes at a time to speed-up
-       sta     (ptr2),y                ; (in fact up to 8 bytes could be fetched with special VDC config)
-       iny
-       lda     VDC_DATA_REG
-       sta     (ptr2),y
-       iny
-       bne     @L0
-       pla
-       sta     $01
-       plp
-       rts
-
-; ------------------------------------------------------------------------
-; USE: Tell the driver that the window is now associated with a given page.
-
-USE:    sta     curpage
-        stx     curpage+1               ; Remember the page
-        lda     #<window
-        ldx     #>window                ; Return the window
-done:   rts
-
-; ------------------------------------------------------------------------
-; COMMIT: Commit changes in the memory window to extended storage.
-
-COMMIT:
-       lda     curpage                 ; jump if no page mapped
-       ldx     curpage+1
-       bmi     done
-       sta     ptr1+1
-       ldy     #0
-       sty     ptr1
-
-       lda     #<window
-       sta     ptr2
-       lda     #>window
-       sta     ptr2+1
-
-; fall through to transferout
-
-; copy a single page from (ptr2):RAM to (ptr1):VDCRAM
-
-transferout:
-       php
-       sei
-       lda     $01
-       pha
-       lda     #$35
-       sta     $01
-       lda     ptr1
-       ldy     ptr1+1
-       jsr     vdcsetsrcaddr           ; set source address in VDC
-       ldy     #0
-       ldx     #VDC_DATA
-       stx     VDC_ADDR_REG
-@L0:   bit     VDC_ADDR_REG
-       bpl     @L0
-       lda     (ptr2),y                ; speedup does not work for writing
-       sta     VDC_DATA_REG
-       iny
-       bne     @L0
-       pla
-       sta     $01
-       plp
-       rts
-
-; ------------------------------------------------------------------------
-; COPYFROM: Copy from extended into linear memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYFROM:
-       jsr     setup
-       beq     @L2                     ; Skip if no full pages
-
-; Copy full pages
-
-@L1:    jsr     transferin
-        inc     ptr1+1
-        inc     ptr2+1
-        dec     tmp1
-        bne     @L1
-
-; Copy the remainder of the page
-                
-@L2:    ldy     #EM_COPY::COUNT
-        lda     (ptr3),y                ; Get bytes in last page
-        beq     @L4
-        sta    tmp1
-
-; Transfer the bytes in the last page
-       php
-       sei
-       lda     $01
-       pha
-       lda     #$35
-       sta     $01
-       ldy     #0
-@L3:   jsr     vdcgetbyte
-       sta     (ptr2),y
-       iny
-       dec     tmp1
-       lda     tmp1
-       bne     @L3
-       pla
-       sta     $01
-       plp
-@L4:   rts
-
-; ------------------------------------------------------------------------
-; COPYTO: Copy from linear into extended memory. A pointer to a structure
-; describing the request is passed in a/x.
-; The function must not return anything.
-;
-
-COPYTO:
-       jsr     setup
-       beq     @L2                     ; Skip if no full pages
-
-; Copy full pages
-
-@L1:    jsr     transferout
-        inc     ptr1+1
-        inc     ptr2+1
-        dec     tmp1
-        bne     @L1
-
-; Copy the remainder of the page
-
-@L2:    ldy     #EM_COPY::COUNT
-        lda     (ptr3),y                ; Get bytes in last page
-        beq     @L4
-        sta    tmp1
-
-; Transfer the bytes in the last page
-       php
-       sei
-       lda     $01
-       pha
-       lda     #$35
-       sta     $01
-       ldy     #0
-@L3:   lda     (ptr2),y
-       jsr     vdcputbyte
-       iny
-       dec     tmp1
-       lda     tmp1
-       bne     @L3
-       pla
-       sta     $01
-       plp
-@L4:   rts
-
-;-------------------------------------------------------------------------
-; Helper functions to handle VDC ram
-;
-
-vdcsetsrcaddr:
-       ldx     #VDC_DATA_LO
-       stx     VDC_ADDR_REG
-@L0:   bit     VDC_ADDR_REG
-       bpl     @L0
-       sta     VDC_DATA_REG
-       dex
-       tya
-       stx     VDC_ADDR_REG
-       sta     VDC_DATA_REG
-       rts
-
-vdcgetbyte:
-       ldx     #VDC_DATA
-vdcgetreg:
-       stx     VDC_ADDR_REG
-@L0:   bit     VDC_ADDR_REG
-       bpl     @L0
-       lda     VDC_DATA_REG
-       rts
-
-vdcputbyte:
-       ldx     #VDC_DATA
-vdcputreg:
-       stx     VDC_ADDR_REG
-@L0:   bit     VDC_ADDR_REG
-       bpl     @L0
-       sta     VDC_DATA_REG
-       rts
-
-; ------------------------------------------------------------------------
-; Helper function for COPYFROM and COPYTO: Store the pointer to the request
-; structure and prepare data for the copy
-;
-
-setup:
-       sta     ptr3
-        stx     ptr3+1                  ; Save the passed em_copy pointer
-
-        ldy     #EM_COPY::OFFS
-        lda     (ptr3),y
-        sta     ptr1
-        ldy     #EM_COPY::PAGE
-        lda     (ptr3),y
-        sta     ptr1+1                  ; From
-
-        ldy     #EM_COPY::BUF
-        lda     (ptr3),y
-        sta     ptr2
-        iny
-        lda     (ptr3),y
-        sta     ptr2+1                  ; To
-
-       ldy     #EM_COPY::COUNT+1
-        lda     (ptr3),y                ; Get number of pages
-        sta     tmp1     
-       rts
-
diff --git a/libsrc/geos-cbm/devel/joy_stddrv.s b/libsrc/geos-cbm/devel/joy_stddrv.s
deleted file mode 100644 (file)
index dd01dc2..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-;
-; Name of the standard joystick driver
-;
-; Ullrich von Bassewitz, 2002-12-21
-;
-; const char joy_stddrv[];
-;
-
-       .export _joy_stddrv
-
-.rodata
-
-_joy_stddrv:   .asciiz "geos-stdjoy.joy"
-
diff --git a/libsrc/geos-cbm/devel/mcbdefault.s b/libsrc/geos-cbm/devel/mcbdefault.s
deleted file mode 100644 (file)
index 6fca43a..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-;
-; Mouse callbacks for GEOS.
-;
-; GEOS has a built-in mouse architecture.  Half of this file does nothing
-; -- it exists merely to allow portable programs to link and run.
-;
-; 2.7.2001, Maciej 'YTM/Elysium' Witkowiak
-; 2004-03-20, Ullrich von Bassewitz
-; 2004-09-24, Greg King
-;
-
-;      .constructor    init_pointer
-        .export         _mouse_def_callbacks
-
-;       .include        "mouse-kernel.inc"
-;      .include        "const.inc"
-;      .include        "geossym.inc"
-       .include        "jumptab.inc"
-
-;       .macpack        generic
-
-; The functions below must be interrupt-safe,
-; because they might be called from an interrupt-handler.
-
-.code
-
-; --------------------------------------------------------------------------
-; Hide the mouse pointer. Always called with interrupts disabled.
-
-hide := MouseOff
-
-; --------------------------------------------------------------------------
-; Show the mouse pointer. Always called with interrupts disabled.
-
-show := MouseUp
-
-; --------------------------------------------------------------------------
-; Move the mouse pointer X position to the value in .XA. Always called with
-; interrupts disabled.
-
-.proc   movex
-
-        rts
-
-.endproc
-
-; --------------------------------------------------------------------------
-; Move the mouse pointer Y position to the value in .XA. Always called with
-; interrupts disabled.
-
-.proc   movey
-
-        rts
-
-.endproc
-
-; --------------------------------------------------------------------------
-; Callback structure
-
-.rodata
-
-_mouse_def_callbacks:
-        .addr   hide
-        .addr   show
-        .addr   movex
-        .addr   movey
-
-
diff --git a/libsrc/geos-cbm/devel/mouse_stddrv.s b/libsrc/geos-cbm/devel/mouse_stddrv.s
deleted file mode 100644 (file)
index 8792c27..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-;
-; Name of the standard mouse driver
-;
-; 2010-01-25, Greg King
-;
-; const char mouse_stddrv[];
-;
-       .export         _mouse_stddrv
-
-       .rodata
-_mouse_stddrv: .asciiz "geos-stdmou.mou"
diff --git a/libsrc/geos-cbm/devel/tgi_colors.s b/libsrc/geos-cbm/devel/tgi_colors.s
deleted file mode 100644 (file)
index d965e6f..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-;
-; Target-specific black & white values, for use by the target-shared TGI kernel
-;
-
-       .include        "tgi-kernel.inc"
-
-tgi_color_black = $00
-tgi_color_white = $01
diff --git a/libsrc/geos-cbm/devel/tgi_stddrv.s b/libsrc/geos-cbm/devel/tgi_stddrv.s
deleted file mode 100644 (file)
index 6745c23..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-;
-; Name of the standard tgi driver
-;
-; Oliver Schmidt, 2011-05-02
-;
-; const char tgi_stddrv[];
-;
-
-        .export        _tgi_stddrv
-
-.rodata
-
-_tgi_stddrv:   .asciiz "geos-tgi.tgi"
diff --git a/libsrc/geos-cbm/drivers/Makefile b/libsrc/geos-cbm/drivers/Makefile
new file mode 100644 (file)
index 0000000..1e3d5d4
--- /dev/null
@@ -0,0 +1,13 @@
+#
+# makefile for CC65 runtime library
+#
+
+#--------------------------------------------------------------------------
+# Object files
+
+S_OBJS +=      fio_module.o    \
+               joy_stddrv.o    \
+               mcbdefault.o    \
+               mouse_stddrv.o  \
+               tgi_colors.o    \
+               tgi_stddrv.o
diff --git a/libsrc/geos-cbm/drivers/fio_module.s b/libsrc/geos-cbm/drivers/fio_module.s
new file mode 100644 (file)
index 0000000..166acdc
--- /dev/null
@@ -0,0 +1,191 @@
+;
+; Low level file I/O routines, ONLY for module loading OR sth similar
+;
+; Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl>
+; 25.12.2002
+;
+; only ONE opened file at a time, only O_RDONLY flag
+
+; int open (const char* name, int flags, ...); /* May take a mode argument */
+; int __fastcall__ close (int fd);
+; int __fastcall__ read (int fd, void* buf, unsigned count);
+
+FILEDES        = 3     ; first free to use file descriptor
+
+       .include        "geossym.inc"
+       .include        "const.inc"
+               .include        "errno.inc"
+       .include        "fcntl.inc"
+
+        .importzp       ptr1, ptr2, ptr3, tmp1
+        .import         addysp, popax
+        .import         __oserror
+       .import         _FindFile, _ReadByte
+
+       .export         _open, _close, _read
+
+
+;--------------------------------------------------------------------------
+; _open
+
+_open:
+
+       cpy     #4              ; correct # of arguments (bytes)?
+       beq     @parmok         ; parameter count ok
+       tya                     ; parm count < 4 shouldn't be needed to be...
+               sec                     ; ...checked (it generates a c compiler warning)
+       sbc     #4
+       tay
+       jsr     addysp          ; fix stack, throw away unused parameters
+
+; Parameters ok. Pop the flags and save them into tmp3
+
+@parmok:
+       jsr     popax           ; Get flags
+       sta     tmp1
+        jsr     popax           ; Get name
+       sta     ptr1
+       stx     ptr1+1
+
+       lda     filedesc        ; is there a file already open?
+       bne     @alreadyopen
+
+       lda     tmp1            ; check open mode
+       and     #(O_RDWR | O_CREAT)
+       cmp     #O_RDONLY       ; only O_RDONLY is valid
+       bne     @badmode
+
+       lda     ptr1
+       ldx     ptr1+1
+       jsr     _FindFile       ; try to find the file
+       tax
+       bne     @oserror
+
+       lda     dirEntryBuf + OFF_DE_TR_SC              ; tr&se for ReadByte (r1)
+       sta     f_track
+       lda     dirEntryBuf + OFF_DE_TR_SC + 1
+       sta     f_sector
+       lda     #<diskBlkBuf                            ; buffer for ReadByte (r4)
+       sta     f_buffer
+       lda     #>diskBlkBuf
+       sta     f_buffer+1
+       ldx     #0                                      ; offset for ReadByte (r5)
+       stx     f_offset
+       stx     f_offset+1
+       lda     #0                                      ; clear errors
+       sta     __oserror
+       jsr     __seterrno
+       lda     #FILEDES        ; return fd
+       sta     filedesc
+       rts
+@badmode:
+       lda     #EINVAL         ; invalid parameters - invalid open mode
+       .byte   $2c             ; skip
+@alreadyopen:
+       lda     #EMFILE         ; too many opened files (there can be only one)
+       jmp     __directerrno   ; set errno, clear oserror, return -1
+@oserror:
+       jmp     __mappederrno   ; set platform error code, return -1
+
+_close:
+       lda     #0
+       sta     __oserror
+       jsr     __seterrno      ; clear errors
+       lda     #0              ; clear fd
+       sta     filedesc
+       tax
+       rts
+
+_read:
+    ; a/x - number of bytes
+    ; popax - buffer ptr
+    ; popax - fd, must be == to the above one
+    ; return -1+__oserror or number of bytes read
+
+       eor     #$ff
+       sta     ptr1
+       txa
+       eor     #$ff
+       sta     ptr1+1          ; -(# of bytes to read)-1
+       jsr     popax
+       sta     ptr2
+       stx     ptr2+1          ; buffer ptr
+       jsr     popax
+       cmp     #FILEDES        ; lo-byte == FILEDES
+       bne     @filenotopen
+       txa                     ; hi-byte == 0
+       beq     @fileok         ; fd must be == FILEDES
+
+@filenotopen:
+       lda     #EBADF
+       jmp     __directerrno   ; Sets _errno, clears _oserror, returns -1
+
+@fileok:
+       lda     #0
+       sta     ptr3
+       sta     ptr3+1          ; put 0 into ptr3 (number of bytes read)
+       sta     __oserror       ; clear error flags
+       jsr     __seterrno
+
+       lda     f_track         ; restore stuff for ReadByte
+       ldx     f_sector
+       sta     r1L
+       stx     r1H
+       lda     f_buffer
+       ldx     f_buffer+1
+       sta     r4L
+       stx     r4H
+       lda     f_offset
+       ldx     f_offset+1
+       sta     r5L
+       stx     r5H
+
+       clc
+       bcc     @L3             ; branch always
+
+@L0:   jsr     _ReadByte
+       ldy     #0              ; store the byte
+       sta     (ptr2),y
+       inc     ptr2            ; increment target address
+       bne     @L1
+       inc     ptr2+1
+
+@L1:   inc     ptr3            ; increment byte count
+       bne     @L2
+       inc     ptr3+1
+
+@L2:   lda     __oserror       ; was there error ?
+       beq     @L3
+       cmp     #BFR_OVERFLOW   ; EOF?
+       beq     @done           ; yes, we're done
+       jmp     __mappederrno   ; no, we're screwed
+
+@L3:   inc     ptr1            ; decrement the count
+       bne     @L0
+       inc     ptr1+1
+       bne     @L0
+
+@done:
+       lda     r1L             ; preserve data for ReadByte
+       ldx     r1H
+       sta     f_track
+       stx     f_sector
+       lda     r4L
+       ldx     r4H
+       sta     f_buffer
+       stx     f_buffer+1
+       lda     r5L
+       ldx     r5H
+       sta     f_offset
+       stx     f_offset+1
+
+       lda     ptr3            ; return byte count
+       ldx     ptr3+1
+       rts
+
+.bss
+filedesc:      .res 1          ; file open flag - 0 (no file opened) or 1
+f_track:       .res 1          ; values preserved for ReadByte
+f_sector:      .res 1
+f_offset:      .res 2
+f_buffer:      .res 2
diff --git a/libsrc/geos-cbm/drivers/geos-stdjoy.s b/libsrc/geos-cbm/drivers/geos-stdjoy.s
new file mode 100644 (file)
index 0000000..61d2906
--- /dev/null
@@ -0,0 +1,126 @@
+;
+; Standard joystick driver for the C64. May be used multiple times when linked
+; to the statically application.
+;
+; Ullrich von Bassewitz, 2002-12-20
+;
+
+       .include        "zeropage.inc"
+
+       .include        "joy-kernel.inc"
+        .include        "joy-error.inc"
+       .include        "geossym.inc"
+
+        .macpack        generic
+
+
+; ------------------------------------------------------------------------
+; Header. Includes jump table
+
+.segment        "JUMPTABLE"
+                                            
+; Driver signature
+
+        .byte   $6A, $6F, $79          ; "joy"
+        .byte   JOY_API_VERSION                ; Driver API version number
+
+; Button state masks (8 values)
+
+        .byte   $01                     ; JOY_UP
+        .byte   $02                     ; JOY_DOWN
+        .byte   $04                     ; JOY_LEFT
+        .byte   $08                     ; JOY_RIGHT
+        .byte   $10                     ; JOY_FIRE
+        .byte   $00                     ; Future expansion
+        .byte   $00                     ; Future expansion
+        .byte   $00                     ; Future expansion
+
+; Jump table.
+
+        .word   INSTALL
+        .word   UNINSTALL
+        .word   COUNT
+        .word   READ
+
+; ------------------------------------------------------------------------
+; Constants
+
+JOY_COUNT       = 2             ; Number of joysticks we support
+
+
+; ------------------------------------------------------------------------
+; Data.
+
+
+.code
+
+; ------------------------------------------------------------------------
+; INSTALL routine. Is called after the driver is loaded into memory. If
+; possible, check if the hardware is present and determine the amount of
+; memory available.
+; Must return an JOY_ERR_xx code in a/x.
+;
+
+INSTALL:
+        lda     #<JOY_ERR_OK
+        ldx     #>JOY_ERR_OK
+;      rts                     ; Run into UNINSTALL instead
+
+; ------------------------------------------------------------------------
+; UNINSTALL routine. Is called before the driver is removed from memory.
+; Can do cleanup or whatever. Must not return anything.
+;
+
+UNINSTALL:
+        rts
+
+
+; ------------------------------------------------------------------------
+; COUNT: Return the total number of available joysticks in a/x.
+;
+
+COUNT:
+        lda     #<JOY_COUNT
+        ldx     #>JOY_COUNT
+        rts
+
+; ------------------------------------------------------------------------
+; READ: Read a particular joystick passed in A.
+;
+
+READ:
+       tax
+       php
+       sei                     ; disable IRQ
+       lda     $01
+       pha
+       lda     #$35
+       sta     $01             ; enable I/O
+
+       txa                     ; Joystick number into X
+       bne     joy2
+
+; Read joystick 1
+
+joy1:
+       lda     #$7F
+       sta     cia1base
+       lda     cia1base+1
+back:  tay
+       pla
+       sta     $01
+       plp
+       tya
+       and     #$1F
+       eor     #$1F
+       rts
+
+; Read joystick 2
+
+joy2:  ldx     #0
+       lda     #$E0
+       ldy     #$FF
+       sta     cia1base+2
+       lda     cia1base+1
+       sty     cia1base+2
+       jmp     back
diff --git a/libsrc/geos-cbm/drivers/geos-tgi.s b/libsrc/geos-cbm/drivers/geos-tgi.s
new file mode 100644 (file)
index 0000000..542e8a0
--- /dev/null
@@ -0,0 +1,673 @@
+;
+; Graphics driver for the 320x200x2 and 640x200x2 modes on GEOS 64/128
+; 2010-08-17, Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl>
+; 2010-08-18, Greg King
+
+       .include        "zeropage.inc"
+
+       .include        "tgi-kernel.inc"
+        .include        "tgi-error.inc"
+
+       .include        "const.inc"
+       .include        "jumptab.inc"
+       .include        "geossym.inc"
+       .include        "geossym2.inc"
+
+        .macpack        generic
+
+; ------------------------------------------------------------------------
+; Constants
+
+VDC_ADDR_REG     := $D600                ; VDC address
+VDC_DATA_REG     := $D601                ; VDC data
+
+VDC_DSP_HI       = 12                    ; registers used
+VDC_DSP_LO       = 13
+VDC_DATA_HI      = 18
+VDC_DATA_LO      = 19
+VDC_VSCROLL      = 24
+VDC_HSCROLL      = 25
+VDC_COLORS       = 26
+VDC_CSET         = 28
+VDC_COUNT        = 30
+VDC_DATA         = 31
+
+; ------------------------------------------------------------------------
+; Header. Includes jump table and constants.
+
+.segment        "JUMPTABLE"
+
+; First part of the header is a structure that has a magic signature,
+; and defines the capabilities of the driver.
+
+        .byte   $74, $67, $69           ; "tgi"
+        .byte   TGI_API_VERSION         ; TGI API version number
+xres:   .word   320                     ; X resolution
+yres:   .word   200                     ; Y resolution
+        .byte   2                       ; Number of drawing colors
+pages: .byte   1                       ; Number of screens available
+        .byte   8                       ; System font X size
+        .byte   8                       ; System font Y size
+aspect: .word   $00D4                   ; Aspect ratio (based on 4/3 display)
+        .byte   0                       ; TGI driver flags
+
+; Next comes the jump table. With the exception of IRQ, all entries must be
+; valid, and may point to an RTS for test versions (function not implemented).
+
+       .addr   INSTALL
+       .addr   UNINSTALL
+       .addr   INIT
+       .addr   DONE
+       .addr   GETERROR
+       .addr   CONTROL
+       .addr   CLEAR
+       .addr   SETVIEWPAGE
+       .addr   SETDRAWPAGE
+       .addr   SETCOLOR
+       .addr   SETPALETTE
+       .addr   GETPALETTE
+       .addr   GETDEFPALETTE
+       .addr   SETPIXEL
+       .addr   GETPIXEL
+       .addr   LINE
+       .addr   BAR
+       .addr   TEXTSTYLE
+       .addr   OUTTEXT
+       .addr   0                       ; IRQ entry is unused
+
+; ------------------------------------------------------------------------
+; Data.
+
+; Variables mapped to the zero-page segment variables. Some of these are
+; used for passing parameters to the driver.
+
+X1              = ptr1
+Y1              = ptr2
+X2              = ptr3
+Y2              = ptr4
+
+; Absolute variables used in the code
+
+.bss
+
+SCRBASE:       .res    1       ; High byte of screen base (64k VDC only)
+
+ERROR:         .res    1       ; Error code
+PALETTE:        .res    2       ; The current palette
+
+BITMASK:        .res    1       ; $00 = clear, $01 = set pixels
+
+OLDCOLOR:      .res    1       ; colors before entering gfx mode
+
+; Text output stuff
+TEXTMAGX:       .res    1
+TEXTMAGY:       .res    1
+TEXTDIR:        .res    1
+
+; Constants and tables
+
+.rodata
+
+DEFPALETTE:     .byte   $00, $0f        ; White on black
+PALETTESIZE     = * - DEFPALETTE
+
+; color translation table (indexed by VIC color)
+COLTRANS:      .byte $00, $0f, $08, $06, $0a, $04, $02, $0c
+               .byte $0d, $0b, $09, $01, $0e, $05, $03, $07
+               ; colors BROWN and GRAY3 are wrong
+
+.code
+
+; ------------------------------------------------------------------------
+; INSTALL routine. Is called after the driver is loaded into memory. May
+; initialize anything that has to be done just once. Is probably empty
+; most of the time.
+;
+; Must set an error code: NO
+;
+
+INSTALL:
+       lda version             ; if GEOS 1.0...
+       and #$f0
+       cmp #$10
+       beq @L40
+       lda c128Flag            ; at least GEOS 2.0, but we're on C128?
+       bpl @L40
+        lda graphMode          ; GEOS 2.0, C128, but is 80 column screen enabled?
+        bmi @L80
+@L40:  rts                     ; leave default values for 40 column screen
+
+       ; check for VDC version and update register $19 value
+
+@L80:
+       ; double the x resolution and halve the aspect ratio
+
+       asl     xres
+       rol     xres+1
+
+       lsr     aspect+1
+       ror     aspect
+
+       ; update number of available screens
+
+       ldx     #VDC_CSET       ; determine size of RAM...
+       jsr     VDCReadReg
+       sta     tmp1
+       ora     #%00010000
+       jsr     VDCWriteReg     ; turn on 64k
+
+       jsr     settestadr1     ; save original value of test byte
+       jsr     VDCReadByte
+       sta     tmp2
+
+       lda     #$55            ; write $55 here
+       ldy     #ptr1
+       jsr     test64k         ; read it here and there
+       lda     #$aa            ; write $aa here
+       ldy     #ptr2
+       jsr     test64k         ; read it here and there
+
+       jsr     settestadr1
+       lda     tmp2
+       jsr     VDCWriteByte    ; restore original value of test byte
+
+       lda     ptr1            ; do bytes match?
+       cmp     ptr1+1
+       bne     @have64k
+       lda     ptr2
+       cmp     ptr2+1
+       bne     @have64k
+
+       ldx     #VDC_CSET
+       lda     tmp1
+       jsr     VDCWriteReg     ; restore 16/64k flag
+       jmp     @endok          ; and leave default values for 16k
+
+@have64k:
+       lda     #4
+       sta     pages
+@endok:
+       lda     #0
+       sta     SCRBASE         ; draw page 0 as default
+        rts
+
+test64k:
+       sta     tmp1
+       sty     ptr3
+       lda     #0
+       sta     ptr3+1
+       jsr     settestadr1
+       lda     tmp1
+       jsr     VDCWriteByte            ; write $55
+       jsr     settestadr1
+       jsr     VDCReadByte             ; read here
+       pha
+       jsr     settestadr2
+       jsr     VDCReadByte             ; and there
+       ldy     #1
+       sta     (ptr3),y
+       pla
+       dey
+       sta     (ptr3),y
+       rts
+
+settestadr1:
+       ldy     #$02                    ; test page 2 (here)
+       .byte   $2c
+settestadr2:
+       ldy     #$42                    ; or page 64+2 (there)
+       lda     #0
+       jmp     VDCSetSourceAddr
+
+; ------------------------------------------------------------------------
+; UNINSTALL routine. Is called before the driver is removed from memory. May
+; clean up anything done by INSTALL but is probably empty most of the time.
+;
+; Must set an error code: NO
+;
+
+UNINSTALL:
+        rts
+
+
+; ------------------------------------------------------------------------
+; INIT: Changes an already installed device from text mode to graphics
+; mode.
+; Note that INIT/DONE may be called multiple times while the driver
+; is loaded, while INSTALL is only called once, so any code that is needed
+; to initializes variables and so on must go here. Setting palette and
+; clearing the screen is not needed because this is called by the graphics
+; kernel later.
+; The graphics kernel will never call INIT when a graphics mode is already
+; active, so there is no need to protect against that.
+;
+; Must set an error code: YES
+;
+
+INIT:
+       ldx #$01
+       stx BITMASK             ; solid black as pattern
+       lda #1
+       jsr SetPattern
+       lda #ST_WR_FORE         ; write only on foreground
+       sta dispBufferOn
+
+        lda graphMode
+        bmi @L80
+
+; Remember current color value (40 columns)
+       lda screencolors
+       sta OLDCOLOR
+       jmp @L99
+
+; Remember current color value (80 columns)
+@L80:  lda scr80colors
+       sta OLDCOLOR
+@L99:  lda #0
+       jsr SETVIEWPAGE         ; switch into viewpage 0
+
+; Done, reset the error code
+
+       lda     #TGI_ERR_OK
+       sta     ERROR
+        rts
+
+; ------------------------------------------------------------------------
+; DONE: Will be called to switch the graphics device back into text mode.
+; The graphics kernel will never call DONE when no graphics mode is active,
+; so there is no need to protect against that.
+;
+; Must set an error code: NO
+;
+
+DONE:
+       lda #0
+       jsr SETVIEWPAGE         ; switch into viewpage 0
+
+       lda graphMode
+       bmi @L80
+
+       lda OLDCOLOR
+       sta screencolors        ; restore color for 40 columns
+       ldx #0
+@L1:   sta COLOR_MATRIX,x
+       sta COLOR_MATRIX+$0100,x
+       sta COLOR_MATRIX+$0200,x
+       sta COLOR_MATRIX+1000-256,x
+       inx
+       bne @L1
+       rts
+
+@L80:  lda OLDCOLOR            ; restore color for 80 columns
+       ldx #VDC_COLORS
+       jmp VDCWriteReg
+
+; ------------------------------------------------------------------------
+; GETERROR: Return the error code in A and clear it.
+
+GETERROR:
+               ldx     #TGI_ERR_OK
+       lda     ERROR
+       stx     ERROR
+        rts
+
+; ------------------------------------------------------------------------
+; CONTROL: Platform/driver specific entry point.
+;
+; Must set an error code: YES
+;
+
+CONTROL:
+       lda     #TGI_ERR_INV_FUNC
+       sta     ERROR
+        rts
+
+; ------------------------------------------------------------------------
+; CLEAR: Clears the screen.
+;
+; Must set an error code: NO
+;
+
+CLEAR:
+           lda curPattern
+           pha
+           lda #0
+           jsr SetPattern
+           ldx #0
+           stx r3L
+           stx r3H
+           stx r2L
+           lda #199
+           sta r2H
+           lda graphMode
+           bpl @L40
+           lda #>639                   ; 80 columns
+           ldx #<639
+           bne @L99
+@L40:      lda #>319                   ; 40 columns
+           ldx #<319
+@L99:      sta r4H
+           stx r4L
+           jsr Rectangle
+           pla
+           sta curPattern
+           rts
+
+; ------------------------------------------------------------------------
+; SETVIEWPAGE: Set the visible page. Called with the new page in A (0..n).
+; The page number is already checked to be valid by the graphics kernel.
+;
+; Must set an error code: NO (will only be called if page ok)
+;
+
+SETVIEWPAGE:
+       ldx graphMode
+       bmi @L80
+       rts
+@L80:  clc
+       ror
+       ror
+       ror
+       ldx     #VDC_DSP_HI
+       jmp     VDCWriteReg
+
+; ------------------------------------------------------------------------
+; SETDRAWPAGE: Set the drawable page. Called with the new page in A (0..n).
+; The page number is already checked to be valid by the graphics kernel.
+;
+; Must set an error code: NO (will only be called if page ok)
+;
+
+SETDRAWPAGE:
+       ldx graphMode
+       bmi @L80
+       rts
+@L80:  clc
+       ror
+       ror
+       ror
+       sta     SCRBASE
+       rts
+
+; ------------------------------------------------------------------------
+; SETCOLOR: Set the drawing color (in A). The new color is already checked
+; to be in a valid range (0..maxcolor-1).
+;
+; Must set an error code: NO (will only be called if color ok)
+;
+
+SETCOLOR:
+        tax
+        beq     @L1
+        lda    #1
+@L1:    sta     BITMASK
+       jmp     SetPattern      ; need to have either 0 or 1
+
+; ------------------------------------------------------------------------
+; SETPALETTE: Set the palette (not available with all drivers/hardware).
+; A pointer to the palette is passed in ptr1. Must set an error if palettes
+; are not supported
+;
+; Must set an error code: YES
+;
+
+SETPALETTE:
+       jsr     GETERROR        ; clear error (if any)
+
+        ldy     #PALETTESIZE - 1
+@L1:    lda     (ptr1),y        ; Copy the palette
+        and     #$0F            ; Make a valid color
+        sta     PALETTE,y
+        dey
+        bpl     @L1
+
+; Put colors from palette into screen
+
+       lda     graphMode
+       bmi     @L80
+
+       lda     PALETTE+1       ; foreground
+       asl     a
+       asl     a
+       asl     a
+       asl     a
+       ora     PALETTE         ; background
+       ldx     #0
+@L2:   sta     COLOR_MATRIX,x
+       sta     COLOR_MATRIX+$0100,x
+       sta     COLOR_MATRIX+$0200,x
+       sta     COLOR_MATRIX+1000-256,x
+       inx
+       bne     @L2
+       rts
+
+@L80:   ldy     PALETTE+1       ; Foreground color
+       lda     COLTRANS,y
+        asl     a
+        asl     a
+        asl     a
+        asl     a
+        ldy     PALETTE         ; Background color
+       ora     COLTRANS,y
+
+       ldx     #VDC_COLORS
+       jmp     VDCWriteReg
+
+; ------------------------------------------------------------------------
+; GETPALETTE: Return the current palette in A/X. Even drivers that cannot
+; set the palette should return the default palette here, so there's no
+; way for this function to fail.
+;
+; Must set an error code: NO
+;
+
+GETPALETTE:
+        lda     #<PALETTE
+        ldx     #>PALETTE
+        rts
+
+; ------------------------------------------------------------------------
+; GETDEFPALETTE: Return the default palette for the driver in A/X. All
+; drivers should return something reasonable here, even drivers that don't
+; support palettes, otherwise the caller has no way to determine the colors
+; of the (not changeable) palette.
+;
+; Must set an error code: NO (all drivers must have a default palette)
+;
+
+GETDEFPALETTE:
+        lda     #<DEFPALETTE
+        ldx     #>DEFPALETTE
+        rts
+
+; ------------------------------------------------------------------------
+; SETPIXEL: Draw one pixel at X1/Y1 = ptr1/ptr2 with the current drawing
+; color. The coordinates passed to this function are never outside the
+; visible screen area, so there is no need for clipping inside this function.
+;
+; Must set an error code: NO
+;
+
+SETPIXEL:
+       lda     X1
+       ldx     X1+1
+       ldy     Y1
+       sta     r3L
+       stx     r3H
+       sty     r11L
+       sec
+       lda     BITMASK         ; set or clear C flag
+       bne     @L1
+       clc
+@L1:   lda     #0
+       jmp     DrawPoint
+
+; ------------------------------------------------------------------------
+; GETPIXEL: Read the color value of a pixel and return it in A/X. The
+; coordinates passed to this function are never outside the visible screen
+; area, so there is no need for clipping inside this function.
+
+
+GETPIXEL:
+       lda     X1
+       ldx     X1+1
+       ldy     Y1
+       sta     r3L
+       stx     r3H
+       sty     r11L
+       jsr     TestPoint
+       ldx     #0
+       bcc     @L1
+       inx
+@L1:   txa
+       ldx     #0
+       rts
+
+; ------------------------------------------------------------------------
+; LINE: Draw a line from X1/Y1 to X2/Y2, where X1/Y1 = ptr1/ptr2 and
+; X2/Y2 = ptr3/ptr4 using the current drawing color.
+;
+; Must set an error code: NO
+;
+
+LINE:
+       lda     X1
+       ldx     X1+1
+       ldy     Y1
+       sta     r3L
+       stx     r3H
+       sty     r11L
+       lda     X2
+       ldx     X2+1
+       ldy     Y2
+       sta     r4L
+       stx     r4H
+       sty     r11H
+       sec
+       lda     BITMASK         ; set or clear C flag
+       bne     @L1
+       clc
+@L1:   lda     #0
+       jmp     DrawLine
+
+; ------------------------------------------------------------------------
+; BAR: Draw a filled rectangle with the corners X1/Y1, X2/Y2, where
+; X1/Y1 = ptr1/ptr2 and X2/Y2 = ptr3/ptr4 using the current drawing color.
+; Contrary to most other functions, the graphics kernel will sort and clip
+; the coordinates before calling the driver, so on entry the following
+; conditions are valid:
+;       X1 <= X2
+;       Y1 <= Y2
+;       (X1 >= 0) && (X1 < XRES)
+;       (X2 >= 0) && (X2 < XRES)
+;       (Y1 >= 0) && (Y1 < YRES)
+;       (Y2 >= 0) && (Y2 < YRES)
+;
+; Must set an error code: NO
+;
+
+BAR:
+       lda     X1
+       ldx     X1+1
+       ldy     Y1
+       sta     r3L
+       stx     r3H
+       sty     r2L
+       lda     X2
+       ldx     X2+1
+       ldy     Y2
+       sta     r4L
+       stx     r4H
+       sty     r2H
+       jmp     Rectangle
+
+; ------------------------------------------------------------------------
+; TEXTSTYLE: Set the style used when calling OUTTEXT. Text scaling in X and Y
+; direction is passend in X/Y, the text direction is passed in A.
+;
+; Must set an error code: NO
+;
+
+TEXTSTYLE:
+        stx     TEXTMAGX
+        sty     TEXTMAGY
+        sta     TEXTDIR
+        rts
+
+
+; ------------------------------------------------------------------------
+; OUTTEXT: Output text at X/Y = ptr1/ptr2 using the current color and the
+; current text style. The text to output is given as a zero terminated
+; string with address in ptr3.
+;
+; Must set an error code: NO
+;
+
+OUTTEXT:
+       lda     TEXTDIR
+;      cmp     #TGI_TEXT_HORIZONTAL    ; this is equal 0
+       bne     @vertical
+
+       lda     X1              ; horizontal text output
+       ldx     X1+1
+       ldy     Y1
+       sta     r11L
+       stx     r11H
+       sty     r1H
+       lda     ptr3
+       ldx     ptr3+1
+       sta     r0L
+       stx     r0H
+       jmp     PutString
+
+@vertical:
+       lda     X1              ; vertical text output
+       ldx     X1+1
+       ldy     Y1
+       sta     r11L
+       stx     r11H
+       sty     r1H
+       ldy     #0
+       lda     (ptr3),y
+       beq     @end
+       jsr     PutChar
+       inc     ptr3
+       bne     @L1
+       inc     ptr3+1
+@L1:   lda     Y1
+       clc
+       adc     #8
+       sta     Y1
+       bne     @vertical
+@end:  rts
+
+;-------------
+; VDC helpers
+
+VDCSetSourceAddr:
+       pha
+       tya
+       ldx     #VDC_DATA_HI
+       jsr     VDCWriteReg
+       pla
+       ldx     #VDC_DATA_LO
+       bne     VDCWriteReg
+
+VDCReadByte:
+       ldx     #VDC_DATA
+VDCReadReg:
+       stx     VDC_ADDR_REG
+@L0:   bit     VDC_ADDR_REG
+       bpl     @L0
+       lda     VDC_DATA_REG
+       rts
+
+VDCWriteByte:
+       ldx     #VDC_DATA
+VDCWriteReg:
+       stx     VDC_ADDR_REG
+@L0:   bit     VDC_ADDR_REG
+       bpl     @L0
+       sta     VDC_DATA_REG
+       rts
+
diff --git a/libsrc/geos-cbm/drivers/geos-vdc.s b/libsrc/geos-cbm/drivers/geos-vdc.s
new file mode 100644 (file)
index 0000000..dda119b
--- /dev/null
@@ -0,0 +1,426 @@
+;
+; Extended memory driver for the VDC RAM available on all C128 machines
+; version for GEOS enters safe I/O config on C64 (transparent on C128)
+;
+; Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl>
+; 06,20,25.12.2002
+
+       .include        "zeropage.inc"
+
+       .include        "em-kernel.inc"
+        .include       "em-error.inc"
+
+
+        .macpack        generic
+
+
+; ------------------------------------------------------------------------
+; Header. Includes jump table
+
+.segment        "JUMPTABLE"
+
+; Driver signature
+
+        .byte   $65, $6d, $64           ; "emd"
+        .byte   EMD_API_VERSION                ; EM API version number
+
+; Jump table.
+
+        .word   INSTALL
+        .word   UNINSTALL
+        .word   PAGECOUNT
+        .word   MAP
+       .word   USE
+        .word   COMMIT
+       .word   COPYFROM
+        .word   COPYTO
+
+; ------------------------------------------------------------------------
+; Constants
+
+VDC_ADDR_REG     = $D600                 ; VDC address
+VDC_DATA_REG     = $D601                 ; VDC data
+
+VDC_DATA_HI      = 18                    ; used registers
+VDC_DATA_LO      = 19
+VDC_CSET         = 28
+VDC_DATA         = 31
+
+; ------------------------------------------------------------------------
+; Data.
+
+.data
+
+pagecount:      .word  64                 ; $0000-$3fff as 16k default
+curpage:       .word  $ffff               ; currently mapped-in page (invalid)
+
+.bss
+
+window:                .res    256                ; memory window
+
+.code
+
+; ------------------------------------------------------------------------
+; INSTALL routine. Is called after the driver is loaded into memory. If
+; possible, check if the hardware is present and determine the amount of
+; memory available.
+; Must return an EM_ERR_xx code in a/x.
+;
+
+INSTALL:
+       ; do test for VDC presence here???
+
+       php
+       sei
+       lda     $01
+       pha
+       lda     #$35
+       sta     $01
+
+       ldx     #VDC_CSET       ; determine size of RAM...
+       jsr     vdcgetreg
+       sta     tmp1
+       ora     #%00010000
+       jsr     vdcputreg       ; turn on 64k
+
+       jsr     settestadr1     ; save original value of test byte
+       jsr     vdcgetbyte
+       sta     tmp2
+
+       lda     #$55            ; write $55 here
+       ldy     #ptr1
+       jsr     test64k         ; read it here and there
+       lda     #$aa            ; write $aa here
+       ldy     #ptr2
+       jsr     test64k         ; read it here and there
+
+       jsr     settestadr1
+       lda     tmp2
+       jsr     vdcputbyte      ; restore original value of test byte
+
+       lda     ptr1            ; do bytes match?
+       cmp     ptr1+1
+       bne     @have64k
+       lda     ptr2
+       cmp     ptr2+1
+       bne     @have64k
+
+       ldx     #VDC_CSET
+       lda     tmp1
+       jsr     vdcputreg       ; restore 16/64k flag
+       jmp     @endok          ; and leave default values for 16k
+
+@have64k:
+       lda     #<256
+       ldx     #>256
+       sta     pagecount
+       stx     pagecount+1
+@endok:
+       pla
+       sta     $01
+       plp
+       lda     #<EM_ERR_OK
+        ldx     #>EM_ERR_OK
+        rts
+
+test64k:
+       sta     tmp1
+       sty     ptr3
+       lda     #0
+       sta     ptr3+1
+       jsr     settestadr1
+       lda     tmp1
+       jsr     vdcputbyte              ; write $55
+       jsr     settestadr1
+       jsr     vdcgetbyte              ; read here
+       pha
+       jsr     settestadr2
+       jsr     vdcgetbyte              ; and there
+       ldy     #1
+       sta     (ptr3),y
+       pla
+       dey
+       sta     (ptr3),y
+       rts
+
+settestadr1:
+       ldy     #$02                    ; test page 2 (here)
+       .byte   $2c
+settestadr2:
+       ldy     #$42                    ; or page 64+2 (there)
+       lda     #0
+       jmp     vdcsetsrcaddr
+
+; ------------------------------------------------------------------------
+; UNINSTALL routine. Is called before the driver is removed from memory.
+; Can do cleanup or whatever. Must not return anything.
+;
+
+UNINSTALL:
+       ;on C128 restore font and clear the screen?
+        rts
+
+; ------------------------------------------------------------------------
+; PAGECOUNT: Return the total number of available pages in a/x.
+;
+
+PAGECOUNT:
+        lda     pagecount
+        ldx     pagecount+1
+        rts
+
+; ------------------------------------------------------------------------
+; MAP: Map the page in a/x into memory and return a pointer to the page in
+; a/x. The contents of the currently mapped page (if any) may be discarded
+; by the driver.
+;
+
+MAP:   sta     curpage
+       stx     curpage+1
+       sta     ptr1+1
+       ldy     #0
+       sty     ptr1
+
+       lda     #<window
+       sta     ptr2
+       lda     #>window
+       sta     ptr2+1
+
+       jsr     transferin
+
+        lda     #<window
+        ldx     #>window
+       rts
+
+; copy a single page from (ptr1):VDCRAM to (ptr2):RAM
+
+transferin:
+       php
+       sei
+       lda     $01
+       pha
+       lda     #$35
+       sta     $01
+       lda     ptr1
+       ldy     ptr1+1
+       jsr     vdcsetsrcaddr           ; set source address in VDC
+       ldy     #0
+       ldx     #VDC_DATA
+       stx     VDC_ADDR_REG
+@L0:   bit     VDC_ADDR_REG
+       bpl     @L0
+       lda     VDC_DATA_REG            ; get 2 bytes at a time to speed-up
+       sta     (ptr2),y                ; (in fact up to 8 bytes could be fetched with special VDC config)
+       iny
+       lda     VDC_DATA_REG
+       sta     (ptr2),y
+       iny
+       bne     @L0
+       pla
+       sta     $01
+       plp
+       rts
+
+; ------------------------------------------------------------------------
+; USE: Tell the driver that the window is now associated with a given page.
+
+USE:    sta     curpage
+        stx     curpage+1               ; Remember the page
+        lda     #<window
+        ldx     #>window                ; Return the window
+done:   rts
+
+; ------------------------------------------------------------------------
+; COMMIT: Commit changes in the memory window to extended storage.
+
+COMMIT:
+       lda     curpage                 ; jump if no page mapped
+       ldx     curpage+1
+       bmi     done
+       sta     ptr1+1
+       ldy     #0
+       sty     ptr1
+
+       lda     #<window
+       sta     ptr2
+       lda     #>window
+       sta     ptr2+1
+
+; fall through to transferout
+
+; copy a single page from (ptr2):RAM to (ptr1):VDCRAM
+
+transferout:
+       php
+       sei
+       lda     $01
+       pha
+       lda     #$35
+       sta     $01
+       lda     ptr1
+       ldy     ptr1+1
+       jsr     vdcsetsrcaddr           ; set source address in VDC
+       ldy     #0
+       ldx     #VDC_DATA
+       stx     VDC_ADDR_REG
+@L0:   bit     VDC_ADDR_REG
+       bpl     @L0
+       lda     (ptr2),y                ; speedup does not work for writing
+       sta     VDC_DATA_REG
+       iny
+       bne     @L0
+       pla
+       sta     $01
+       plp
+       rts
+
+; ------------------------------------------------------------------------
+; COPYFROM: Copy from extended into linear memory. A pointer to a structure
+; describing the request is passed in a/x.
+; The function must not return anything.
+;
+
+COPYFROM:
+       jsr     setup
+       beq     @L2                     ; Skip if no full pages
+
+; Copy full pages
+
+@L1:    jsr     transferin
+        inc     ptr1+1
+        inc     ptr2+1
+        dec     tmp1
+        bne     @L1
+
+; Copy the remainder of the page
+                
+@L2:    ldy     #EM_COPY::COUNT
+        lda     (ptr3),y                ; Get bytes in last page
+        beq     @L4
+        sta    tmp1
+
+; Transfer the bytes in the last page
+       php
+       sei
+       lda     $01
+       pha
+       lda     #$35
+       sta     $01
+       ldy     #0
+@L3:   jsr     vdcgetbyte
+       sta     (ptr2),y
+       iny
+       dec     tmp1
+       lda     tmp1
+       bne     @L3
+       pla
+       sta     $01
+       plp
+@L4:   rts
+
+; ------------------------------------------------------------------------
+; COPYTO: Copy from linear into extended memory. A pointer to a structure
+; describing the request is passed in a/x.
+; The function must not return anything.
+;
+
+COPYTO:
+       jsr     setup
+       beq     @L2                     ; Skip if no full pages
+
+; Copy full pages
+
+@L1:    jsr     transferout
+        inc     ptr1+1
+        inc     ptr2+1
+        dec     tmp1
+        bne     @L1
+
+; Copy the remainder of the page
+
+@L2:    ldy     #EM_COPY::COUNT
+        lda     (ptr3),y                ; Get bytes in last page
+        beq     @L4
+        sta    tmp1
+
+; Transfer the bytes in the last page
+       php
+       sei
+       lda     $01
+       pha
+       lda     #$35
+       sta     $01
+       ldy     #0
+@L3:   lda     (ptr2),y
+       jsr     vdcputbyte
+       iny
+       dec     tmp1
+       lda     tmp1
+       bne     @L3
+       pla
+       sta     $01
+       plp
+@L4:   rts
+
+;-------------------------------------------------------------------------
+; Helper functions to handle VDC ram
+;
+
+vdcsetsrcaddr:
+       ldx     #VDC_DATA_LO
+       stx     VDC_ADDR_REG
+@L0:   bit     VDC_ADDR_REG
+       bpl     @L0
+       sta     VDC_DATA_REG
+       dex
+       tya
+       stx     VDC_ADDR_REG
+       sta     VDC_DATA_REG
+       rts
+
+vdcgetbyte:
+       ldx     #VDC_DATA
+vdcgetreg:
+       stx     VDC_ADDR_REG
+@L0:   bit     VDC_ADDR_REG
+       bpl     @L0
+       lda     VDC_DATA_REG
+       rts
+
+vdcputbyte:
+       ldx     #VDC_DATA
+vdcputreg:
+       stx     VDC_ADDR_REG
+@L0:   bit     VDC_ADDR_REG
+       bpl     @L0
+       sta     VDC_DATA_REG
+       rts
+
+; ------------------------------------------------------------------------
+; Helper function for COPYFROM and COPYTO: Store the pointer to the request
+; structure and prepare data for the copy
+;
+
+setup:
+       sta     ptr3
+        stx     ptr3+1                  ; Save the passed em_copy pointer
+
+        ldy     #EM_COPY::OFFS
+        lda     (ptr3),y
+        sta     ptr1
+        ldy     #EM_COPY::PAGE
+        lda     (ptr3),y
+        sta     ptr1+1                  ; From
+
+        ldy     #EM_COPY::BUF
+        lda     (ptr3),y
+        sta     ptr2
+        iny
+        lda     (ptr3),y
+        sta     ptr2+1                  ; To
+
+       ldy     #EM_COPY::COUNT+1
+        lda     (ptr3),y                ; Get number of pages
+        sta     tmp1     
+       rts
+
diff --git a/libsrc/geos-cbm/drivers/joy_stddrv.s b/libsrc/geos-cbm/drivers/joy_stddrv.s
new file mode 100644 (file)
index 0000000..dd01dc2
--- /dev/null
@@ -0,0 +1,14 @@
+;
+; Name of the standard joystick driver
+;
+; Ullrich von Bassewitz, 2002-12-21
+;
+; const char joy_stddrv[];
+;
+
+       .export _joy_stddrv
+
+.rodata
+
+_joy_stddrv:   .asciiz "geos-stdjoy.joy"
+
diff --git a/libsrc/geos-cbm/drivers/mcbdefault.s b/libsrc/geos-cbm/drivers/mcbdefault.s
new file mode 100644 (file)
index 0000000..6fca43a
--- /dev/null
@@ -0,0 +1,68 @@
+;
+; Mouse callbacks for GEOS.
+;
+; GEOS has a built-in mouse architecture.  Half of this file does nothing
+; -- it exists merely to allow portable programs to link and run.
+;
+; 2.7.2001, Maciej 'YTM/Elysium' Witkowiak
+; 2004-03-20, Ullrich von Bassewitz
+; 2004-09-24, Greg King
+;
+
+;      .constructor    init_pointer
+        .export         _mouse_def_callbacks
+
+;       .include        "mouse-kernel.inc"
+;      .include        "const.inc"
+;      .include        "geossym.inc"
+       .include        "jumptab.inc"
+
+;       .macpack        generic
+
+; The functions below must be interrupt-safe,
+; because they might be called from an interrupt-handler.
+
+.code
+
+; --------------------------------------------------------------------------
+; Hide the mouse pointer. Always called with interrupts disabled.
+
+hide := MouseOff
+
+; --------------------------------------------------------------------------
+; Show the mouse pointer. Always called with interrupts disabled.
+
+show := MouseUp
+
+; --------------------------------------------------------------------------
+; Move the mouse pointer X position to the value in .XA. Always called with
+; interrupts disabled.
+
+.proc   movex
+
+        rts
+
+.endproc
+
+; --------------------------------------------------------------------------
+; Move the mouse pointer Y position to the value in .XA. Always called with
+; interrupts disabled.
+
+.proc   movey
+
+        rts
+
+.endproc
+
+; --------------------------------------------------------------------------
+; Callback structure
+
+.rodata
+
+_mouse_def_callbacks:
+        .addr   hide
+        .addr   show
+        .addr   movex
+        .addr   movey
+
+
diff --git a/libsrc/geos-cbm/drivers/mouse_stddrv.s b/libsrc/geos-cbm/drivers/mouse_stddrv.s
new file mode 100644 (file)
index 0000000..8792c27
--- /dev/null
@@ -0,0 +1,11 @@
+;
+; Name of the standard mouse driver
+;
+; 2010-01-25, Greg King
+;
+; const char mouse_stddrv[];
+;
+       .export         _mouse_stddrv
+
+       .rodata
+_mouse_stddrv: .asciiz "geos-stdmou.mou"
diff --git a/libsrc/geos-cbm/drivers/tgi_colors.s b/libsrc/geos-cbm/drivers/tgi_colors.s
new file mode 100644 (file)
index 0000000..d965e6f
--- /dev/null
@@ -0,0 +1,8 @@
+;
+; Target-specific black & white values, for use by the target-shared TGI kernel
+;
+
+       .include        "tgi-kernel.inc"
+
+tgi_color_black = $00
+tgi_color_white = $01
diff --git a/libsrc/geos-cbm/drivers/tgi_stddrv.s b/libsrc/geos-cbm/drivers/tgi_stddrv.s
new file mode 100644 (file)
index 0000000..6745c23
--- /dev/null
@@ -0,0 +1,13 @@
+;
+; Name of the standard tgi driver
+;
+; Oliver Schmidt, 2011-05-02
+;
+; const char tgi_stddrv[];
+;
+
+        .export        _tgi_stddrv
+
+.rodata
+
+_tgi_stddrv:   .asciiz "geos-tgi.tgi"