1
0
mirror of https://github.com/cc65/cc65.git synced 2024-12-22 12:30:41 +00:00

simple conio support for GEOS

git-svn-id: svn://svn.cc65.org/cc65/trunk@1093 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
izydorst 2001-10-27 17:13:22 +00:00
parent 0fe03a4643
commit 8ce6c9bcac
17 changed files with 504 additions and 1 deletions

View File

@ -4,7 +4,7 @@
#
# Maciej 'YTM/Elysium' Witkowiak
OBJ_DIRS=common devel disk dlgbox file graph menuicon memory mousesprite process system
OBJ_DIRS=common conio devel disk dlgbox file graph menuicon memory mousesprite process system
all:
@for i in $(OBJ_DIRS); do $(MAKE) -C $$i; done

View File

@ -0,0 +1,16 @@
#
# Makefile for GEOS lib
# for cc65
#
%.o: %.s
@$(AS) -o $@ $(AFLAGS) $<
S_OBJS = cchvline.o cgetc.o clrscr.o color.o cputc.o cputs.o cursor.o gotoxy.o kbhit.o\
revers.o screensize.o where.o
all: $(S_OBJS)
clean:
@rm -f *.~ $(S_OBJS) core

View File

@ -0,0 +1,29 @@
;
; Maciej 'YTM/Elysium' Witkowiak
;
; 27.10.2001
; void cclearxy (unsigned char x, unsigned char y, unsigned char length);
; void cclear (unsigned char length);
; void chlinexy (unsigned char x, unsigned char y, unsigned char length);
; void chline (unsigned char length);
; void cvlinexy (unsigned char x, unsigned char y, unsigned char length);
; void cvline (unsigned char length);
.export _cclearxy, _cclear
.export _chlinexy, _chline
.export _cvlinexy, _cvline
.import popa
; unimplemented, will do nothing now
_cclearxy:
_chlinexy:
_cvlinexy:
jsr popa
_cclear:
_chline:
_cvline:
rts

43
libsrc/geos/conio/cgetc.s Normal file
View File

@ -0,0 +1,43 @@
;
; Maciej 'YTM/Elysium' Witkowiak
;
; 27.10.2001
; unsigned char cgetc (void);
.export _cgetc
.include "../inc/jumptab.inc"
.include "../inc/geossym.inc"
.include "cursor.inc"
_cgetc:
; show cursor if needed
lda cursor_flag
beq L0
lda #1
sta r3L
lda cursor_x
ldx cursor_x+1
sta r4L
sta stringX
stx r4H
stx stringX+1
lda cursor_y
sec
sbc curHeight
sta r5L
sta stringY
jsr PosSprite
jsr PromptOn
L0: jsr GetNextChar
tax
beq L0
pha
jsr PromptOff
pla
ldx #0
rts

View File

@ -0,0 +1,35 @@
;
; Maciej 'YTM/Elysium' Witkowiak
;
; 27.10.2001
; void clrscr (void);
.export _clrscr
.include "../inc/jumptab.inc"
.include "../inc/geossym.inc"
.include "../inc/const.inc"
_clrscr:
lda #ST_WR_FORE | ST_WR_BACK
sta dispBufferOn
lda #0
jsr SetPattern
lda #0
sta r3L
sta r3H
sta 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
jmp Rectangle

20
libsrc/geos/conio/color.s Normal file
View File

@ -0,0 +1,20 @@
;
; Maciej 'YTM/Elysium' Witkowiak
;
; 27.10.2001
; unsigned char __fastcall__ textcolor (unsigned char color);
; unsigned char __fastcall__ bgcolor (unsigned char color);
; unsigned char __fastcall__ bordercolor (unsigned char color);
;
.export _textcolor, _bgcolor, _bordercolor
; for GEOS 2.0 there is no color support, perhaps Wheels has it
_textcolor:
_bgcolor:
_bordercolor:
rts

76
libsrc/geos/conio/cputc.s Normal file
View File

