diff --git a/asminc/telestrat.inc b/asminc/telestrat.inc index 8e6a66bbd..424047725 100644 --- a/asminc/telestrat.inc +++ b/asminc/telestrat.inc @@ -1,7 +1,7 @@ ; ; Oric Telemon definition -; Telemon 2.4 & Telemon 3.0 -; For telemon 3.0 check http://orix.oric.org +; Telemon 2.4 & Telemon 3.x +; For telemon 3.x check http://orix.oric.org ; @@ -15,6 +15,15 @@ FUNCTKEY = $A5 FNAME_LEN = 11 ; maximum length of file-name +; --------------------------------------------------------------------------- +; I/O Identifier +; this identifers are used for channel management +; + +XKBD = $80 ; Keyboard +XRSE = $83 ; RS232 in +XSCR = $88 ; Screen +XRSS = $90 ; RS232 out ; --------------------------------------------------------------------------- @@ -34,10 +43,7 @@ TR5 := $11 TR6 := $12 TR7 := $13 - - - -PTR_READ_DEST := $2C ; used for XFREAD and XWRITE only in telemon 3.0 +PTR_READ_DEST := $2C ; used for XFREAD and XWRITE only in telemon 3.x HRSX := $46 HRSY := $47 @@ -48,11 +54,43 @@ HRS3 := $51 HRS4 := $53 HRS5 := $55 +HRSFB := $57 +; RS232T +; b0-b3 : speed +; 1111 => 19200 bps (please note that telestrat can't handle this speed without stopping all IRQ except ACIA's one) +; 1100 => 9600 bps (default from telemon) +; 1110 => 4800 bps +; 1010 => 2400 bps +; 1000 => 1200 bps +; 0111 => 600 bps +; 0110 => 300 bps +; 0101 => 150 bps +; 0010 => 75 bps + +; b4 : 0 external clock, 1 internal clock +; b6-b5 : 00 8 bits +; 01 7 bits +; 10 6 bits +; 11 5 bits +; b7 : 0 a stop + +RS232T := $59 + +; RS232C +; b0-b3 : 0 +; b4 : 1 if echo +; b5 : 1 if parity +; b7-b6 : 00 in/out parity odd +; : 01 on/out parity even +; : 10 parity sent, answer not tested +; : 11 SPACE SENT, reception not tested + +RS232C := $5A ; --------------------------------------------------------------------------- ; Low memory - +IRQVec := $02FB ; "fast" interrupt vector @@ -78,7 +116,7 @@ PRA2 .byte ; Port Register A without handshaking .endstruct -.struct VIA2 ; Versatile Interface Adapter +.struct VIA2 ; Versatile Interface Adapter .res $0320 PRB .byte ; Port Register B PRA .byte ; Port Register A @@ -110,7 +148,7 @@ SCREEN := $BB80 ; --------------------------------------------------------------------------- ; ROM entries -; primitives telemon 2.4 +; telemon primitives (2.4 & 3.x) XRD0 = $08 XRDW0 = $0C XWR0 = $10 @@ -119,13 +157,13 @@ XTEXT = $19 XHIRES = $1A XFILLM = $1C XMINMA = $1F -XVARS = $24 ; only in TELEMON 3.0, in telemon 2.4, it's XNOMFI ($24) -XFREAD = $27 ; only in TELEMON 3.0 -XOPEN = $30 ; only in TELEMON 3.0 +XVARS = $24 ; only in TELEMON 3.x, in telemon 2.4, it's XNOMFI ($24) +XFREAD = $27 ; only in TELEMON 3.x +XOPEN = $30 ; only in TELEMON 3.x XCOSCR = $34 ; switch off cursor XCSSCR = $35 ; switch on cursor -XCLOSE = $3A ; only in TELEMON 3.0 Close file -XFWRITE = $3B ; only in TELEMON 3.0 write file +XCLOSE = $3A ; only in TELEMON 3.x Close file +XFWRITE = $3B ; only in TELEMON 3.x write file XSONPS = $40 XOUPS = $42 XPLAY = $43 @@ -133,10 +171,20 @@ XSOUND = $44 XMUSIC = $45 XZAP = $46 XSHOOT = $47 +XSOUT = $67 ; Send A register to RS232, available in telemon 2.4 & 3.x +XHRSSE = $8C ; Put in X and Y +XDRAWA = $8D ; Draw a line +XDRAWR = $8E ; Draw a line XCIRCL = $8F XCURSE = $90 +XCURMO = $91 XPAPER = $92 XINK = $93 +XBOX = $94 +XABOX = $95 +XFILL = $96 +XCHAR = $97 +XSCHAR = $98 ; Draw a string XEXPLO = $9C XPING = $9D @@ -151,6 +199,7 @@ SCRX := $220 SCRY := $224 ADSCRL := $218 ADSCRH := $21C +HRSPAT := $2AA ; Hires pattern : it's used to draw pattern for a line or a circle IRQVECTOR := $2FA diff --git a/include/telestrat.h b/include/telestrat.h index 5a090647b..1865f19a0 100644 --- a/include/telestrat.h +++ b/include/telestrat.h @@ -30,6 +30,76 @@ + +/* Color defines */ +#define COLOR_BLACK 0x00 +#define COLOR_RED 0x01 +#define COLOR_GREEN 0x02 +#define COLOR_YELLOW 0x03 +#define COLOR_BLUE 0x04 +#define COLOR_MAGENTA 0x05 +#define COLOR_CYAN 0x06 +#define COLOR_WHITE 0x07 + +/* TGI color defines */ +/* White and red are swapped, so that the pallete +** driver is compatible with black-and-white drivers. +*/ +#define TGI_COLOR_BLACK COLOR_BLACK +#define TGI_COLOR_WHITE 1 +#define TGI_COLOR_GREEN COLOR_GREEN +#define TGI_COLOR_YELLOW COLOR_YELLOW +#define TGI_COLOR_BLUE COLOR_BLUE +#define TGI_COLOR_MAGENTA COLOR_MAGENTA +#define TGI_COLOR_CYAN COLOR_CYAN +#define TGI_COLOR_RED 7 + + +extern void telestrat_228_200_3_tgi[]; +extern void telestrat_240_200_2_tgi[]; /* Referred to by tgi_static_stddrv[] */ + +/* Define hardware */ +#include <_6522.h> +#define VIA (*(struct __6522*)0x300) + + + +/* These are defined to be FUNCT + NumberKey */ +#define CH_F1 0xB1 +#define CH_F2 0xB2 +#define CH_F3 0xB3 +#define CH_F4 0xB4 +#define CH_F5 0xB5 +#define CH_F6 0xB6 +#define CH_F7 0xB7 +#define CH_F8 0xB8 +#define CH_F9 0xB9 +#define CH_F10 0xB0 + + + +/* Character codes */ +#define CH_ULCORNER '+' +#define CH_URCORNER '+' +#define CH_LLCORNER '+' +#define CH_LRCORNER '+' +#define CH_TTEE '+' +#define CH_BTEE '+' +#define CH_LTEE '+' +#define CH_RTEE '+' +#define CH_CROSS '+' +#define CH_CURS_UP 11 +#define CH_CURS_DOWN 10 +#define CH_CURS_LEFT 8 +#define CH_CURS_RIGHT 9 +#define CH_DEL 127 +#define CH_ENTER 13 +#define CH_STOP 3 +#define CH_LIRA 95 +#define CH_ESC 27 + + + void oups(); void ping(); void zap(); diff --git a/libsrc/telestrat/cgetc.s b/libsrc/telestrat/cgetc.s index 2b0fc7758..6a6b23318 100644 --- a/libsrc/telestrat/cgetc.s +++ b/libsrc/telestrat/cgetc.s @@ -10,7 +10,7 @@ .proc _cgetc ; this routine could be quicker if we wrote in page 2 variables, ; but it's better to use telemon routine in that case, because telemon can manage 4 I/O - lda cursor ; if cursor equal to 0, then switch off cursor + ldx cursor ; if cursor equal to 0, then switch off cursor beq switchoff_cursor ldx #$00 ; x is the first screen @@ -18,7 +18,7 @@ jmp loop ; could be replaced by a bne/beq but 'jmp' is cleaner than a bne/beq which could expect some matters switchoff_cursor: - ldx #$00 ; x is the first screen + ; at this step X is equal to $00, X must be set, because it's the id of the screen (telestrat can handle 4 virtuals screen) BRK_TELEMON(XCOSCR) ; switch off cursor loop: diff --git a/libsrc/telestrat/clrscr.s b/libsrc/telestrat/clrscr.s index f2b8fafc1..31c8ee205 100644 --- a/libsrc/telestrat/clrscr.s +++ b/libsrc/telestrat/clrscr.s @@ -9,6 +9,9 @@ .include "telestrat.inc" .proc _clrscr + ; Switch to text mode + BRK_TELEMON(XTEXT) + lda #<SCREEN ldy #>SCREEN sta RES diff --git a/libsrc/telestrat/irq.s b/libsrc/telestrat/irq.s new file mode 100644 index 000000000..9027f263e --- /dev/null +++ b/libsrc/telestrat/irq.s @@ -0,0 +1,59 @@ +; +; IRQ handling (Oric version) +; + + .export initirq, doneirq + .import callirq + + .include "telestrat.inc" + +; ------------------------------------------------------------------------ + +.segment "ONCE" + +initirq: + lda IRQVec + ldx IRQVec+1 + sta IRQInd+1 + stx IRQInd+2 + lda #<IRQStub + ldx #>IRQStub + jmp setvec + +; ------------------------------------------------------------------------ + +.code + +doneirq: + lda IRQInd+1 + ldx IRQInd+2 +setvec: sei + sta IRQVec + stx IRQVec+1 + cli + rts + +; ------------------------------------------------------------------------ + +.segment "LOWCODE" + +IRQStub: + cld ; Just to be sure + pha + txa + pha + tya + pha + jsr callirq ; Call the functions + pla + tay + pla + tax + pla + jmp IRQInd ; Jump to the saved IRQ vector + +; ------------------------------------------------------------------------ + +.data + +IRQInd: jmp $0000 diff --git a/libsrc/telestrat/libref.s b/libsrc/telestrat/libref.s new file mode 100644 index 000000000..bdd0a671a --- /dev/null +++ b/libsrc/telestrat/libref.s @@ -0,0 +1,8 @@ +; +; Jede (jede@oric.org), 2017-10-16 +; + + .export tgi_libref + .import _exit + +tgi_libref := _exit diff --git a/libsrc/telestrat/tgi/telestrat-228-200-3.s b/libsrc/telestrat/tgi/telestrat-228-200-3.s new file mode 100644 index 000000000..e20c2c877 --- /dev/null +++ b/libsrc/telestrat/tgi/telestrat-228-200-3.s @@ -0,0 +1,336 @@ +; +; Graphics driver for the 228x200x3 palette mode on the Telestrat +; +; Jede (jede@oric.org), 2017-10-15 + + .include "zeropage.inc" + + .include "tgi-kernel.inc" + .include "tgi-error.inc" + .include "telestrat.inc" + + .macpack generic + .macpack module + +XSIZE = 6 ; System font width +YSIZE = 8 ; System font height + +; ------------------------------------------------------------------------ +; Header. Includes jump table and constants. + + module_header _telestrat_228_200_3_tgi + +; The first part of the header is a structure that has a signature, +; and defines the capabilities of the driver. + + .byte "tgi" + .byte TGI_API_VERSION ; TGI API version number + .addr $0000 ; Library reference + .word 228 ; x resolution + .word 200 ; y resolution + .byte 3 ; Number of drawing colors + .byte 1 ; Number of screens available + .byte XSIZE ; System font x size + .byte YSIZE ; System font y size + .word $011C ; Aspect ratio (based on 4/3 display) + .byte 0 ; TGI driver flags + +; Next comes the jump table. Currently, 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 CIRCLE + .addr TEXTSTYLE + .addr OUTTEXT + .addr 0 ; IRQ entry is unused + +; ------------------------------------------------------------------------ +; Data. + +; Variables mapped to the zero-page segment variables. These are +; used for passing parameters to the driver. + +X1 := ptr1 +Y1 := ptr2 +X2 := ptr3 +Y2 := ptr4 + +; Absolute variables used in the code + +.bss + +ERROR: .res 1 ; Error code +MODE: .res 1 ; Graphics mode +PALETTE: .res 2 + +; Constant table + +.rodata + +; Default colors: black background, white foreground +; (The third "color" actually flips a pixel +; between the foreground and background colors.) +; +DEFPALETTE: .byte 0, 1 + +.code + +; ------------------------------------------------------------------------ +; 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 called only once. So, any code that is needed +; to initialize variables and so on must go here. Setting palette and +; clearing the screen are not needed because they are called by the graphics +; kernel later. +; The graphics kernel never will 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: + +; Switch into graphics mode. + BRK_TELEMON(XHIRES) + +; Done, reset the error code. + + lda #TGI_ERR_OK + sta ERROR + rts + +; ------------------------------------------------------------------------ +; GETERROR: Return the error code in A, and clear it. + +GETERROR: + ldx #TGI_ERR_OK + lda ERROR + stx ERROR + rts +; ------------------------------------------------------------------------ +; 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: + +; ------------------------------------------------------------------------ +; UNINSTALL routine. Is called before the driver is removed from memory. May +; clean up anything done by INSTALL, but probably is empty most of the time. +; +; Must set an error code: NO +; + +UNINSTALL: + rts + +; ------------------------------------------------------------------------ +; DONE: Will be called to switch the graphics device back into text mode. +; The graphics kernel never will call DONE when no graphics mode is active, +; so there is no need to protect against that. +; +; Must set an error code: NO +; + +DONE: + BRK_TELEMON(XTEXT) + rts +; ------------------------------------------------------------------------ +; CONTROL: Platform-/driver-specific entry point. +; +; Must set an error code: YES +; + +CONTROL: + ; not done yet + rts + +; ------------------------------------------------------------------------ +; CLEAR: Clears the screen. +; +; Must set an error code: NO +; + +CLEAR: + ; not done yet + rts + +; ------------------------------------------------------------------------ +; SETVIEWPAGE: Set the visible page. Called with the new page in A (0..n). +; The page number already is checked to be valid, by the graphics kernel. +; +; Must set an error code: NO (will be called only if page OK) +; + +SETVIEWPAGE: + +; ------------------------------------------------------------------------ +; SETDRAWPAGE: Set the drawable page. Called with the new page in A (0..n). +; The page number already is checked to be valid, by the graphics kernel. +; +; Must set an error code: NO (will be called only if page OK) +; + +SETDRAWPAGE: + rts + +; ------------------------------------------------------------------------ +; SETCOLOR: Set the drawing color (in A). The new color already is checked +; to be in a valid range (0..maxcolor-1). +; +; Must set an error code: NO (will be called only if color OK) +; + +SETCOLOR: + ; not done yet + rts + +; ------------------------------------------------------------------------ +; 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: + ; not done yet + rts + +flipcolor: + ; not done yet + rts + +; ------------------------------------------------------------------------ +; 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: + ; not done yet + 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 co-ordinates 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 + sta HRS1 + lda Y1 + sta HRS2 + + lda #$80 + sta HRSFB + + BRK_TELEMON(XCURSE) + + rts + +; ------------------------------------------------------------------------ +; GETPIXEL: Read the color value of a pixel, and return it in A/X. The +; co-ordinates passed to this function are never outside the visible screen +; area, so there is no need for clipping inside this function. + +GETPIXEL: + ; not done yet + 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: + ; not done yet + rts + +CIRCLE: + ; not done yet + rts + +; ------------------------------------------------------------------------ +; 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 co-ordinates 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: + ; not done yet + rts + +; ------------------------------------------------------------------------ +; TEXTSTYLE: Set the style used when calling OUTTEXT. Text scaling in the x +; and y directions is passed in X/Y, the text direction is passed in A. +; +; Must set an error code: NO +; + +TEXTSTYLE: + 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 its address in ptr3. +; +; Must set an error code: NO +; + +OUTTEXT: + ; not done yet + rts diff --git a/libsrc/telestrat/tgi/telestrat-240-200-2.s b/libsrc/telestrat/tgi/telestrat-240-200-2.s new file mode 100644 index 000000000..fcc1ce3f2 --- /dev/null +++ b/libsrc/telestrat/tgi/telestrat-240-200-2.s @@ -0,0 +1,329 @@ +; +; Graphics driver for the 240x200x2 monochrome mode on the Atmos +; +; Jede (jede@oric.org), 2017-10-15 + + + .include "zeropage.inc" + + .include "tgi-kernel.inc" + .include "tgi-error.inc" + .include "telestrat.inc" + + .macpack generic + .macpack module + +XSIZE = 6 ; System font width +YSIZE = 8 ; System font height + +; ------------------------------------------------------------------------ +; Header. Includes jump table and constants. + + module_header _telestrat_240_200_2_tgi + +; First part of the header is a structure that has a magic and defines the +; capabilities of the driver + + .byte $74, $67, $69 ; "tgi" + .byte TGI_API_VERSION ; TGI API version number + .addr $0000 ; Library reference + .word 240 ; X resolution + .word 200 ; Y resolution + .byte 2 ; Number of drawing colors + .byte 1 ; Number of screens available + .byte XSIZE ; System font X size + .byte YSIZE ; System font Y size + .word $011C ; Aspect ratio (based on 4/3 display) + .byte 0 ; TGI driver flags + +; Next comes the jump table. Currently 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 + +ERROR: .res 1 ; Error code +MODE: .res 1 ; Graphics mode + +; Constant table + +.rodata + +DEFPALETTE: .byte 0, 1 + +.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: + +; ------------------------------------------------------------------------ +; 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: + +; Switch into graphics mode + + BRK_TELEMON(XHIRES) + +; 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: + BRK_TELEMON(XTEXT) + rts + +; ------------------------------------------------------------------------ +; 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: + ; not done yet + rts + +; ------------------------------------------------------------------------ +; CLEAR: Clears the screen. +; +; Must set an error code: NO +; + +CLEAR: + ; not done yet + 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: + +; ------------------------------------------------------------------------ +; 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: + 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: + ;not done yet + rts + +; ------------------------------------------------------------------------ +; 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: + lda #TGI_ERR_INV_FUNC ; This resolution has no palette + sta ERROR + rts + +; ------------------------------------------------------------------------ +; 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: + +; ------------------------------------------------------------------------ +; 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: + ; not done yet + 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 + sta HRS1 + lda Y1 + sta HRS2 + + lda #$80 ; curset on + sta HRSFB + + BRK_TELEMON(XCURSE) + + rts + +; ------------------------------------------------------------------------ +; 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: + ; not done yet + 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: + ; not done yet + rts + +CIRCLE: + ; not done yet + rts + +; ------------------------------------------------------------------------ +; 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: + ; not done yet + rts + +; ------------------------------------------------------------------------ +; 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: + 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: + ; Not done yet + rts diff --git a/libsrc/telestrat/tgi_colors.s b/libsrc/telestrat/tgi_colors.s new file mode 100644 index 000000000..6ef3729b4 --- /dev/null +++ b/libsrc/telestrat/tgi_colors.s @@ -0,0 +1,8 @@ +; +; Target-specific black & white values for use by the target-shared TGI kernel +; + + .include "tgi-kernel.inc" + + .export tgi_color_black:zp = $00 + .export tgi_color_white:zp = $01 diff --git a/libsrc/telestrat/tgi_stat_stddrv.s b/libsrc/telestrat/tgi_stat_stddrv.s new file mode 100644 index 000000000..2b0d96761 --- /dev/null +++ b/libsrc/telestrat/tgi_stat_stddrv.s @@ -0,0 +1,14 @@ +; +; Address of the static standard tgi driver +; +; Jede (jede@oric.org), 2017-10-15 +; +; const void tgi_static_stddrv[]; +; + + .export _tgi_static_stddrv + .import _telestrat_240_200_2_tgi + +.rodata + +_tgi_static_stddrv := _telestrat_240_200_2_tgi