Added polycat
This commit is contained in:
parent
aa96d7f6dd
commit
6a095e8a22
2
build.sh
2
build.sh
|
@ -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
|
||||
|
|
14
emulator.c
14
emulator.c
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
Loading…
Reference in New Issue