ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 1.
Hexadecimal [16-Bits]



                              1 ;;-----------------------------LICENSE NOTICE------------------------------------
                              2 ;;  This file is part of Cosmic Gatlin: An Amstrad CPC Game 
                              3 ;;  Authors: 
                              4 ;;      Javier Botella Martínez (@javierbotella)
                              5 ;;      Francesc Martinez Torregrosa (@mellamofrancesc)
                              6 ;;
                              7 ;;  This program is free software: you can redistribute it and/or modify
                              8 ;;  it under the terms of the GNU Lesser General Public License as published by
                              9 ;;  the Free Software Foundation, either version 3 of the License, or
                             10 ;;  (at your option) any later version.
                             11 ;;
                             12 ;;  This program is distributed in the hope that it will be useful,
                             13 ;;  but WITHOUT ANY WARRANTY; without even the implied warranty of
                             14 ;;  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                             15 ;;  GNU Lesser General Public License for more details.
                             16 ;;
                             17 ;;  You should have received a copy of the GNU Lesser General Public License
                             18 ;;  along with this program.  If not, see <http://www.gnu.org/licenses/>.
                             19 ;;------------------------------------------------------------------------------
                             20 
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 2.
Hexadecimal [16-Bits]



                             21 .include "entity.h.s"
                              1 ;;-----------------------------LICENSE NOTICE------------------------------------
                              2 ;;  This file is part of Cosmic Gatlin: An Amstrad CPC Game 
                              3 ;;  Authors: 
                              4 ;;      Javier Botella Martínez (@javierbotella)
                              5 ;;      Francesc Martinez Torregrosa (@mellamofrancesc)
                              6 ;;
                              7 ;;  This program is free software: you can redistribute it and/or modify
                              8 ;;  it under the terms of the GNU Lesser General Public License as published by
                              9 ;;  the Free Software Foundation, either version 3 of the License, or
                             10 ;;  (at your option) any later version.
                             11 ;;
                             12 ;;  This program is distributed in the hope that it will be useful,
                             13 ;;  but WITHOUT ANY WARRANTY; without even the implied warranty of
                             14 ;;  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                             15 ;;  GNU Lesser General Public License for more details.
                             16 ;;
                             17 ;;  You should have received a copy of the GNU Lesser General Public License
                             18 ;;  along with this program.  If not, see <http://www.gnu.org/licenses/>.
                             19 ;;------------------------------------------------------------------------------
                             20 
                             21 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                             22 ;;  CONSTANTS
                             23 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                             24 
                             25     ;; ENTITY INFO
                     001C    26 EntitySize=28 
                     0028    27 EntityArraySize=40
                     0460    28 EntityArrayBytesSize=EntitySize*EntityArraySize
                             29 
                     0028    30 Fila1=40
                     0050    31 Fila2=Fila1+40
                     0078    32 Fila3=Fila2+40
                             33 
                     000D    34 Offset=12+1
                             35 
                     001B    36 EFila1=Fila1-Offset
                     0043    37 EFila2=Fila2-Offset
                     006B    38 EFila3=Fila3-Offset
                             39 
                             40     ;; INDEX FOR IX/IY
                     0000    41 indType=0
                     0001    42 indX=1
                     0002    43 indY=2
                     0003    44 indVx=3
                     0004    45 indVy=4
                     0005    46 indWidth=5
                     0006    47 indHeight=6
                     0007    48 indAI2=7
                     0008    49 indAI1=8
                     0009    50 indColision2=9
                     000A    51 indColision1=10
                     000B    52 indPhysics2=11
                     000C    53 indPhysics1=12
                     000D    54 indSprite2=13
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 3.
Hexadecimal [16-Bits]



                     000E    55 indSprite1=14
                     000F    56 indPrevPos2=15
                     0010    57 indPrevPos1=16
                     0011    58 indScore=17
                     0012    59 indSubType=18
                     0013    60 indAnim2=19
                     0014    61 indAnim1=20
                     0015    62 indAnimCounter=21
                     0016    63 indAnimActual=22
                     0017    64 indActualPos2=23
                     0018    65 indActualPos1=24
                     0019    66 indAICounter=25
                     001A    67 indDelWitdh=26
                     001B    68 indDelHeight=27
                             69 
                             70     ;; ENTITY TYPES
                     0000    71 ETypeInvalid=0x00
                     0001    72 ETypeRenderable=0x01
                     0002    73 ETypeMovable=0x02
                     0004    74 ETypeInput=0x04
                     0008    75 ETypeAI=0x08
                     0010    76 ETypeColisionable=0x10
                     0020    77 ETypeColider=0x20
                     0040    78 ETypeAnimated=0x40
                     0080    79 ETypeDead=0x80
                     007F    80 ETypeDefault=0x7f
                             81 
                     0001    82 AITypeEnemy=0x01
                     0002    83 AITypePU=0x02
                     0004    84 AITypeBullet=0x04
                     0008    85 AITypeInmortal=0x08
                             86 
                     0010    87 RenderTypeStatic=0x10
                             88 
                             89 
                             90 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                             91 ;;  PUBLIC FUNCTIONS
                             92 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                             93 
                             94 .globl manEntityInit
                             95 .globl manEntityCreate
                             96 .globl manEntityDestroy
                             97 .globl manEntityMarkToDestroy
                             98 .globl manEntityDestroyDead
                             99 .globl manEntityForAll
                            100 .globl manEntityForAllMatching
                            101 .globl getFreeSpace
                            102 .globl getNextFreeEntity
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 4.
Hexadecimal [16-Bits]



                             22 .include "../sys/render.h.s"
                              1 ;;-----------------------------LICENSE NOTICE------------------------------------
                              2 ;;  This file is part of Cosmic Gatlin: An Amstrad CPC Game 
                              3 ;;  Authors: 
                              4 ;;      Javier Botella Martínez (@javierbotella)
                              5 ;;      Francesc Martinez Torregrosa (@mellamofrancesc)
                              6 ;;
                              7 ;;  This program is free software: you can redistribute it and/or modify
                              8 ;;  it under the terms of the GNU Lesser General Public License as published by
                              9 ;;  the Free Software Foundation, either version 3 of the License, or
                             10 ;;  (at your option) any later version.
                             11 ;;
                             12 ;;  This program is distributed in the hope that it will be useful,
                             13 ;;  but WITHOUT ANY WARRANTY; without even the implied warranty of
                             14 ;;  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                             15 ;;  GNU Lesser General Public License for more details.
                             16 ;;
                             17 ;;  You should have received a copy of the GNU Lesser General Public License
                             18 ;;  along with this program.  If not, see <http://www.gnu.org/licenses/>.
                             19 ;;------------------------------------------------------------------------------
                             20 
                             21 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                             22 ;;  CONSTANTS
                             23 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                             24 
                     F820    25 ScreenScore=0xF820
                             26 
                             27 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                             28 ;;  PUBLIC FUNCTIONS
                             29 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                             30 
                             31 .globl sysRenderInit
                             32 .globl sysRenderInitMenu
                             33 .globl sysRenderUpdate
                             34 .globl sysRenderBorrado
                             35 .globl sysRenderUpdateOne
                             36 .globl sysRenderDrawOnce
                             37 .globl sysRenderScore
                             38 .globl sysRenderGameOverCount
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 5.
Hexadecimal [16-Bits]



                             23 
                             24 .globl _pew
                             25 .globl cpct_akp_SFXInit_asm
                             26 .globl cpct_akp_SFXPlay_asm
                             27 .globl cpct_akp_SFXStop_asm
                             28 
                             29 
                             30 
                             31 .globl cpct_memset_asm
                             32 .globl cpct_memcpy_asm
                             33 
                             34 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                             35 ;;  VARIABLES
                             36 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                             37 
   6C40                      38 posicionActual:
   6C40                      39 .ds 2
                             40 
   6C42                      41 freeSpace:
   6C42                      42 .ds 2
                             43 
   6C44                      44 mEntities:
   6C44                      45    .ds EntityArrayBytesSize 
   70A4 00                   46    .db #0
                             47 
   70A5                      48 mNextFreeEntity:
   70A5                      49    .ds 2
                             50 
   70A7                      51 funcionInversion:
   70A7                      52    .ds 2
                             53 
   70A9                      54 signature:
   70A9                      55    .ds 1
                             56 
   70AA                      57 signature2:
   70AA                      58    .ds 1
                             59 
                             60 
                             61 
                             62 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                             63 ;; manEntityInit
                             64 ;; Requisitos:
                             65 ;;    -
                             66 ;; Return:
                             67 ;;    -
                             68 ;; Descripcion:
                             69 ;;    Crea el array de entidades.
                             70 ;;
   70AB                      71 manEntityInit::
                             72 
   70AB 01 60 04      [10]   73    ld bc, #EntityArrayBytesSize ;; size
                             74 
   70AE 3E 00         [ 7]   75    ld a, #0 ;; value
                             76 
   70B0 11 44 6C      [10]   77    ld de, #mEntities ;; puntero al array, primer valor
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 6.
Hexadecimal [16-Bits]



                             78 
   70B3 CD 80 8E      [17]   79    call cpct_memset_asm
                             80 
   70B6 21 44 6C      [10]   81    ld hl, #mEntities
   70B9 22 A5 70      [16]   82    ld (mNextFreeEntity), hl
                             83 
   70BC 21 60 04      [10]   84    ld hl, #EntityArrayBytesSize
   70BF 22 42 6C      [16]   85    ld (#freeSpace), hl
                             86 
   70C2 C9            [10]   87 ret
                             88 
                             89 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                             90 ;; manEntityCreate
                             91 ;; Requisitos:
                             92 ;;    -
                             93 ;; Return:
                             94 ;;    hl -> Devuelve el puntero al principio de la entidad creada
                             95 ;; Descripcion:
                             96 ;;    Mueve el puntero de siguiente entidad libre y devuelve el principio de la primera entidad libre
                             97 ;;
   70C3                      98 manEntityCreate::
   70C3 ED 4B A5 70   [20]   99    ld bc, (mNextFreeEntity) 
                            100 
   70C7 3E 7F         [ 7]  101    ld a, #ETypeDefault
   70C9 02            [ 7]  102    ld (bc), a
                            103 
   70CA 21 1C 00      [10]  104    ld hl, #EntitySize
   70CD 09            [11]  105    add hl, bc
   70CE 22 A5 70      [16]  106    ld (mNextFreeEntity), hl 
   70D1 69            [ 4]  107    ld l, c
   70D2 60            [ 4]  108    ld h, b
                            109 
   70D3 E5            [11]  110    push hl
                            111 
   70D4 01 E4 FF      [10]  112    ld bc, #-EntitySize
   70D7 2A 42 6C      [16]  113    ld hl, (#freeSpace)
   70DA 09            [11]  114    add hl, bc
   70DB 22 42 6C      [16]  115    ld (#freeSpace), hl
                            116 
   70DE E1            [10]  117    pop hl
                            118 
                            119 
   70DF C9            [10]  120 ret
                            121 
                            122 
                            123 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                            124 ;; manEntityDestroy
                            125 ;; Requisitos:
                            126 ;;    ix -> puntero al inicio de la entidad
                            127 ;; Return:
                            128 ;;    -
                            129 ;; Descripcion:
                            130 ;;    Destruye una entidad del array.
                            131 ;;
   70E0                     132 manEntityDestroy::
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 7.
Hexadecimal [16-Bits]



                            133 
   70E0 01 1C 00      [10]  134    ld bc, #EntitySize
   70E3 2A 42 6C      [16]  135    ld hl, (#freeSpace)
   70E6 09            [11]  136    add hl, bc
   70E7 22 42 6C      [16]  137    ld (#freeSpace), hl
                            138 
   70EA CD AA 77      [17]  139    call sysRenderBorrado
                            140 
   70ED 01 E4 FF      [10]  141    ld bc, #-EntitySize
   70F0 DD 22 40 6C   [20]  142    ld (posicionActual), ix
   70F4 2A 40 6C      [16]  143    ld hl, (#posicionActual)
   70F7 54            [ 4]  144    ld d, h
   70F8 5D            [ 4]  145    ld e, l
   70F9 2A A5 70      [16]  146    ld hl, (#mNextFreeEntity)
                            147 
   70FC 09            [11]  148    add hl, bc
                            149 
   70FD 22 A5 70      [16]  150    ld (mNextFreeEntity), hl
                            151 
   7100 01 1C 00      [10]  152    ld bc, #EntitySize
                            153 
   7103 CD 88 8E      [17]  154    call cpct_memcpy_asm
                            155 
   7106 01 1C 00      [10]  156    ld bc, #EntitySize;; size
                            157 
   7109 3E 00         [ 7]  158    ld a, #0 ;; value
                            159 
   710B ED 5B A5 70   [20]  160    ld de, (#mNextFreeEntity) ;; puntero al array, primer valor
                            161 
   710F CD 80 8E      [17]  162    call cpct_memset_asm
                            163 
   7112 DD 2A 40 6C   [20]  164    ld ix, (#posicionActual)
   7116 01 E4 FF      [10]  165    ld bc, #-EntitySize 
   7119 DD 09         [15]  166    add ix, bc
                            167    
                            168 
                            169      
   711B C9            [10]  170 ret
                            171 
   711C                     172 manEntityMarkToDestroy::
                            173 
   711C DD 7E 00      [19]  174    ld a, indType(ix)
   711F 06 80         [ 7]  175    ld b, #ETypeDead
                            176 
   7121 B0            [ 4]  177    or b
                            178 
   7122 DD 77 00      [19]  179    ld indType(ix), a
                            180 
                            181   ; ld de, #_pew
                            182   ; call cpct_akp_SFXInit_asm
                            183 
                            184   ; ld l, #1
                            185   ; ld h, #15
                            186   ; ld e, #50
                            187   ; ld d, #0
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 8.
Hexadecimal [16-Bits]



                            188   ; ld bc,#0
                            189   ; ld a, #0x1
                            190   ; push ix 
                            191   ; call cpct_akp_SFXPlay_asm
                            192   ; pop ix 
                            193 
   7125 C9            [10]  194 ret
                            195 
   7126                     196 manEntityDestroyDead::
                            197 
   7126 21 E0 70      [10]  198    ld hl, #manEntityDestroy
   7129 3E 80         [ 7]  199    ld a, #ETypeDead
                            200 
   712B CD 2F 71      [17]  201    call manEntityForAll
                            202 
   712E C9            [10]  203 ret
                            204 
                            205 
                            206 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                            207 ;; manEntityForAll
                            208 ;; Requisitos:
                            209 ;;    hl -> funcion a la que llamara para todas las entidades
                            210 ;;    a  -> firma para dejar pasar solo los tipo de entidades deseadas
                            211 ;; Return:
                            212 ;;    -
                            213 ;; Descripcion:
                            214 ;;    Recorre todas las entidades y ejecuta la funcion que se le pasa por parametro
                            215 ;;
   712F                     216 manEntityForAll::
                            217 
   712F 22 A7 70      [16]  218    ld (funcionInversion), hl
   7132 DD 21 44 6C   [14]  219    ld ix, #mEntities
                            220 
   7136 32 A9 70      [13]  221    ld (signature), a
                            222 
   7139                     223    bucleForAll:
                            224 
   7139 DD 7E 00      [19]  225       ld a, indType(ix)      ;; tipo de la entidad
   713C B7            [ 4]  226       or a
                            227 
   713D C8            [11]  228       ret z
                            229 
   713E DD 46 00      [19]  230       ld b, indType(ix)      ;; tipo de la entidad
   7141 3A A9 70      [13]  231       ld a, (#signature)
   7144 A0            [ 4]  232       and b
                            233 
   7145 28 08         [12]  234          jr z, salidaBucleForAll ;; si invalido, no se llama a la funcion
                            235 
   7147 2A A7 70      [16]  236       ld hl, (#funcionInversion)
                            237 
   714A 01 4F 71      [10]  238       ld bc, #salidaBucleForAll
   714D C5            [11]  239       push bc
                            240       
   714E E9            [ 4]  241       jp (hl) ;;hl=direccion de la funcion a la que hay que llamar
   714F                     242 salidaBucleForAll:
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 9.
Hexadecimal [16-Bits]



                            243 
   714F 01 1C 00      [10]  244       ld bc, #EntitySize
   7152 DD 09         [15]  245       add ix, bc
                            246 
   7154 18 E3         [12]  247    jr bucleForAll
                            248 
   7156 C9            [10]  249 ret
                            250 
                            251 
                            252 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                            253 ;;    manEntityForAllMatching
                            254 ;; Requisitos:
                            255 ;;    hl -> funcion a la que llamara para todas las entidades
                            256 ;;    a  -> firma 1 para dejar pasar solo los tipo de entidades deseadas
                            257 ;;    b  -> firma 2 para dejar pasar solo los tipo de entidades deseadas
                            258 ;; Return:
                            259 ;;    -
                            260 ;; Descripcion:
                            261 ;;    Recorre todas las entidades y ejecuta la funcion que se le pasa por parametro
                            262 ;;
   7157                     263 manEntityForAllMatching::
                            264 
   7157 22 A7 70      [16]  265    ld (funcionInversion), hl
   715A DD 21 44 6C   [14]  266    ld ix, #mEntities
                            267 
   715E 32 A9 70      [13]  268    ld (signature), a
   7161 78            [ 4]  269    ld a, b
   7162 32 AA 70      [13]  270    ld (signature2), a
                            271 
   7165                     272    bucleForAllMatching:
                            273 
   7165 FD 21 44 6C   [14]  274       ld iy, #mEntities
                            275          
   7169 DD 7E 00      [19]  276       ld a, indType(ix)      ;; tipo de la entidad 1
   716C B7            [ 4]  277       or a
                            278 
   716D C8            [11]  279       ret z
                            280 
   716E DD 46 00      [19]  281       ld b, indType(ix)      ;; tipo de la entidad 1
   7171 3A A9 70      [13]  282       ld a, (#signature)
   7174 A0            [ 4]  283       and b
                            284 
   7175 28 1E         [12]  285       jr z, salidaBucleForAllMatching ;; si invalido, no se llama a la funcion
                            286 
   7177                     287       bucleForAllMatching2:
                            288 
   7177 FD 7E 00      [19]  289             ld a, indType(iy)      ;; Si la entidad es invalida, sale del bucle
   717A B7            [ 4]  290             or a
                            291 
   717B 28 18         [12]  292             jr z, salidaBucleForAllMatching
                            293 
   717D FD 46 00      [19]  294             ld b, indType(iy)      ;; Si la entidad no coincide, siguiente entidad
   7180 3A AA 70      [13]  295             ld a, (#signature2)
   7183 A0            [ 4]  296             and b
                            297 
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 10.
Hexadecimal [16-Bits]



   7184 28 08         [12]  298             jr z, salidaBucleForAllMatching2 
                            299 
   7186 2A A7 70      [16]  300             ld hl, (#funcionInversion)
                            301 
   7189 01 8E 71      [10]  302             ld bc, #salidaBucleForAllMatching2
   718C C5            [11]  303             push bc
                            304             
   718D E9            [ 4]  305             jp (hl)        ;; hl=direccion de la funcion a la que hay que llamar
                            306 
   718E                     307             salidaBucleForAllMatching2:
                            308 
   718E 01 1C 00      [10]  309             ld bc, #EntitySize
   7191 FD 09         [15]  310             add iy, bc
                            311 
   7193 18 E2         [12]  312       jr bucleForAllMatching2
                            313 
                            314 
   7195                     315 salidaBucleForAllMatching:
                            316 
   7195 01 1C 00      [10]  317       ld bc, #EntitySize
   7198 DD 09         [15]  318       add ix, bc
                            319 
   719A 18 C9         [12]  320    jr bucleForAllMatching
                            321 
   719C C9            [10]  322 ret
                            323 
                            324 
                            325 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                            326 ;; getFreeSpace
                            327 ;; Requisitos:
                            328 ;;    -
                            329 ;; Return:
                            330 ;;    hl -> Espacio libre en memoria
                            331 ;; Descripcion:
                            332 ;;    Devuelve el espacio libre en memoria del array de entidades
                            333 ;;
   719D                     334 getFreeSpace::
   719D 2A 42 6C      [16]  335    ld hl, (#freeSpace)
   71A0 C9            [10]  336 ret
                            337 
                            338 
                            339 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                            340 ;; getFreeSpace
                            341 ;; Requisitos:
                            342 ;;    -
                            343 ;; Return:
                            344 ;;    hl -> Espacio libre en memoria
                            345 ;; Descripcion:
                            346 ;;    Devuelve el espacio libre en memoria del array de entidades
                            347 ;;
   71A1                     348 getNextFreeEntity::
   71A1 DD 2A A5 70   [20]  349    ld ix, (#mNextFreeEntity)
   71A5 C9            [10]  350 ret
