From: ol.sc Date: Tue, 7 Feb 2012 17:02:34 +0000 (+0000) Subject: Renamed 'devel' to 'drivers'. X-Git-Tag: V2.13.3~4 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=ee8c9944f16f9daf7b40a2463043d0c22a34dc8b;p=cc65 Renamed 'devel' to 'drivers'. git-svn-id: svn://svn.cc65.org/cc65/trunk@5490 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- diff --git a/libsrc/geos-cbm/Makefile b/libsrc/geos-cbm/Makefile index 8c1a056be..cbf3029fc 100644 --- a/libsrc/geos-cbm/Makefile +++ b/libsrc/geos-cbm/Makefile @@ -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 index 1e3d5d446..000000000 --- a/libsrc/geos-cbm/devel/Makefile +++ /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 index 166acdcd2..000000000 --- a/libsrc/geos-cbm/devel/fio_module.s +++ /dev/null @@ -1,191 +0,0 @@ -; -; Low level file I/O routines, ONLY for module loading OR sth similar -; -; Maciej 'YTM/Elysium' Witkowiak -; 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 - 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 index 61d2906aa..000000000 --- a/libsrc/geos-cbm/devel/geos-stdjoy.s +++ /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 -; 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 - 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 index 542e8a0be..000000000 --- a/libsrc/geos-cbm/devel/geos-tgi.s +++ /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 -; 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 - 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 - 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 index dda119b09..000000000 --- a/libsrc/geos-cbm/devel/geos-vdc.s +++ /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 -; 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 - 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+1 - - jsr transferin - - lda #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 ; 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+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 index dd01dc2db..000000000 --- a/libsrc/geos-cbm/devel/joy_stddrv.s +++ /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 index 6fca43a0b..000000000 --- a/libsrc/geos-cbm/devel/mcbdefault.s +++ /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 index 8792c27f0..000000000 --- a/libsrc/geos-cbm/devel/mouse_stddrv.s +++ /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 index d965e6ff3..000000000 --- a/libsrc/geos-cbm/devel/tgi_colors.s +++ /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 index 6745c2301..000000000 --- a/libsrc/geos-cbm/devel/tgi_stddrv.s +++ /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 index 000000000..1e3d5d446 --- /dev/null +++ b/libsrc/geos-cbm/drivers/Makefile @@ -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 index 000000000..166acdcd2 --- /dev/null +++ b/libsrc/geos-cbm/drivers/fio_module.s @@ -0,0 +1,191 @@ +; +; Low level file I/O routines, ONLY for module loading OR sth similar +; +; Maciej 'YTM/Elysium' Witkowiak +; 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 + 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 index 000000000..61d2906aa --- /dev/null +++ b/libsrc/geos-cbm/drivers/geos-stdjoy.s @@ -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 +; 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 + 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 index 000000000..542e8a0be --- /dev/null +++ b/libsrc/geos-cbm/drivers/geos-tgi.s @@ -0,0 +1,673 @@ +; +; Graphics driver for the 320x200x2 and 640x200x2 modes on GEOS 64/128 +; 2010-08-17, Maciej 'YTM/Elysium' Witkowiak +; 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 + 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 + 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 index 000000000..dda119b09 --- /dev/null +++ b/libsrc/geos-cbm/drivers/geos-vdc.s @@ -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 +; 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 + 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+1 + + jsr transferin + + lda #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 ; 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+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 index 000000000..dd01dc2db --- /dev/null +++ b/libsrc/geos-cbm/drivers/joy_stddrv.s @@ -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 index 000000000..6fca43a0b --- /dev/null +++ b/libsrc/geos-cbm/drivers/mcbdefault.s @@ -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 index 000000000..8792c27f0 --- /dev/null +++ b/libsrc/geos-cbm/drivers/mouse_stddrv.s @@ -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 index 000000000..d965e6ff3 --- /dev/null +++ b/libsrc/geos-cbm/drivers/tgi_colors.s @@ -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 index 000000000..6745c2301 --- /dev/null +++ b/libsrc/geos-cbm/drivers/tgi_stddrv.s @@ -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"