]> git.sur5r.net Git - cc65/commitdiff
conio and most other stuff working now
authormrdudz <mrdudz@users.noreply.github.com>
Sun, 29 Nov 2015 00:14:59 +0000 (01:14 +0100)
committermrdudz <mrdudz@users.noreply.github.com>
Sun, 29 Nov 2015 00:14:59 +0000 (01:14 +0100)
35 files changed:
asminc/gamate.inc
cfg/gamate.cfg
include/gamate.h
libsrc/gamate/_scrsize.s [new file with mode: 0644]
libsrc/gamate/chline.s [new file with mode: 0644]
libsrc/gamate/clock.s [new file with mode: 0644]
libsrc/gamate/clrscr.s [new file with mode: 0644]
libsrc/gamate/color.s [new file with mode: 0644]
libsrc/gamate/conio.s [new file with mode: 0644]
libsrc/gamate/cputc.s [new file with mode: 0644]
libsrc/gamate/crt0.s
libsrc/gamate/ctype.s [new file with mode: 0644]
libsrc/gamate/cvline.s [new file with mode: 0644]
libsrc/gamate/extzp.inc [new file with mode: 0644]
libsrc/gamate/extzp.s [new file with mode: 0644]
libsrc/gamate/gotoxy.s [new file with mode: 0644]
libsrc/gamate/irq.s [new file with mode: 0644]
libsrc/gamate/joy/gamate-stdjoy.s [new file with mode: 0644]
libsrc/gamate/joy_stat_stddrv.s [new file with mode: 0644]
libsrc/gamate/joy_stddrv.s [new file with mode: 0644]
libsrc/gamate/kplot.s [new file with mode: 0644]
libsrc/gamate/libref.s [new file with mode: 0644]
libsrc/gamate/revers.s [new file with mode: 0644]
libsrc/gamate/ticktock.s [new file with mode: 0644]
libsrc/gamate/vga.inc [new file with mode: 0644]
libsrc/gamate/waitvblank.s [new file with mode: 0644]
libsrc/gamate/wherex.s [new file with mode: 0644]
libsrc/gamate/wherey.s [new file with mode: 0644]
src/common/target.c
testcode/lib/conio.c
testcode/lib/gamate/Makefile
testcode/lib/gamate/audiotest.s
testcode/lib/gamate/ctest.c [new file with mode: 0644]
testcode/lib/gamate/lcdtest.s
util/gamate/gamate-fixcart.c [new file with mode: 0644]

index fda288e5f2397c4407386a60e2f815889e098448..167c9b1e183031d00f09d8a2a04580ef47f6ac19 100644 (file)
@@ -1,43 +1,70 @@
-; gamate symbols
-
-;.p02
-
-LCD_WIDTH = 160
-LCD_HEIGHT = 152
-
-lcd_base = $5000
-lcd_mode = $5001
-lcd_mode_y_increment = $40
-lcd_x_pos = $5002
-lcd_x_pos_plane2_flag =$80
-lcd_y_pos = $5003
-lcd_x = $5004
-lcd_y = $5005
-lcd_read = $5006
-lcd_data = $5007
-
-audio_base =$4000
-
-controls = $4400
-; active low
-up=1
-down=2
-left=4
-right=8
-button_a=$10
-button_b=$20
-start=$40
-select=$80
-
-cart_main = $6020
-;cart_nmi = $6023
-cart_irq = $6026 ; 135 hz
-cart_font = $6029
-
-nmi_enable = $c
-nmi_4800 = $a
-
-_f009 = $f009 ; wait 1/60s
-_f00c = $f00c ; install font
-_f012 = $f012 ; write screen
+;-------------------------------------------------------------------------------
+;                                gamate.inc
+;
+;                   Gamate system specific definitions
+;
+; (w) 2015 Groepaz/Hitmen (groepaz@gmx.net)
+;     based on technical reference by PeT (mess@utanet.at)
+;-------------------------------------------------------------------------------
+
+; look at gamate.h for comments, they are not duplicated here
+
+AUDIO_BASE      = $4000
+
+JOY_DATA        = $4400
+
+JOY_DATA_UP     = $01
+JOY_DATA_DOWN   = $02
+JOY_DATA_LEFT   = $04
+JOY_DATA_RIGHT  = $08
+JOY_DATA_FIRE_A = $10
+JOY_DATA_FIRE_B = $20
+JOY_DATA_START  = $40
+JOY_DATA_SELECT = $80
+
+LCD_WIDTH       = 160
+LCD_HEIGHT      = 152
+
+LCD_BASE        = $5000
+LCD_MODE        = $5001
+LCD_XPOS        = $5002
+LCD_YPOS        = $5003
+LCD_X           = $5004
+LCD_Y           = $5005
+LCD_READ        = $5006
+LCD_DATA        = $5007
+
+LCD_MODE_INC_X  = $00
+LCD_MODE_INC_Y  = $40
+LCD_XPOS_PLANE1 = $00
+LCD_XPOS_PLANE2 = $80
+
+; constants for the conio implementation
+charsperline    = (LCD_WIDTH / 8)
+screenrows      = (LCD_HEIGHT / 8)
+
+CH_HLINE        = 1
+CH_VLINE        = 2
+
+COLOR_WHITE     = 0
+COLOR_GREY2     = 1
+COLOR_GREY1     = 2
+COLOR_BLACK     = 3
+
+;-------------------------------------------------------------------------------
+; bios zp usage:
+;
+; 06/07         address of character set bitplane 1
+; 08/09         address of character set bitplane 2
+; 0a            nmi $4800 echo
+; 0b            irq counter
+; 0c            nmi call cart nmi
+; 0e/0f/10/11   big endian irq counter
+; 15/16/17      ?/xpos/ypos
+;
+; e8            nmi reset to $ff
+;
+
+ZP_NMI_4800     = $0a
+ZP_NMI_ENABLE   = $0c
 
index c6f2eed7d1d4ca0a6ffcc10aab078292a8d50e3f..577dfeb1d8fb9319dfa89cb7ada26e169038da81 100644 (file)
@@ -1,41 +1,39 @@
-# c version of 32kbyte config file
-# .data located in rom
-
-# ld65 config file
-# ld65 --config gamate.cfg -o <prog>.bin <prog>.o
+# linker config to produce simple Gamate cartridge (.bin)
 
 SYMBOLS {
-    __STARTUP__:    type = import;
-    __STACKSIZE__: type = weak, value = $0300; # 3 pages stack
+        __STARTUP__:   type = import;
+        __STACKSIZE__: type = weak, value = $0080; # 1 page stack
 }
 
 MEMORY {
-    ZP: start = $0000, size = $100;
-    CPUSTACK: start = $0100, size =$100;
-    RAM: start = $0200, size = $200, define = yes;
-#    ROM: start = $6000, size = $8000, fill = yes, fillval = $ff, file = %O, define = yes;
-#    STARTUP:   file = %O, define = yes, start = $6000, size = $29, fill = yes;
-#    ROM: start = $6000 + __STARTUP_SIZE__, size = $8000 - __STARTUP_SIZE__, fill = yes, fillval = $ff, file = %O, define = yes;
-# WARNING: fill value must be $00 else it will no more work
-    ROM: start = $6000, size = $8000, fill = yes, fillval = $00, file = %O, define = yes;
+        # 0000-03ff is RAM
+        # FIXME: what zp range can we actually use?
+        ZP: start = $0080, size = $80;
+        CPUSTACK: start = $0100, size =$100;
+        RAM: start = $0200, size = $180, define = yes;
+
+        # 6000-e000 can be (Cartridge) ROM
+        # WARNING: fill value must be $00 else it will no more work
+        #ROM: start = $6000, size = $1000, fill = yes, fillval = $00, file = %O, define = yes;
+        #ROMFILL: start = $7000, size = $7000, fill = yes, fillval = $00, file = %O, define = yes;
+        # for images that have code >$6fff we must calculate the checksum!
+        ROM: start = $6000, size = $8000, fill = yes, fillval = $00, file = %O, define = yes;
 }
 
 SEGMENTS {
-    ZEROPAGE: load = ZP, type = zp, define = yes;
-    STARTUP:   load = ROM,           type = ro, define=yes;
-    CODE: load = ROM, type = ro, define=yes;
-    RODATA: load = ROM, type = ro, define=yes;
-    DATA: load = ROM, run=RAM, type = rw, define = yes;
-    BSS: load = RAM, type = bss, define = yes;
+        ZEROPAGE: load = ZP, type = zp, define = yes;
+        EXTZP: load = ZP, type = zp, define = yes, optional = yes;
+        APPZP: load = ZP, type = zp, define = yes, optional = yes;
+        STARTUP:   load = ROM,           type = ro, define=yes;
+        INIT:    load = ROM, type = ro, define = yes, optional = yes;
+        CODE: load = ROM, type = ro, define=yes;
+        RODATA: load = ROM, type = ro, define=yes;
+        DATA: load = ROM, run=RAM, type = rw, define = yes;
+        BSS: load = RAM, type = bss, define = yes;
 }
 
 FEATURES {
-    CONDES: segment = RODATA,
-            type = constructor,
-            label = __CONSTRUCTOR_TABLE__,
-            count = __CONSTRUCTOR_COUNT__;
-    CONDES: segment = RODATA,
-            type = destructor,
-            label = __DESTRUCTOR_TABLE__,
-            count = __DESTRUCTOR_COUNT__;
+        CONDES: segment = RODATA, type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__;
+        CONDES: segment = RODATA, type = destructor,  label = __DESTRUCTOR_TABLE__,  count = __DESTRUCTOR_COUNT__;
+        CONDES: segment = RODATA, type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, import  = __CALLIRQ__;
 }
index 3c141f0e9e9203ee7d6ece71f26acf67f9744b13..f89f5204ea8d579d3dc5daf76dd540a59f655027 100644 (file)
@@ -6,8 +6,8 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 2015 Groepaz/Hitmen                                                   */
-/*                                                                           */
+/* (w) 2015 Groepaz/Hitmen (groepaz@gmx.net)                                                  */
+/*     based on technical reference by PeT (mess@utanet.at)                  */
 /*                                                                           */
 /* This software is provided 'as-is', without any expressed or implied       */
 /* warranty.  In no event will the authors be held liable for any damages    */
 #  error This module may only be used when compiling for the Gamate!
 #endif
 
+#define AUDIO_BASE      0x4000
+
+/*
+   base clock cpu clock/32 ?
+
+0/1: 1. channel(right): 12 bit frequency: right frequency 0 nothing, 1 high; 3 23khz; 4 17,3; 10 6,9; 15 4.6; $60 720hz; $eff 18,0; $fff 16,9 hz)
+ (delay clock/32)
+2/3: 2. channel(left): 12 bit frequency
+4/5: 3. channel(both): 12 bit frequency
+6: 0..5 noise frequency 0 fast 1f slow (about 500us) 15.6ns--> clock/32 counts
+7 control (hinibble right)
+ bit 0: right channel high (full cycle, else square pulse/tone)
+ bit 1: left channel high
+ bit 2: both channel high
+ bit 3: set right tone (else noise)
+ bit 4: set left channel normal
+ bit 5: set both normal
+ bits 30: 11 high, 10 square, 01 noise, 00 noise only when square high
+ noise means switches channel to ad converter based noise algorithmen
+ (white noise shift register 17bit wide, repeats after about 130000 cycles)
+ probably out=!bit16, bit0=bit16 xor bit13; runs through, so start value anything than 0
+8: 1st volume: 0..3 square volume; bit 4 envelope (higher priority)
+9: 2nd volume
+10: 3rd volume
+11/12: envelope delay time 0 fast, 0xffff slow/nearly no effect (2 22us, 4 56us)
+ frequency $800, envelope $10 2 times in pulse high time (4*16*16)
+13: envelope control
+ 0-3 one time falling
+ 4-7 one time rising
+ 8 falling
+ 9 one time falling
+ a starts with down falling, rising; same falling time, but double/longer cycle
+ b one time falling, on
+ c rising
+ d one time rising, on
+ e rising, falling (double cycle before restart)
+ f one time rising
+ bit 0: once only
+ bit 1: full tone
+ bit 2: start rising (else falling)
+ bit 3:
+*/
+
+#define JOY_DATA        0x4400
+
+#define JOY_DATA_UP     0x01
+#define JOY_DATA_DOWN   0x02
+#define JOY_DATA_LEFT   0x04
+#define JOY_DATA_RIGHT  0x08
+#define JOY_DATA_FIRE_A 0x10
+#define JOY_DATA_FIRE_B 0x20
+#define JOY_DATA_START  0x40
+#define JOY_DATA_SELECT 0x80
+
+/* LCD
+
+    resolution 160x152 in 4 greys/greens
+    2 256x256 sized bitplanes (2x 8kbyte ram)
+*/
+#define LCD_BASE        0x5000
+
+#define LCD_MODE        0x5001
+/*
+ bit 3..0 (from zeropage 15)
+        bit 0 set no normal screen display, seldom scrolling effects on screen;
+        bytes written to somewhat actual display refresh position!?
+    bytes read "random"
+  bit 1,2,3 no effect
+ bit 4 swaps plane intensity
+ bit 5 ? display effect
+ bit 6 on y auto increment (else auto x increment), reading
+ bit 7 ? lcd flickering
+*/
+#define LCD_MODE_INC_Y  0x40
+
+#define LCD_XPOS        0x5002  /* smooth scrolling X */
+#define LCD_YPOS        0x5003  /* smooth scrolling Y */
+/*
+ smooth scrolling until $c8 with 200 limit
+ after 200 display if ((value & 0xf) < 8) display of (value & 0xf) - 8
+ chaos lines from value + current line from plane 2 only then lines starting
+ with zero (problematic 200 limit/overrun implementation!?)
+*/
+#define LCD_X           0x5004  /* x-addr */
+/*
+ bit 5,6 no effect
+ bit 7 0 1st/1 2nd bitplane
+*/
+#define LCD_XPOS_PLANE1 0x00
+#define LCD_XPOS_PLANE2 0x80
+
+#define LCD_Y           0x5005  /* y-addr */
+
+#define LCD_READ        0x5006  /* read from RAM (no auto inc?) */
+#define LCD_DATA        0x5007  /* write to RAM */
+
+
+/* constants for the conio implementation */
+#define COLOR_BLACK     0x03
+#define COLOR_WHITE     0x00
+
+#define CH_HLINE                1
+#define CH_VLINE                2
+#define CH_CROSS                3
+#define CH_ULCORNER             4
+#define CH_URCORNER             5
+#define CH_LLCORNER             6
+#define CH_LRCORNER             7
+#define CH_TTEE                 8
+#define CH_BTEE                 9
+
+#define CH_RTEE                 11
+#define CH_LTEE                 12
+
+#define CH_ENTER                13
+#define CH_PI                   18
+
+#define TV_NTSC                 0
+#define TV_PAL                  1
+#define TV_OTHER                2
+
+/* No support for dynamically loadable drivers */
+#define DYN_DRV         0
+
+/* The addresses of the static drivers */
+extern void gamate_stdjoy_joy[];   /* Referred to by joy_static_stddrv[] */
+
+#define JOY_FIRE_B              5
+#define JOY_START               6
+#define JOY_SELECT              7
+
+void waitvblank (void);
+/* Wait for the vertical blanking */
 
