Added polycat

This commit is contained in:
neauoire 2021-02-20 14:07:20 -08:00
parent aa96d7f6dd
commit 6a095e8a22
6 changed files with 143 additions and 105 deletions

View File

@ -20,5 +20,5 @@ cc -std=c89 -DDEBUG -Wall -Wno-unknown-pragmas -Wpedantic -Wshadow -Wextra -Werr
# cc uxn.c emulator.c -std=c89 -Os -DNDEBUG -g0 -s -Wall -Wno-unknown-pragmas -L/usr/local/lib -lSDL2 -o bin/emulator
# run
./bin/assembler examples/devctrl.usm bin/boot.rom
./bin/assembler examples/devmouse.usm bin/boot.rom
./bin/emulator bin/boot.rom

View File

@ -99,8 +99,8 @@ paintchr(Uint8 *dst, Uint16 x, Uint16 y, Uint8 *sprite)
Uint16 v, h;
for(v = 0; v < 8; v++)
for(h = 0; h < 8; h++) {
Uint8 ch1 = ((sprite[v] >> h) & 0x1);
Uint8 ch2 = (((sprite[v + 8] >> h) & 0x1) << 1);
Uint8 ch1 = ((sprite[v] >> (7 - h)) & 0x1);
Uint8 ch2 = (((sprite[v + 8] >> (7 - h)) & 0x1) << 1);
paintpixel(dst, x + h, y + v, ch1 + ch2);
}
}
@ -266,8 +266,14 @@ domouse(SDL_Event *event)
devmouse->mem[4] = event->button.button == SDL_BUTTON_LEFT;
devmouse->mem[5] = 0x00;
switch(event->type) {
case SDL_MOUSEBUTTONUP: devmouse->mem[5] = 0x10; break;
case SDL_MOUSEBUTTONDOWN: devmouse->mem[5] = 0x01; break;
case SDL_MOUSEBUTTONUP:
devmouse->mem[4] = 0;
devmouse->mem[5] = 0x10;
break;
case SDL_MOUSEBUTTONDOWN:
devmouse->mem[4] = event->button.button == SDL_BUTTON_LEFT;
devmouse->mem[5] = 0x01;
break;
}
}

132
examples/devmouse.usm Normal file
View File

@ -0,0 +1,132 @@
( mouse )
:dev/r fff8 ( std read port )
:dev/w fff9 ( std write port )
;mousex 2 ;mousey 2
;lastx 2 ;lasty 2
;catx 2 ;caty 2
;state 1 ;timer 1
|0100 @RESET
#05 =dev/r ( set dev/read mouse )
#02 =dev/w ( set dev/write to sprite )
( position cat )
#0050 =catx #0058 =caty
( draw polycat )
,draw-polycat JSR
BRK
|c000 @FRAME
( clear last cursor )
#10 ,clear_icn ~lastx ~lasty ,draw-sprite JSR
( record mouse positions )
#00 IOR2 =mousex #02 IOR2 =mousey
( record mouse state )
#04 IOR #11 ADD =state
#04 IOR #01 NEQ ,no-click ROT JMP? POP2
#50 =timer
@no-click
( draw mouse )
~state ,cursor_icn ~mousex ~mousey ,draw-sprite JSR
( animate )
,animate-polycat JSR
( update last pos )
~mousex =lastx ~mousey =lasty
~timer #01 ADD =timer
BRK
@draw-polycat
( ears )
,polycat ~catx ~caty ,draw-sprite-chr JSR
,polycat #0010 ADD2 ~catx #0008 ADD2 ~caty ,draw-sprite-chr JSR
( eye )
,polycat #0020 ADD2 ~catx ~caty #0008 ADD2 ,draw-sprite-chr JSR
,polycat #0030 ADD2 ~catx #0008 ADD2 ~caty #0008 ADD2 ,draw-sprite-chr JSR
( body )
,polycat #00a0 ADD2 ~catx ~caty #0010 ADD2 ,draw-sprite-chr JSR
,polycat #00b0 ADD2 ~catx #0008 ADD2 ~caty #0010 ADD2 ,draw-sprite-chr JSR
RTS
@animate-polycat
( tail )
~timer #50 NEQ ,animate-polycat-tail-next0 ROT JMP? POP2
,polycat #00c0 ADD2 ~catx #0008 ADD2 ~caty #0010 ADD2 ,draw-sprite-chr JSR
@animate-polycat-tail-next0
~timer #58 NEQ ,animate-polycat-tail-next1 ROT JMP? POP2
,polycat #00d0 ADD2 ~catx #0008 ADD2 ~caty #0010 ADD2 ,draw-sprite-chr JSR
@animate-polycat-tail-next1
~timer #60 NEQ ,animate-polycat-tail-next2 ROT JMP? POP2
,polycat #00b0 ADD2 ~catx #0008 ADD2 ~caty #0010 ADD2 ,draw-sprite-chr JSR
@animate-polycat-tail-next2
( look-at )
~mousex ~catx #0008 ADD2 GTH2 ,animate-polycat-right ROT JMP? POP2
@animate-polycat-left
~mousey ~caty #0008 ADD2 GTH2 ,animate-polycat-left-down ROT JMP? POP2
@animate-polycat-left-up
,polycat #0040 ADD2 ~catx ~caty #0008 ADD2 ,draw-sprite-chr JSR
,polycat #0050 ADD2 ~catx #0008 ADD2 ~caty #0008 ADD2 ,draw-sprite-chr JSR
RTS
@animate-polycat-left-down
,polycat #0020 ADD2 ~catx ~caty #0008 ADD2 ,draw-sprite-chr JSR
,polycat #0030 ADD2 ~catx #0008 ADD2 ~caty #0008 ADD2 ,draw-sprite-chr JSR
RTS
@animate-polycat-right
~mousey ~caty #0008 ADD2 GTH2 ,animate-polycat-right-down ROT JMP? POP2
@animate-polycat-right-up
,polycat #0060 ADD2 ~catx ~caty #0008 ADD2 ,draw-sprite-chr JSR
,polycat #0070 ADD2 ~catx #0008 ADD2 ~caty #0008 ADD2 ,draw-sprite-chr JSR
RTS
@animate-polycat-right-down
,polycat #0080 ADD2 ~catx ~caty #0008 ADD2 ,draw-sprite-chr JSR
,polycat #0090 ADD2 ~catx #0008 ADD2 ~caty #0008 ADD2 ,draw-sprite-chr JSR
RTS
RTS
@draw-sprite
IOW2 ( y byte )
IOW2 ( x byte )
IOW2 ( sprite address )
IOW ( layer-color )
RTS
@draw-sprite-chr
IOW2 ( y byte )
IOW2 ( x byte )
IOW2 ( sprite address )
#08 IOW ( layer-color )
RTS
@clear_icn [ 0000 0000 0000 0000 ]
@cursor_icn [ 80c0 e0f0 f8e0 1000 ]
@polycat [
0081c 3e3e 7f7f ffff 081c 3e3e 7f7f fffc
081c 3c3e 7e7e ffff 081c 3c3e 7e7e ff1f
ffff ffff ff7f 3f0f f0e7 cfef f77c 3f0f
ffff ffff fffe fcf0 0783 c1c3 871e fcf0
ffff ffff ff7f 3f0f f7ef cfe7 f07c 3f0f
ffff ffff fffe fcf0 87c3 c183 071e fcf0
ffff ffff ff7f 3f0f f0e1 c1e0 f07c 3f0f
ffff ffff fffe fcf0 f7fb f9f3 071e fcf0
ffff ffff ff7f 3f0f f0e0 c1e1 f07c 3f0f
ffff ffff fffe fcf0 07f3 f9fb f71e fcf0
0307 0707 0302 0200 0307 0707 0300 0000
c0f0 f0e0 e080 8000 c0f2 f9f9 fef8 b000
c0f0 f0e0 e080 8000 c0f2 faf9 fef8 b000
c0f0 f0e0 e080 8000 c0f1 faf9 fef8 b000
]
|d000 @ERROR BRK
|FFF0 [ 0f85 0fd5 0fb5 ] ( palette )
|FFFA .RESET .FRAME .ERROR

