viernes, 18 de noviembre de 2022

Dos años hace

 Que empecé a programar para cpc. He publicado dos juegos. Y ahora voy a empezar otro en c. 

martes, 23 de agosto de 2022

Automodificable

Ld a,#5;;1

Ld (valor), a

Ld a,#6;;2

Ld (valor),a


 Valor=.+1

Ld a,#0

;; En primer caso, valor es 1

;;En segundo caso, valor es 2

sábado, 26 de junio de 2021

Subo a github

 Intento tener el programa o juego en GitHub. Es lo más fácil que conozco para intercambiarlo. 

jueves, 24 de junio de 2021

Más rápido comparar con 0?

 Me pregunto , supongamos el caso de una entidad, con posición x, igual a 4.

Le vamos restando una unidad. Cuando llegue a 0, impedimos que se reste más, antes o en esta comprobación.

Si x llega a -1, se pone a 0. En un número U8(sin signo), esto no es posible. 

En tal caso, en ensamblador¿ sería más óptimo  comparar con 0(jz) o con Carry(JC).?


miércoles, 23 de junio de 2021

Ahora,en C

Ahora, aprendiendo C, todo es más fácil de entender y programar.
Espero me sirva como trampolín para hacer el primer juego para Cpc.

viernes, 12 de febrero de 2021

ECS mejorado en Ensamblador para CPC

 Esta vez pongo un pequeño programa, como base para le expansion de  un ECS. Esta creado en ensamblador. tiene pocos comentarios, espero os sirva.

.module cpct_functions.h.s

.globl cpct_disableFirmware_asm
.globl cpct_waitVSYNC_asm
.globl cpct_scanKeyboard_f_asm
.globl cpct_isKeyPressed_asm
.globl cpct_setVideoMode_asm
.globl cpct_drawSolidBox_asm
.globl cpct_getScreenPtr_asm
.globl cpct_drawSprite_asm
.module main.s
.include "cpctelera.h.s"
.include "cpct_functions.h.s"
.include "man/game.h.s"



.area _DATA
.area _CODE

_main::
    ;;desactiva firmware
call cpct_disableFirmware_asm
    ;;init game manager
call man_game_init

    ;loop forever
loop:
    call man_game_update
    ;waitNVsyncs 2
    call cpct_waitVSYNC_asm
    call man_game_render
    jr loop

martes, 8 de diciembre de 2020

creacion de entidades con un ECS usando CPCTelera

pequeñito ejemplo de como, usndo en entity component system (ECS), se crean dos entidades distintas, y se pintan en pantalla.


 ;;main.s

;; ejemplo de dibujado simple de cuadrados

.module main.s

.include "cpctelera.h.s"

.area _DATA

.area _CODE

;;declaracion de globales

.globl cpct_disableFirmware_asm

.globl cpct_getScreenPtr_asm

.globl cpct_drawSolidBox_asm

.globl cpct_waitVSYNC_asm

.globl entityman_create

.globl rendersys_update

.globl _entity_array

.globl _num_entities

.globl entityman_getEntityArray_IX

.globl rendersys_init

.globl entityman_getNumEntities_A


;;declaracion de etiquetas,constantes

;;x,y,ancho,alto,color,velocidad x,vy

player: .db 20,20,04,16,0xff,0,0

enemy: .db 30,30,06,16,0xf0,0,0


;;principal

_main::

   ;; Disable firmware to prevent it from interfering with string drawing

   call cpct_disableFirmware_asm

;;INIT SYSTEMS

call rendersys_init



ld hl,#player

call entityman_create

ld hl,#enemy

call entityman_create


loop:

call entityman_getEntityArray_IX

call entityman_getNumEntities_A

call rendersys_update

jr loop


parate:

jp parate

;;
;;render system
.module render_system.s
.globl cpct_getScreenPtr_asm
.globl cpct_drawSolidBox_asm
.globl entity_size

rendersys_init::
ret


;;input registro ix puntero a entidad 
;;a numero de entidades a render
rendersys_update::
;;dibujado de cuadrados en pantalla, incrementando x e y a cada paso
render_loop:
push af
ld de,#0xc000 ;;principio memoria video
ld b,1(ix) ;;carga x
ld c,0(ix) ;;carga y
call cpct_getScreenPtr_asm ;;funcio9n para localizar x e y en pantalla
ex de,HL ;;intercambia de y hl

ld a,4(ix) ;;color cuadrado
ld b,3(ix) ;;tamaño cuadrado; call cpct_drawSolidBox_asm ;;funcion dibujado cuadrado
  ld c,2(ix) ;; c alto, b ancho
call cpct_drawSolidBox_asm
pop af 

dec a
ret z
ld bc,#entity_size
add ix,bc
jr render_loop

 ret
.module entity_manager.s

entity_size  == 7 ;;tamaño de cada entidad
max_entities == 3 ;;numero maximo de entidades

_num_entities:: .db 0 ;;entidades creadas al principio,0
_last_element_ptr:: .dw _entity_array
_entity_array::
.ds entity_size*max_entities ;;creacion de espacio para entidades,tamaño por numero 


entityman_getEntityArray_IX::
ld ix,#_entity_array
ret
entityman_getNumEntities_A::
ld a,(_num_entities)
ret


;;input
;;hl->puntero a entidad ejemplo
entityman_create::
ld de,(_last_element_ptr) ;;creacion de nueva entidad,
ld bc,#entity_size ;;de a puntero de ultima entidad
ldir ;;bc tamaño de la entidad

ld a,(_num_entities) ;;incrementa en uno el numero de entidades
inc a
ld (_num_entities),a

ld hl,(_last_element_ptr)
ld bc,#entity_size
add hl,bc
ld (_last_element_ptr),hl
ret