@ -0,0 +1,76 @@
;
; Maciej 'YTM/Elysium' Witkowiak
;
; 27.10.2001
; void cputcxy (unsigned char x, unsigned char y, char c);
; void cputc (char c);
.export _cputcxy, _cputc, update_cursor
.import _gotoxy
.import popa
.include "../inc/const.inc"
.include "../inc/geossym.inc"
.include "../inc/jumptab.inc"
.include "cursor.inc"
_cputcxy:
pha ; Save C
jsr popa ; Get Y
jsr _gotoxy ; Set cursor, drop x
pla ; Restore C
; Plot a character - also used as internal function
_cputc:
tax ; save character
; some characters are not safe for PutChar
cmp #$20
bcs L1
cmp #$1d
bne L00
ldx #BACKSPACE
bne L1
L00: cmp #ESC_GRAPHICS
beq L0
cmp #ESC_RULER
beq L0
cmp #GOTOX
beq L0
cmp #GOTOY
beq L0
cmp #GOTOXY
beq L0
cmp #NEWCARDSET
beq L0
cmp #$1e
bne L1
L0: rts
L1: lda cursor_x
sta r11L
lda cursor_x+1
sta r11H
lda cursor_y
sta r1H
txa
jsr PutChar
update_cursor:
lda r11L
sta cursor_x
sta r4L
lda r11H
sta cursor_x+1
sta r4H
lda r1H
sta cursor_y
sec
sbc curHeight
sta r5L
lda #1 ; update cursor prompt position
sta r3L
jmp PosSprite

41
libsrc/geos/conio/cputs.s Normal file
View File

@ -0,0 +1,41 @@
;
; Maciej 'YTM/Elysium' Witkowiak
;
; 27.10.2001
; void cputsxy (unsigned char x, unsigned char y, char* s);
; void cputs (char* s);
.export _cputsxy, _cputs
.import update_cursor, _gotoxy
.import popa
.include "../inc/const.inc"
.include "../inc/geossym.inc"
.include "../inc/jumptab.inc"
.include "cursor.inc"
_cputsxy:
sta r0L ; Save s for later
stx r0H
jsr popa ; Get Y
jsr _gotoxy ; Set cursor, pop x
jmp L0 ; Same as cputs...
_cputs: sta r0L ; Save s
stx r0H
L0: ldy #0
lda (r0),y
bne L1 ; Jump if there's something
rts
L1: lda cursor_x
sta r11L
lda cursor_x+1
sta r11H
lda cursor_y
sta r1H
jsr PutString
jmp update_cursor

View File

@ -0,0 +1,11 @@
;
; Maciej 'YTM/Elysium' Witkowiak
;
; 27.10.2001
SCREEN_PTR = $D1 ; Pointer to current char in text screen
cursor_x = $D3 ; Cursor column (word)
cursor_y = $D5 ; Cursor row
cursor_flag = $D6 ; cursor on/off (0-off)

View File

@ -0,0 +1,35 @@
;
; Maciej 'YTM/Elysium' Witkowiak
;
; 27.10.2001
; unsigned char cursor (unsigned char onoff);
.export _cursor
.include "../inc/jumptab.inc"
.include "../inc/geossym.inc"
.include "cursor.inc"
_cursor:
tay ; onoff into Y
ldx #0 ; High byte of result
ldx cursor_flag ; Get old value
sty cursor_flag ; Set new value
tya
beq L1
lda curHeight ; prepare cursor
jsr InitTextPrompt
lda cursor_x ; position it on screen
sta r4L
lda cursor_x+1
sta r4H
lda cursor_y
sec
sbc curHeight
sta r5L
lda #1
sta r3L
jsr PosSprite
L1: rts

View File