View File

@ -1,41 +0,0 @@
( mouse )
:dev/r fff8 ( std read port )
:dev/w fff9 ( std write port )
|0100 @RESET
#05 =dev/r ( set dev/read mouse#02 )
#01 =dev/w ( set dev/write screen#01 )
BRK
|c000 @FRAME
( get mouse button, or break )
#04 IOR
#01 NEQ
BRK?
( paint a white pixel )
#01 #01
,getmouse JSR
,putpixel JSR
BRK
@getmouse
#00 IOR2 ( get mouse x )
#02 IOR2 ( get mouse y )
RTS
@putpixel
IOW2 ( y short )
IOW2 ( x short )
IOW ( color byte )
IOW ( redraw byte )
RTS
|d000 @ERROR BRK
|FFF0 [ f2ac 35bb 2b53 ] ( palette )
|FFFA .RESET .FRAME .ERROR

View File

@ -1,59 +0,0 @@
( sprite )
:dev/r fff8 ( std read port )
:dev/w fff9 ( std write port )
;mousex 2 ;mousey 2 ;lastx 2 ;lasty 2 ;color 1
|0100 @RESET
#05 =dev/r ( set dev/read mouse )
#02 =dev/w ( set dev/write to sprite )
#00 ,rounds_chr #0004 #0004 ,drawsprite JSR
BRK
|c000 @FRAME
#02 =dev/w ( set dev/write to sprite )
( clear last cursor )
#10 ,clear_icn ~lastx ~lasty ,drawsprite JSR
( record mouse values )
#00 IOR2 =mousex #02 IOR2 =mousey
#04 IOR #11 ADD =color
~color ,cursor_icn ~mousex ~mousey ,drawsprite JSR
( check paint )
#04 IOR #00 EQU ,skip ROT JMP? POP2
#05 ,brush_large ~mousex #0004 SUB2 ~mousey #0004 SUB2 ,drawsprite JSR
@skip
~mousex =lastx ~mousey =lasty
BRK
@drawsprite
IOW2 ( y byte )
IOW2 ( x byte )
IOW2 ( sprite address )
IOW ( layer-color )
RTS
|0200 @SPRITESHEET
@rounds_chr [ 3844 92aa 9244 3800 0038 7c7c 7c38 0000 ]
@cursor_icn [ 80c0 e0f0 f8e0 1000 ]
@clear_icn [ 0000 0000 0000 0000 ]
@brush_large [ 387c fefe fe7c 3800 ]
@brush_small [ 0038 7c7c 7c38 0000 ]
BRK
|d000 @ERROR BRK
|FFF0 [ f2ac 35bb 2b53 ] ( palette )
|FFFA .RESET .FRAME .ERROR