+/* NOTE: all Gamate are "NTSC" */
+#define get_tv()                TV_NTSC
+/* Return the video mode the machine is using. */
 
 /* End of gamate.h */
 #endif
diff --git a/libsrc/gamate/_scrsize.s b/libsrc/gamate/_scrsize.s
new file mode 100644 (file)
index 0000000..f26f22d
--- /dev/null
@@ -0,0 +1,16 @@
+;
+; Screen size variables
+;
+        .include        "gamate.inc"
+
+        .export screensize
+screensize:
+        ldx     xsize
+        ldy     ysize
+        rts
+
+.rodata
+        .export xsize, ysize
+
+xsize:  .byte   charsperline
+ysize:  .byte   screenrows
diff --git a/libsrc/gamate/chline.s b/libsrc/gamate/chline.s
new file mode 100644 (file)
index 0000000..2d96c9d
--- /dev/null
@@ -0,0 +1,32 @@
+;
+; Ullrich von Bassewitz, 08.08.1998
+;
+; void chlinexy (unsigned char x, unsigned char y, unsigned char length);
+; void chline (unsigned char length);
+;
+
+        .export         _chlinexy, _chline
+        .import         popa, _gotoxy, cputdirect
+        .importzp       tmp1
+
+        .include        "gamate.inc"
+
+_chlinexy:
+        pha                     ; Save the length
+        jsr     popa            ; Get y
+        jsr     _gotoxy         ; Call this one, will pop params
+        pla                     ; Restore the length
+
+_chline:
+        cmp     #0              ; Is the length zero?
+        beq     L9              ; Jump if done
+        sta     tmp1
+L1:     lda     #CH_HLINE       ; Horizontal line, screen code
+        jsr     cputdirect      ; Direct output
+        dec     tmp1
+        bne     L1
+L9:     rts
+
+
+
+
diff --git a/libsrc/gamate/clock.s b/libsrc/gamate/clock.s
new file mode 100644 (file)
index 0000000..223c079
--- /dev/null
@@ -0,0 +1,33 @@
+;
+; clock_t clock (void);
+;
+
+        .include        "gamate.inc"
+        .include        "extzp.inc"
+
+        .export         _clock
+        .forceimport    ticktock
+        .importzp       sreg
+        .constructor    initclock
+
+
+.proc   _clock
+
+        lda     tickcount+3
+        sta     sreg+1
+        lda     tickcount+2
+        sta     sreg
+        ldx     tickcount+1
+        lda     tickcount
+        rts
+
+.endproc
+
+        .segment        "INIT"
+initclock:
+        lda     #0
+        ldx     #3
+@lp:    sta     tickcount,x
+        dex
+        bpl     @lp
+        rts
diff --git a/libsrc/gamate/clrscr.s b/libsrc/gamate/clrscr.s
new file mode 100644 (file)
index 0000000..c96fc4e
--- /dev/null
@@ -0,0 +1,35 @@
+
+        .include        "gamate.inc"
+        .include        "extzp.inc"
+
+        .import plot
+        .export _clrscr
+_clrscr:
+        ldy     #$0
+rowloop:
+        sty     LCD_X
+
+        lda     #0
+        sta     LCD_Y
+
+        ldx     #$0
+colloop:
+        sta     LCD_DATA
+
+        inx
+        bne     colloop
+
+        iny
+        bne     rowloop
+
+; Go to the home position.
+
+        sta     CURS_X
+        sta     CURS_Y
+        jmp     plot
+
+;-------------------------------------------------------------------------------
+; force the init constructor to be imported
+
+                .import initconio
+conio_init      = initconio
diff --git a/libsrc/gamate/color.s b/libsrc/gamate/color.s
new file mode 100644 (file)
index 0000000..07bc25a
--- /dev/null
@@ -0,0 +1,34 @@
+;
+; 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
+
+        .include        "gamate.inc"
+        .include        "extzp.inc"
+
+_textcolor:
+        ldx     CHARCOLOR       ; get old value
+        sta     CHARCOLOR       ; set new value
+        txa
+        rts
+
+_bgcolor:
+        ldx     BGCOLOR         ; get old value
+        sta     BGCOLOR         ; set new value
+        txa
+        rts
+
+_bordercolor:
+        lda     #0
+        tax
+        rts
+
+;-------------------------------------------------------------------------------
+; force the init constructor to be imported
+
+        .import initconio
+conio_init      = initconio
diff --git a/libsrc/gamate/conio.s b/libsrc/gamate/conio.s
new file mode 100644 (file)
index 0000000..4840b37
--- /dev/null
@@ -0,0 +1,31 @@
+        .include        "gamate.inc"
+        .include        "extzp.inc"
+
+        .import         colors
+        .importzp       ptr1, tmp1
+
+        .constructor    initconio
+
+        .macpack        longbranch
+
+        .segment        "INIT"
+initconio:
+        ; FIXME
+        lda     #0
+        sta     LCD_XPOS
+        sta     LCD_YPOS
+
+        lda     #LCD_MODE_INC_Y
+        sta     LCD_MODE
+
+        lda     #COLOR_BLACK
+        sta     CHARCOLOR
+        lda     #COLOR_WHITE
+        sta     BGCOLOR
+        rts
+
+        .segment        "RODATA"
+
+        .export         fontdata
+fontdata:
+        .include        "vga.inc"
diff --git a/libsrc/gamate/cputc.s b/libsrc/gamate/cputc.s
new file mode 100644 (file)
index 0000000..0ebd659
--- /dev/null
@@ -0,0 +1,153 @@
+;
+; void cputcxy (unsigned char x, unsigned char y, char c);
+; void cputc (char c);
+;
+
+        .export         _cputcxy, _cputc, cputdirect, putchar
+        .export         newline, plot
+        .import         popa, _gotoxy
+        .import         PLOT
+        .import         xsize
+        .import         fontdata
+        .import         _plotlo
+
+        .importzp       tmp3,tmp4
+        .importzp       ptr3
+
+        .include        "gamate.inc"
+        .include        "extzp.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: cmp     #$0d            ; CR?
+        bne     L1
+        lda     #0
+        sta     CURS_X
+        beq     plot            ; Recalculate pointers
+
+L1:     cmp     #$0a            ; LF?
+        beq     newline         ; Recalculate pointers
+
+; Printable char of some sort
+
+cputdirect:
+        jsr     putchar         ; Write the character to the screen
+
+; Advance cursor position
+
+advance:
+        ldy     CURS_X
+        iny
+        cpy     xsize
+        bne     L3
+        jsr     newline         ; new line
+        ldy     #0              ; + cr
+L3:     sty     CURS_X
+        jmp     plot
+
+newline:
+        inc     CURS_Y
+
+; Set cursor position, calculate RAM pointers
+
+plot:   ldy     CURS_X
+        ldx     CURS_Y
+        clc
+        jmp     PLOT            ; Set the new cursor
+
+; Write one character to the screen without doing anything else, return X
+; position in Y
+
+putchar:
+
+; FIXME
+;        ora     RVS             ; Set revers bit
+
+;        sty     temp_y
+;        stx     temp_x
+;        sta     temp_a
+
+;        lda     temp_a
+
+        sta     ptr3
+
+        txa
+        pha
+
+        lda     #0
+        sta     ptr3+1
+        ; * 8
+        asl     ptr3
+        rol     ptr3+1
+        asl     ptr3
+        rol     ptr3+1
+        asl     ptr3
+        rol     ptr3+1
+
+        lda     ptr3
+        clc
+        adc     #<(fontdata-$f8)
+        sta     ptr3
+        lda     ptr3+1
+        adc     #>(fontdata-$f8)
+        sta     ptr3+1
+
+        lda     CHARCOLOR
+        and     #1
+        beq     @skip_plane1
+
+        lda     #LCD_XPOS_PLANE1
+        clc
+        adc     CURS_X
+        sta     LCD_X
+
+        ldy     #$f8
+@copylp1:
+        lda     (ptr3),y
+        eor     RVS
+        sta     LCD_DATA
+        iny
+        bne     @copylp1
+
+@skip_plane1:
+
+        lda     CHARCOLOR
+        and     #2
+        beq     @skip_plane2
+
+        lda     #LCD_XPOS_PLANE2
+        clc
+        adc     CURS_X
+        sta     LCD_X
+
+        ldx     CURS_Y
+        lda     _plotlo,x
+        sta     LCD_Y
+
+        ldy     #$f8
+@copylp2:
+        lda     (ptr3),y
+        eor     RVS
+        sta     LCD_DATA
+        iny
+        bne     @copylp2
+
+@skip_plane2:
+
+
+        pla
+        tax
+        ldy     CURS_X
+        rts
+
+;-------------------------------------------------------------------------------
+; force the init constructor to be imported
+
+        .import initconio
+conio_init      = initconio
index 66ff8054c704f1307e671948c8e033fb5d6f2897..b54d8ade1137fcb6fa2a76d178b00ad24f678223 100644 (file)
@@ -1,16 +1,78 @@
 
         .export         __STARTUP__ : absolute = 1      ; Mark as startup
 
-        .import reset, irq, nmi ; FIXME
+        .import         initlib, donelib, callmain
+        .import         push0, _main, zerobss, copydata
 
+        .import         IRQStub
+
+        ; Linker generated symbols
+        .import         __RAM_START__, __RAM_SIZE__
+        .import         __ROM_START__, __ROM_SIZE__
+        .import         __STARTUP_LOAD__,__STARTUP_RUN__, __STARTUP_SIZE__
+        .import         __CODE_LOAD__,__CODE_RUN__, __CODE_SIZE__
+        .import         __RODATA_LOAD__,__RODATA_RUN__, __RODATA_SIZE__
+
+        .include        "zeropage.inc"
+        .include        "gamate.inc"
 
         .segment "STARTUP"
 
-checksum:
-        .word 0
-        .byte 1, 0, 1
-        .byte "COPYRIGHT BIT CORPORATION", 0, $ff
+        .word 0                                         ; +00 checksum from 7000-7fff (simple 8bit adds)
+        .byte 1, 0, 1                                   ; +02 flags
+        .byte "COPYRIGHT BIT CORPORATION", 0, $ff       ; +05 copyright
+        ; system vectors
+        jmp     reset                                   ; +20 reset entry
+        jmp     nmi                                     ; +23 nmi entry
+        jmp     IRQStub                                 ; +26 irq entry (135 hz)
+
+;-------------------------------------------------------------------------------
+reset:
+        ; setup the CPU and System-IRQ
+
+        ; Initialize CPU
+        sei
+        cld
+
+        ; Setup stack and memory mapping
+        ldx     #$FF            ; Stack top ($01FF)
+        txs
+
+        ; Clear the BSS data
+        jsr     zerobss
+
+        ; Copy the .data segment to RAM
+        jsr     copydata
+
+        ; setup the stack
+        lda     #<(__RAM_START__+__RAM_SIZE__)
+        sta     sp
+        lda     #>(__RAM_START__+__RAM_SIZE__)
+        sta     sp + 1
+
+        ; Call module constructors
+        jsr     initlib
+
+        cli     ; allow IRQ only after constructors have run
+
+        ; Pass an empty command line
+        jsr     push0           ; argc
+        jsr     push0           ; argv
+
+        ldy     #4              ; Argument size
+        jsr     _main           ; call the users code
+
+        ; Call module destructors. This is also the _exit entry.
+_exit:
+        jsr     donelib         ; Run module destructors
+
+        ; reset (start over)
         jmp     reset
