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



                              1 ;; TODO hacer sistema fisico que actualiza las entidades
                              2 ;; sumandole las velocidades
                              3 ;; 1.- cogemos una entidad
                              4 ;; 2.- le sumamos a la x su velocidad
                              5 ;; 3.- le sumamos a la y su velocidad
                              6 ;; 4.- seguimos con la siguiente entidad
                              7 
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 2.
Hexadecimal [16-Bits]



                              8 .include "physics_system.h.s"
                              1 ;; -----------------------------------------
                              2 ;; ARCHIVO DE CABECERA DEL SISTEMA DE FÍSICA
                              3 ;; -----------------------------------------
                              4 
                              5 .globl physics_system_init
                              6 .globl physics_system_update
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 3.
Hexadecimal [16-Bits]



                              9 .include "man/entity_manager.h.s"
                              1 ; --------------------------------------
                              2 ;; ARCHIVO DE CABECERA DEL ENTITY MANAGER
                              3 ;; --------------------------------------
                              4 
                              5 ;; FUNCIONES PUBLICAS
                              6 .globl entity_manager_create 
                              7 .globl entity_manager_getEntityArray
                              8 .globl entity_manager_destroy_entity
                              9 .globl entity_manager_update
                             10 .globl entity_manager_forall_matching
                             11 
                             12 ;; CONSTANTES
                     0007    13 max_entities = 7
                     0011    14 sizeof_e = 17
                             15 
                             16 
                             17 ;; Macro que define una entidad con todos sus componentes
                             18 .macro DefineEntity _name, _x, _y, _w, _h, _vx, _vy, _sprite_pointer, _cmp, _ai_st
                             19 _name::
                             20     .db     _x                  ;; Posición x de la entidad
                             21     .db     _y                  ;; Posición y de la entidad
                             22     .db     _w                  ;; Ancho de la entidad
                             23     .db     _h                  ;; Altura de la entidad
                             24     .db     _vx                 ;; Velocidad en el eje x
                             25     .db     _vy                 ;; Velocidad en el eje y
                             26     .dw     _sprite_pointer     ;; Puntero a la zona de memoria donde empieza el sprite
                             27     .dw     0x0000
                             28     .db     0x00, 0x00          ;; AI-aim  (AI apunta a x) (AI apunta a y)
                             29     .db     _cmp                ;; Componentes de la entidad
                             30     .db     _ai_st              ;; AI (estado)
                             31     .db     _ai_st              ;; AI (estado anterior)
                             32     .dw     0x0000              ;; Next AI  patrol-step ()
                             33 .endm
                             34 
                             35 ;; Variables auxiliares para mayor legibilidad
                             36 ;; del código al usar el registro puntero IX
                     0000    37 e_x  = 0
                     0001    38 e_y  = 1
                     0002    39 e_w  = 2
                     0003    40 e_h  = 3
                     0004    41 e_vx = 4
                     0005    42 e_vy = 5
                     0006    43 e_sprite_pointer_l = 6
                     0007    44 e_sprite_pointer_h = 7
                     0008    45 e_last_sprite_pointer_position_l = 8
                     0009    46 e_last_sprite_pointer_position_h = 9
                     000A    47 e_ai_aim_x = 10
                     000B    48 e_ai_aim_y = 11
                     000C    49 e_cmp = 12
                     000D    50 e_ai = 13
                     000E    51 e_ai_pre = 14
                     000F    52 e_ai_patrol_step_l = 15
                     0010    53 e_ai_patrol_step_h = 16
                             54 
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 4.
Hexadecimal [16-Bits]



                             55 ;;ENTITY COMPONENTS
                     0000    56 e_cmp_invalid = 0x00
                     0001    57 e_cmp_alive = 0x01
                     0002    58 e_cmp_physics = 0x02
                     0004    59 e_cmp_render = 0x04
                     0008    60 e_cmp_colision = 0x08
                     000F    61 e_cmp_default = e_cmp_render | e_cmp_physics | e_cmp_alive | e_cmp_colision
                             62 
                             63 ;;AI ESTADO
                     0000    64 e_ai_st_noAI = 0x00
                     0001    65 e_ai_st_stand_by = 0x01
                     0002    66 e_ai_st_move_to = 0x02
                     0003    67 e_ai_st_patrol = 0x03
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 5.
Hexadecimal [16-Bits]



                             10 
                     0050    11 screen_width = 80
                     00C8    12 screen_height = 200
                             13 
   4821                      14 physics_system_init::
   4821 C9            [10]   15     ret
                             16 
                             17 ;; INPUT:
                             18 ;; IX: puntero a la entidad a actualizar
                             19 ;; de esta entidad debemos obtener su posición (_x, _y)
                             20 ;; y su velocidad (_vx, _vy)
                             21 ;; devuelve la nueva posición donde se debe dibujar la entidad
                             22 ;; B: mascara de bits
   4822                      23 physics_system_update::
                             24 
   4822 47            [ 4]   25     ld      b, a
                             26     
   4823 3E 51         [ 7]   27     ld      a, #screen_width + 1
   4825 DD 96 02      [19]   28     sub     e_w(ix)
   4828 4F            [ 4]   29     ld      c, a
                             30     
   4829 DD 7E 00      [19]   31     ld      a, e_x(ix)
   482C DD 86 04      [19]   32     add     e_vx(ix)
   482F B9            [ 4]   33     cp      c
   4830 30 05         [12]   34     jr      nc, invalid_x
                             35 
   4832                      36 valid_x:
   4832 DD 77 00      [19]   37         ld      e_x(ix), a
   4835 18 08         [12]   38         jr      endif_x
   4837                      39 invalid_x:
   4837 DD 7E 04      [19]   40         ld      a, e_vx(ix)
   483A ED 44         [ 8]   41         neg
   483C DD 77 04      [19]   42         ld      e_vx(ix), a
   483F                      43 endif_x:
                             44 
                             45 
   483F 3E 17         [ 7]   46     ld      a, #22 + 1
   4841 DD 86 03      [19]   47     add    e_h(ix)
   4844 4F            [ 4]   48     ld      c, a
                             49     
   4845 DD 7E 01      [19]   50     ld      a, e_y(ix)
   4848 DD 86 05      [19]   51     add     e_vy(ix)
   484B B9            [ 4]   52     cp      c
   484C 38 14         [12]   53     jr      c, invalid_y
                             54  
   484E 3E C9         [ 7]   55     ld      a, #screen_height + 1
   4850 DD 96 03      [19]   56     sub     e_h(ix)
   4853 4F            [ 4]   57     ld      c, a
                             58     
   4854 DD 7E 01      [19]   59     ld      a, e_y(ix)
   4857 DD 86 05      [19]   60     add     e_vy(ix)
   485A B9            [ 4]   61     cp      c
   485B 30 05         [12]   62     jr      nc, invalid_y
                             63 
                             64 
ASxxxx Assembler V02.00 + NoICE + SDCC mods  (Zilog Z80 / Hitachi HD64180), page 6.
Hexadecimal [16-Bits]



   485D                      65 valid_y:
   485D DD 77 01      [19]   66         ld      e_y(ix), a
   4860 18 08         [12]   67         jr      endif_y
                             68 
                             69 
   4862                      70 invalid_y:
   4862 DD 7E 05      [19]   71         ld      a, e_vy(ix)
   4865 ED 44         [ 8]   72         neg
   4867 DD 77 05      [19]   73         ld      e_vy(ix), a
   486A                      74 endif_y:
   486A C9            [10]   75         ret
