From 58b9530c2be322d7ca794fc9e1d505d72c4d9039 Mon Sep 17 00:00:00 2001 From: cuz Date: Fri, 2 May 2003 15:00:45 +0000 Subject: [PATCH] More additions git-svn-id: svn://svn.cc65.org/cc65/trunk@2128 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- libsrc/nes/Makefile | 1 + libsrc/nes/cclear.s | 30 +++++++ libsrc/nes/chline.s | 32 ++++++++ libsrc/nes/clrscr.s | 72 +++++++++++++++++ libsrc/nes/ctype.s | 172 +++++++++++++++++++++++++++++++++++++++++ libsrc/nes/cvline.s | 32 ++++++++ libsrc/nes/getenv.s | 12 +++ libsrc/nes/gotox.s | 21 +++++ libsrc/nes/gotoxy.s | 24 ++++++ libsrc/nes/gotoy.s | 22 ++++++ libsrc/nes/mainargs.s | 21 +++++ libsrc/nes/randomize.s | 18 +++++ libsrc/nes/revers.s | 27 +++++++ libsrc/nes/wherex.s | 19 +++++ libsrc/nes/wherey.s | 19 +++++ 15 files changed, 522 insertions(+) create mode 100644 libsrc/nes/cclear.s create mode 100644 libsrc/nes/chline.s create mode 100644 libsrc/nes/clrscr.s create mode 100644 libsrc/nes/ctype.s create mode 100644 libsrc/nes/cvline.s create mode 100644 libsrc/nes/getenv.s create mode 100644 libsrc/nes/gotox.s create mode 100644 libsrc/nes/gotoxy.s create mode 100644 libsrc/nes/gotoy.s create mode 100644 libsrc/nes/mainargs.s create mode 100644 libsrc/nes/randomize.s create mode 100644 libsrc/nes/revers.s create mode 100644 libsrc/nes/wherex.s create mode 100644 libsrc/nes/wherey.s diff --git a/libsrc/nes/Makefile b/libsrc/nes/Makefile index 19af48811..e5148d517 100644 --- a/libsrc/nes/Makefile +++ b/libsrc/nes/Makefile @@ -27,6 +27,7 @@ S_OBJS = _scrsize.o \ color.o \ cputc.o \ crt0.o \ + ctype.o \ cvline.o \ getenv.o \ gotox.o \ diff --git a/libsrc/nes/cclear.s b/libsrc/nes/cclear.s new file mode 100644 index 000000000..586459cb0 --- /dev/null +++ b/libsrc/nes/cclear.s @@ -0,0 +1,30 @@ +; +; Ullrich von Bassewitz, 08.08.1998 +; +; 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 the length + jsr popa ; Get y + jsr _gotoxy ; Call this one, will pop params + pla ; Restore the length and run into _cclear + +_cclear: + cmp #0 ; Is the length zero? + beq L9 ; Jump if done + sta tmp1 +L1: lda #$20 ; Blank - screen code + jsr cputdirect ; Direct output + dec tmp1 + bne L1 +L9: rts + + + + diff --git a/libsrc/nes/chline.s b/libsrc/nes/chline.s new file mode 100644 index 000000000..2a1b38210 --- /dev/null +++ b/libsrc/nes/chline.s @@ -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 "nes.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/nes/clrscr.s b/libsrc/nes/clrscr.s new file mode 100644 index 000000000..69af11562 --- /dev/null +++ b/libsrc/nes/clrscr.s @@ -0,0 +1,72 @@ +; +; Written by Groepaz/Hitmen +; Cleanup by Ullrich von Bassewitz +; +; void clrscr (void); +; + + .export _clrscr + .import ppubuf_waitempty + + .include "nes.inc" + + +.proc _clrscr + +; wait until all console data has been written + + jsr ppubuf_waitempty + +; wait for vblank + + lda #0 + sta VBLANK_FLAG +@w2: lda VBLANK_FLAG + beq @w2 + +; switch screen off + + lda #%00000000 + sta PPU_CTRL2 + +; Set start address to Name Table #1 + + lda #$20 + sta PPU_VRAM_ADDR2 + lda #$00 + sta PPU_VRAM_ADDR2 + +; Clear Name Table #1 + + lda #' ' + ldx #$f0 ; 4*$f0=$03c0 + +beg: sta PPU_VRAM_IO + sta PPU_VRAM_IO + sta PPU_VRAM_IO + sta PPU_VRAM_IO + dex + bne beg + + lda #$23 ; + sta PPU_VRAM_ADDR2 ; Set start address to PPU address $23C0 + lda #$C0 ; (1st attribute table) + sta PPU_VRAM_ADDR2 + + ldx #$00 + +lll: lda #$00 ; Write attribute table value and auto increment + sta PPU_VRAM_IO ; to next address + inx + cpx #$40 + bne lll + +; switch screen on again + + lda #%00011110 + sta PPU_CTRL2 + rts + +.endproc + + diff --git a/libsrc/nes/ctype.s b/libsrc/nes/ctype.s new file mode 100644 index 000000000..42de7592b --- /dev/null +++ b/libsrc/nes/ctype.s @@ -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/nes/cvline.s b/libsrc/nes/cvline.s new file mode 100644 index 000000000..42de7220e --- /dev/null +++ b/libsrc/nes/cvline.s @@ -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 "nes.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/nes/getenv.s b/libsrc/nes/getenv.s new file mode 100644 index 000000000..c69ec35bc --- /dev/null +++ b/libsrc/nes/getenv.s @@ -0,0 +1,12 @@ +; +; Ullrich von Bassewitz, 2003-05-02 +; +; char* getenv (const char* name); +; + + .export _getenv + .import return0 + +_getenv = return0 ; "not found" + + diff --git a/libsrc/nes/gotox.s b/libsrc/nes/gotox.s new file mode 100644 index 000000000..f6750bc98 --- /dev/null +++ b/libsrc/nes/gotox.s @@ -0,0 +1,21 @@ +; +; Ullrich von Bassewitz, 2003-05-02 +; +; void gotox (unsigned char x); +; + + .export _gotox + .import setcursor + + .include "nes.inc" + +.proc _gotox + + sta CURS_X ; Set new position + tay + ldx CURS_Y + jmp setcursor ; Set the cursor to the new position + +.endproc + + diff --git a/libsrc/nes/gotoxy.s b/libsrc/nes/gotoxy.s new file mode 100644 index 000000000..da4ce632b --- /dev/null +++ b/libsrc/nes/gotoxy.s @@ -0,0 +1,24 @@ +; +; Ullrich von Bassewitz, 06.08.1998 +; +; void gotoxy (unsigned char x, unsigned char y); +; + + .export _gotoxy + .import setcursor + .import popa + + .include "nes.inc" + +.proc _gotoxy + + sta CURS_Y ; Set Y + jsr popa ; Get X + sta CURS_X ; Set X + tay + ldx CURS_Y + jmp setcursor ; Set the cursor position + +.endproc + + diff --git a/libsrc/nes/gotoy.s b/libsrc/nes/gotoy.s new file mode 100644 index 000000000..6f2f6856a --- /dev/null +++ b/libsrc/nes/gotoy.s @@ -0,0 +1,22 @@ +; +; Ullrich von Bassewitz, 2003-05-02 +; +; void gotoy (unsigned char y); +; + + .export _gotoy + .import setcursor + + .include "nes.inc" + +.proc _gotoy + + sta CURS_Y ; Set new position + tax + ldy CURS_X + jmp setcursor ; Set the cursor to the new position + +.endproc + + + diff --git a/libsrc/nes/mainargs.s b/libsrc/nes/mainargs.s new file mode 100644 index 000000000..ebe6d0348 --- /dev/null +++ b/libsrc/nes/mainargs.s @@ -0,0 +1,21 @@ +; +; Ullrich von Bassewitz, 2003-03-07 +; +; Setup arguments for main +; + + + .constructor initmainargs, 24 + .import __argc, __argv + + +;--------------------------------------------------------------------------- +; Setup arguments for main + +.proc initmainargs + + rts + +.endproc + + diff --git a/libsrc/nes/randomize.s b/libsrc/nes/randomize.s new file mode 100644 index 000000000..8336b17c6 --- /dev/null +++ b/libsrc/nes/randomize.s @@ -0,0 +1,18 @@ +; +; Ullrich von Bassewitz, 2003-05-02 +; +; void _randomize (void); +; /* Initialize the random number generator */ +; + + .export __randomize + .import _srand + + .include "nes.inc" + +__randomize: + ldx tickcount ; Use tick clock + lda tickcount+1 + jmp _srand ; Initialize generator + + diff --git a/libsrc/nes/revers.s b/libsrc/nes/revers.s new file mode 100644 index 000000000..32144c9e2 --- /dev/null +++ b/libsrc/nes/revers.s @@ -0,0 +1,27 @@ +; +; Ullrich von Bassewitz, 07.08.1998 +; +; unsigned char revers (unsigned char onoff); +; + + .export _revers + + .include "nes.inc" + +.proc _revers + + ldx #$00 ; Assume revers off + tay ; Test onoff + beq L1 ; Jump if off + ldx #$80 ; Load on value + ldy #$00 ; Assume old value is zero +L1: lda RVS ; Load old value + stx RVS ; Set new value + beq L2 ; Jump if old value zero + iny ; Make old value = 1 +L2: ldx #$00 ; Load high byte of result + tya ; Load low byte, set CC + rts + +.endproc + diff --git a/libsrc/nes/wherex.s b/libsrc/nes/wherex.s new file mode 100644 index 000000000..347d1fdbe --- /dev/null +++ b/libsrc/nes/wherex.s @@ -0,0 +1,19 @@ +; +; Ullrich von Bassewitz, 2003-05-02 +; +; unsigned char wherex (void); +; + + .export _wherex + + .include "nes.inc" + +.proc _wherex + + lda CURS_X + ldx #$00 + rts + +.endproc + + diff --git a/libsrc/nes/wherey.s b/libsrc/nes/wherey.s new file mode 100644 index 000000000..af6ead4b6 --- /dev/null +++ b/libsrc/nes/wherey.s @@ -0,0 +1,19 @@ +; +; Ullrich von Bassewitz, 2003-05-02 +; +; unsigned char wherey (void); +; + + .export _wherey + + .include "nes.inc" + +.proc _wherey + + lda CURS_Y + ldx #$00 + rts + +.endproc + + -- 2.39.5