-        jmp     nmi
-        jmp     irq
 
+        .export initmainargs
+initmainargs:
+        rts
+
+;-------------------------------------------------------------------------------
+nmi:
+        rts
diff --git a/libsrc/gamate/ctype.s b/libsrc/gamate/ctype.s
new file mode 100644 (file)
index 0000000..fa9a65c
--- /dev/null
@@ -0,0 +1,161 @@
+;
+; Stefan Haubenthal with minor changes from Ullrich von Bassewitz, 2003-05-02
+;
+; Character specification table.
+;
+
+        .include        "ctype.inc"
+
+; The tables are readonly, put them into the rodata segment
+
+.rodata
+
+; The following 256 byte wide table specifies attributes for the isxxx type
+; of functions. Doing it by a table means some overhead in space, but it
+; has major advantages:
+;
+;   * It is fast. If it were'nt for the slow parameter passing of cc65, one
+;     could even define macros for the isxxx functions (this is usually
+;     done on other platforms).
+;
+;   * It is highly portable. The only unportable part is the table itself,
+;     all real code goes into the common library.
+;
+;   * We save some code in the isxxx functions.
+
+
+__ctype:
+        .repeat 2
+        .byte   CT_CTRL                 ;   0/00 ___ctrl_@___
+        .byte   CT_CTRL                 ;   1/01 ___ctrl_A___
+        .byte   CT_CTRL                 ;   2/02 ___ctrl_B___
+        .byte   CT_CTRL                 ;   3/03 ___ctrl_C___
+        .byte   CT_CTRL                 ;   4/04 ___ctrl_D___
+        .byte   CT_CTRL                 ;   5/05 ___ctrl_E___
+        .byte   CT_CTRL                 ;   6/06 ___ctrl_F___
+        .byte   CT_CTRL                 ;   7/07 ___ctrl_G___
+        .byte   CT_CTRL                 ;   8/08 ___ctrl_H___
+        .byte   CT_CTRL | CT_OTHER_WS | CT_SPACE_TAB
+                                        ;   9/09 ___ctrl_I___
+        .byte   CT_CTRL | CT_OTHER_WS   ;  10/0a ___ctrl_J___
+        .byte   CT_CTRL | CT_OTHER_WS   ;  11/0b ___ctrl_K___
+        .byte   CT_CTRL | CT_OTHER_WS   ;  12/0c ___ctrl_L___
+        .byte   CT_CTRL | CT_OTHER_WS   ;  13/0d ___ctrl_M___
+        .byte   CT_CTRL                 ;  14/0e ___ctrl_N___
+        .byte   CT_CTRL                 ;  15/0f ___ctrl_O___
+        .byte   CT_CTRL                 ;  16/10 ___ctrl_P___
+        .byte   CT_CTRL                 ;  17/11 ___ctrl_Q___
+        .byte   CT_CTRL                 ;  18/12 ___ctrl_R___
+        .byte   CT_CTRL                 ;  19/13 ___ctrl_S___
+        .byte   CT_CTRL                 ;  20/14 ___ctrl_T___
+        .byte   CT_CTRL                 ;  21/15 ___ctrl_U___
+        .byte   CT_CTRL                 ;  22/16 ___ctrl_V___
+        .byte   CT_CTRL                 ;  23/17 ___ctrl_W___
+        .byte   CT_CTRL                 ;  24/18 ___ctrl_X___
+        .byte   CT_CTRL                 ;  25/19 ___ctrl_Y___
+        .byte   CT_CTRL                 ;  26/1a ___ctrl_Z___
+        .byte   CT_CTRL                 ;  27/1b ___ctrl_[___
+        .byte   CT_CTRL                 ;  28/1c ___ctrl_\___
+        .byte   CT_CTRL                 ;  29/1d ___ctrl_]___
+        .byte   CT_CTRL                 ;  30/1e ___ctrl_^___
+        .byte   CT_CTRL                 ;  31/1f ___ctrl_____
+        .byte   CT_SPACE | CT_SPACE_TAB ;  32/20 ___SPACE___
+        .byte   CT_NONE                 ;  33/21 _____!_____
+        .byte   CT_NONE                 ;  34/22 _____"_____
+        .byte   CT_NONE                 ;  35/23 _____#_____
+        .byte   CT_NONE                 ;  36/24 _____$_____
+        .byte   CT_NONE                 ;  37/25 _____%_____
+        .byte   CT_NONE                 ;  38/26 _____&_____
+        .byte   CT_NONE                 ;  39/27 _____'_____
+        .byte   CT_NONE                 ;  40/28 _____(_____
+        .byte   CT_NONE                 ;  41/29 _____)_____
+        .byte   CT_NONE                 ;  42/2a _____*_____
+        .byte   CT_NONE                 ;  43/2b _____+_____
+        .byte   CT_NONE                 ;  44/2c _____,_____
+        .byte   CT_NONE                 ;  45/2d _____-_____
+        .byte   CT_NONE                 ;  46/2e _____._____
+        .byte   CT_NONE                 ;  47/2f _____/_____
+        .byte   CT_DIGIT | CT_XDIGIT    ;  48/30 _____0_____
+        .byte   CT_DIGIT | CT_XDIGIT    ;  49/31 _____1_____
+        .byte   CT_DIGIT | CT_XDIGIT    ;  50/32 _____2_____
+        .byte   CT_DIGIT | CT_XDIGIT    ;  51/33 _____3_____
+        .byte   CT_DIGIT | CT_XDIGIT    ;  52/34 _____4_____
+        .byte   CT_DIGIT | CT_XDIGIT    ;  53/35 _____5_____
+        .byte   CT_DIGIT | CT_XDIGIT    ;  54/36 _____6_____
+        .byte   CT_DIGIT | CT_XDIGIT    ;  55/37 _____7_____
+        .byte   CT_DIGIT | CT_XDIGIT    ;  56/38 _____8_____
+        .byte   CT_DIGIT | CT_XDIGIT    ;  57/39 _____9_____
+        .byte   CT_NONE                 ;  58/3a _____:_____
+        .byte   CT_NONE                 ;  59/3b _____;_____
+        .byte   CT_NONE                 ;  60/3c _____<_____
+        .byte   CT_NONE                 ;  61/3d _____=_____
+        .byte   CT_NONE                 ;  62/3e _____>_____
+        .byte   CT_NONE                 ;  63/3f _____?_____
+
+        .byte   CT_NONE                 ;  64/40 _____@_____
+        .byte   CT_UPPER | CT_XDIGIT    ;  65/41 _____A_____
+        .byte   CT_UPPER | CT_XDIGIT    ;  66/42 _____B_____
+        .byte   CT_UPPER | CT_XDIGIT    ;  67/43 _____C_____
+        .byte   CT_UPPER | CT_XDIGIT    ;  68/44 _____D_____
+        .byte   CT_UPPER | CT_XDIGIT    ;  69/45 _____E_____
+        .byte   CT_UPPER | CT_XDIGIT    ;  70/46 _____F_____
+        .byte   CT_UPPER                ;  71/47 _____G_____
+        .byte   CT_UPPER                ;  72/48 _____H_____
+        .byte   CT_UPPER                ;  73/49 _____I_____
+        .byte   CT_UPPER                ;  74/4a _____J_____
+        .byte   CT_UPPER                ;  75/4b _____K_____
+        .byte   CT_UPPER                ;  76/4c _____L_____
+        .byte   CT_UPPER                ;  77/4d _____M_____
+        .byte   CT_UPPER                ;  78/4e _____N_____
+        .byte   CT_UPPER                ;  79/4f _____O_____
+        .byte   CT_UPPER                ;  80/50 _____P_____
+        .byte   CT_UPPER                ;  81/51 _____Q_____
+        .byte   CT_UPPER                ;  82/52 _____R_____
+        .byte   CT_UPPER                ;  83/53 _____S_____
+        .byte   CT_UPPER                ;  84/54 _____T_____
+        .byte   CT_UPPER                ;  85/55 _____U_____
+        .byte   CT_UPPER                ;  86/56 _____V_____
+        .byte   CT_UPPER                ;  87/57 _____W_____
+        .byte   CT_UPPER                ;  88/58 _____X_____
+        .byte   CT_UPPER                ;  89/59 _____Y_____
+        .byte   CT_UPPER                ;  90/5a _____Z_____
+        .byte   CT_NONE                 ;  91/5b _____[_____
+        .byte   CT_NONE                 ;  92/5c _____\_____
+        .byte   CT_NONE                 ;  93/5d _____]_____
+        .byte   CT_NONE                 ;  94/5e _____^_____
+        .byte   CT_NONE                 ;  95/5f _UNDERLINE_
+        .byte   CT_NONE                 ;  96/60 ___grave___
+        .byte   CT_LOWER | CT_XDIGIT    ;  97/61 _____a_____
+        .byte   CT_LOWER | CT_XDIGIT    ;  98/62 _____b_____
+        .byte   CT_LOWER | CT_XDIGIT    ;  99/63 _____c_____
+        .byte   CT_LOWER | CT_XDIGIT    ; 100/64 _____d_____
+        .byte   CT_LOWER | CT_XDIGIT    ; 101/65 _____e_____
+        .byte   CT_LOWER | CT_XDIGIT    ; 102/66 _____f_____
+        .byte   CT_LOWER                ; 103/67 _____g_____
+        .byte   CT_LOWER                ; 104/68 _____h_____
+        .byte   CT_LOWER                ; 105/69 _____i_____
+        .byte   CT_LOWER                ; 106/6a _____j_____
+        .byte   CT_LOWER                ; 107/6b _____k_____
+        .byte   CT_LOWER                ; 108/6c _____l_____
+        .byte   CT_LOWER                ; 109/6d _____m_____
+        .byte   CT_LOWER                ; 110/6e _____n_____
+        .byte   CT_LOWER                ; 111/6f _____o_____
+        .byte   CT_LOWER                ; 112/70 _____p_____
+        .byte   CT_LOWER                ; 113/71 _____q_____
+        .byte   CT_LOWER                ; 114/72 _____r_____
+        .byte   CT_LOWER                ; 115/73 _____s_____
+        .byte   CT_LOWER                ; 116/74 _____t_____
+        .byte   CT_LOWER                ; 117/75 _____u_____
+        .byte   CT_LOWER                ; 118/76 _____v_____
+        .byte   CT_LOWER                ; 119/77 _____w_____
+        .byte   CT_LOWER                ; 120/78 _____x_____
+        .byte   CT_LOWER                ; 121/79 _____y_____
+        .byte   CT_LOWER                ; 122/7a _____z_____
+        .byte   CT_NONE                 ; 123/7b _____{_____
+        .byte   CT_NONE                 ; 124/7c _____|_____
+        .byte   CT_NONE                 ; 125/7d _____}_____
+        .byte   CT_NONE                 ; 126/7e _____~_____
+        .byte   CT_OTHER_WS             ; 127/7f ____DEL____
+        .endrepeat
+
+
diff --git a/libsrc/gamate/cvline.s b/libsrc/gamate/cvline.s
new file mode 100644 (file)
index 0000000..b228908
--- /dev/null
@@ -0,0 +1,32 @@
+;
+; Ullrich von Bassewitz, 08.08.1998
+;
+; void cvlinexy (unsigned char x, unsigned char y, unsigned char length);
+; void cvline (unsigned char length);
+;
+
+        .export         _cvlinexy, _cvline
+        .import         popa, _gotoxy, putchar, newline
+        .importzp       tmp1
+
+        .include        "gamate.inc"
+
+_cvlinexy:
+        pha                     ; Save the length
+        jsr     popa            ; Get y
+        jsr     _gotoxy         ; Call this one, will pop params
+        pla                     ; Restore the length and run into _cvline
+
+_cvline:
+        cmp     #0              ; Is the length zero?
+        beq     L9              ; Jump if done
+        sta     tmp1
+L1:     lda     #CH_VLINE       ; Vertical bar
+        jsr     putchar         ; Write, no cursor advance
+        jsr     newline         ; Advance cursor to next line
+        dec     tmp1
+        bne     L1
+L9:     rts
+
+
+
diff --git a/libsrc/gamate/extzp.inc b/libsrc/gamate/extzp.inc
new file mode 100644 (file)
index 0000000..3e24d6e
--- /dev/null
@@ -0,0 +1,16 @@
+;
+; extzp.inc for the Gamate
+;
+; Groepaz/Hitmen, 2015-11-19
+;
+; Assembler include file that imports the runtime zero page locations used
+; by the Gamate runtime, ready for usage in asm code.
+;
+
+        .global         CURS_X: zp
+        .global         CURS_Y: zp
+        .global         CHARCOLOR: zp
+        .global         RVS: zp
+        .global         BGCOLOR: zp
+        .global         tickcount: zp
+
diff --git a/libsrc/gamate/extzp.s b/libsrc/gamate/extzp.s
new file mode 100644 (file)
index 0000000..d3189dc
--- /dev/null
@@ -0,0 +1,16 @@
+;
+; Groepaz/Hitmen, 2015-11-19
+;
+; zeropage locations for exclusive use by the library
+;
+
+        .include "extzp.inc"
+
+        .segment "EXTZP" : zeropage
+
+CURS_X:         .res 1
+CURS_Y:         .res 1
+CHARCOLOR:      .res 1
+RVS:            .res 1
+BGCOLOR:        .res 1
+tickcount:      .res 4
diff --git a/libsrc/gamate/gotoxy.s b/libsrc/gamate/gotoxy.s
new file mode 100644 (file)
index 0000000..407da1f
--- /dev/null
@@ -0,0 +1,22 @@
+;
+; void gotoxy (unsigned char x, unsigned char y);
+;
+
+        .export         _gotoxy
+        .import         popa, plot
+
+        .include        "gamate.inc"
+        .include        "extzp.inc"
+
+_gotoxy:
+        sta     CURS_Y          ; Set Y
+        jsr     popa            ; Get X
+        sta     CURS_X          ; Set X
+        jmp     plot            ; Set the cursor position
+
+;-------------------------------------------------------------------------------
+; force the init constructor to be imported
+
+        .import initconio
+conio_init      = initconio
+
diff --git a/libsrc/gamate/irq.s b/libsrc/gamate/irq.s
new file mode 100644 (file)
index 0000000..4adbcb4
--- /dev/null
@@ -0,0 +1,51 @@
+;
+; IRQ handling (Gamate version)
+;
+
+        .export         initirq, doneirq, IRQStub
+
+        .import         __INTERRUPTOR_COUNT__, callirq_y
+
+        .include        "gamate.inc"
+        .include        "extzp.inc"
+
+; ------------------------------------------------------------------------
+.segment        "INIT"
+
+; a constructor
+;
+initirq:
+        rts
+
+; ------------------------------------------------------------------------
+.code
+
+; a destructor
+;
+doneirq:
+        rts
+
+; ------------------------------------------------------------------------
+; 256*32 interrupts in about 1minute 60s = 136hz
+; -> guess 16384 clock cycles = 135,28hz (might be audio signal 1/512?)
+
+IRQStub:
+        pha
+        tya
+        pha
+
+        ldy     #<(__INTERRUPTOR_COUNT__ * 2)
+        beq     @L1
+
+        txa
+        pha
+
+        jsr     callirq_y
+
+        pla
+        tax
+
+@L1:    pla
+        tay
+        pla
+        rts
diff --git a/libsrc/gamate/joy/gamate-stdjoy.s b/libsrc/gamate/joy/gamate-stdjoy.s
new file mode 100644 (file)
index 0000000..8b18bae
--- /dev/null
@@ -0,0 +1,95 @@
+
+;
+; Standard joystick driver for the Gamate
+;
+
+        .include        "joy-kernel.inc"
+        .include        "joy-error.inc"
+        .include        "gamate.inc"
+
+        .macpack        module
+
+
+; ------------------------------------------------------------------------
+; Header. Includes jump table
+
+        module_header   _gamate_stdjoy_joy
+
+; Driver signature
+
+        .byte   $6A, $6F, $79           ; "joy"
+        .byte   JOY_API_VERSION         ; Driver API version number
+
+; Library reference
+
+        .addr   $0000
+
+; 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_A
+        .byte   $20                     ; JOY_FIRE_B
+        .byte   $80                     ; JOY_SELECT
+        .byte   $40                     ; JOY_START
+
+; Jump table.
+
+        .addr   INSTALL
+        .addr   UNINSTALL
+        .addr   COUNT
+        .addr   READJOY
+        .addr   0                       ; IRQ entry unused
+
+; ------------------------------------------------------------------------
+; Constants
+
+JOY_COUNT       = 1             ; Number of joysticks we support
+
+
+.code
+
+; ------------------------------------------------------------------------
+; INSTALL routine. Is called after the driver is loaded into memory. If
+; possible, check if the hardware is present and determine the amount of
+; memory available.
+; Must return an JOY_ERR_xx code in a/x.
+;
+
+INSTALL:
+        lda     #<JOY_ERR_OK
+        ldx     #>JOY_ERR_OK
+
+;        rts                     ; Run into UNINSTALL instead
+
+; ------------------------------------------------------------------------
+; DEINSTALL 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.
+;
+;unsigned char __fastcall__ joy_count (void);
+
+COUNT:
+        lda     #<JOY_COUNT
+        ldx     #>JOY_COUNT
+        rts
+
+; ------------------------------------------------------------------------
+; READ: Read a particular joystick passed in A.
+;
+;unsigned char __fastcall__ joy_read (unsigned char joystick);
+
+READJOY:
+        lda     JOY_DATA
+        ldx     #0
+        rts
+
diff --git a/libsrc/gamate/joy_stat_stddrv.s b/libsrc/gamate/joy_stat_stddrv.s
new file mode 100644 (file)
index 0000000..7501645
--- /dev/null
@@ -0,0 +1,14 @@
+;
+; Address of the static standard joystick driver
+;
+; Oliver Schmidt, 2012-11-01
+;
+; const void joy_static_stddrv[];
+;
+
+        .export         _joy_static_stddrv
+        .import         _gamate_stdjoy_joy
+
+.rodata
+
+_joy_static_stddrv      := _gamate_stdjoy_joy
diff --git a/libsrc/gamate/joy_stddrv.s b/libsrc/gamate/joy_stddrv.s
new file mode 100644 (file)
index 0000000..b830d8d
--- /dev/null
@@ -0,0 +1,13 @@
+;
+; Name of the standard joystick driver
+;
+; Oliver Schmidt, 2012-11-01
+;
+; const char joy_stddrv[];
+;
+
+        .export         _joy_stddrv
+
+.rodata
+
+_joy_stddrv:    .asciiz "gamate-stdjoy.joy"
diff --git a/libsrc/gamate/kplot.s b/libsrc/gamate/kplot.s
new file mode 100644 (file)
index 0000000..9091109
--- /dev/null
@@ -0,0 +1,32 @@
+
+        .export         PLOT
+
+        .include        "gamate.inc"
+        .include        "extzp.inc"
+
+PLOT:
+        bcs     @getpos
+
+        sty     LCD_X
+        ;clc                    ; already cleared
+        lda     _plotlo,x
+        sta     LCD_Y
+
+@getpos:
+        ldx     CURS_Y
+        ldy     CURS_X
+        rts
+
+        .export         _plotlo
+        .rodata
+
+_plotlo:
+        .repeat screenrows,line
+        .byte   <($0000+(line*$8))
+        .endrepeat
+
+;-------------------------------------------------------------------------------
+; force the init constructor to be imported
+
+        .import initconio
+conio_init      = initconio
diff --git a/libsrc/gamate/libref.s b/libsrc/gamate/libref.s
new file mode 100644 (file)
index 0000000..e4afa7e
--- /dev/null
@@ -0,0 +1,8 @@
+;
+; Oliver Schmidt, 2013-05-31
+;
+
+        .export         joy_libref
+        .import         _exit
+
+joy_libref      := _exit
diff --git a/libsrc/gamate/revers.s b/libsrc/gamate/revers.s
new file mode 100644 (file)
index 0000000..3b237e4
--- /dev/null
@@ -0,0 +1,28 @@
+
+        .include        "gamate.inc"
+        .include        "extzp.inc"
+
+        .export _revers
+
+.proc   _revers
+
+        ldx     #$00            ; Assume revers off
+        tay                     ; Test onoff
+        beq     L1              ; Jump if off
+        ldx     #$ff            ; 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
+
+        .import         initconio
+conio_init      = initconio
diff --git a/libsrc/gamate/ticktock.s b/libsrc/gamate/ticktock.s
new file mode 100644 (file)
index 0000000..81f64dc
--- /dev/null
@@ -0,0 +1,17 @@
+        .interruptor    ticktock, 24
+
+        .include        "gamate.inc"
+        .include        "extzp.inc"
+
+ticktock:
+
+        ; Increment the system tick counter.
+        inc     tickcount
+        bne     @s1
+        inc     tickcount+1
+        bne     @s1
+        inc     tickcount+2
+        bne     @s1
+        inc     tickcount+3
+@s1:
+        rts
diff --git a/libsrc/gamate/vga.inc b/libsrc/gamate/vga.inc
new file mode 100644 (file)
index 0000000..f605258
--- /dev/null
@@ -0,0 +1,228 @@
+
+; VGA charset for the PC-Engine conio implementation
+
+        .byte   $00, $00, $00, $00, $00, $00, $00, $00
+        ; 1
+        .byte   %00000000
+        .byte   %00000000
+        .byte   %00000000
+        .byte   %11111111
+        .byte   %00000000
+        .byte   %00000000
+        .byte   %00000000
+        .byte   %00000000
+        ; 2
+        .byte   %00010000
+        .byte   %00010000
+        .byte   %00010000
+        .byte   %00010000
+        .byte   %00010000
+        .byte   %00010000
+        .byte   %00010000
+        .byte   %00010000
+        ; 3
+        .byte   %00010000
+        .byte   %00010000
+        .byte   %00010000
+        .byte   %11111111
+        .byte   %00010000
+        .byte   %00010000
+        .byte   %00010000
+        .byte   %00010000
+        ; 4
+        .byte   %00000000
+        .byte   %00000000
+        .byte   %00000000
+        .byte   %00011111
+        .byte   %00010000
+        .byte   %00010000
+        .byte   %00010000
+        .byte   %00010000
+        ; 5
+        .byte   %00000000
+        .byte   %00000000
+        .byte   %00000000
+        .byte   %11110000
+        .byte   %00010000
+        .byte   %00010000
+        .byte   %00010000
+        .byte   %00010000
+        ; 6
+        .byte   %00010000
+        .byte   %00010000
+        .byte   %00010000
+        .byte   %00011111
+        .byte   %00000000
+        .byte   %00000000
+        .byte   %00000000
+        .byte   %00000000
+        ; 7
+        .byte   %00010000
+        .byte   %00010000
+        .byte   %00010000
+        .byte   %11110000
+        .byte   %00000000
+        .byte   %00000000
+        .byte   %00000000
+        .byte   %00000000
+        ; 8
+        .byte   %00000000
+        .byte   %00000000
+        .byte   %00000000
+        .byte   %11111111
+        .byte   %00010000
+        .byte   %00010000
+        .byte   %00010000
+        .byte   %00010000
+        ; 9
+        .byte   %00010000
+        .byte   %00010000
+        .byte   %00010000
+        .byte   %11111111
+        .byte   %00000000
+        .byte   %00000000
+        .byte   %00000000
+        .byte   %00000000
+        ; 10 (LF)
+        .byte   %00000000
+        .byte   %00000000
+        .byte   %00000000
+        .byte   %00000000
+        .byte   %00000000
+        .byte   %00000000
+        .byte   %00000000
+        .byte   %00000000
+        ; 11
+        .byte   %00010000
+        .byte   %00010000
+        .byte   %00010000
+        .byte   %11110000
+        .byte   %00010000
+        .byte   %00010000
+        .byte   %00010000
+        .byte   %00010000
+        ; 12
+        .byte   %00010000
+        .byte   %00010000
+        .byte   %00010000
+        .byte   %00011111
+        .byte   %00010000
+        .byte   %00010000
+        .byte   %00010000
+        .byte   %00010000
+
+        .byte   $3F, $33, $3F, $30, $30, $70, $F0, $E0
+        .byte   $7F, $63, $7F, $63, $63, $67, $E6, $C0
+        .byte   $99, $5A, $3C, $E7, $E7, $3C, $5A, $99
+        .byte   $80, $E0, $F8, $FE, $F8, $E0, $80, $00
+        .byte   $02, $0E, $3E, $FE, $3E, $0E, $02, $00
+        .byte   $18, $3C, $7E, $18, $18, $7E, $3C, $18
+        .byte   $66, $66, $66, $66, $66, $00, $66, $00
+        .byte   $7F, $DB, $DB, $7B, $1B, $1B, $1B, $00
+        .byte   $3E, $63, $38, $6C, $6C, $38, $CC, $78
+        .byte   $00, $00, $00, $00, $7E, $7E, $7E, $00
+        .byte   $18, $3C, $7E, $18, $7E, $3C, $18, $FF
+        .byte   $18, $3C, $7E, $18, $18, $18, $18, $00
+        .byte   $18, $18, $18, $18, $7E, $3C, $18, $00
+        .byte   $00, $18, $0C, $FE, $0C, $18, $00, $00
+        .byte   $00, $30, $60, $FE, $60, $30, $00, $00
+        .byte   $00, $00, $C0, $C0, $C0, $FE, $00, $00
+        .byte   $00, $24, $66, $FF, $66, $24, $00, $00
+        .byte   $00, $18, $3C, $7E, $FF, $FF, $00, $00
+        .byte   $00, $FF, $FF, $7E, $3C, $18, $00, $00
+        .byte   $00, $00, $00, $00, $00, $00, $00, $00
+        .byte   $30, $78, $78, $78, $30, $00, $30, $00
+        .byte   $6C, $6C, $6C, $00, $00, $00, $00, $00
+        .byte   $6C, $6C, $FE, $6C, $FE, $6C, $6C, $00
+        .byte   $30, $7C, $C0, $78, $0C, $F8, $30, $00
+        .byte   $00, $C6, $CC, $18, $30, $66, $C6, $00
+        .byte   $38, $6C, $38, $76, $DC, $CC, $76, $00
+        .byte   $60, $60, $C0, $00, $00, $00, $00, $00
+        .byte   $18, $30, $60, $60, $60, $30, $18, $00
+        .byte   $60, $30, $18, $18, $18, $30, $60, $00
+        .byte   $00, $66, $3C, $FF, $3C, $66, $00, $00
+        .byte   $00, $30, $30, $FC, $30, $30, $00, $00
+        .byte   $00, $00, $00, $00, $00, $30, $30, $60
+        .byte   $00, $00, $00, $FC, $00, $00, $00, $00
+        .byte   $00, $00, $00, $00, $00, $30, $30, $00
+        .byte   $06, $0C, $18, $30, $60, $C0, $80, $00
+        .byte   $7C, $C6, $CE, $DE, $F6, $E6, $7C, $00
+        .byte   $30, $70, $30, $30, $30, $30, $FC, $00
+        .byte   $78, $CC, $0C, $38, $60, $CC, $FC, $00
+        .byte   $78, $CC, $0C, $38, $0C, $CC, $78, $00
+        .byte   $1C, $3C, $6C, $CC, $FE, $0C, $1E, $00
+        .byte   $FC, $C0, $F8, $0C, $0C, $CC, $78, $00
+        .byte   $38, $60, $C0, $F8, $CC, $CC, $78, $00
+        .byte   $FC, $CC, $0C, $18, $30, $30, $30, $00
+        .byte   $78, $CC, $CC, $78, $CC, $CC, $78, $00
+        .byte   $78, $CC, $CC, $7C, $0C, $18, $70, $00
+        .byte   $00, $30, $30, $00, $00, $30, $30, $00
+        .byte   $00, $30, $30, $00, $00, $30, $30, $60
+        .byte   $18, $30, $60, $C0, $60, $30, $18, $00
+        .byte   $00, $00, $FC, $00, $00, $FC, $00, $00
+        .byte   $60, $30, $18, $0C, $18, $30, $60, $00
+        .byte   $78, $CC, $0C, $18, $30, $00, $30, $00
+        .byte   $7C, $C6, $DE, $DE, $DE, $C0, $78, $00
+        .byte   $30, $78, $CC, $CC, $FC, $CC, $CC, $00
+        .byte   $FC, $66, $66, $7C, $66, $66, $FC, $00
+        .byte   $3C, $66, $C0, $C0, $C0, $66, $3C, $00
+        .byte   $F8, $6C, $66, $66, $66, $6C, $F8, $00
+        .byte   $7E, $60, $60, $78, $60, $60, $7E, $00
+        .byte   $7E, $60, $60, $78, $60, $60, $60, $00
+        .byte   $3C, $66, $C0, $C0, $CE, $66, $3E, $00
+        .byte   $CC, $CC, $CC, $FC, $CC, $CC, $CC, $00
+        .byte   $78, $30, $30, $30, $30, $30, $78, $00
+        .byte   $1E, $0C, $0C, $0C, $CC, $CC, $78, $00
+        .byte   $E6, $66, $6C, $78, $6C, $66, $E6, $00
+        .byte   $60, $60, $60, $60, $60, $60, $7E, $00
+        .byte   $C6, $EE, $FE, $FE, $D6, $C6, $C6, $00
+        .byte   $C6, $E6, $F6, $DE, $CE, $C6, $C6, $00
+        .byte   $38, $6C, $C6, $C6, $C6, $6C, $38, $00
+        .byte   $FC, $66, $66, $7C, $60, $60, $F0, $00
+        .byte   $78, $CC, $CC, $CC, $DC, $78, $1C, $00
+        .byte   $FC, $66, $66, $7C, $6C, $66, $E6, $00
+        .byte   $78, $CC, $E0, $70, $1C, $CC, $78, $00
+        .byte   $FC, $30, $30, $30, $30, $30, $30, $00
+        .byte   $CC, $CC, $CC, $CC, $CC, $CC, $FC, $00
+        .byte   $CC, $CC, $CC, $CC, $CC, $78, $30, $00
+        .byte   $C6, $C6, $C6, $D6, $FE, $EE, $C6, $00
+        .byte   $C6, $C6, $6C, $38, $38, $6C, $C6, $00
+        .byte   $CC, $CC, $CC, $78, $30, $30, $78, $00
+        .byte   $FE, $06, $0C, $18, $30, $60, $FE, $00
+        .byte   $78, $60, $60, $60, $60, $60, $78, $00
+        .byte   $C0, $60, $30, $18, $0C, $06, $02, $00
+        .byte   $78, $18, $18, $18, $18, $18, $78, $00
+        .byte   $10, $38, $6C, $C6, $00, $00, $00, $00
+        .byte   $00, $00, $00, $00, $00, $00, $00, $FF
+        .byte   $30, $30, $18, $00, $00, $00, $00, $00
+        .byte   $00, $00, $78, $0C, $7C, $CC, $76, $00
+        .byte   $E0, $60, $60, $7C, $66, $66, $DC, $00
+        .byte   $00, $00, $78, $CC, $C0, $CC, $78, $00
+        .byte   $1C, $0C, $0C, $7C, $CC, $CC, $76, $00
+        .byte   $00, $00, $78, $CC, $FC, $C0, $78, $00
+        .byte   $38, $6C, $60, $F0, $60, $60, $F0, $00
+        .byte   $00, $00, $76, $CC, $CC, $7C, $0C, $F8
+        .byte   $E0, $60, $6C, $76, $66, $66, $E6, $00
+        .byte   $30, $00, $70, $30, $30, $30, $78, $00
+        .byte   $0C, $00, $0C, $0C, $0C, $CC, $CC, $78
+        .byte   $E0, $60, $66, $6C, $78, $6C, $E6, $00
+        .byte   $70, $30, $30, $30, $30, $30, $78, $00
+        .byte   $00, $00, $CC, $FE, $FE, $D6, $C6, $00
+        .byte   $00, $00, $F8, $CC, $CC, $CC, $CC, $00
+        .byte   $00, $00, $78, $CC, $CC, $CC, $78, $00
+        .byte   $00, $00, $DC, $66, $66, $7C, $60, $F0
+        .byte   $00, $00, $76, $CC, $CC, $7C, $0C, $1E
+        .byte   $00, $00, $DC, $76, $66, $60, $F0, $00
+        .byte   $00, $00, $7C, $C0, $78, $0C, $F8, $00
+        .byte   $10, $30, $7C, $30, $30, $34, $18, $00
+        .byte   $00, $00, $CC, $CC, $CC, $CC, $76, $00
+        .byte   $00, $00, $CC, $CC, $CC, $78, $30, $00
+        .byte   $00, $00, $C6, $D6, $FE, $FE, $6C, $00
+        .byte   $00, $00, $C6, $6C, $38, $6C, $C6, $00
+        .byte   $00, $00, $CC, $CC, $CC, $7C, $0C, $F8
+        .byte   $00, $00, $FC, $98, $30, $64, $FC, $00
+        .byte   $1C, $30, $30, $E0, $30, $30, $1C, $00
+        .byte   $18, $18, $18, $00, $18, $18, $18, $00
+        .byte   $E0, $30, $30, $1C, $30, $30, $E0, $00
+        .byte   $76, $DC, $00, $00, $00, $00, $00, $00
+        .byte   $00, $10, $38, $6C, $C6, $C6, $FE, $00
diff --git a/libsrc/gamate/waitvblank.s b/libsrc/gamate/waitvblank.s
new file mode 100644 (file)
index 0000000..66686c0
--- /dev/null
@@ -0,0 +1,20 @@
+;
+; void waitvblank (void);
+;
+
+        .include        "gamate.inc"
+        .include        "extzp.inc"
+
+        .forceimport    ticktock
+        .export         _waitvblank
+
+; FIXME: is this actually correct?
+
+.proc   _waitvblank
+
+        lda     tickcount
+@lp:    cmp     tickcount
+        beq     @lp
+        rts
+
+.endproc
diff --git a/libsrc/gamate/wherex.s b/libsrc/gamate/wherex.s
new file mode 100644 (file)
index 0000000..94d9ae7
--- /dev/null
@@ -0,0 +1,20 @@
+;
+; Ullrich von Bassewitz, 2003-05-02
+;
+; unsigned char wherex (void);
+;
+
+        .export         _wherex
+
+        .include        "gamate.inc"
+        .include        "extzp.inc"
+
+.proc   _wherex
+
+        lda     CURS_X
+        ldx     #$00
+        rts
+
+.endproc
+
+
diff --git a/libsrc/gamate/wherey.s b/libsrc/gamate/wherey.s
new file mode 100644 (file)
index 0000000..70e2f54
--- /dev/null
@@ -0,0 +1,20 @@
+;
+; Ullrich von Bassewitz, 2003-05-02
+;
+; unsigned char wherey (void);
+;
+
+        .export         _wherey
+
+        .include        "gamate.inc"
+        .include        "extzp.inc"
+
+.proc   _wherey
+
+        lda     CURS_Y
+        ldx     #$00
+        rts
+
+.endproc
+
+
index ebd05cbf1aa00556a6b353012eb27747f2bd0af7..e89010123f4cec03203675885b91c032df8e6506 100644 (file)
@@ -205,7 +205,7 @@ static const TargetProperties PropertyTable[TGT_COUNT] = {
     { "sim6502",        CPU_6502,       BINFMT_BINARY,      CTNone  },
     { "sim65c02",       CPU_65C02,      BINFMT_BINARY,      CTNone  },
     { "pce",            CPU_HUC6280,    BINFMT_BINARY,      CTNone  },
-    { "gamate",         CPU_65C02,      BINFMT_BINARY,      CTNone  },
+    { "gamate",         CPU_6502,       BINFMT_BINARY,      CTNone  },
 };
 
 /* Target system */