@ -0,0 +1,35 @@
;
; Maciej 'YTM/Elysium' Witkowiak
;
; 27.10.2001
; void gotox (unsigned char x);
; void gotoy (unsigned char y);
; void gotoxy (unsigned char x, unsigned char y);
.export _gotox, _gotoy, _gotoxy
.import popa
.include "../inc/jumptab.inc"
.include "cursor.inc"
_gotox: sta cursor_x
jmp fixcursor
_gotoy: sta cursor_y
jmp fixcursor
_gotoxy: sta cursor_y
jsr popa
sta cursor_x
; convert 8x8 x/y coordinates to GEOS hires
fixcursor:
ldx #cursor_x
ldy #3
jsr DShiftLeft
asl cursor_y
asl cursor_y
asl cursor_y
rts

19
libsrc/geos/conio/kbhit.s Normal file
View File

@ -0,0 +1,19 @@
;
; Maciej 'YTM/Elysium' Witkowiak
;
; 27.10.2001
; unsigned char kbhit (void);
.export _kbhit
.import return0, return1
.include "../inc/jumptab.inc"
.include "../inc/geossym.inc"
_kbhit:
lda pressFlag
bmi L1
jmp return0
L1: jmp return1

View File

@ -0,0 +1,36 @@
;
; Maciej 'YTM/Elysium' Witkowiak
;
; 27.10.2001
; unsigned char revers (unsigned char onoff);
.export _revers
.import tmp1
.include "../inc/geossym.inc"
.include "../inc/const.inc"
_revers:
tax
bne L0 ; turn on
lda #0
.byte $2c
L0: lda #SET_REVERSE
sta tmp1
lda currentMode
tax
and #SET_REVERSE
tay ; store old value
txa
and #%11011111 ; mask out
ora tmp1 ; set new value
sta currentMode
ldx #0
tya
beq L1
lda #1
L1: rts

View File

@ -0,0 +1,35 @@
;
; Maciej 'YTM/Elysium' Witkowiak
;
; 27.10.2001
; void screensize (unsigned char* x, unsigned char* y);
;
.export _screensize
.import popax
.importzp ptr1, ptr2
.include "../inc/geossym.inc"
_screensize:
sta ptr1 ; Store the y pointer
stx ptr1+1
jsr popax ; get the x pointer
sta ptr2
stx ptr2+1
ldy #0
lda graphMode
bpl L1
lda #80 ; 80 columns (more or less)
.byte $2c
L1: lda #40 ; 40 columns (more or less)
sta (ptr2),y
lda #24 ; something like that for Y size
sta (ptr1),y
rts

30
libsrc/geos/conio/where.s Normal file
View File

@ -0,0 +1,30 @@
;
; Maciej 'YTM/Elysium' Witkowiak
;
; 27.10.2001
; unsigned char wherex (void);
; unsigned char wherey (void);
.export _wherex, _wherey
.importzp tmp1, tmp2
.include "../inc/jumptab.inc"
.include "cursor.inc"
_wherex: lda cursor_x
sta tmp1
lda cursor_x+1
sta tmp2
lda #tmp1
ldy #3
jsr DShiftRight
lda tmp1
rts
_wherey: lda cursor_y
lsr
lsr
lsr
rts

34
samples/geos/geosconio.c Normal file
View File

@ -0,0 +1,34 @@
#include <geos.h>
#include <conio.h>
void main(void) {
char ch;
DlgBoxOk("Now the screen will be", "cleared.");
clrscr();
DlgBoxOk("Now a character will be", "written at 20,20");
gotoxy(20,20);
cputc('A');
DlgBoxOk("Now a string will be", "written at 0,1");
cputsxy(0,1, CBOLDON "Just" COUTLINEON "a " CITALICON "string." CPLAINTEXT );
DlgBoxOk("Write text and finish it", "with a dot.");
cursor(1);
do {
ch = cgetc();
cputc(ch);
} while (ch!='.');
DlgBoxOk("Seems that it is all.", "Bye.");
EnterDeskTop();
}

View File

@ -0,0 +1,8 @@
; this is resource file for hello1.c, a GEOS application example
HEADER APPLICATION "conio" "ConIO" "V0.1" {
dostype USR
author "Maciej Witkowiak"
info "This is an example for a conio app."
}