diff options
Diffstat (limited to 'hacks/images/m6502/texture.asm')
| -rw-r--r-- | hacks/images/m6502/texture.asm | 393 |
1 files changed, 0 insertions, 393 deletions
diff --git a/hacks/images/m6502/texture.asm b/hacks/images/m6502/texture.asm deleted file mode 100644 index b63d0a2..0000000 --- a/hacks/images/m6502/texture.asm +++ /dev/null @@ -1,393 +0,0 @@ -; -*- mode: c; tab-width: 4; fill-column: 128 -*- -; vi: set ts=4 tw=128: - -; Texture, Copyright (c) 2017 Dave Odell <dmo2118@gmail.com> -; -; Permission to use, copy, modify, distribute, and sell this software and its -; documentation for any purpose is hereby granted without fee, provided that -; the above copyright notice appear in all copies and that both that -; copyright notice and this permission notice appear in supporting -; documentation. No representations are made about the suitability of this -; software for any purpose. It is provided "as is" without express or -; implied warranty. - -; A port of 20 year old QBasic code to a much more modern platform. - - - - - - lda $fe - sta src_row - - ldy #0 -top_loop: - lda $fe - and #$f - sbc #$8 - adc src_row,y - iny - sta src_row,y - cpy #31 - bne top_loop - -lda #$00 -sta $0 -lda #$02 -sta $1 - -init_loop: - jsr tex - clc - lda $0 - adc #$20 - sta $0 - lda $1 - adc #0 - sta $1 - cmp #$06 - bne init_loop - -lda #$e0 -sta $0 -lda #$05 -sta $1 - -loop: - ;jmp skip_blit - - clc - lda #0 - blit_loop2: - tay - lda $0220,y - sta $0200,y - lda $0221,y - sta $0201,y - lda $0222,y - sta $0202,y - lda $0223,y - sta $0203,y - lda $0224,y - sta $0204,y - lda $0225,y - sta $0205,y - lda $0226,y - sta $0206,y - lda $0227,y - sta $0207,y - - tya - adc #8 - bne blit_loop2 - - clc - lda #0 - blit_loop3: - tay - lda $0320,y - sta $0300,y - lda $0321,y - sta $0301,y - lda $0322,y - sta $0302,y - lda $0323,y - sta $0303,y - lda $0324,y - sta $0304,y - lda $0325,y - sta $0305,y - lda $0326,y - sta $0306,y - lda $0327,y - sta $0307,y - - tya - adc #8 - bne blit_loop3 - - clc - lda #0 - blit_loop4: - tay - lda $0420,y - sta $0400,y - lda $0421,y - sta $0401,y - lda $0422,y - sta $0402,y - lda $0423,y - sta $0403,y - lda $0424,y - sta $0404,y - lda $0425,y - sta $0405,y - lda $0426,y - sta $0406,y - lda $0427,y - sta $0407,y - - tya - adc #8 - bne blit_loop4 - - lda #0 - blit_loop5: - tay - lda $0520,y - sta $0500,y - lda $0521,y - sta $0501,y - lda $0522,y - sta $0502,y - lda $0523,y - sta $0503,y - lda $0524,y - sta $0504,y - lda $0525,y - sta $0505,y - lda $0526,y - sta $0506,y - lda $0527,y - sta $0507,y - - tya - clc - adc #8 - cmp #$e0 - bne blit_loop5 - - skip_blit: - - jsr tex -jmp loop - -tex: - lda $fe - and #$f - sbc #$8 - adc src_row - sta src_row - - ldy #0 - tax - lda pal0,x - sta ($0),y - tex_loop0: - lda $fe - and #$f - sbc #$8 - ;clc - adc src_row,y - iny - ;clc - adc src_row,y - ror - sta src_row,y - - tax - lda pal0,x - sta ($0),y - - cpy #31 - bne tex_loop0 - rts - -pal0: - dcb $00, $00, $00, $00, $00, $00, $00, $00 - dcb $00, $00, $0b, $0b, $0b, $0b, $0b, $0b - dcb $0b, $0b, $0b, $0b, $0b, $0b, $0b, $0b - dcb $0c, $0c, $0c, $0c, $0c, $0c, $0c, $0c - dcb $0c, $0c, $0c, $0c, $0c, $0c, $0c, $0c - dcb $0f, $0f, $0f, $0f, $0f, $0f, $0f, $0f - dcb $0f, $0f, $0f, $0f, $0f, $0f, $0f, $0f - dcb $0f, $01, $01, $01, $01, $01, $01, $01 - dcb $01, $01, $01, $01, $01, $01, $01, $01 - dcb $0f, $0f, $0f, $0f, $0f, $0f, $0f, $0f - dcb $0f, $0f, $0f, $0f, $0f, $0f, $0f, $0f - dcb $0f, $0c, $0c, $0c, $0c, $0c, $0c, $0c - dcb $0c, $0c, $0c, $0c, $0c, $0c, $0c, $0c - dcb $0c, $0b, $0b, $0b, $0b, $0b, $0b, $0b - dcb $0b, $0b, $0b, $0b, $0b, $0b, $0b, $00 - dcb $00, $00, $00, $00, $00, $00, $00, $00 - dcb $00, $00, $00, $00, $00, $00, $00, $00 - dcb $00, $00, $00, $00, $00, $00, $00, $00 - dcb $0b, $0b, $0b, $0b, $0b, $0b, $0b, $0b - dcb $0b, $0b, $0b, $0b, $0b, $0b, $0b, $0b - dcb $0b, $0b, $0b, $0b, $0b, $0b, $05, $05 - dcb $05, $05, $05, $05, $05, $05, $05, $05 - dcb $05, $05, $05, $05, $05, $05, $05, $05 - dcb $0d, $0d, $0d, $0d, $0d, $0d, $0d, $0d - dcb $0d, $0d, $0d, $0d, $0d, $0d, $0d, $0d - dcb $0d, $05, $05, $05, $05, $05, $05, $05 - dcb $05, $05, $05, $05, $05, $05, $05, $05 - dcb $05, $05, $05, $0b, $0b, $0b, $0b, $0b - dcb $0b, $0b, $0b, $0b, $0b, $0b, $0b, $0b - dcb $0b, $0b, $0b, $0b, $0b, $0b, $0b, $0b - dcb $0b, $00, $00, $00, $00, $00, $00, $00 - dcb $00, $00, $00, $00, $00, $00, $00, $00 - -src_row: - ; (32 bytes) - -; A full-resolution version of the same thing. Not perhaps the most interesting thing to look at. - -;#include "screenhack.h" -; -;#include <inttypes.h> -; -;struct texture -;{ -; unsigned width, height; -; Colormap colormap; -; GC gc; -; unsigned long palette[128]; -; XImage *image; -; uint8_t *row; -; unsigned graininess; -; unsigned lines; -;}; -; -;#define GRAIN(self) (NRAND((self)->graininess * 2 + 1) - (self)->graininess) -; -;static void _put_line(struct texture *self, Display *dpy, Window window, unsigned y) -;{ -; unsigned x; -; for(x = 0; x != self->width; ++x) -; { -; unsigned c1 = self->row[x]; -; unsigned c0 = c1; -; if(c0 & 64) -; c0 ^= 127; -; XPutPixel(self->image, x, 0, self->palette[(c0 & 63) | ((c1 & 0x80) >> 1)]); -; } -; -; XPutImage(dpy, window, self->gc, self->image, 0, 0, 0, y, self->width, 1); -; -; *self->row += GRAIN(self); -; -; for(x = 1; x != self->width; ++x); -; { -; unsigned avg = self->row[x - 1] + self->row[x]; -; self->row[x] = ((avg + ((avg & 2) >> 1)) >> 1) + GRAIN(self); -; } -; -; -;} -; -;static void texture_reshape(Display *dpy, Window window, void *self_raw, unsigned w, unsigned h) -;{ -; struct texture *self = self_raw; -; unsigned x, y; -; -; if(w == self->width && h == self->height) -; return; -; -; self->image->bytes_per_line = 0; -; self->image->width = w; -; XInitImage(self->image); -; -; free(self->row); -; self->row = malloc(w); -; free(self->image->data); -; self->image->data = malloc(w * self->image->bytes_per_line); -; -; self->width = w; -; self->height = h; -; -; *self->row = NRAND(0xff); -; for(x = 1; x != self->width; ++x) -; self->row[x] = self->row[x - 1] + GRAIN(self); -; -; for(y = 0; y != self->height; ++y) -; _put_line(self, dpy, window, y); -;} -; -;static void *texture_init(Display *dpy, Window window) -;{ -; static const XGCValues gcv_src = {GXcopy}; -; XGCValues gcv = gcv_src; -; struct texture *self = malloc(sizeof(*self)); -; XWindowAttributes xwa; -; unsigned i; -; -; XGetWindowAttributes(dpy, window, &xwa); -; self->width = 0; -; self->height = 0; -; self->colormap = xwa.colormap; -; -; self->graininess = get_integer_resource(dpy, "graininess", "Graininess"); -; self->lines = get_integer_resource(dpy, "speed", "Speed"); -; -; for(i = 0; i != 64; ++i) -; { -; XColor color; -; unsigned short a = i * (0x10000 / 64); -; -; color.red = a; -; color.green = a; -; color.blue = a; -; if(!XAllocColor(dpy, xwa.colormap, &color)) -; abort(); -; self->palette[i] = color.pixel; -; -; color.red = 0; -; color.green = a; -; color.blue = 0; -; if(!XAllocColor(dpy, xwa.colormap, &color)) -; abort(); -; self->palette[i | 64] = color.pixel; -; } -; -; self->gc = XCreateGC(dpy, window, GCFunction, &gcv); -; self->image = XCreateImage(dpy, xwa.visual, xwa.depth, ZPixmap, 0, NULL, 0, 1, 32, 0); -; self->row = NULL; -; -; texture_reshape(dpy, window, self, xwa.width, xwa.height); -; -; return self; -;} -; -;static unsigned long texture_draw(Display *dpy, Window window, void *self_raw) -;{ -; struct texture *self = self_raw; -; unsigned y; -; XCopyArea(dpy, window, window, self->gc, 0, self->lines, self->width, self->height - self->lines, 0, 0); -; for(y = 0; y != self->lines; ++y) -; _put_line(self, dpy, window, self->height - self->lines + y); -; return 16667; -;} -; -;static Bool texture_event (Display *dpy, Window window, void *self_raw, XEvent *event) -;{ -; return False; -;} -; -;static void texture_free(Display *dpy, Window window, void *self_raw) -;{ -; struct texture *self = self_raw; -; -; XFreeGC(dpy, self->gc); -; XFreeColors(dpy, self->colormap, self->palette, 128, 0); -; XDestroyImage(self->image); -; free(self->row); -; free(self); -;} -; -;static const char *texture_defaults[] = -;{ -; "*speed: 2", -; "*graininess: 1", -; "*fpsSolid: True", -; "*fpsTop: True", -; 0 -;}; -; -;static XrmOptionDescRec texture_options[] = -;{ -; {"-speed", ".speed", XrmoptionSepArg, 0}, -; {"-graininess", ".graininess", XrmoptionSepArg, 0}, -; {0, 0, 0, 0} -;}; -; -;XSCREENSAVER_MODULE("Texture", texture) |
