]> git.sur5r.net Git - cc65/commitdiff
Initial Creativision Import 63/head
authorkym <kym@atom.cablenet>
Thu, 5 Dec 2013 11:40:44 +0000 (11:40 +0000)
committerkym <kym@atom.cablenet>
Thu, 5 Dec 2013 11:40:44 +0000 (11:40 +0000)
23 files changed:
asminc/creativision.inc [new file with mode: 0644]
include/creativision.h [new file with mode: 0644]
libsrc/creativision/_scrsize.s [new file with mode: 0644]
libsrc/creativision/boxchars.inc [new file with mode: 0644]
libsrc/creativision/cclear.s [new file with mode: 0644]
libsrc/creativision/cgetc.s [new file with mode: 0644]
libsrc/creativision/chline.s [new file with mode: 0644]
libsrc/creativision/clrscr.s [new file with mode: 0644]
libsrc/creativision/color.s [new file with mode: 0644]
libsrc/creativision/cputc.s [new file with mode: 0644]
libsrc/creativision/ctype.s [new file with mode: 0644]
libsrc/creativision/cvline.s [new file with mode: 0644]
libsrc/creativision/gotox.s [new file with mode: 0644]
libsrc/creativision/gotoxy.s [new file with mode: 0644]
libsrc/creativision/gotoy.s [new file with mode: 0644]
libsrc/creativision/joy.s [new file with mode: 0644]
libsrc/creativision/libref.s [new file with mode: 0644]
libsrc/creativision/mainargs.s [new file with mode: 0644]
libsrc/creativision/psg.s [new file with mode: 0644]
libsrc/creativision/setcursor.s [new file with mode: 0644]
libsrc/creativision/sysuname.s [new file with mode: 0644]
libsrc/creativision/wherex.s [new file with mode: 0644]
libsrc/creativision/wherey.s [new file with mode: 0644]

