From 21ef6b8510ccd640b9099966424c174747de1524 Mon Sep 17 00:00:00 2001 From: mrdudz Date: Thu, 16 Jul 2015 16:00:32 +0200 Subject: [PATCH] fixed screensize, timertick, revers mode --- asminc/pce.inc | 3 +-- include/time.h | 5 ++--- libsrc/pce/{scrsize.s => _scrsize.s} | 9 ++++---- libsrc/pce/conio.s | 33 ++++++++++++++++++++++------ libsrc/pce/cputc.s | 3 ++- libsrc/pce/readme.txt | 5 ----- libsrc/pce/revers.s | 24 +++++++++++++++----- testcode/lib/pce/conio.c | 31 ++++++++++++++++++++++++++ 8 files changed, 86 insertions(+), 27 deletions(-) rename libsrc/pce/{scrsize.s => _scrsize.s} (59%) diff --git a/asminc/pce.inc b/asminc/pce.inc index 98364815b..851b2f32a 100644 --- a/asminc/pce.inc +++ b/asminc/pce.inc @@ -14,8 +14,7 @@ BGCOLOR = $38 tickcount = $39 ;4 screenrows = (224/8) -charsperline = (512/8) -xsize = charsperline +charsperline = 61 CH_HLINE = 7 CH_VLINE = 7 diff --git a/include/time.h b/include/time.h index 8fc787228..12f130f52 100644 --- a/include/time.h +++ b/include/time.h @@ -100,9 +100,8 @@ unsigned _clocks_per_sec (void); # define CLK_TCK 50 /* POSIX */ # define CLOCKS_PER_SEC 50 /* ANSI */ #elif defined(__PCE__) -/* FIXME: we likely need to read it at runtime */ -# define CLK_TCK 50 /* POSIX */ -# define CLOCKS_PER_SEC 50 /* ANSI */ +# define CLK_TCK 60 /* POSIX */ +# define CLOCKS_PER_SEC 60 /* ANSI */ #elif defined(__GEOS__) # define CLK_TCK 1 /* POSIX */ # define CLOCKS_PER_SEC 1 /* ANSI */ diff --git a/libsrc/pce/scrsize.s b/libsrc/pce/_scrsize.s similarity index 59% rename from libsrc/pce/scrsize.s rename to libsrc/pce/_scrsize.s index 254676aae..8dab2cf7b 100644 --- a/libsrc/pce/scrsize.s +++ b/libsrc/pce/_scrsize.s @@ -1,9 +1,10 @@ ; ; Screen size variables ; + .include "pce.inc" - .export _screensize -_screensize: + .export screensize +screensize: ldx xsize ldy ysize rts @@ -13,5 +14,5 @@ _screensize: .rodata .export xsize, ysize -xsize: .byte 64 -ysize: .byte 28 +xsize: .byte charsperline +ysize: .byte screenrows diff --git a/libsrc/pce/conio.s b/libsrc/pce/conio.s index a8a9da244..4fb3b1394 100644 --- a/libsrc/pce/conio.s +++ b/libsrc/pce/conio.s @@ -51,7 +51,7 @@ set_palette: ; ;---------------------------------------------------------------------------- - .importzp ptr1 + .importzp ptr1, tmp1 conio_init: ; Load font st0 #VDC_MAWR @@ -65,10 +65,35 @@ conio_init: sta ptr1+1 st0 #VDC_VWR ; VWR + + lda #0 + sta tmp1 + jsr copy + + lda #font + sta ptr1+1 + + lda #$ff + sta tmp1 + jsr copy + + + ldx #0 + stx BGCOLOR + inx + stx CHARCOLOR + + + rts + +copy: ldy #$80 ; 128 chars charloop: ldx #$08 ; 8 bytes/char lineloop: lda (ptr1) + eor tmp1 sta a:VDC_DATA_LO ; bitplane 0 stz a:VDC_DATA_HI ; bitplane 1 @@ -89,12 +114,6 @@ fillloop: st1 #$00 dey bne charloop ; next character - ldx #0 - stx BGCOLOR - inx - stx CHARCOLOR - - rts .rodata diff --git a/libsrc/pce/cputc.s b/libsrc/pce/cputc.s index e2e345ac2..918f39e29 100644 --- a/libsrc/pce/cputc.s +++ b/libsrc/pce/cputc.s @@ -7,6 +7,7 @@ .export newline, plot .import popa, _gotoxy .import PLOT + .import xsize .importzp tmp3,tmp4 @@ -38,7 +39,7 @@ cputdirect: advance: ldy CURS_X iny - cpy #xsize + cpy xsize bne L3 jsr newline ; new line ldy #0 ; + cr diff --git a/libsrc/pce/readme.txt b/libsrc/pce/readme.txt index b201893d1..7dd857f21 100644 --- a/libsrc/pce/readme.txt +++ b/libsrc/pce/readme.txt @@ -6,16 +6,11 @@ joystick support should get verified on real hw - the masks for buttons may be wrong. - 6 button gamepads are different and need slightly different code -revers() is a dummy function, actual reverse output is not supported yet - some graphical petscii chars should get added to the charset interruptor support in crt0 (and cfg) is missing - clock() should be hooked to a VBL interrupt -conio lacks support for different screen sizes, which could be used with -different video modes - -------------------------------------------------------------------------------- a good emulator to use for PC-Engine is "mednafen" (mednafen.sourceforge.net) diff --git a/libsrc/pce/revers.s b/libsrc/pce/revers.s index d3e6f8930..061023d09 100644 --- a/libsrc/pce/revers.s +++ b/libsrc/pce/revers.s @@ -1,10 +1,24 @@ -; FIXME: actual revers output is not supported yet + .include "pce.inc" - .export _revers -_revers: - lda #0 - rts + .export _revers + +.proc _revers + + ldx #$00 ; Assume revers off + tay ; Test onoff + beq L1 ; Jump if off + ldx #$80 ; Load on value + ldy #$00 ; Assume old value is zero +L1: lda RVS ; Load old value + stx RVS ; Set new value + beq L2 ; Jump if old value zero + iny ; Make old value = 1 +L2: ldx #$00 ; Load high byte of result + tya ; Load low byte, set CC + rts + +.endproc ;------------------------------------------------------------------------------- ; force the init constructor to be imported diff --git a/testcode/lib/pce/conio.c b/testcode/lib/pce/conio.c index 92431d142..b94c91877 100644 --- a/testcode/lib/pce/conio.c +++ b/testcode/lib/pce/conio.c @@ -13,10 +13,12 @@ void main(void) int i, j; clock_t clk; char *p; + unsigned char xsize, ysize, n; joy_install(&joy_static_stddrv); clrscr(); + screensize(&xsize, &ysize); cputs("hello world"); cputsxy(0, 2, "colors:" ); @@ -43,6 +45,25 @@ void main(void) ); } + gotoxy(0,ysize - 1); + for (i = 0; i < xsize; ++i) { + cputc('0' + i % 10); + } + + gotoxy(0,ysize - 2 - ((256 + xsize) / xsize)); + for (i = 0; i < xsize; ++i) { + cputc('0' + i % 10); + } + for (i = 0; i < (xsize * 5); ++i) { + cputc('#'); + } + gotoxy(0,ysize - 1 - ((256 + xsize) / xsize)); + for (i = 0; i < 256; ++i) { + if ((i != '\n') && (i != '\r')) { + cputc(i); + } + } + i = get_tv(); gotoxy(30,0); cputs("TV Mode: "); @@ -57,6 +78,7 @@ void main(void) cputs("OTHER"); break; } + cprintf(" %dx%d", xsize, ysize); for(;;) { gotoxy(13,4); @@ -82,7 +104,16 @@ void main(void) (j & joy_masks[JOY_FIRE])? " fire " : " ---- ", (j & joy_masks[JOY_FIRE2])? "fire2 " : " ---- "); } + + gotoxy(xsize - 10, 3); + j = (n >> 5) & 1; + revers(j); + cputc(j ? 'R' : ' '); + cputs(" revers"); + revers(0); + waitvblank(); + ++n; } for(;;); }