Added the bounce
This commit is contained in:
parent
232a2858b0
commit
ab66b50637
BIN
bin/SOLITAIR.8xp
BIN
bin/SOLITAIR.8xp
Binary file not shown.
BIN
bin/SOLITAIR.bin
BIN
bin/SOLITAIR.bin
Binary file not shown.
@ -2,45 +2,78 @@ Segment Base Top High Length
|
||||
-------- ------ ------ ------ -------
|
||||
icon D1A882 D1A882 0h
|
||||
launcher D1A882 D1A8DA 58h
|
||||
libs D1A8DA D1A913 39h
|
||||
startup D1A913 D1A952 3Fh
|
||||
cleanup D1A952 D1A966 14h
|
||||
exit D1A966 D1A96C 6h
|
||||
code D1A96C D1AB82 216h
|
||||
data D1AB82 D1B264 6E2h
|
||||
strsect D1B264 D1B264 0h
|
||||
text D1B264 D1B266 2h
|
||||
bss D031F6 D031F6 D13FD6 0h
|
||||
libs D1A8DA D1A917 3Dh
|
||||
startup D1A917 D1A956 3Fh
|
||||
cleanup D1A956 D1A96A 14h
|
||||
exit D1A96A D1A970 6h
|
||||
code D1A970 D1AD8D 41Dh
|
||||
data D1AD8D D1C863 1AD6h
|
||||
strsect D1C863 D1C863 0h
|
||||
text D1C863 D1C863 0h
|
||||
bss D031F6 D03228 D13FD6 32h
|
||||
header D1A87F D1A882 3h
|
||||
|
||||
Label Value
|
||||
------------------------- ------
|
||||
_os_DisableHomeTextBuffer = D1A96C
|
||||
_os_EnableHomeTextBuffer = D1A97E
|
||||
_random = D1A990
|
||||
__state = D1AB82
|
||||
__frameset0 = D1A9E7
|
||||
__frameset = D1A9F2
|
||||
__irems = 00016C
|
||||
__icmpzero = 000138
|
||||
__setflag = 000218
|
||||
_rand = D1AA00
|
||||
_os_DisableHomeTextBuffer = D1A970
|
||||
_os_EnableHomeTextBuffer = D1A982
|
||||
_srandom = D1A994
|
||||
__setstate = D1A99B
|
||||
_random = D1A9AB
|
||||
__state = D1AD8D
|
||||
__frameset0 = D1AA02
|
||||
__seqcase = 000210
|
||||
__ltof = 000284
|
||||
__frameset = D1AA0D
|
||||
__fmul = 000288
|
||||
__fsub = 000290
|
||||
__fneg = D1AA1B
|
||||
__itol = 000194
|
||||
__fcmp = 000274
|
||||
__idvrmu = 000140
|
||||
__idvrmu = 000144
|
||||
__iremu = 000170
|
||||
_srand = D1AA28
|
||||
_abs = D1AA30
|
||||
__fadd = 000270
|
||||
__fdiv = 000278
|
||||
_rand = D1AA3C
|
||||
__ftol = 00027C
|
||||
__ultof = 000280
|
||||
__findlibload = D1A882
|
||||
__ccleanup = D1A952
|
||||
__ccleanup = D1A956
|
||||
_errno = D008DC
|
||||
_init = D1A882
|
||||
_exit = D1A968
|
||||
__exit = D1A941
|
||||
__exitsp = D1A941
|
||||
__errsp = D1A941
|
||||
_hearts_data = D1ABB4
|
||||
_logo_gfx_pal = D1B25A
|
||||
_main = D1AA34
|
||||
_draw_sprite = D1AA0D
|
||||
_exit = D1A96C
|
||||
__exit = D1A945
|
||||
__exitsp = D1A945
|
||||
__errsp = D1A945
|
||||
_clubs_data = D1ADBF
|
||||
_diamonds_data = D1B465
|
||||
_hearts_data = D1BB0B
|
||||
_logo_gfx_pal = D1C1B1
|
||||
_spades_data = D1C1BD
|
||||
_main = D1ABDE
|
||||
_new_card = D1AACE
|
||||
_draw_sprite = D1AA49
|
||||
_w = D03225
|
||||
_card = D03222
|
||||
_fr = D0321E
|
||||
_fd = D0321A
|
||||
_fv = D03216
|
||||
_a = D03212
|
||||
_u = D0320E
|
||||
_v = D0320A
|
||||
_m = D03206
|
||||
_delta = D03202
|
||||
_c = D031FE
|
||||
_dt = D031FA
|
||||
_t = D031F6
|
||||
_gfx_Begin = D1A8ED
|
||||
_gfx_End = D1A8F1
|
||||
_gfx_SetPalette = D1A8F5
|
||||
_gfx_SetDraw = D1A8F9
|
||||
_gfx_Blit = D1A8FD
|
||||
_gfx_Sprite = D1A901
|
||||
_kb_Scan = D1A90F
|
||||
_gfx_FillScreen = D1A8F9
|
||||
_gfx_SetDraw = D1A8FD
|
||||
_gfx_Blit = D1A901
|
||||
_gfx_Sprite = D1A905
|
||||
_kb_Scan = D1A913
|
||||
|
@ -10,10 +10,11 @@ _logo_gfx_pal:
|
||||
DW 31744
|
||||
DW 60879
|
||||
DW 0
|
||||
DW 33291
|
||||
XDEF _logo_gfx_pal
|
||||
; 1 // convpng v7.2
|
||||
; 2 #include <stdint.h>
|
||||
; 3 #include "logo_gfx.h"
|
||||
; 4
|
||||
; 5 uint16_t logo_gfx_pal[5] = {
|
||||
; 5 uint16_t logo_gfx_pal[6] = {
|
||||
END
|
||||
|
653
obj/main.src
653
obj/main.src
@ -3,7 +3,33 @@
|
||||
; -localcse -const=ROM
|
||||
FILE "SRC\MAIN.C"
|
||||
.assume ADL=1
|
||||
SEGMENT CODE
|
||||
SEGMENT BSS
|
||||
_t:
|
||||
DS 4*1
|
||||
_dt:
|
||||
DS 4*1
|
||||
_c:
|
||||
DS 4*1
|
||||
_delta:
|
||||
DS 4*1
|
||||
_m:
|
||||
DS 4*1
|
||||
_v:
|
||||
DS 4*1
|
||||
_u:
|
||||
DS 4*1
|
||||
_a:
|
||||
DS 4*1
|
||||
_fv:
|
||||
DS 4*1
|
||||
_fd:
|
||||
DS 4*1
|
||||
_fr:
|
||||
DS 4*1
|
||||
_card:
|
||||
DS 3
|
||||
_w:
|
||||
DS 3
|
||||
; 1 #include <stdbool.h>
|
||||
; 2 #include <stddef.h>
|
||||
; 3 #include <stdint.h>
|
||||
@ -20,19 +46,50 @@
|
||||
; 14 /* Include the sprite data */
|
||||
; 15 #include "gfx/logo_gfx.h"
|
||||
; 16
|
||||
; 17 /* Function for drawing the main sprite */
|
||||
; 18 void draw_sprite(int x, int y)
|
||||
; 19 {
|
||||
; 17 float t, dt, c, delta, m, v, u, a, fv, fd, fr;
|
||||
; 18 int card, w;
|
||||
SEGMENT CODE
|
||||
; 19
|
||||
; 20 void draw_sprite(int x, int y)
|
||||
; 21 {
|
||||
_draw_sprite:
|
||||
CALL __frameset0
|
||||
; 20 /* Fill the screen with color index 0
|
||||
; 21 /* Note that this is a super inefficient way to
|
||||
; 22 /* redraw, but it demonstrates a simple way of clearing past data */
|
||||
; 23 // gfx_FillScreen(0xFF);
|
||||
; 24
|
||||
; 25 /* Draw a bunch of different styled sprites on the screen */
|
||||
; 26
|
||||
; 27 gfx_Sprite(hearts, x, y);
|
||||
; 22 switch (card)
|
||||
LD HL,(_card)
|
||||
CALL __seqcase
|
||||
L__0:
|
||||
DW 4
|
||||
DW 0
|
||||
DB 0
|
||||
DW24 L_0
|
||||
|
||||
DW24 L_1
|
||||
|
||||
DW24 L_2
|
||||
|
||||
DW24 L_3
|
||||
|
||||
DW24 L_4
|
||||
|
||||
; 23 {
|
||||
; 24 case 0:
|
||||
L_0:
|
||||
; 25 gfx_Sprite(diamonds, x, y);
|
||||
LD BC,(IX+9)
|
||||
PUSH BC
|
||||
LD BC,(IX+6)
|
||||
PUSH BC
|
||||
LD BC,_diamonds_data
|
||||
PUSH BC
|
||||
CALL _gfx_Sprite
|
||||
POP BC
|
||||
POP BC
|
||||
POP BC
|
||||
; 26 break;
|
||||
JR L_4
|
||||
; 27 case 1:
|
||||
L_1:
|
||||
; 28 gfx_Sprite(hearts, x, y);
|
||||
LD BC,(IX+9)
|
||||
PUSH BC
|
||||
LD BC,(IX+6)
|
||||
@ -43,14 +100,46 @@ _draw_sprite:
|
||||
POP BC
|
||||
POP BC
|
||||
POP BC
|
||||
; 28
|
||||
; 29 /* Copy the buffer to the screen */
|
||||
; 30 gfx_BlitBuffer(); // This is the same as gfx_Blit(gfx_buffer)
|
||||
; 29 break;
|
||||
JR L_4
|
||||
; 30 case 2:
|
||||
L_2:
|
||||
; 31 gfx_Sprite(spades, x, y);
|
||||
LD BC,(IX+9)
|
||||
PUSH BC
|
||||
LD BC,(IX+6)
|
||||
PUSH BC
|
||||
LD BC,_spades_data
|
||||
PUSH BC
|
||||
CALL _gfx_Sprite
|
||||
POP BC
|
||||
POP BC
|
||||
POP BC
|
||||
; 32 break;
|
||||
JR L_4
|
||||
; 33 case 3:
|
||||
L_3:
|
||||
; 34 gfx_Sprite(clubs, x, y);
|
||||
LD BC,(IX+9)
|
||||
PUSH BC
|
||||
LD BC,(IX+6)
|
||||
PUSH BC
|
||||
LD BC,_clubs_data
|
||||
PUSH BC
|
||||
CALL _gfx_Sprite
|
||||
POP BC
|
||||
POP BC
|
||||
POP BC
|
||||
; 35 break;
|
||||
; 36 }
|
||||
L_4:
|
||||
; 37
|
||||
; 38 gfx_BlitBuffer();
|
||||
LD BC,1
|
||||
PUSH BC
|
||||
CALL _gfx_Blit
|
||||
POP BC
|
||||
; 31 }
|
||||
; 39 }
|
||||
LD SP,IX
|
||||
POP IX
|
||||
RET
|
||||
@ -59,8 +148,12 @@ _draw_sprite:
|
||||
;**************************** _draw_sprite ***************************
|
||||
;Name Addr/Register Size Type
|
||||
;_gfx_Blit IMPORT ----- function
|
||||
;_clubs_data IMPORT 1702 variable
|
||||
;_spades_data IMPORT 1702 variable
|
||||
;_hearts_data IMPORT 1702 variable
|
||||
;_diamonds_data IMPORT 1702 variable
|
||||
;_gfx_Sprite IMPORT ----- function
|
||||
;_card STATIC 3 variable
|
||||
;y IX+9 3 parameter
|
||||
;x IX+6 3 parameter
|
||||
|
||||
@ -69,32 +162,147 @@ _draw_sprite:
|
||||
; Spill Code: 0 (instruction)
|
||||
|
||||
|
||||
; 32
|
||||
; 33 void main(void)
|
||||
; 34 {
|
||||
; 40
|
||||
; 41 void new_card()
|
||||
; 42 {
|
||||
_new_card:
|
||||
; 43 card = randInt(0, 3);
|
||||
CALL _random
|
||||
LD A,L
|
||||
AND A,3
|
||||
UEXT HL
|
||||
LD L,A
|
||||
LD (_card),HL
|
||||
; 44 t = randInt(5, LCD_WIDTH / 6) / w;
|
||||
CALL _random
|
||||
LD BC,49
|
||||
CALL __iremu
|
||||
LD IY,HL
|
||||
LEA HL,IY+5
|
||||
LD BC,(_w)
|
||||
CALL __idivu
|
||||
LD BC,HL
|
||||
XOR A,A
|
||||
CALL __ultof
|
||||
LD (_t),BC
|
||||
LD (_t+3),A
|
||||
; 45 w = randInt(10, 30);
|
||||
CALL _random
|
||||
LD BC,21
|
||||
CALL __iremu
|
||||
LD IY,HL
|
||||
LEA BC,IY+10
|
||||
LD (_w),BC
|
||||
; 46 dt = 0.075;
|
||||
LD BC,10066330
|
||||
LD (_dt),BC
|
||||
LD A,61
|
||||
LD (_dt+3),A
|
||||
; 47 c = randInt(2, 8);
|
||||
CALL _random
|
||||
LD BC,7
|
||||
CALL __iremu
|
||||
INC HL
|
||||
INC HL
|
||||
LD BC,HL
|
||||
XOR A,A
|
||||
CALL __ultof
|
||||
LD (_c),BC
|
||||
LD (_c+3),A
|
||||
; 48 delta = (float)rand() / (float)RAND_MAX * 5;
|
||||
CALL _rand
|
||||
LD BC,HL
|
||||
CALL __itol
|
||||
CALL __ltof
|
||||
LD HL,16777214
|
||||
LD E,74
|
||||
CALL __fdiv
|
||||
LD HL,10485760
|
||||
LD E,64
|
||||
CALL __fmul
|
||||
LD (_delta),BC
|
||||
LD (_delta+3),A
|
||||
; 49 m = 20;
|
||||
LD BC,10485760
|
||||
LD (_m),BC
|
||||
LD A,65
|
||||
LD (_m+3),A
|
||||
; 50 v = randInt(0, 100);
|
||||
CALL _random
|
||||
LD BC,101
|
||||
CALL __iremu
|
||||
LD BC,HL
|
||||
XOR A,A
|
||||
CALL __ultof
|
||||
LD (_v),BC
|
||||
LD (_v+3),A
|
||||
; 51 u = (LCD_HEIGHT - hearts_height) - 5;
|
||||
LD BC,3735552
|
||||
LD (_u),BC
|
||||
LD A,67
|
||||
LD (_u+3),A
|
||||
; 52 a = 0;
|
||||
LD BC,0
|
||||
LD (_a),BC
|
||||
XOR A,A
|
||||
LD (_a+3),A
|
||||
; 53 fv = 0;
|
||||
LD (_fv),BC
|
||||
XOR A,A
|
||||
LD (_fv+3),A
|
||||
; 54 fd = 0;
|
||||
LD (_fd),BC
|
||||
XOR A,A
|
||||
LD (_fd+3),A
|
||||
; 55 fr = 0;
|
||||
LD (_fr),BC
|
||||
XOR A,A
|
||||
LD (_fr+3),A
|
||||
; 56 }
|
||||
RET
|
||||
|
||||
|
||||
;**************************** _new_card ***************************
|
||||
;Name Addr/Register Size Type
|
||||
;_fr STATIC 4 variable
|
||||
;_fd STATIC 4 variable
|
||||
;_fv STATIC 4 variable
|
||||
;_a STATIC 4 variable
|
||||
;_u STATIC 4 variable
|
||||
;_v STATIC 4 variable
|
||||
;_m STATIC 4 variable
|
||||
;_delta STATIC 4 variable
|
||||
;_rand IMPORT ----- function
|
||||
;_c STATIC 4 variable
|
||||
;_dt STATIC 4 variable
|
||||
;_t STATIC 4 variable
|
||||
;_w STATIC 3 variable
|
||||
;_card STATIC 3 variable
|
||||
;_random IMPORT ----- function
|
||||
|
||||
|
||||
; Stack Frame Size: 6 (bytes)
|
||||
; Spill Code: 0 (instruction)
|
||||
|
||||
|
||||
; 57
|
||||
; 58 void main(void)
|
||||
; 59 {
|
||||
_main:
|
||||
LD HL,-11
|
||||
LD HL,-4
|
||||
CALL __frameset
|
||||
; 35 /* Coordinates used for the sprite */
|
||||
; 36 int x, y;
|
||||
; 37 bool gravity[2] = {
|
||||
; 38 true,
|
||||
; 39 true};
|
||||
LEA DE,IX+-8
|
||||
LD HL,_0temp1
|
||||
LD BC,2
|
||||
LDIR
|
||||
; 40 float angle;
|
||||
; 41
|
||||
; 42 /* Initialize the 8bpp graphics */
|
||||
; 43 gfx_Begin();
|
||||
; 60 srand(rtc_Time());
|
||||
LD BC,(15925316)
|
||||
PUSH BC
|
||||
CALL _srand
|
||||
POP BC
|
||||
; 61
|
||||
; 62 gfx_Begin();
|
||||
CALL _gfx_Begin
|
||||
; 44
|
||||
; 45 /* Set up the palette for our sprites */
|
||||
; 46 gfx_SetPalette(logo_gfx_pal, sizeof_logo_gfx_pal, 0);
|
||||
; 63 gfx_SetPalette(logo_gfx_pal, sizeof_logo_gfx_pal, 0);
|
||||
LD BC,0
|
||||
PUSH BC
|
||||
LD BC,10
|
||||
LD BC,12
|
||||
PUSH BC
|
||||
LD BC,_logo_gfx_pal
|
||||
PUSH BC
|
||||
@ -102,191 +310,157 @@ _main:
|
||||
POP BC
|
||||
POP BC
|
||||
POP BC
|
||||
; 47
|
||||
; 48 /* Start at 0, 0 */
|
||||
; 49 x = 0;
|
||||
LD BC,0
|
||||
LD (IX+-6),BC
|
||||
; 50 y = (rand() % (LCD_HEIGHT - 0 + 1));
|
||||
CALL _rand
|
||||
LD BC,241
|
||||
CALL __irems
|
||||
LD (IX+-3),HL
|
||||
; 51
|
||||
; 52 gfx_SetDrawBuffer();
|
||||
; 64 gfx_SetDrawBuffer();
|
||||
LD BC,1
|
||||
PUSH BC
|
||||
CALL _gfx_SetDraw
|
||||
POP BC
|
||||
; 53
|
||||
; 54 //gfx_FillScreen(1);
|
||||
; 55
|
||||
; 56 draw_sprite(x, y);
|
||||
LD BC,(IX+-3)
|
||||
; 65 gfx_FillScreen(0x05);
|
||||
LD BC,5
|
||||
PUSH BC
|
||||
LD BC,0
|
||||
PUSH BC
|
||||
CALL _draw_sprite
|
||||
CALL _gfx_FillScreen
|
||||
POP BC
|
||||
POP BC
|
||||
; 57
|
||||
; 58 do
|
||||
L_18:
|
||||
; 59 {
|
||||
; 60 /* Scan the keypad to update kb_Data */
|
||||
; 61 kb_Scan();
|
||||
; 66
|
||||
; 67 new_card();
|
||||
CALL _new_card
|
||||
; 68
|
||||
; 69 do
|
||||
L_9:
|
||||
; 70 {
|
||||
; 71 /* Scan the keypad to update kb_Data */
|
||||
; 72 kb_Scan();
|
||||
CALL _kb_Scan
|
||||
; 62
|
||||
; 63 if ((x + hearts_width) <= LCD_WIDTH && x >= 0)
|
||||
LD IY,(IX+-6)
|
||||
LEA BC,IY+34
|
||||
LD HL,320
|
||||
OR A,A
|
||||
SBC HL,BC
|
||||
CALL __setflag
|
||||
JP M,L_8
|
||||
LD HL,(IX+-6)
|
||||
CALL __icmpzero
|
||||
CALL __setflag
|
||||
JP M,L_8
|
||||
; 64 {
|
||||
; 65 if (gravity[0])
|
||||
LD A,(IX+-8)
|
||||
OR A,A
|
||||
JR Z,L_4
|
||||
; 66 {
|
||||
; 67 x = x + 2;
|
||||
LD IY,(IX+-6)
|
||||
LEA IY,IY+2
|
||||
LD (IX+-6),IY
|
||||
; 68 }
|
||||
; 69 else
|
||||
JR L_16
|
||||
L_4:
|
||||
; 70 {
|
||||
; 71 x = x - 2;
|
||||
LD IY,(IX+-6)
|
||||
LEA IY,IY+-2
|
||||
LD (IX+-6),IY
|
||||
; 72 }
|
||||
; 73 }
|
||||
; 74 else
|
||||
JR L_16
|
||||
L_8:
|
||||
; 75 {
|
||||
; 76 if (gravity[0])
|
||||
LD A,(IX+-8)
|
||||
OR A,A
|
||||
JR Z,L_6
|
||||
; 77 {
|
||||
; 78 gravity[0] = false;
|
||||
LD (IX+-8),0
|
||||
; 79 x = x - 2;
|
||||
LD IY,(IX+-6)
|
||||
LEA IY,IY+-2
|
||||
LD (IX+-6),IY
|
||||
; 80 }
|
||||
; 81 else
|
||||
JR L_16
|
||||
L_6:
|
||||
; 82 {
|
||||
; 83 gravity[0] = true;
|
||||
LD (IX+-8),1
|
||||
; 84 x = x + 2;
|
||||
LD IY,(IX+-6)
|
||||
LEA IY,IY+2
|
||||
LD (IX+-6),IY
|
||||
; 85 }
|
||||
; 86 }
|
||||
L_16:
|
||||
; 87
|
||||
; 88 if ((y + hearts_height) <= LCD_HEIGHT && y >= 0)
|
||||
LD IY,(IX+-3)
|
||||
LEA BC,IY+50
|
||||
LD HL,240
|
||||
OR A,A
|
||||
SBC HL,BC
|
||||
JP M,L_15
|
||||
LD HL,(IX+-3)
|
||||
CALL __icmpzero
|
||||
CALL __setflag
|
||||
JP M,L_15
|
||||
; 89 {
|
||||
; 90 if (gravity[1])
|
||||
LEA HL,IX+-8
|
||||
INC HL
|
||||
LD A,(HL)
|
||||
OR A,A
|
||||
JR Z,L_11
|
||||
; 91 {
|
||||
; 92 y = y + 2;
|
||||
LD IY,(IX+-3)
|
||||
LEA IY,IY+2
|
||||
LD (IX+-3),IY
|
||||
; 93 }
|
||||
; 94 else
|
||||
JR L_17
|
||||
L_11:
|
||||
; 95 {
|
||||
; 96 y = y - 2;
|
||||
LD IY,(IX+-3)
|
||||
LEA IY,IY+-2
|
||||
LD (IX+-3),IY
|
||||
; 97 }
|
||||
; 98 }
|
||||
; 99 else
|
||||
JR L_17
|
||||
L_15:
|
||||
; 100 {
|
||||
; 101 if (gravity[1])
|
||||
LEA BC,IX+-8
|
||||
INC BC
|
||||
LD (IX+-11),BC
|
||||
; 73
|
||||
; 74 fv = c * u;
|
||||
LD A,(_u+3)
|
||||
LD E,A
|
||||
LD A,(_c+3)
|
||||
LD HL,(_u)
|
||||
LD BC,(_c)
|
||||
CALL __fmul
|
||||
LD (_fv),BC
|
||||
LD (_fv+3),A
|
||||
; 75 fd = delta * v;
|
||||
LD A,(_v+3)
|
||||
LD E,A
|
||||
LD A,(_delta+3)
|
||||
LD HL,(_v)
|
||||
LD BC,(_delta)
|
||||
CALL __fmul
|
||||
LD (_fd),BC
|
||||
LD (_fd+3),A
|
||||
; 76 fr = -fv - fd;
|
||||
LD BC,(_fv)
|
||||
LD A,(_fv+3)
|
||||
CALL __fneg
|
||||
LD H,A
|
||||
LD A,(_fd+3)
|
||||
LD E,A
|
||||
LD A,H
|
||||
LD HL,(_fd)
|
||||
CALL __fsub
|
||||
LD (_fr),BC
|
||||
LD (_fr+3),A
|
||||
; 77 a = fr / m;
|
||||
LD A,(_m+3)
|
||||
LD E,A
|
||||
LD A,(_fr+3)
|
||||
LD HL,(_m)
|
||||
CALL __fdiv
|
||||
LD (_a),BC
|
||||
LD (_a+3),A
|
||||
; 78 v = v + a * dt;
|
||||
LD A,(_dt+3)
|
||||
LD E,A
|
||||
LD A,(_a+3)
|
||||
LD HL,(_dt)
|
||||
CALL __fmul
|
||||
LD H,A
|
||||
LD A,(_v+3)
|
||||
LD E,A
|
||||
LD A,H
|
||||
LD HL,(_v)
|
||||
CALL __fadd
|
||||
LD (_v),BC
|
||||
LD (_v+3),A
|
||||
; 79 u = u + v * dt;
|
||||
LD A,(_dt+3)
|
||||
LD E,A
|
||||
LD A,(_v+3)
|
||||
LD HL,(_dt)
|
||||
CALL __fmul
|
||||
LD H,A
|
||||
LD A,(_u+3)
|
||||
LD E,A
|
||||
LD A,H
|
||||
LD HL,(_u)
|
||||
CALL __fadd
|
||||
LD (_u),BC
|
||||
LD (_u+3),A
|
||||
; 80 t = t + dt;
|
||||
LD A,(_dt+3)
|
||||
LD E,A
|
||||
LD A,(_t+3)
|
||||
LD HL,(_dt)
|
||||
LD BC,(_t)
|
||||
CALL __fadd
|
||||
LD (_t),BC
|
||||
LD (_t+3),A
|
||||
; 81
|
||||
; 82 if (t * w > LCD_WIDTH)
|
||||
LD BC,(_w)
|
||||
CALL __itol
|
||||
CALL __ltof
|
||||
LD E,A
|
||||
LD HL,BC
|
||||
LD A,(HL)
|
||||
OR A,A
|
||||
JR Z,L_13
|
||||
; 102 {
|
||||
; 103 gravity[1] = false;
|
||||
LD HL,(IX+-11)
|
||||
LD (HL),0
|
||||
; 104 y = y - 2;
|
||||
LD IY,(IX+-3)
|
||||
LEA IY,IY+-2
|
||||
LD (IX+-3),IY
|
||||
; 105 }
|
||||
; 106 else
|
||||
JR L_17
|
||||
L_13:
|
||||
; 107 {
|
||||
; 108 gravity[1] = true;
|
||||
LD HL,(IX+-11)
|
||||
LD (HL),1
|
||||
; 109 y = y + 2;
|
||||
LD IY,(IX+-3)
|
||||
LEA IY,IY+2
|
||||
LD (IX+-3),IY
|
||||
; 110 }
|
||||
; 111 }
|
||||
L_17:
|
||||
; 112
|
||||
; 113 draw_sprite(x, y);
|
||||
LD BC,(IX+-3)
|
||||
LD BC,(_t)
|
||||
LD A,(_t+3)
|
||||
CALL __fmul
|
||||
LD (IX+-4),BC
|
||||
LD (IX+-1),A
|
||||
LD HL,10485760
|
||||
LD E,67
|
||||
CALL __fcmp
|
||||
JP P,L_8
|
||||
; 83 {
|
||||
; 84 new_card();
|
||||
CALL _new_card
|
||||
; 85 }
|
||||
; 86 else
|
||||
JR L_10
|
||||
L_8:
|
||||
; 87 {
|
||||
; 88 draw_sprite(t * w, (LCD_HEIGHT - hearts_height) - abs(u));
|
||||
LD BC,(_u)
|
||||
LD A,(_u+3)
|
||||
CALL __ftol
|
||||
PUSH BC
|
||||
LD BC,(IX+-6)
|
||||
CALL _abs
|
||||
POP BC
|
||||
LD BC,HL
|
||||
LD HL,190
|
||||
OR A,A
|
||||
SBC HL,BC
|
||||
PUSH HL
|
||||
LD BC,(IX+-4)
|
||||
LD A,(IX+-1)
|
||||
CALL __ftol
|
||||
PUSH BC
|
||||
CALL _draw_sprite
|
||||
POP BC
|
||||
POP BC
|
||||
; 114 } while (kb_Data[6] != kb_Clear);
|
||||
; 89 }
|
||||
; 90
|
||||
; 91 } while (kb_Data[6] != kb_Clear);
|
||||
L_10:
|
||||
LD A,(16056348)
|
||||
CP A,64
|
||||
JR NZ,L_18
|
||||
; 115
|
||||
; 116 /* Close the graphics */
|
||||
; 117 gfx_End();
|
||||
JR NZ,L_9
|
||||
; 92
|
||||
; 93 /* Close the graphics */
|
||||
; 94 gfx_End();
|
||||
CALL _gfx_End
|
||||
; 118 }
|
||||
; 95 }
|
||||
LD SP,IX
|
||||
POP IX
|
||||
RET
|
||||
@ -295,42 +469,79 @@ L_17:
|
||||
;**************************** _main ***************************
|
||||
;Name Addr/Register Size Type
|
||||
;_gfx_End IMPORT ----- function
|
||||
;_abs IMPORT ----- function
|
||||
;_w STATIC 3 variable
|
||||
;_t STATIC 4 variable
|
||||
;_dt STATIC 4 variable
|
||||
;_a STATIC 4 variable
|
||||
;_m STATIC 4 variable
|
||||
;_fr STATIC 4 variable
|
||||
;_fd STATIC 4 variable
|
||||
;_v STATIC 4 variable
|
||||
;_delta STATIC 4 variable
|
||||
;_fv STATIC 4 variable
|
||||
;_u STATIC 4 variable
|
||||
;_c STATIC 4 variable
|
||||
;_kb_Scan IMPORT ----- function
|
||||
;_gfx_FillScreen IMPORT ----- function
|
||||
;_gfx_SetDraw IMPORT ----- function
|
||||
;_rand IMPORT ----- function
|
||||
;_logo_gfx_pal IMPORT 10 variable
|
||||
;_logo_gfx_pal IMPORT 12 variable
|
||||
;_gfx_SetPalette IMPORT ----- function
|
||||
;_gfx_Begin IMPORT ----- function
|
||||
;_0temp1 STATIC 2 variable
|
||||
;G_0 IX-11 3 variable
|
||||
;gravity IX-8 2 variable
|
||||
;x IX-6 3 variable
|
||||
;y IX-3 3 variable
|
||||
;_srand IMPORT ----- function
|
||||
;G_0 IX-4 4 variable
|
||||
|
||||
|
||||
; Stack Frame Size: 17 (bytes)
|
||||
; Stack Frame Size: 10 (bytes)
|
||||
; Spill Code: 0 (instruction)
|
||||
|
||||
|
||||
SEGMENT TEXT
|
||||
_0temp1:
|
||||
DB 1
|
||||
DB 1
|
||||
XREF _logo_gfx_pal:ROM
|
||||
XREF _clubs_data:ROM
|
||||
XREF _spades_data:ROM
|
||||
XREF _hearts_data:ROM
|
||||
XREF _diamonds_data:ROM
|
||||
XREF _kb_Scan:ROM
|
||||
XREF _gfx_Sprite:ROM
|
||||
XREF _gfx_Blit:ROM
|
||||
XREF _gfx_SetDraw:ROM
|
||||
XREF _gfx_FillScreen:ROM
|
||||
XREF _gfx_SetPalette:ROM
|
||||
XREF _gfx_End:ROM
|
||||
XREF _gfx_Begin:ROM
|
||||
XREF _abs:ROM
|
||||
XREF _rand:ROM
|
||||
XREF __irems:ROM
|
||||
XREF _srand:ROM
|
||||
XREF _random:ROM
|
||||
XREF __idivu:ROM
|
||||
XREF __iremu:ROM
|
||||
XREF __fadd:ROM
|
||||
XREF __fsub:ROM
|
||||
XREF __fmul:ROM
|
||||
XREF __fdiv:ROM
|
||||
XREF __fneg:ROM
|
||||
XREF __fcmp:ROM
|
||||
XREF __ftol:ROM
|
||||
XREF __ltof:ROM
|
||||
XREF __ultof:ROM
|
||||
XREF __itol:ROM
|
||||
XREF __frameset0:ROM
|
||||
XREF __frameset:ROM
|
||||
XREF __setflag:ROM
|
||||
XREF __icmpzero:ROM
|
||||
XREF __seqcase:ROM
|
||||
XDEF _main
|
||||
XDEF _new_card
|
||||
XDEF _draw_sprite
|
||||
XDEF _w
|
||||
XDEF _card
|
||||
XDEF _fr
|
||||
XDEF _fd
|
||||
XDEF _fv
|
||||
XDEF _a
|
||||
XDEF _u
|
||||
XDEF _v
|
||||
XDEF _m
|
||||
XDEF _delta
|
||||
XDEF _c
|
||||
XDEF _dt
|
||||
XDEF _t
|
||||
END
|
||||
|
@ -2,10 +2,11 @@
|
||||
#include <stdint.h>
|
||||
#include "logo_gfx.h"
|
||||
|
||||
uint16_t logo_gfx_pal[5] = {
|
||||
uint16_t logo_gfx_pal[6] = {
|
||||
0xFFFF, // 00 :: rgb(255,255,255)
|
||||
0x0000, // 01 :: rgb(0,0,0)
|
||||
0x7C00, // 02 :: rgb(255,0,0)
|
||||
0xEDCF, // 03 :: rgb(221,116,125)
|
||||
0x0000, // 04 :: rgb(0,0,0)
|
||||
0x820B,
|
||||
};
|
||||
|
@ -26,7 +26,7 @@ extern uint8_t spades_data[1702];
|
||||
#define clubs_size 1702
|
||||
extern uint8_t clubs_data[1702];
|
||||
#define clubs ((gfx_sprite_t*)clubs_data)
|
||||
#define sizeof_logo_gfx_pal 10
|
||||
extern uint16_t logo_gfx_pal[5];
|
||||
#define sizeof_logo_gfx_pal 12
|
||||
extern uint16_t logo_gfx_pal[6];
|
||||
|
||||
#endif
|
||||
|
121
src/main.c
121
src/main.c
@ -14,103 +14,80 @@
|
||||
/* Include the sprite data */
|
||||
#include "gfx/logo_gfx.h"
|
||||
|
||||
/* Function for drawing the main sprite */
|
||||
float t, dt, c, delta, m, v, u, a, fv, fd, fr;
|
||||
int card, w;
|
||||
|
||||
void draw_sprite(int x, int y)
|
||||
{
|
||||
/* Fill the screen with color index 0
|
||||
/* Note that this is a super inefficient way to
|
||||
/* redraw, but it demonstrates a simple way of clearing past data */
|
||||
// gfx_FillScreen(0xFF);
|
||||
switch (card)
|
||||
{
|
||||
case 0:
|
||||
gfx_Sprite(diamonds, x, y);
|
||||
break;
|
||||
case 1:
|
||||
gfx_Sprite(hearts, x, y);
|
||||
break;
|
||||
case 2:
|
||||
gfx_Sprite(spades, x, y);
|
||||
break;
|
||||
case 3:
|
||||
gfx_Sprite(clubs, x, y);
|
||||
break;
|
||||
}
|
||||
|
||||
/* Draw a bunch of different styled sprites on the screen */
|
||||
gfx_BlitBuffer();
|
||||
}
|
||||
|
||||
gfx_Sprite(hearts, x, y);
|
||||
|
||||
/* Copy the buffer to the screen */
|
||||
gfx_BlitBuffer(); // This is the same as gfx_Blit(gfx_buffer)
|
||||
void new_card()
|
||||
{
|
||||
card = randInt(0, 3);
|
||||
t = randInt(5, LCD_WIDTH / 6) / w;
|
||||
w = randInt(10, 30);
|
||||
dt = 0.075;
|
||||
c = randInt(2, 8);
|
||||
delta = (float)rand() / (float)RAND_MAX * 5;
|
||||
m = 20;
|
||||
v = randInt(0, 100);
|
||||
u = (LCD_HEIGHT - hearts_height) - 5;
|
||||
a = 0;
|
||||
fv = 0;
|
||||
fd = 0;
|
||||
fr = 0;
|
||||
}
|
||||
|
||||
void main(void)
|
||||
{
|
||||
/* Coordinates used for the sprite */
|
||||
int x, y;
|
||||
bool gravity[2] = {
|
||||
true,
|
||||
true};
|
||||
float angle;
|
||||
srand(rtc_Time());
|
||||
|
||||
/* Initialize the 8bpp graphics */
|
||||
gfx_Begin();
|
||||
|
||||
/* Set up the palette for our sprites */
|
||||
gfx_SetPalette(logo_gfx_pal, sizeof_logo_gfx_pal, 0);
|
||||
|
||||
/* Start at 0, 0 */
|
||||
x = 0;
|
||||
y = (rand() % (LCD_HEIGHT - 0 + 1));
|
||||
|
||||
gfx_SetDrawBuffer();
|
||||
gfx_FillScreen(0x05);
|
||||
|
||||
//gfx_FillScreen(1);
|
||||
|
||||
draw_sprite(x, y);
|
||||
new_card();
|
||||
|
||||
do
|
||||
{
|
||||
/* Scan the keypad to update kb_Data */
|
||||
kb_Scan();
|
||||
|
||||
if ((x + hearts_width) <= LCD_WIDTH && x >= 0)
|
||||
fv = c * u;
|
||||
fd = delta * v;
|
||||
fr = -fv - fd;
|
||||
a = fr / m;
|
||||
v = v + a * dt;
|
||||
u = u + v * dt;
|
||||
t = t + dt;
|
||||
|
||||
if (t * w > LCD_WIDTH)
|
||||
{
|
||||
if (gravity[0])
|
||||
{
|
||||
x = x + 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
x = x - 2;
|
||||
}
|
||||
new_card();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gravity[0])
|
||||
{
|
||||
gravity[0] = false;
|
||||
x = x - 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
gravity[0] = true;
|
||||
x = x + 2;
|
||||
}
|
||||
draw_sprite(t * w, (LCD_HEIGHT - hearts_height) - abs(u));
|
||||
}
|
||||
|
||||
if ((y + hearts_height) <= LCD_HEIGHT && y >= 0)
|
||||
{
|
||||
if (gravity[1])
|
||||
{
|
||||
y = y + 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
y = y - 2;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gravity[1])
|
||||
{
|
||||
gravity[1] = false;
|
||||
y = y - 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
gravity[1] = true;
|
||||
y = y + 2;
|
||||
}
|
||||
}
|
||||
|
||||
draw_sprite(x, y);
|
||||
} while (kb_Data[6] != kb_Clear);
|
||||
|
||||
/* Close the graphics */
|
||||
|
Loading…
Reference in New Issue
Block a user