diff --git a/asminc/creativision.inc b/asminc/creativision.inc
new file mode 100644 (file)
index 0000000..624b65e
--- /dev/null
@@ -0,0 +1,38 @@
+;*
+;** VTech Creativision Definitions
+;*
+
+;** Screen
+SCREEN_ROWS             = 24
+SCREEN_COLS             = 32
+SCREEN_PTR              = $3A
+CURSOR_X                = $3C
+CURSOR_Y                = $3D
+
+;** VDP
+VDP_CONTROL_W           = $3001
+VDP_DATA_W              = $3000
+VDP_STATUS_R            = $2001
+VDP_DATA_R              = $2000
+
+;** PIA
+PIA0_DATA               = $1000
+PIA0_STATUS             = $1001
+PIA1_DATA               = $1002
+PIA1_STATUS             = $1003
+
+;** General
+CH_VLINE                = 33
+CH_HLINE                = 34
+CH_ULCORNER             = 35
+CH_URCORNER             = 36
+CH_LLCORNER             = 37
+CH_LRCORNER             = 38
+
+;** I/O
+ZP_KEYBOARD             = $10
+ZP_JOY0_DIR             = $11
+ZP_JOY1_DIR             = $13
+ZP_JOY_LBUTTONS         = $16
+ZP_JOY_RBUTTONS         = $17
+
diff --git a/include/creativision.h b/include/creativision.h
new file mode 100644 (file)
index 0000000..adaa1ca
--- /dev/null
@@ -0,0 +1,59 @@
+/* CreatiVision Header */
+
+#ifndef _CVISION_H
+
+#define _CVISION_H
+
+#define CH_VLINE 33
+#define CH_HLINE 34
+#define CH_ULCORNER 35
+#define CH_URCORNER 36
+#define CH_LLCORNER 37
+#define CH_LRCORNER 38
+
+#define DYN_DRV 0
+
+/* Colours - from TMS9918 */
+#define C_TRANSPARENT   0
+#define C_BLACK         1
+#define C_MED_GREEN     2 
+#define C_LIGHT_GREEN   3
+#define C_DARK_BLUE     4
+#define C_LIGHT_BLUE    5
+#define C_DARK_RED      6
+#define C_CYAN          7
+#define C_MED_RED       8
+#define C_LIGHT_RED     9
+#define C_DARK_YELLOW   10
+#define C_LIGHT_YELLOW  11
+#define C_DARK_GREEN    12
+#define C_MAGENTA       13
+#define C_GREY          14
+#define C_WHITE         15
+
+/* Joystick states */
+#define JOY_UP          5
+#define JOY_DOWN        1
+#define JOY_LEFT        7
+#define JOY_RIGHT       3
+#define JOY_LEFT_UP     6
+#define JOY_LEFT_DOWN   8
+#define JOY_RIGHT_UP    4
+#define JOY_RIGHT_DOWN  2
+#define JOY_LBUTTON     1
+#define JOY_RBUTTON     2
+
+/* Joystick values */
+#define JOY_LEFT_DIR      1
+#define JOY_RIGHT_DIR     2
+#define JOY_LEFT_BUTTONS  3
+#define JOY_RIGHT_BUTTONS 4                     
+
+/* Protos */
+void __fastcall__ psg_outb( unsigned char b );
+void __fastcall__ psg_delay( unsigned char b );
+void psg_silence( void );
+void __fastcall__ bios_playsound( void *a, unsigned char b);
+unsigned char __fastcall__ joystate( unsigned char which );
+
+#endif
diff --git a/libsrc/creativision/_scrsize.s b/libsrc/creativision/_scrsize.s
new file mode 100644 (file)
index 0000000..fdcc7fc
--- /dev/null
@@ -0,0 +1,15 @@
+;*
+;** _scrsize.s
+;*
+
+    .export             screensize
+    
+    .include    "creativision.inc"
+    
+.proc   screensize
+
+    ldx         #SCREEN_COLS
+    ldy         #SCREEN_ROWS
+    rts
+        
+.endproc
diff --git a/libsrc/creativision/boxchars.inc b/libsrc/creativision/boxchars.inc
new file mode 100644 (file)
index 0000000..0916d49
--- /dev/null
@@ -0,0 +1,62 @@
+; Boxchars
+
+boxchars:
+    ; Vertical Line
+    .byte       $18     
+    .byte       $18
+    .byte       $18
+    .byte       $18
+    .byte       $18
+    .byte       $18
+    .byte       $18
+    .byte       $18
+
+    ; Horizontal Line
+    .byte       0
+    .byte       0
+    .byte       0
+    .byte       $ff
+    .byte       0
+    .byte       0
+    .byte       0
+    .byte       0
+    
+    ; Top Left
+    .byte       0
+    .byte       0
+    .byte       0
+    .byte       $1f
+    .byte       $18
+    .byte       $18
+    .byte       $18
+    .byte       $18     
+    
+    ; Top Right
+    .byte       0
+    .byte       0
+    .byte       0
+    .byte       $F8
+    .byte       $18
+    .byte       $18
+    .byte       $18
+    .byte       $18     
+
+    ; Bottom Left
+    .byte       $18
+    .byte       $18
+    .byte       $18
+    .byte       $1F
+    .byte       0
+    .byte       0
+    .byte       0
+    .byte       0       
+
+    ; Bottom Right
+    .byte       $18
+    .byte       $18
+    .byte       $18
+    .byte       $F8
+    .byte       0
+    .byte       0
+    .byte       0
+    .byte       0       
diff --git a/libsrc/creativision/cclear.s b/libsrc/creativision/cclear.s
new file mode 100644 (file)
index 0000000..507c072
--- /dev/null
@@ -0,0 +1,29 @@
+;*
+;* void cclearxy (unsigned char x, unsigned char y, unsigned char length);
+;* void cclear (unsigned char length);
+;*
+
+    .export     _cclearxy, _cclear
+    .import     popa, _gotoxy, cputdirect
+    .importzp   tmp1
+    
+_cclearxy:
+    pha        ; Save length
+    jsr         popa    ; get Y
+    jsr         _gotoxy
+    pla
+    
+_cclear:
+    cmp         #0      ; Zero length?
+    beq         L2
+    sta         tmp1
+    
+L1:     
+    lda         #$20    ; Space
+    jsr         cputdirect
+    dec         tmp1
+    bne         L1
+    
+L2:     rts
+
+    
diff --git a/libsrc/creativision/cgetc.s b/libsrc/creativision/cgetc.s
new file mode 100644 (file)
index 0000000..f1e8994
--- /dev/null
@@ -0,0 +1,17 @@
+;* cgetc
+
+    .export   _cgetc
+    .include  "creativision.inc"
+    
+_cgetc:
+    lda #$80
+    
+L1:     
+    bit ZP_KEYBOARD
+    bpl L1
+    
+    lda ZP_KEYBOARD
+    and #$7f
+    rts
+    
+    
diff --git a/libsrc/creativision/chline.s b/libsrc/creativision/chline.s
new file mode 100644 (file)
index 0000000..c206180
--- /dev/null
@@ -0,0 +1,24 @@
+;* 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        "creativision.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/creativision/clrscr.s b/libsrc/creativision/clrscr.s
new file mode 100644 (file)
index 0000000..ef800a9
--- /dev/null
@@ -0,0 +1,41 @@
+;*
+;* clrscr
+;*
+;* NB: All screen functions assume Graphics Mode 1 in a default configuration.
+;* Therefore, this is hard coded to use $1000-$12FF as screen VRAM.
+
+    .export     _clrscr
+    .include    "creativision.inc"
+    
+_clrscr:
+
+    sei         ; Disable interrupts. Default INT handler reads VDP_STATUS
+                ; and would lose any setup done here.
+                
+    lda         #$00    ; VRAM offset low
+    sta         VDP_CONTROL_W
+    
+    lda         #$50    ; VRAM offset high ($10 OR $40)
+    sta         VDP_CONTROL_W
+    
+    lda         #$C0    ; Space from ROM setup
+    
+    ldx         #0
+    ldy         #3
+    
+L1:     sta             VDP_DATA_W
+    inx
+    bne         L1
+    dey
+    bne         L1
+    
+    cli                         ; Let interrupts go again
+    
+    lda         #0
+    sta         CURSOR_X
+    sta         CURSOR_Y
+    sta         <SCREEN_PTR
+    lda         #$10
+    sta         >SCREEN_PTR
+    
+    rts
diff --git a/libsrc/creativision/color.s b/libsrc/creativision/color.s
new file mode 100644 (file)
index 0000000..b6fd360
--- /dev/null
@@ -0,0 +1,13 @@
+;*
+;* 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
+    .import     return0
+    .include    "creativision.inc"
+    
+_bordercolor = return0;
+_textcolor = return0;
+_bgcolor = return0;
diff --git a/libsrc/creativision/cputc.s b/libsrc/creativision/cputc.s
new file mode 100644 (file)
index 0000000..902caf2
--- /dev/null
@@ -0,0 +1,125 @@
+;
+; Written by Groepaz/Hitmen <groepaz@gmx.net>
+; Cleanup by Ullrich von Bassewitz <uz@cc65.org>
+;
+; void cputcxy (unsigned char x, unsigned char y, char c);
+; void cputc (char c);
+;
+
+        .export         _cputcxy, _cputc, cputdirect, putchar
+        .export         newline
+        .constructor    initconio
+        .import         popa, _gotoxy
+        .import         setcursor
+
+        .importzp       tmp3,tmp4
+
+        .include        "creativision.inc"
+        .include        "boxchars.inc"
+
+;-----------------------------------------------------------------------------
+
+.code
+
+_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     CURSOR_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     CURSOR_X
+        iny
+        cpy     #SCREEN_COLS
+        bne     L3
+        inc     CURSOR_Y          ; new line
+        ldy     #0              ; + cr
+L3:     sty     CURSOR_X
+        jmp     plot
+
+newline:
+        inc     CURSOR_Y
+
+; Set cursor position, calculate RAM pointers
+
+plot:   ldy     CURSOR_X
+        ldx     CURSOR_Y
+        jmp     setcursor       ; Set the new cursor
+
+
+; Write one character to the screen without doing anything else, return X
+; position in Y
+
+putchar:
+        cmp     #$5B
+        bcc     IS_UPPER
+
+        clc
+        sbc     #$1F
+
+IS_UPPER:
+        cmp     #$20
+        bcc     BAD_CHAR
+
+        pha
+        lda     SCREEN_PTR
+        sei
+        sta             VDP_CONTROL_W
+        lda     SCREEN_PTR+1
+        ora             #$40
+        sta             VDP_CONTROL_W
+        pla
+        clc
+        adc             #160
+        sta             VDP_DATA_W
+        cli
+
+BAD_CHAR:
+        jmp     plot
+        
+;-----------------------------------------------------------------------------
+; Initialize the conio subsystem. Code goes into the INIT segment, which may
+; be reused after startup.
+
+.segment        "INIT"
+
+initconio:
+    lda #$0
+    sta SCREEN_PTR
+    lda #$10
+    sta SCREEN_PTR+1
+
+    ; Copy box characters to slot
+    sei
+    lda #08
+    sta VDP_CONTROL_W
+    lda #$46
+    sta VDP_CONTROL_W
+    ldx #0
+LL:
+    lda boxchars,x
+    sta VDP_DATA_W
+    inx
+    cpx #48
+    bne LL      
+
+    cli
+    jmp plot
diff --git a/libsrc/creativision/ctype.s b/libsrc/creativision/ctype.s
new file mode 100644 (file)
index 0000000..6e0ab17
--- /dev/null
@@ -0,0 +1,172 @@
+;
+; Ullrich von Bassewitz, 02.06.1998
+;
+; Character specification table.
+;
+
+; 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.
+;
+;
+; Bit assignments:
+;
+;   0 - Lower case char
+;   1 - Upper case char
+;   2 - Numeric digit
+;   3 - Hex digit (both, lower and upper)
+;   4 - Control character
+;   5 - The space character itself
+;   6 - Other whitespace (that is: '\f', '\n', '\r', '\t' and '\v')
+;   7 - Space or tab character
+
+        .export         __ctype
+
+__ctype:
+
+.repeat 2       ; 2 times for normal and inverted
+
+        .byte   $10     ;   0/00 ___ctrl_@___
+        .byte   $10     ;   1/01 ___ctrl_A___
+        .byte   $10     ;   2/02 ___ctrl_B___
+        .byte   $10     ;   3/03 ___ctrl_C___
+        .byte   $10     ;   4/04 ___ctrl_D___
+        .byte   $10     ;   5/05 ___ctrl_E___
+        .byte   $10     ;   6/06 ___ctrl_F___
+        .byte   $10     ;   7/07 ___ctrl_G___
+        .byte   $10     ;   8/08 ___ctrl_H___
+        .byte   $D0     ;   9/09 ___ctrl_I___
+        .byte   $50     ;  10/0a ___ctrl_J___
+        .byte   $50     ;  11/0b ___ctrl_K___
+        .byte   $50     ;  12/0c ___ctrl_L___
+        .byte   $50     ;  13/0d ___ctrl_M___
+        .byte   $10     ;  14/0e ___ctrl_N___
+        .byte   $10     ;  15/0f ___ctrl_O___
+        .byte   $10     ;  16/10 ___ctrl_P___
+        .byte   $10     ;  17/11 ___ctrl_Q___
+        .byte   $10     ;  18/12 ___ctrl_R___
+        .byte   $10     ;  19/13 ___ctrl_S___
+        .byte   $10     ;  20/14 ___ctrl_T___
+        .byte   $10     ;  21/15 ___ctrl_U___
+        .byte   $10     ;  22/16 ___ctrl_V___
+        .byte   $10     ;  23/17 ___ctrl_W___
+        .byte   $10     ;  24/18 ___ctrl_X___
+        .byte   $10     ;  25/19 ___ctrl_Y___
+        .byte   $10     ;  26/1a ___ctrl_Z___
+        .byte   $10     ;  27/1b ___ctrl_[___
+        .byte   $10     ;  28/1c ___ctrl_\___
+        .byte   $10     ;  29/1d ___ctrl_]___
+        .byte   $10     ;  30/1e ___ctrl_^___
+        .byte   $10     ;  31/1f ___ctrl_____
+        .byte   $A0     ;  32/20 ___SPACE___
+        .byte   $00     ;  33/21 _____!_____
+        .byte   $00     ;  34/22 _____"_____
+        .byte   $00     ;  35/23 _____#_____
+        .byte   $00     ;  36/24 _____$_____
+        .byte   $00     ;  37/25 _____%_____
+        .byte   $00     ;  38/26 _____&_____
+        .byte   $00     ;  39/27 _____'_____
+        .byte   $00     ;  40/28 _____(_____
+        .byte   $00     ;  41/29 _____)_____
+        .byte   $00     ;  42/2a _____*_____
+        .byte   $00     ;  43/2b _____+_____
+        .byte   $00     ;  44/2c _____,_____
+        .byte   $00     ;  45/2d _____-_____
+        .byte   $00     ;  46/2e _____._____
+        .byte   $00     ;  47/2f _____/_____
+        .byte   $0C     ;  48/30 _____0_____
+        .byte   $0C     ;  49/31 _____1_____
+        .byte   $0C     ;  50/32 _____2_____
+        .byte   $0C     ;  51/33 _____3_____
+        .byte   $0C     ;  52/34 _____4_____
+        .byte   $0C     ;  53/35 _____5_____
+        .byte   $0C     ;  54/36 _____6_____
+        .byte   $0C     ;  55/37 _____7_____
+        .byte   $0C     ;  56/38 _____8_____
+        .byte   $0C     ;  57/39 _____9_____
+        .byte   $00     ;  58/3a _____:_____
+        .byte   $00     ;  59/3b _____;_____
+        .byte   $00     ;  60/3c _____<_____
+        .byte   $00     ;  61/3d _____=_____
+        .byte   $00     ;  62/3e _____>_____
+        .byte   $00     ;  63/3f _____?_____
+
+        .byte   $00     ;  64/40 _____@_____
+        .byte   $0A     ;  65/41 _____A_____
+        .byte   $0A     ;  66/42 _____B_____
+        .byte   $0A     ;  67/43 _____C_____
+        .byte   $0A     ;  68/44 _____D_____
+        .byte   $0A     ;  69/45 _____E_____
+        .byte   $0A     ;  70/46 _____F_____
+        .byte   $02     ;  71/47 _____G_____
+        .byte   $02     ;  72/48 _____H_____
+        .byte   $02     ;  73/49 _____I_____
+        .byte   $02     ;  74/4a _____J_____
+        .byte   $02     ;  75/4b _____K_____
+        .byte   $02     ;  76/4c _____L_____
+        .byte   $02     ;  77/4d _____M_____
+        .byte   $02     ;  78/4e _____N_____
+        .byte   $02     ;  79/4f _____O_____
+        .byte   $02     ;  80/50 _____P_____
+        .byte   $02     ;  81/51 _____Q_____
+        .byte   $02     ;  82/52 _____R_____
+        .byte   $02     ;  83/53 _____S_____
+        .byte   $02     ;  84/54 _____T_____
+        .byte   $02     ;  85/55 _____U_____
+        .byte   $02     ;  86/56 _____V_____
+        .byte   $02     ;  87/57 _____W_____
+        .byte   $02     ;  88/58 _____X_____
+        .byte   $02     ;  89/59 _____Y_____
+        .byte   $02     ;  90/5a _____Z_____
+        .byte   $00     ;  91/5b _____[_____
+        .byte   $00     ;  92/5c _____\_____
+        .byte   $00     ;  93/5d _____]_____
+        .byte   $00     ;  94/5e _____^_____
+        .byte   $00     ;  95/5f _UNDERLINE_
+        .byte   $00     ;  96/60 ___grave___
+        .byte   $09     ;  97/61 _____a_____
+        .byte   $09     ;  98/62 _____b_____
+        .byte   $09     ;  99/63 _____c_____
+        .byte   $09     ; 100/64 _____d_____
+        .byte   $09     ; 101/65 _____e_____
+        .byte   $09     ; 102/66 _____f_____
+        .byte   $01     ; 103/67 _____g_____
+        .byte   $01     ; 104/68 _____h_____
+        .byte   $01     ; 105/69 _____i_____
+        .byte   $01     ; 106/6a _____j_____
+        .byte   $01     ; 107/6b _____k_____
+        .byte   $01     ; 108/6c _____l_____
+        .byte   $01     ; 109/6d _____m_____
+        .byte   $01     ; 110/6e _____n_____
+        .byte   $01     ; 111/6f _____o_____
+        .byte   $01     ; 112/70 _____p_____
+        .byte   $01     ; 113/71 _____q_____
+        .byte   $01     ; 114/72 _____r_____
+        .byte   $01     ; 115/73 _____s_____
+        .byte   $01     ; 116/74 _____t_____
+        .byte   $01     ; 117/75 _____u_____
+        .byte   $01     ; 118/76 _____v_____
+        .byte   $01     ; 119/77 _____w_____
+        .byte   $01     ; 120/78 _____x_____
+        .byte   $01     ; 121/79 _____y_____
+        .byte   $01     ; 122/7a _____z_____
+        .byte   $00     ; 123/7b _____{_____
+        .byte   $00     ; 124/7c _____|_____
+        .byte   $00     ; 125/7d _____}_____
+        .byte   $00     ; 126/7e _____~_____
+        .byte   $40     ; 127/7f ____DEL____
+
+.endrepeat
diff --git a/libsrc/creativision/cvline.s b/libsrc/creativision/cvline.s
new file mode 100644 (file)
index 0000000..4e7d256
--- /dev/null
@@ -0,0 +1,29 @@
+;
+; 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        "creativision.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/creativision/gotox.s b/libsrc/creativision/gotox.s
new file mode 100644 (file)
index 0000000..6970e5d
--- /dev/null
@@ -0,0 +1,19 @@
+;
+; Ullrich von Bassewitz, 2003-05-02
+;
+; void gotox (unsigned char x);
+;
+
+        .export         _gotox
+        .import         setcursor
+
+        .include        "creativision.inc"
+
+.proc   _gotox
+
+        sta     CURSOR_X          ; Set new position
+        tay
+        ldx     CURSOR_Y
+        jmp     setcursor       ; Set the cursor to the new position
+
+.endproc
diff --git a/libsrc/creativision/gotoxy.s b/libsrc/creativision/gotoxy.s
new file mode 100644 (file)
index 0000000..6c0cf93
--- /dev/null
@@ -0,0 +1,22 @@
+;
+; Ullrich von Bassewitz, 06.08.1998
+;
+; void gotoxy (unsigned char x, unsigned char y);
+;
+
+        .export         _gotoxy
+        .import         setcursor
+        .import         popa
+
+        .include        "creativision.inc"
+
+.proc   _gotoxy
+
+        sta     CURSOR_Y          ; Set Y
+        jsr     popa              ; Get X
+        sta     CURSOR_X          ; Set X
+        tay
+        ldx     CURSOR_Y
+        jmp     setcursor       ; Set the cursor position
+
+.endproc
diff --git a/libsrc/creativision/gotoy.s b/libsrc/creativision/gotoy.s
new file mode 100644 (file)
index 0000000..484608d
--- /dev/null
@@ -0,0 +1,19 @@
+;
+; Ullrich von Bassewitz, 2003-05-02
+;
+; void gotoy (unsigned char y);
+;
+
+        .export         _gotoy
+        .import         setcursor
+
+        .include        "creativision.inc"
+
+.proc   _gotoy
+
+        sta     CURSOR_Y        ; Set new position
+        tax
+        ldy     CURSOR_X
+        jmp     setcursor       ; Set the cursor to the new position
+
+.endproc
diff --git a/libsrc/creativision/joy.s b/libsrc/creativision/joy.s
new file mode 100644 (file)
index 0000000..f1c9b09
--- /dev/null
@@ -0,0 +1,58 @@
+;*
+;* Creativision Joystick Function
+;* 
+;* unsigned char __fastcall__ joystate(unsigned char joy);
+;*
+;* JOY_1 -> Return Left Joystick direction
+;* JOY_2 -> Return Right Joystick direction
+;* JOY_3 -> Return Left Joystick buttons
+;* JOY_4 -> Return Right Joystick buttons
+;*
+;* Will only work if interrupts are enabled.
+
+        .export         _joystate
+        .include        "creativision.inc"
+        
+_joystate:
+        cmp             #1      ; Left Direction
+        bne             l1
+        
+        lda             $11
+        beq             l5
+        and             #$f
+        lsr             a
+        tax
+        inx
+        txa
+        rts
+        
+l1:     cmp             #2      ; Right Direction
+        bne             l2
+        
+        lda             $13
+        beq             l5
+        and             #$f
+        lsr             a
+        tax
+        inx
+        txa
+        rts
+        
+l2:     cmp             #3      ; Left Buttons
+        bne             l3
+        
+        lda             $16
+        beq             l5
+        and             #$f
+        rts
+        
+l3:     cmp             #4
+        bne             l4
+        
+        lda             $17
+        beq             l5
+        and             #$f
+        rts
+        
+l4:     lda             #0
+l5:     rts
diff --git a/libsrc/creativision/libref.s b/libsrc/creativision/libref.s
new file mode 100644 (file)
index 0000000..d947c1a
--- /dev/null
@@ -0,0 +1,9 @@
+;
+; Oliver Schmidt, 2013-05-31
+;
+
+        .export         joy_libref, tgi_libref
+        .import         _exit
+
+joy_libref      := _exit
+tgi_libref      := _exit
diff --git a/libsrc/creativision/mainargs.s b/libsrc/creativision/mainargs.s
new file mode 100644 (file)
index 0000000..7ed8d46
--- /dev/null
@@ -0,0 +1,24 @@
+;
+; Ullrich von Bassewitz, 2003-03-07
+;
+; Setup arguments for main
+;
+
+
+        .constructor    initmainargs, 24
+        .import         __argc, __argv
+
+
+;---------------------------------------------------------------------------
+; Get possible command-line arguments. Goes into the special INIT segment,
+; which may be reused after the startup code is run
+
+.segment        "INIT"
+
+.proc   initmainargs
+
+        rts
+
+.endproc
+
+
diff --git a/libsrc/creativision/psg.s b/libsrc/creativision/psg.s
new file mode 100644 (file)
index 0000000..12b4743
--- /dev/null
@@ -0,0 +1,68 @@
+; void __fastcall__ psg_outb( unsigned char b );
+; void __fastcall__ psg_delayms( unsigned char c);
+; void __fastcall__ bios_playsound( void *b, unsigned char c);
+; void psg_silence( void );
+
+    .export     _psg_outb, _psg_silence, _psg_delay
+    .export     _bios_playsound
+    .import     popa
+    .include    "creativision.inc"
+    
+_psg_outb:
+
+    ;* Let BIOS output the value
+    jmp $FE77
+    
+_psg_silence:
+
+    jmp $FE54
+    
+    
+_psg_delay:
+
+    tay
+l1:     
+    lda #200
+l2:
+    sbc #1
+    bne l2
+    
+    lda #200
+l3:
+    sbc #1
+    bne l3
+    
+    dey
+    bne l1
+    
+    rts
+    
+
+;* Creativision Sound Player
+;*
+;* Based on BIOS sound player.
+;* Pass a pointer to a set of note triples, terminated with a tempo byte
+;* and the len (max 255)
+
+_bios_playsound:
+
+    pha                 ; Save Length Byte
+    
+    sei
+        
+    lda         #$D5    ; BIOS volume table low
+    sta         $4
+    lda         #$FC    ; BIOS volume table high
+    sta         $5
+    
+    jsr         popa    ; Get Sound table pointer low
+    sta         $0
+    jsr         popa    ; Get Sound table pointer high
+    sta         $1
+    
+    pla
+    tay                 ; Put length in Y
+    dey
+    php
+    jmp         $fbed   ; Let BIOS do it's thing
+        
diff --git a/libsrc/creativision/setcursor.s b/libsrc/creativision/setcursor.s
new file mode 100644 (file)
index 0000000..9918cbc
--- /dev/null
@@ -0,0 +1,36 @@
+;
+; Written by Groepaz/Hitmen <groepaz@gmx.net>
+; Cleanup by Ullrich von Bassewitz <uz@cc65.org>
+;
+; Set the cursor position
+
+        .export         setcursor
+
+        .include        "creativision.inc"
+
+;-----------------------------------------------------------------------------
+
+.proc   setcursor
+
+        tya
+        clc
+        adc     addrlo,x
+        sta     SCREEN_PTR
+
+        lda     addrhi,x
+        adc     #0
+        sta     SCREEN_PTR+1
+        rts
+
+.endproc
+
+;-----------------------------------------------------------------------------
+; Tables with screen addresses
+
+addrlo: .repeat SCREEN_ROWS,line
+        .byte <($1000+(line*SCREEN_COLS))
+        .endrepeat
+
+addrhi: .repeat SCREEN_ROWS,line
+        .byte >($1000+(line*SCREEN_COLS))
+        .endrepeat
diff --git a/libsrc/creativision/sysuname.s b/libsrc/creativision/sysuname.s
new file mode 100644 (file)
index 0000000..df1a81b
--- /dev/null
@@ -0,0 +1,39 @@
+;
+; Ullrich von Bassewitz, 2003-08-12
+;
+; unsigned char __fastcall__ _sysuname (struct utsname* buf);
+;
+
+        .export         __sysuname, utsdata
+
+        .import         utscopy
+
+        __sysuname = utscopy
+
+;--------------------------------------------------------------------------
+; Data. We define a fixed utsname struct here and just copy it.
+
+.rodata
+
+utsdata:
+        ; sysname
+        .asciiz         "cc65"
+
+        ; nodename
+        .asciiz         ""
+
+        ; release
+        .byte           ((.VERSION >> 8) & $0F) + '0'
+        .byte           '.'
+        .byte           ((.VERSION >> 4) & $0F) + '0'
+        .byte           $00
+
+        ; version
+        .byte           (.VERSION & $0F) + '0'
+        .byte           $00
+
+        ; machine
+        .asciiz         "CREATIVISION"
+
+                            
+
diff --git a/libsrc/creativision/wherex.s b/libsrc/creativision/wherex.s
new file mode 100644 (file)
index 0000000..f9df2d1
--- /dev/null
@@ -0,0 +1,19 @@
+;
+; Ullrich von Bassewitz, 2003-05-02
+;
+; unsigned char wherex (void);
+;
+
+        .export         _wherex
+
+        .include        "creativision.inc"
+
+.proc   _wherex
+
+        lda     CURSOR_X
+        ldx     #$00
+        rts
+
+.endproc
+
+
diff --git a/libsrc/creativision/wherey.s b/libsrc/creativision/wherey.s
new file mode 100644 (file)
index 0000000..6d7b056
--- /dev/null
@@ -0,0 +1,19 @@
+;
+; Ullrich von Bassewitz, 2003-05-02
+;
+; unsigned char wherey (void);
+;
+
+        .export         _wherey
+
+        .include        "creativision.inc"
+
+.proc   _wherey
+
+        lda     CURSOR_Y
+        ldx     #$00
+        rts
+
+.endproc
+
+