index 3a8048632ea4cad5ee43e58399e854a42b906e7d..2ae6b46b3161d73aeceb133e752a04f392f2b637 100644 (file)
 #include <string.h>
 #include <stdlib.h>
 
+#if defined(__GAMATE__)
+#define NUMCHARS        128
+#define NUMCOLS           4
+#else
+#define NUMCHARS        256
+#define NUMCOLS          16
+#endif
+
 static char grid[5][5] = {
     { CH_ULCORNER, CH_HLINE, CH_TTEE, CH_HLINE, CH_URCORNER },
     { CH_VLINE, ' ', CH_VLINE, ' ', CH_VLINE },
@@ -29,8 +37,10 @@ void main(void)
 
         clrscr();
         screensize(&xsize, &ysize);
-        cputs("cc65 conio test\n\rInput: [        ]");
-
+        cputs("cc65 conio test\n\r");
+#if !defined(__NES__) && !defined(__PCE__) && !defined(__GAMATE__)
+        cputs("Input: [        ]");
+#endif
         cputsxy(0, 2, "Colors:" );
         tcol = textcolor(0); /* remember original textcolor */
         bgcol = bgcolor(0); /* remember original background color */
@@ -38,14 +48,14 @@ void main(void)
         bgcolor(bgcol);bordercolor(bcol);
         for (i = 0; i < 3; ++i) {
                 gotoxy(i,3 + i);
-                for (j = 0; j < 16; ++j) {
+                for (j = 0; j < NUMCOLS; ++j) {
                         textcolor(j);
                         cputc('X');
                 }
         }
         textcolor(tcol);
 
-        cprintf("\n\n\r Screensize is: %dx%d", xsize, ysize );
+        cprintf("\n\n\r Screensize: %dx%d", xsize, ysize );
 
         chlinexy(0,6,xsize);
         cvlinexy(0,6,3);
@@ -63,13 +73,13 @@ void main(void)
                 }
         }
 
