Le estoy dando vueltas a crear unas rutinas compiladas ya en .bin para incluir en los programas. Lo estoy compilando con el asMSX.
Mi idea es distribuir esa .bin y que sea transparente a quien lo quiera usar, facil y sin entrar por dentro...vamos lo que seria una libreria sin pasar el Codigo Fuente. Así seria compilable en cualquier lugar ya fuera C o ASM.
PEERO me he encontrado un problema Gordote.
Resulta que el pack de rutinas tiene saltos. Los saltos absolutos, los paso a relativos, dando algún brinco de rana así en medio del codigo por aquello de no pasar los 128 bytes pa arriba , pa abajo. Pero el problema son los CALL que hay internos dentro.
Claro, un CALL es absoluto...no relativo...en Z80 ASM no encuentro saltos de CALL relativos. No existe la instrucción. Entonces se me ha ocurrido "simular un CALL" con PUSH, POP y JR....y me encontrado con el problema Gordote:
No puedo acceder al Registro PC para coger su valor
No existe el PUSH PC ni el POP PC, ni el LD PC,NN ni LD HL,PC ni na de na que toque el Registro PC más que el CALL.
Bueno el RET hace que lo que hay en la pila SP pase a Registro PC...ya hace de LD a Registro PC. Pero leer
cargar un el valor actual
al del PC....Fuck fuck !
no hay [o yo no lo encuentro] ni en las undocumented.
¿Se os ocurre alguna pirueta tecnica para hacer un CALL sin usar el CALL y que se pueda hacer relativo, no absoluto ?