-        gotoxy(0,ysize - 2 - ((256 + xsize) / xsize));
+        gotoxy(0,ysize - 2 - ((NUMCHARS + xsize) / xsize));
         revers(1);
         for (i = 0; i < xsize; ++i) {
                 cputc('0' + i % 10);
         }
         revers(0);
-        for (i = 0; i < 256; ++i) {
+        for (i = 0; i < NUMCHARS; ++i) {
             if ((i != '\n') && (i != '\r')) {
                     cputc(i);
             } else {
@@ -89,13 +99,14 @@ void main(void)
         for(;;) {
 
                 gotoxy(8, 2);
-                j = n & 1;
+                j = n >> 4 & 1;
                 revers(j);
                 cputc(j ? 'R' : ' ');
                 revers(j ^ 1);
-                cputs(" revers");
+                cputs(" rvs");
                 revers(0);
 
+#if !defined(__NES__) && !defined(__PCE__) && !defined(__GAMATE__)
                 gotoxy(8 + inpos,1);
                 i = cgetc();
                 if ((i >= '0') && (i<='9')) {
@@ -120,6 +131,10 @@ void main(void)
                     cputc(i);
                     inpos = (inpos + 1) & 7;
                 }
+#endif
+#if defined(__NES__) || defined(__PCE__) || defined(__GAMATE__)
+                waitvblank();
+#endif
 
                 ++n;
         }
index 943f6c1951835621db5fc08554b76b81ef78b8d7..3fe95b693204c6ac132967f73ca372ed570e18db 100644 (file)
@@ -1,21 +1,20 @@
 
-all: audiotest.bin lcdtest.bin
+all: audiotest.bin lcdtest.bin ctest.bin
 
 audiotest.bin: audiotest.s
-#      ../../../bin/ca65 -t gamate -o audiotest.o audiotest.s
-#      ../../../bin/ld65 -t gamate -o audiotest.bin audiotest.o
-       ../../../bin/cl65 -t gamate -o audiotest.bin audiotest.s
-
+       ../../../bin/cl65 -l audiotest.lst -t gamate -o audiotest.bin audiotest.s
 lcdtest.bin: lcdtest.s
-#      ../../../bin/ca65 -t gamate -o lcdtest.o lcdtest.s
-#      ../../../bin/ld65 -t gamate -o lcdtest.bin lcdtest.o
-       ../../../bin/cl65 -l bla.lst -t gamate -o lcdtest.bin lcdtest.s
+       ../../../bin/cl65 -l lcdtest.lst -t gamate -o lcdtest.bin lcdtest.s
+ctest.bin: ctest.c
+       ../../../bin/cl65 -l ctest.lst -t gamate -o ctest.bin ctest.c
 
 test1: lcdtest.bin
-       cd /home/groepaz/Desktop/mame/winmess/ && wine mess.exe gamate -window -skip_gameinfo -cart /home/groepaz/Desktop/cc65/github/cc65/testcode/lib/gamate/lcdtest.bin
+       cd ~/Desktop/mame/winmess/ && wine mess.exe gamate -window -skip_gameinfo -cart ~/Desktop/cc65/github/cc65/testcode/lib/gamate/lcdtest.bin
 test2: audiotest.bin
-       cd /home/groepaz/Desktop/mame/winmess/ && wine mess.exe gamate -window -skip_gameinfo -cart /home/groepaz/Desktop/cc65/github/cc65/testcode/lib/gamate/audiotest.bin
+       cd ~/Desktop/mame/winmess/ && wine mess.exe gamate -window -skip_gameinfo -cart ~/Desktop/cc65/github/cc65/testcode/lib/gamate/audiotest.bin
+testc: ctest.bin
+       cd ~/Desktop/mame/winmess/ && wine mess.exe gamate -window -skip_gameinfo -cart ~/Desktop/cc65/github/cc65/testcode/lib/gamate/ctest.bin
 
 clean:
-       rm -f lcdtest.o audiotest.o
-       rm -f lcdtest.bin audiotest.bin
+       rm -f lcdtest.o audiotest.o ctest.o
+       rm -f lcdtest.bin audiotest.bin ctest.bin
index a5b2143ce26e8bad5a1e31cb320b888ed3a0bedf..0375592f3fe4061d4027821f999904947a6c1889 100644 (file)
@@ -1,8 +1,10 @@
 
-        .export reset, irq, nmi ; FIXME
+;        .export reset, irq, nmi ; FIXME
+        .export _main
 
-.include "gamate.inc"
-       .zeropage
+        .include "gamate.inc"
+
+.zeropage
 addr: .word 0
 psa:   .word 0
 
@@ -16,7 +18,7 @@ cursor: .byte 0
 controlslast: .byte 0
 controlsedge: .byte 0
 
-       .data
+.data
 temp_x:        .byte 0
 temp_y:        .byte   0
 temp_a:        .byte 0
@@ -27,405 +29,414 @@ psy:      .byte 0
 xpos: .byte 0
 ypos:  .byte 0
 
-       .code
+.code
 
 chars:
 .incbin "cga2.chr"
-                       
+
 hex2asc:       .byte "0123456789abcdef"
 
+;-------------------------------------------------------------------------------
+        .export IRQStub
+
 .proc nmi
-                       inc nmi_count
-                       rts
+        inc nmi_count
+        rts
 .endproc
 
-.proc  irq
-                       inc irq_count
-                       rts
+.proc  IRQStub
+        inc irq_count
+        rts
 .endproc
 
-.proc reset
-                       lda #>audio_base
-                       sta writeaddr+1
-                       sta readaddr+1
-                       lda #<audio_base
-                       sta writeaddr
-                       sta readaddr
-
-                       lda #$10
-                       sta editbuffer1+6
-                       lda #$e
-                       sta editbuffer2+5
-                       lda #$ff
-                       sta editbuffer2+3
-                       lda #$ff
-                       sta editbuffer2+4
-                       lda #$0f
-                       sta editbuffer2
-                       lda #$0f
-                       sta editbuffer2+1
-                       lda #$0e
-                       sta editbuffer2+2
-                       lda     #$38
-                       sta editbuffer1+7
-
-                       lda #0
-                       sta     lcd_x_pos
-                       sta lcd_y_pos
-                       sta irq_count
-                       sta cursor
-                       lda #1
-                       sta nmi_count
-                       cli
-                       lda     #lcd_mode_y_increment
-                       sta     lcd_mode
-
-                       jsr printy
-
-                       lda #1
-                       sta nmi_enable
+;-------------------------------------------------------------------------------
+
+.proc _main
+        lda #>AUDIO_BASE
+        sta writeaddr+1
+        sta readaddr+1
+        lda #<AUDIO_BASE
+        sta writeaddr
+        sta readaddr
+
+        lda #$10
+        sta editbuffer1+6
+        lda #$e
+        sta editbuffer2+5
+        lda #$ff
+        sta editbuffer2+3
+        lda #$ff
+        sta editbuffer2+4
+        lda #$0f
+        sta editbuffer2
+        lda #$0f
+        sta editbuffer2+1
+        lda #$0e
+        sta editbuffer2+2
+        lda    #$38
+        sta editbuffer1+7
+
+        lda #0
+        sta    LCD_XPOS
+        sta LCD_YPOS
+        sta irq_count
+        sta cursor
+        lda #1
+        sta nmi_count
+        cli
+        lda    #LCD_MODE_INC_Y
+        sta    LCD_MODE
+
+        jsr printy
+
+        lda #1
+        sta ZP_NMI_ENABLE
 
 loop:  
-                       lda irq_count
+        lda irq_count
 loop1:
-                       cmp irq_count
-                       beq     loop1
-                       lda irq_count
-                       and #7
-                       bne loop1               
-
-                       lda     #lcd_mode_y_increment
-                       sta     lcd_mode
-
-                       ldx #3
-                       ldy #32
-                       lda irq_count
-                       jsr printhex
-
-
-                       lda cursor
-                       ldy     #0
-                       cmp #20
-                       bcc firstline
-                       sec
-                       sbc     #20
-                       ldy #24
+        cmp irq_count
+        beq    loop1
+        lda irq_count
+        and #7
+        bne loop1
+
+        lda    #LCD_MODE_INC_Y
+        sta    LCD_MODE
+
+        ldx #3
+        ldy #32
+        lda irq_count
+        jsr printhex
+
+
+        lda cursor
+        ldy    #0
+        cmp #20
+        bcc firstline
+        sec
+        sbc    #20
+        ldy #24
 firstline:
-                       sta lcd_x
-                       sty lcd_y
-                       lda #' '
-                       jsr printsign
+        sta LCD_X
+        sty LCD_Y
+        lda #' '
+        jsr printsign
 norclearcursor:
-                       
-                       jsr inputs
-
-                       lda irq_count
-                       and #8
-                       bne nocursor
-                       lda cursor
-                       ldy     #0
-                       cmp #20
-                       bcc firstline2
-                       sec
-                       sbc     #20
-                       ldy #24
+
+        jsr inputs
+
+        lda irq_count
+        and #8
+        bne nocursor
+        lda cursor
+        ldy    #0
+        cmp #20
+        bcc firstline2
+        sec
+        sbc    #20
+        ldy #24
 firstline2:
-                       sta lcd_x
-                       sty lcd_y
-                       lda #'x'
-                       jsr printsign
+        sta LCD_X
+        sty LCD_Y
+        lda #'x'
+        jsr printsign
 nocursor:
 
-                       lda     #lcd_mode_y_increment
-                       sta     lcd_mode
-                       jsr printy                      
-                       jmp loop
+        lda    #LCD_MODE_INC_Y
+        sta    LCD_MODE
+        jsr printy
+        jmp loop
 .endproc
 
 .proc printy
 
-                       ldy #0
+        ldy #0
 loop1: 
-                       tya
-                       pha
-                       asl
-                       tax
-                       lda readaddr,y
-                       ldy #8
-                       jsr printhex
-                       pla
-                       tay
-                       iny
-                       cpy #10
-                       bne loop1
+        tya
+        pha
+        asl
+        tax
+        lda readaddr,y
+        ldy #8
+        jsr printhex
+        pla
+        tay
+        iny
+        cpy #10
+        bne loop1
 
 loop2:
-                       tya
-                       pha
-                       tya
-                       sec
-                       sbc #10
-                       asl
-                       tax
-                       lda readaddr,y
-                       ldy #16
-                       jsr printhex
-                       pla
-                       tay
-                       iny
-                       cpy #20
-                       bne loop2
-
-                       ldx #0
-                       ldy #32
-                       lda nmi_count
-                       jsr printhex
-
-                       rts             
+        tya
+        pha
+        tya
+        sec
+        sbc #10
+        asl
+        tax
+        lda readaddr,y
+        ldy #16
+        jsr printhex
+        pla
+        tay
+        iny
+        cpy #20
+        bne loop2
+
+        ldx #0
+        ldy #32
+        lda nmi_count
+        jsr printhex
+
+        rts
 .endproc
 
+;-------------------------------------------------------------------------------
+
 .proc inputs
-                       lda controlslast
-                       eor controls
-                       and controlslast
-                       eor #$ff
-                       sta controlsedge
-                       and #up
-                       bne notup
-
-                       lda cursor
-                       lsr
-                       tay
-                       bcs uplow
-                       lda readaddr,y
-                       clc
-                       adc #$10
-                       sta readaddr,y
-                       jmp notup
+        lda controlslast
+        eor JOY_DATA
+        and controlslast
+        eor #$ff
+        sta controlsedge
+        and #JOY_DATA_UP
+        bne notup
+
+        lda cursor
+        lsr
+        tay
+        bcs uplow
+        lda readaddr,y
+        clc
+        adc #$10
+        sta readaddr,y
+        jmp notup
 uplow:lda readaddr,y
-                       clc
-                       adc #1
-                       sta readaddr,y
+        clc
+        adc #1
+        sta readaddr,y
 notup:lda controlsedge
-                       and #down
-                       bne notdown
-                       lda cursor
-                       lsr
-                       tay
-                       bcs downlow
-                       lda readaddr,y
-                       sec
-                       sbc #$10
-                       sta readaddr,y
-                       jmp notdown
+        and #JOY_DATA_DOWN
+        bne notdown
+        lda cursor
+        lsr
+        tay
+        bcs downlow
+        lda readaddr,y
+        sec
+        sbc #$10
+        sta readaddr,y
+        jmp notdown
 downlow:
-                       lda readaddr,y
-                       sec
-                       sbc #1
-                       sta readaddr,y
+        lda readaddr,y
+        sec
+        sbc #1
+        sta readaddr,y
 notdown:lda controlsedge
-                       and #left
-                       bne notleft
-                       lda cursor
-                       beq notleft
-                       dec cursor
+        and #JOY_DATA_LEFT
+        bne notleft
+        lda cursor
+        beq notleft
+        dec cursor
 notleft:lda controlsedge
-                       and #right
-                       bne notright
-                       lda cursor
-                       cmp #40
-                       beq notright
-                       inc cursor
+        and #JOY_DATA_RIGHT
+        bne notright
+        lda cursor
+        cmp #40
+        beq notright
+        inc cursor
 notright:lda controlsedge
-                       and #start
-                       bne notstart
-                       lda #0
-                       sta audio_base
-                       sta audio_base+1
-                       sta audio_base+2
-                       sta audio_base+3
-                       sta audio_base+4
-                       sta audio_base+5
-                       sta audio_base+6
-                       sta audio_base+8
-                       sta audio_base+9
-                       sta audio_base+10
-                       sta audio_base+11
-                       sta audio_base+12
-                       sta audio_base+13
-                       sta audio_base+7
+        and #JOY_DATA_START
+        bne notstart
+        lda #0
+        sta AUDIO_BASE
+        sta AUDIO_BASE+1
+        sta AUDIO_BASE+2
+        sta AUDIO_BASE+3
+        sta AUDIO_BASE+4
+        sta AUDIO_BASE+5
+        sta AUDIO_BASE+6
+        sta AUDIO_BASE+8
+        sta AUDIO_BASE+9
+        sta AUDIO_BASE+10
+        sta AUDIO_BASE+11
+        sta AUDIO_BASE+12
+        sta AUDIO_BASE+13
+        sta AUDIO_BASE+7
 notstart:lda controlsedge
-                       and #select
-                       bne notselect
-                       lda editbuffer1
-                       sta audio_base
-                       lda editbuffer1+1
-                       sta audio_base+1
-                       lda editbuffer1+2
-                       sta audio_base+2
-                       lda editbuffer1+3
-                       sta audio_base+3
-                       lda editbuffer1+4
-                       sta audio_base+4
-                       lda editbuffer1+5
-                       sta audio_base+5
-                       lda editbuffer1+6
-                       sta audio_base+6
-                       lda editbuffer2
-                       sta audio_base+8
-                       lda editbuffer2+1
-                       sta audio_base+9
-                       lda editbuffer2+2
-                       sta audio_base+10
-                       lda editbuffer2+3
-                       sta audio_base+11
-                       lda editbuffer2+4
-                       sta audio_base+12
-                       lda editbuffer2+5
-                       sta audio_base+13
-                       lda editbuffer1+7
-                       sta audio_base+7
+        and #JOY_DATA_SELECT
+        bne notselect
+        lda editbuffer1
+        sta AUDIO_BASE
+        lda editbuffer1+1
+        sta AUDIO_BASE+1
+        lda editbuffer1+2
+        sta AUDIO_BASE+2
+        lda editbuffer1+3
+        sta AUDIO_BASE+3
+        lda editbuffer1+4
+        sta AUDIO_BASE+4
+        lda editbuffer1+5
+        sta AUDIO_BASE+5
+        lda editbuffer1+6
+        sta AUDIO_BASE+6
+        lda editbuffer2
+        sta AUDIO_BASE+8
+        lda editbuffer2+1
+        sta AUDIO_BASE+9
+        lda editbuffer2+2
+        sta AUDIO_BASE+10
+        lda editbuffer2+3
+        sta AUDIO_BASE+11
+        lda editbuffer2+4
+        sta AUDIO_BASE+12
+        lda editbuffer2+5
+        sta AUDIO_BASE+13
+        lda editbuffer1+7
+        sta AUDIO_BASE+7
 notselect:lda controlsedge
-                       and #button_a
-                       bne notbuttona
-                       ldy #0
-                       ldy #0
+        and #JOY_DATA_FIRE_A
+        bne notbuttona
+        ldy #0
+        ldy #0
 writea:lda editbuffer1,y
-                       sta (writeaddr),y
-                       iny
-                       cpy     #8
-                       bne writea
+        sta (writeaddr),y
+        iny
+        cpy    #8
+        bne writea
 writeb:lda editbuffer2-8,y
-                       sta (writeaddr),y
-                       iny
-                       cpy     #16
-                       bne writeb
+        sta (writeaddr),y
+        iny
+        cpy    #16
+        bne writeb
 notbuttona:lda controlsedge
-                       and #button_b
-                       bne notbuttonb
-                       ldy #0
+        and #JOY_DATA_FIRE_B
+        bne notbuttonb
+        ldy #0
 reada:lda (readaddr),y
-                       sta editbuffer1,y
-                       iny
-                       cpy     #8
-                       bne reada
+        sta editbuffer1,y
+        iny
+        cpy    #8
+        bne reada
 readb:lda (readaddr),y
-                       sta editbuffer2-8,y
-                       iny
-                       cpy     #16
-                       bne readb
+        sta editbuffer2-8,y
+        iny
+        cpy    #16
+        bne readb
 notbuttonb:
-                       lda controls
-                       sta     controlslast
-                       rts
+        lda JOY_DATA
+        sta    controlslast
+        rts
 .endproc
 
+;-------------------------------------------------------------------------------
+
 .proc printstring
-                       sta     psa
-                       stx psa+1
-                       ldx #0
-                       stx     psx
-                       sty psy
+        sta    psa
+        stx psa+1
+        ldx #0
+        stx    psx
+        sty psy
 printstring2:
-                       ldy     #0
-                       lda     (psa),y
-                       beq printstring1
-                       ldx psx
-                       stx     lcd_x
-                       ldy psy
-                       sty     lcd_y
-                       jsr printsign                   
-                       inc psx
-                       lda psa
-                       clc
-                       adc     #1
-                       sta psa
-                       lda psa+1
-                       adc     #0
-                       sta psa+1
-                       jmp printstring2
+        ldy    #0
+        lda    (psa),y
+        beq printstring1
+        ldx psx
+        stx    LCD_X
+        ldy psy
+        sty    LCD_Y
+        jsr printsign
+        inc psx
+        lda psa
+        clc
+        adc    #1
+        sta psa
+        lda psa+1
+        adc    #0
+        sta psa+1
+        jmp printstring2
 printstring1:
-                       rts                     
+        rts
 .endproc
 
 .proc printstringy
-                       sta     psa
-                       stx psa+1
+        sta    psa
+        stx psa+1
 printstring2:
-                       ldy     #0
-                       lda     (psa),y
-                       beq printstring1
-                       jsr printsign                   
-                       lda psa
-                       clc
-                       adc     #1
-                       sta psa
-                       lda psa+1
-                       adc     #0
-                       sta psa+1
-                       jmp printstring2
+        ldy    #0
+        lda    (psa),y
+        beq printstring1
+        jsr printsign
+        lda psa
+        clc
+        adc    #1
+        sta psa
+        lda psa+1
+        adc    #0
+        sta psa+1
+        jmp printstring2
 printstring1:
-                       rts                     
+        rts
 .endproc
 
 
 .proc printhex
-                       pha
-                       lsr
-                       lsr
-                       lsr
-                       lsr
-                       and #$0f
-                       stx     temp_x
-                       tax                     
-                       lda     hex2asc,x
-                       ldx     temp_x
-                       stx     lcd_x
-                       sty     lcd_y
-                       jsr     printsign
-                       pla
-                       and     #$0f
-                       inx
-                       stx     temp_x
-                       tax
-                       lda     hex2asc,x
-                       ldx     temp_x
-                       stx     lcd_x
-                       sty     lcd_y
-                       jmp printsign
+        pha
+        lsr
+        lsr
+        lsr
+        lsr
+        and #$0f
+        stx    temp_x
+        tax
+        lda    hex2asc,x
+        ldx    temp_x
+        stx    LCD_X
+        sty    LCD_Y
+        jsr    printsign
+        pla
+        and    #$0f
+        inx
+        stx    temp_x
+        tax
+        lda    hex2asc,x
+        ldx    temp_x
+        stx    LCD_X
+        sty    LCD_Y
+        jmp printsign
 .endproc
 
 .proc printsign
-                       sty     temp_y
-                       stx     temp_x
-                       sta     temp_a
-                       lda temp_a
-                       sta     addr
-                       lda #0
-                       sta addr+1
-                       asl     addr
-                       rol     addr+1
-                       asl     addr
-                       rol addr+1
-                       asl addr
-                       rol addr+1
-                       lda addr
-                       clc
-                       adc     #<chars
-                       sta     addr
-                       lda     addr+1
-                       adc     #>chars
-                       sta addr+1
-                       ldx     #8
-                       ldy #0
+        sty    temp_y
+        stx    temp_x
+        sta    temp_a
+        lda temp_a
+        sta    addr
+        lda #0
+        sta addr+1
+        asl    addr
+        rol    addr+1
+        asl    addr
+        rol addr+1
+        asl addr
+        rol addr+1
+        lda addr
+        clc
+        adc    #<chars
+        sta    addr
+        lda    addr+1
+        adc    #>chars
+        sta addr+1
+        ldx    #8
+        ldy #0
 printsign1:
-                       lda     (addr),y
-                       sta     lcd_data
-                       iny
-                       dex
-                       bne printsign1
-                       ldx     temp_x
-                       ldy     temp_y
-                       rts
+        lda    (addr),y
+        sta    LCD_DATA
+        iny
+        dex
+        bne printsign1
+        ldx    temp_x
+        ldy    temp_y
+        rts
 .endproc
 
diff --git a/testcode/lib/gamate/ctest.c b/testcode/lib/gamate/ctest.c
new file mode 100644 (file)
index 0000000..a953e0e
--- /dev/null
@@ -0,0 +1,52 @@
+
+#include <gamate.h>
+#include <time.h>
+#include <conio.h>
+
+unsigned char y = 0;
+unsigned char x;
+unsigned short n;
+
+int main(int argc, char *argv[])
+{
+    clrscr();
+    gotoxy(0,0);cputs("abcdABCD");
+
+    textcolor(0);gotoxy(0,5);cputs("abcdABCD 0");
+    textcolor(1);gotoxy(0,6);cputs("abcdABCD  1");
+    textcolor(2);gotoxy(0,7);cputs("abcdABCD   2");
+    textcolor(3);gotoxy(0,8);cputs("abcdABCD    3");
+
+    while(1) {
+        textcolor(COLOR_BLACK);
+
+        n = clock();
+
+        gotoxy(0,2);cprintf("%04x %02x %02x", n, x, y);
+
+        switch((*((unsigned char*)JOY_DATA))) {
+            case 0xff ^ JOY_DATA_UP:
+                ++y;
+                break;
+            case 0xff ^ JOY_DATA_DOWN:
+                --y;
+                break;
+            case 0xff ^ JOY_DATA_LEFT:
+                ++x;
+                break;
+            case 0xff ^ JOY_DATA_RIGHT:
+                --x;
+                break;
+            case 0xff ^ JOY_DATA_FIRE_A:
+                break;
+        }
+
+        (*((unsigned char*)LCD_XPOS)) = x;
+        (*((unsigned char*)LCD_YPOS)) = y;
+
+        waitvblank();
+
+    }
+
+    return 0;
+}
index b4798c677ea8ed186086d63aed9de223b49c7293..617f8995957bc217c8274095fe138b067d60995c 100644 (file)
@@ -1,14 +1,12 @@
 
-        .export reset, irq, nmi ; FIXME
-
-
+        .export _main
 .include "gamate.inc"
 
-       .zeropage
+.zeropage
 addr: .word 0
 psa:   .word 0
 
-       .data
+.data
 temp_x:        .byte 0
 temp_y:        .byte   0
 temp_a:        .byte 0
@@ -21,363 +19,381 @@ counted: .word 0
 xpos: .byte 0
 ypos:  .byte 0
 
-       .code
+.code
 
 chars:
-.incbin "cga2.chr"
-                       
-hex2asc:       .byte "0123456789abcdef"
-format:        .byte "IrqNmiCountXposYpos", 0
-xdesc: .byte "0123456789abcdefghijklmnopqrstuv", 0
-ydesc: .byte "0123456789ABCDEFGHIJKLMNOPQRSTUV", 0
-
-.proc nmi
-                       inc nmi_count
-                       rts
+        .incbin "cga2.chr"
+
+hex2asc:        .byte "0123456789abcdef"
+format:         .byte "IrqNmiCountXposYpos", 0
+xdesc:          .byte "0123456789abcdefghijklmnopqrstuv", 0
+ydesc:          .byte "0123456789ABCDEFGHIJKLMNOPQRSTUV", 0
+
+;-------------------------------------------------------------------------------
+
+.proc   nmi
+
+        inc     nmi_count
+        rts
 .endproc
 
+        .export IRQStub
+
+.proc   IRQStub
 
-.proc  irq
-                       inc irq_count
-                       lda count
-                       sta counted
-                       lda count+1
-                       sta counted+1
-                       lda #0
-                       sta count
-                       sta count+1
-                       rts
+        inc     irq_count
+        lda     count
+        sta     counted
+        lda     count+1
+        sta     counted+1
+        lda     #0
+        sta     count
+        sta     count+1
+        rts
 .endproc
 
-.proc reset
-                       lda #0
-                       sta     lcd_x_pos
-                       sta lcd_y_pos
-                       cli
-                       lda     #lcd_mode_y_increment
-                       sta     lcd_mode
-
-                       lda #0
-                       sta lcd_x
-                       lda #<xdesc
-                       ldx     #>xdesc
-                       ldy #0
-                       jsr printstring
-
-                       lda #lcd_x_pos_plane2_flag
-                       sta lcd_x
-                       lda #<xdesc
-                       ldx     #>xdesc
-                       ldy #128
-                       jsr printstring
-
-                       lda #0
-                       sta lcd_x
-                       lda #<ydesc
-                       ldx     #>ydesc
-                       ldy #0
-                       sty     lcd_y
-                       jsr printstringy
-
-;                      lda #$90;(lcd_x_pos_plane2_flag|(128/8))
-                       lda #(lcd_x_pos_plane2_flag|(128/8))
-                       sta lcd_x
-                       lda #<ydesc
-                       ldx     #>ydesc
-                       ldy #0
-                       sty     lcd_y
-                       jsr printstringy
-
-                       lda #<format
-                       ldx     #>format
-                       ldy #8
-                       jsr printstring
-
-                       lda #0
-                       sta lcd_mode
-                       lda     #24/8
-                       sta lcd_x
-                       lda #24
-                       sta lcd_y
-                       lda #'X'
-                       jsr printsign
-                       lda #$80
-                       sta lcd_mode
-                       lda #32/8
-                       sta lcd_x
-                       lda #32
-                       sta lcd_y
-                       lda #'Y'
-                       jsr printsign
-                       lda #$c0
-                       sta lcd_mode
-                       lda #40/8
-                       sta lcd_x
-                       lda     #40
-                       sta lcd_y
-                       lda #'Z'
-                       jsr printsign
-
-                       lda #0
-                       sta lcd_mode
-                       lda     #lcd_x_pos_plane2_flag|(48/8)
-                       sta lcd_x
-                       lda #48
-                       sta lcd_y
-                       lda #'x'
-                       jsr printsign
-                       lda #$80
-                       sta lcd_mode
-                       lda     #(lcd_x_pos_plane2_flag|(56/8))
-                       sta lcd_x
-                       lda #56
-                       sta lcd_y
-                       lda #'y'
-                       jsr printsign
-                       lda #$c0
-                       sta lcd_mode
-                       lda     #(lcd_x_pos_plane2_flag|(64/8))
-                       sta lcd_x
-                       lda     #64
-                       sta lcd_y
-                       lda #'z'
-                       jsr printsign
-
-                       lda #lcd_mode_y_increment|1
-                       sta lcd_mode
-                       lda     #16/8
-                       sta lcd_x
-                       lda #72
-                       sta lcd_y
-                       lda #'V'
-                       jsr printsign
-                       lda #lcd_mode_y_increment|2
-                       sta lcd_mode
-                       lda     #24/8
-                       sta lcd_x
-                       lda #72
-                       sta lcd_y
-                       lda #'V'
-                       jsr printsign
-                       lda #lcd_mode_y_increment|4
-                       sta lcd_mode
-                       lda     #32/8
-                       sta lcd_x
-                       lda #72
-                       sta lcd_y
-                       lda #'V'
-                       jsr printsign
-                       lda #lcd_mode_y_increment|8
-                       sta lcd_mode
-                       lda     #40/8
-                       sta lcd_x
-                       lda #72
-                       sta lcd_y
-                       lda #'V'
-                       jsr printsign
-
-
-                       lda #1
-                       sta nmi_enable
+;-------------------------------------------------------------------------------
+
+.proc   _main
+
+        lda #0
+        sta    LCD_XPOS
+        sta LCD_YPOS
+        cli
+        lda    #LCD_MODE_INC_Y
+        sta    LCD_MODE
+
+        lda #0
+        sta LCD_X
+        lda #<xdesc
+        ldx    #>xdesc
+        ldy #0
+        jsr printstring
+
+        lda #LCD_XPOS_PLANE2
+        sta LCD_X
+        lda #<xdesc
+        ldx    #>xdesc
+        ldy #128
+        jsr printstring
+
+        lda #0
+        sta LCD_X
+        lda #<ydesc
+        ldx    #>ydesc
+        ldy #0
+        sty    LCD_Y
+        jsr printstringy
+
+;                      lda #$90;(LCD_XPOS_PLANE2|(128/8))
+        lda #(LCD_XPOS_PLANE2|(128/8))
+        sta LCD_X
+        lda #<ydesc
+        ldx    #>ydesc
+        ldy #0
+        sty    LCD_Y
+        jsr printstringy
+
+        lda #<format
+        ldx    #>format
+        ldy #8
+        jsr printstring
+
+        lda #0
+        sta LCD_MODE
+        lda    #24/8
+        sta LCD_X
+        lda #24
+        sta LCD_Y
+        lda #'X'
+        jsr printsign
+        lda #$80
+        sta LCD_MODE
+        lda #32/8
+        sta LCD_X
+        lda #32
+        sta LCD_Y
+        lda #'Y'
+        jsr printsign
+        lda #$c0
+        sta LCD_MODE
+        lda #40/8
+        sta LCD_X
+        lda    #40
+        sta LCD_Y
+        lda #'Z'
+        jsr printsign
+
+        lda #0
+        sta LCD_MODE
+        lda    #LCD_XPOS_PLANE2|(48/8)
+        sta LCD_X
+        lda #48
+        sta LCD_Y
+        lda #'x'
+        jsr printsign
+        lda #$80
+        sta LCD_MODE
+        lda    #(LCD_XPOS_PLANE2|(56/8))
+        sta LCD_X
+        lda #56
+        sta LCD_Y
+        lda #'y'
+        jsr printsign
+        lda #$c0
+        sta LCD_MODE
+        lda    #(LCD_XPOS_PLANE2|(64/8))
+        sta LCD_X
+        lda    #64
+        sta LCD_Y
+        lda #'z'
+        jsr printsign
+
+        lda #LCD_MODE_INC_Y|1
+        sta LCD_MODE
+        lda    #16/8
+        sta LCD_X
+        lda #72
+        sta LCD_Y
+        lda #'V'
+        jsr printsign
+        lda #LCD_MODE_INC_Y|2
+        sta LCD_MODE
+        lda    #24/8
+        sta LCD_X
+        lda #72
+        sta LCD_Y
+        lda #'V'
+        jsr printsign
+        lda #LCD_MODE_INC_Y|4
+        sta LCD_MODE
+        lda    #32/8
+        sta LCD_X
+        lda #72
+        sta LCD_Y
+        lda #'V'
+        jsr printsign
+        lda #LCD_MODE_INC_Y|8
+        sta LCD_MODE
+        lda    #40/8
+        sta LCD_X
+        lda #72
+        sta LCD_Y
+        lda #'V'
+        jsr printsign
+
+
+        lda #1
+        sta ZP_NMI_ENABLE
 
 loop:  lda count
-                       clc
-                       adc     #1
-                       sta count
-                       lda count+1
-                       adc     #1
-                       sta count+1
-                       lda irq_count
-                       cmp irq_count
-                       beq     loop
+        clc
+        adc    #1
+        sta count
+        lda count+1
+        adc    #1
+        sta count+1
+        lda irq_count
+        cmp irq_count
+        beq    loop
 
-                       jsr inputs
-                       lda     #lcd_mode_y_increment
-                       sta     lcd_mode
-                       jsr printy                      
+        jsr inputs
+        lda    #LCD_MODE_INC_Y
+        sta    LCD_MODE
+        jsr printy
 
 
 
-                       jmp loop
+        jmp loop
 .endproc
 
+
+;-------------------------------------------------------------------------------
+
 .proc printy
-                       ldx     #0
-                       ldy     #16
-                       lda irq_count
-                       jsr printhex
-
-                       ldx     #3
-                       ldy     #16
-                       lda nmi_count
-                       jsr printhex
-
-                       ldx #6
-                       ldy #16
-                       lda counted+1
-                       jsr printhex
-                       ldx #8
-                       ldy #16
-                       lda counted
-                       jsr printhex
-
-                       ldx #11
-                       ldy #16
-                       lda xpos
-                       jsr printhex
-                       ldx #14
-                       ldy #16
-                       lda ypos
-                       jsr printhex
-                       rts             
+        ldx    #0
+        ldy    #16
+        lda irq_count
+        jsr printhex
+
+        ldx    #3
+        ldy    #16
+        lda nmi_count
+        jsr printhex
+
+        ldx #6
+        ldy #16
+        lda counted+1
+        jsr printhex
+        ldx #8
+        ldy #16
+        lda counted
+        jsr printhex
+
+        ldx #11
+        ldy #16
+        lda xpos
+        jsr printhex
+        ldx #14
+        ldy #16
+        lda ypos
+        jsr printhex
+        rts
 .endproc
 
 .proc inputs
-                       lda controls
-                       and #up
-                       bne notup
-                       dec     ypos
-                       lda ypos
-                       sta lcd_y_pos
-notup:lda controls
-                       and #down
-                       bne notdown
-                       inc ypos
-                       lda ypos
-                       sta lcd_y_pos
-notdown:lda controls
-                       and #left
-                       bne notleft
-                       dec xpos
-                       lda xpos
-                       sta lcd_x_pos
-notleft:lda controls
-                       and #right
-                       bne notright
-                       inc xpos
-                       lda xpos
-                       sta lcd_x_pos
-notright:lda controls
-                       and #start
-                       bne notstart
-notstart:lda controls
-                       and #select
-                       bne notselect
-notselect:lda controls
-                       and #button_a
-                       bne notbuttona
-notbuttona:lda controls
-                       and #button_b
-                       bne notbuttonb
+        lda JOY_DATA
+        and #JOY_DATA_UP
+        bne notup
+        dec    ypos
+        lda ypos
+        sta LCD_YPOS
+notup:lda JOY_DATA
+        and #JOY_DATA_DOWN
+        bne notdown
+        inc ypos
+        lda ypos
+        sta LCD_YPOS
+notdown:lda JOY_DATA
+        and #JOY_DATA_LEFT
+        bne notleft
+        dec xpos
+        lda xpos
+        sta LCD_XPOS
+notleft:lda JOY_DATA
+        and #JOY_DATA_RIGHT
+        bne notright
+        inc xpos
+        lda xpos
+        sta LCD_XPOS
+notright:lda JOY_DATA
+        and #JOY_DATA_START
+        bne notstart
+notstart:lda JOY_DATA
+        and #JOY_DATA_SELECT
+        bne notselect
+notselect:lda JOY_DATA
+        and #JOY_DATA_FIRE_A
+        bne notbuttona
+notbuttona:lda JOY_DATA
+        and #JOY_DATA_FIRE_B
+        bne notbuttonb
 notbuttonb:rts
 .endproc
 
+;-------------------------------------------------------------------------------
+
 .proc printstring
-                       sta     psa
-                       stx psa+1
-                       ldx #0
-                       stx     psx
-                       sty psy
+        sta    psa
+        stx psa+1
+        ldx #0
+        stx    psx
+        sty psy
 printstring2:
-                       ldy     #0
-                       lda     (psa),y
-                       beq printstring1
-                       ldx psx
-                       stx     lcd_x
-                       ldy psy
-                       sty     lcd_y
-                       jsr printsign                   
-                       inc psx
-                       lda psa
-                       clc
-                       adc     #1
-                       sta psa
-                       lda psa+1
-                       adc     #0
-                       sta psa+1
-                       jmp printstring2
+        ldy    #0
+        lda    (psa),y
+        beq printstring1
+        ldx psx
+        stx    LCD_X
+        ldy psy
+        sty    LCD_Y
+        jsr printsign
+        inc psx
+        lda psa
+        clc
+        adc    #1
+        sta psa
+        lda psa+1
+        adc    #0
+        sta psa+1
+        jmp printstring2
 printstring1:
-                       rts                     
+        rts
 .endproc
 
 .proc printstringy
-                       sta     psa
-                       stx psa+1
+        sta    psa
+        stx psa+1
 printstring2:
-                       ldy     #0
-                       lda     (psa),y
-                       beq printstring1
-                       jsr printsign                   
-                       lda psa
-                       clc
-                       adc     #1
-                       sta psa
-                       lda psa+1
-                       adc     #0
-                       sta psa+1
-                       jmp printstring2
+        ldy    #0
+        lda    (psa),y
+        beq printstring1
+        jsr printsign
+        lda psa
+        clc
+        adc    #1
+        sta psa
+        lda psa+1
+        adc    #0
+        sta psa+1
+        jmp printstring2
 printstring1:
-                       rts                     
+        rts
 .endproc
 
 
 .proc printhex
-                       pha
-                       lsr
-                       lsr
-                       lsr
-                       lsr
-                       and #$0f
-                       stx     temp_x
-                       tax                     
-                       lda     hex2asc,x
-                       ldx     temp_x
-                       stx     lcd_x
-                       sty     lcd_y
-                       jsr     printsign
-                       pla
-                       and     #$0f
-                       inx
-                       stx     temp_x
-                       tax
-                       lda     hex2asc,x
-                       ldx     temp_x
-                       stx     lcd_x
-                       sty     lcd_y
-                       jmp printsign
+        pha
+        lsr
+        lsr
+        lsr
+        lsr
+        and #$0f
+        stx    temp_x
+        tax
+        lda    hex2asc,x
+        ldx    temp_x
+        stx    LCD_X
+        sty    LCD_Y
+        jsr    printsign
+        pla
+        and    #$0f
+        inx
+        stx    temp_x
+        tax
+        lda    hex2asc,x
+        ldx    temp_x
+        stx    LCD_X
+        sty    LCD_Y
+        jmp printsign
 .endproc
 
 .proc printsign
-                       sty     temp_y
-                       stx     temp_x
-                       sta     temp_a
-                       lda temp_a
-                       sta     addr
-                       lda #0
-                       sta addr+1
-                       asl     addr
-                       rol     addr+1
-                       asl     addr
-                       rol addr+1
-                       asl addr
-                       rol addr+1
-                       lda addr
-                       clc
-                       adc     #<chars
-                       sta     addr
-                       lda     addr+1
-                       adc     #>chars
-                       sta addr+1
-                       ldx     #8
-                       ldy #0
+        sty     temp_y
+        stx     temp_x
+        sta     temp_a
+
+        lda     temp_a
+        sta     addr
+
+        lda     #0
+        sta     addr+1
+        asl     addr
+        rol     addr+1
+        asl     addr
+        rol     addr+1
+        asl     addr
+        rol     addr+1
+
+        lda     addr
+        clc
+        adc     #<chars
+        sta     addr
+        lda     addr+1
+        adc     #>chars
+        sta     addr+1
+
+        ldx     #8
+        ldy     #0
 printsign1:
-                       lda     (addr),y
-                       sta     lcd_data
-                       iny
-                       dex
-                       bne printsign1
-                       ldx     temp_x
-                       ldy     temp_y
-                       rts
+        lda     (addr),y
+        sta     LCD_DATA
+        iny
+        dex
+        bne     printsign1
+
+        ldx     temp_x
+        ldy     temp_y
+        rts
 .endproc
 
diff --git a/util/gamate/gamate-fixcart.c b/util/gamate/gamate-fixcart.c
new file mode 100644 (file)
index 0000000..a994838
--- /dev/null
@@ -0,0 +1,25 @@
+
+#include <stdlib.h>
+#include <stdio.h>
+
+unsigned char buffer[512 * 1024];
+unsigned len;
+FILE *in, *out;
+int n, i;
+
+int main(int argc, char *argv[]) {
+    if (argc < 3) {
+        exit(-1);
+    }
+    in = fopen(argv[1], "rb");
+    out = fopen(argv[2], "wb");
+    len = fread(buffer, 1, 512 * 1024, in);
+    n = 0; for (i = 0x1000; i < 0x2000; i++) {
+        n += buffer[i];
+    }
+    buffer[0] = n & 0xff;
+    buffer[1] = (n >> 8) & 0xff;
+    fwrite(buffer, 1, len, out);
+    fclose(in);
+    fclose(out);
+}